| st[n, mkblock(x + a ', lax + @(m0, m1) ', m + m1)][n0] = mkblock(x0, lax0, m2), st[n] = mkblock(x, lax, m), n0 = n, n ∈ st, n0 ∈ st[n, mkblock(x + a ', lax + @(m0, m1) ', m + m1)], as ⊆ dom nodes(st), ∀ n. n ∈ st → st[n].ref-size = (as | n).size ⊦ m2 = ((as ++ @(n, m0, m1)) | n0).size, @(m0, m1) ∈ lax |
st[n] = mkblock(x, lax, m), n ∈ st, as ⊆ dom nodes(st), ∀ n. n ∈ st → st[n].ref-size = (as | n).size ⊦ m + m1 = ((as | n) ++ @(n, m0, m1)).size, @(m0, m1) ∈ lax
Used simplifier rules: restrict-add: ⊦ (as ++ @(m0, m1, m2)) | m0 = (as | m0) ++ @(m0, m1, m2);% ⊦ a ∈ b ' ↔ a = b; (s)% ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s)% ⊦ ladr ∈ ladr0 ' ↔ ladr = ladr0; (s)% ⊦ ladr ∈ lax + lax0 ↔ ladr ∈ lax ∨ ladr ∈ lax0; (s)%a: ⊦ (x + y) + z = x + y + z; from specification list%in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]%in-15: ⊦ lax + ladr ' = lax0 → ladr ∈ lax0; (forward) from specification list[laddress-list]% ⊦ n ∈ st[n, ablock]; (s)%⊦ mkblock(x, lax, m) = mkblock(x0, lax0, m0) ↔ x = x0 ∧ lax = lax0 ∧ m = m0; (ws)% ⊦ st[n, ablock][n] = ablock; (s)