| st[m] = mkblock(x, lax, n0 + m1), st[m, mkblock(x, lax, n0)][n] = mkblock(x0, lax0, m2), st[n] = mkblock(x1, lax1, m3), m ∈ st, @(m, m0, m1) ∈ as, n ∈ st[m, mkblock(x, lax, n0)], n ∈ st → m3 = (as | n).size ⊦ # as = 0, as = ∅, m2 = ((as -- @(m, m0, m1)) | n).size |
⊦ n ≠ n0 → st[n0, ablock][n] = st[n]
Used simplifier rules: restrict-del: ⊦ (as -- @(m, m0, m1)) | m = (as | m) -- @(m, m0, m1);%size-rem: ⊦ (as -- adr).size = as.size - (adr ∈ as ⊃ adr.size;0);%restrict-in: ⊦ @(m, m0, m1) ∈ as | m ↔ @(m, m0, m1) ∈ as;%restrict-del-other: ⊦ m ≠ n → (as -- @(m, m0, m1)) | n = as | n;% ⊦ n ≠ n0 → (n ∈ st[n0, ablock] ↔ n ∈ st); (s)%⊦ mkblock(x, lax, m) = mkblock(x0, lax0, m0) ↔ x = x0 ∧ lax = lax0 ∧ m = m0; (ws)% ⊦ st[n, ablock][n] = ablock; (s)% ⊦ @(m, m0, m1).size = m1; (s)% ⊦ n ∈ st[n, ablock]; (s)% ⊦ m + n - m = n; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic Used terms: n, mkblock(x, lax, n0), m, st