| # x = # lax, # x1 = # lax1, st[n].ladrlist = lax, st[n].list = x, n ∈ st, adr ∈ st ⊦ st[n, mkblock(x + x1, lax + lax1, m)][adr] = st[adr], dups(lax + lax1) |
# x1 = # lax1, # st[n].list = # st[n].ladrlist, n ∈ st, adr.lnum ∈ st, @(adr.pos, adr.size) ∈ st[adr.lnum].ladrlist ⊦ st[n, mkblock(st[n].list + x1, st[n].ladrlist + lax1, m)][adr] = st[adr.lnum].list[pos(@(adr.pos, adr.size), st[adr.lnum].ladrlist)], dups(st[n].ladrlist + lax1), dups(st[n].ladrlist), dups(lax1)
Used simplifier rules: at: ⊦ adr ∈ st → st[adr] = st[adr.lnum].list [pos(@(adr.pos, adr.size), st[adr.lnum].ladrlist) ];%in: ⊦ adr ∈ st ↔ adr.lnum ∈ st ∧ @(adr.pos, adr.size) ∈ st[adr.lnum].ladrlist;%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]%a: ⊦ ¬ dups(lax + lax0) → ¬ dups(lax) ∧ ¬ dups(lax0); (forward) from specification list-dup[laddress-list]