| st[n] = mkblock(x, lax, m3), st[m0] = mkblock(x0, lax0, m4), n ∈ st, m0 ∈ st, @(m1, m2) ∈ lax0 ⊦ st[n, mkblock(x, lax, m)][@(m0, m1, m2)] = x0[pos(@(m1, m2), lax0)] |
⊦ adr ∈ st → st[adr] = st[adr.lnum].list[pos(@(adr.pos, adr.size), st[adr.lnum].ladrlist)]
st[m0] = mkblock(x0, lax0, m4), st[n] = mkblock(x, lax, m3), @(m1, m2) ∈ lax0, m0 ∈ st, n ∈ st, @(m0, m1, m2) ∈ st[n, mkblock(x, lax, m)] ⊦ st[n, mkblock(x, lax, m)][@(m0, m1, m2).lnum].list [pos(@(@(m0, m1, m2).pos, @(m0, m1, m2).size), st[n, mkblock(x, lax, m)][@(m0, m1, m2).lnum].ladrlist) ] = x0[pos(@(m1, m2), lax0)]
Used simplifier rules: in-write-same: st[n].list = x, st[n].ladrlist = lax ⊦ n ∈ st → (adr ∈ st[n, mkblock(x, lax, m)] ↔ adr ∈ st);%in-in-adr: ⊦ st[n] = mkblock(x, lax, m0) ∧ n ∈ st ∧ @(n0, n1) ∈ lax → @(n, n0, n1) ∈ st;% ⊦ mkblock(x, lax, m).list = x; (s)% ⊦ mkblock(x, lax, m).ladrlist = lax; (s) Used terms: @(m0, m1, m2), st[n, mkblock(x, lax, m)]