| st[m] = mkblock(x, lax, (as | m).size), inv(st), m ∈ st, @(m, m0, m1) ∈ as, @(m, m0, m1) ∈ st, as ⊆ dom nodes(st) ⊦ # as = 0, as = ∅, dom nodes(st) ⊆ dom nodes(remove-refsize0(st)), @(m, m0, m1).lnum ∈ remove-refsize0(st) ∧ @(@(m, m0, m1).pos, @(m, m0, m1).size) ∈ remove-refsize0(st)[@(m, m0, m1).lnum].ladrlist |
(as | m).size = 0, st[m] = mkblock(x, lax, 0), inv(st), m ∈ st, @(m, m0, m1) ∈ as, @(m, m0, m1) ∈ st, as ⊆ dom nodes(st) ⊦ # as = 0, as = ∅, dom nodes(st) ⊆ dom nodes(remove-refsize0(st))
Used simplifier rules: ⊦ st[n] = mkblock(x, lax, m0) ∧ @(n, n0, n1) ∈ st → @(n0, n1) ∈ lax; (ss)% ⊦ mkblock(x, lax, m).ladrlist = lax; (s)% ⊦ mkblock(x, lax, m).ref-size = m; (s)% ⊦ n ∈ st ∧ st[n].ref-size ≠ 0 → remove-refsize0(st)[n] = st[n]; (s)% ⊦ @(m, m0, m1).size = m1; (s)% ⊦ @(m, m0, m1).pos = m0; (s)% ⊦ n ∈ remove-refsize0(st) ↔ n ∈ st ∧ st[n].ref-size ≠ 0; (ws)% ⊦ @(m, m0, m1).lnum = m; (s)