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