| # x = # lax2 + # lax1 + 1, # lax2 = n0 + # x, # x + # z = # lax2 + (# lax1 + # lax) + 1, st0[m] = mkblock(x, lax2 + @(m0, m1) ' + lax1, m2), st1[m] = mkblock(x + z, (lax2 + @(m0, m1) ' + lax1) + lax, m3), m ∈ st0, m ∈ st1, # x ≤ # lax2, ∀ n. n ∈ st0 → n ∈ st1 ⊦ x[# lax2] = z[n0], @(m0, m1) ∈ lax2 |
Used simplifier rules: ⊦ m + n = m + n0 ↔ n = n0; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ m = m + n ↔ n = 0; (s)% ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws)% ⊦ m + 1 ≠ 0; (s)