| # lax = # gndx, gstore[nx.last] = groupblock(gndx0, lax0, m), remove-refsize0(gstore0) = gstore0, elems nx ∩ ginval2 = ∅, dom gstore0 ∪ elems nx = dom gstore ∪ ginval2, inv(gstore \ ginval2), inv(gstore0), inv(gstore[nx.last]), inv-flashsize(gndx, lax), ri-inj(fi2), ri-inj(fi1), nx.last ∈ gstore ⊦ nx = [], dups(lax0 + lax), dups(nx), dups(lax0), dups(lax), inv((gstore[nx.last].gndlist:= (gndx0 + gndx)).ladrlist:= (lax0 + lax)), nx.last ∈ ginval2 |
# lax = # gndx, gstore[nx.last] = groupblock(gndx0, lax0, m), remove-refsize0(gstore0) = gstore0, elems nx ∩ ginval2 = ∅, dom gstore0 ∪ elems nx = dom gstore ∪ ginval2, inv(groupblock(gndx0, lax0, m)), inv(gstore \ ginval2), inv(gstore0), inv-flashsize(gndx, lax), ri-inj(fi2), ri-inj(fi1), nx.last ∈ gstore ⊦ nx = [], dups(lax), dups(lax0 + lax), dups(nx), inv(groupblock(gndx0 + gndx, lax0 + lax, m)), nx.last ∈ ginval2
Used simplifier rules: ⊦ groupblock(gndx, lax, m).ladrlist:= lax0 = groupblock(gndx, lax0, m); (s)%⊦ groupblock(gndx, lax, m).gndlist:= gndx0 = groupblock(gndx0, lax, m); (s)% ⊦ inv(groupblock(gndx, lax, m0)) → ¬ dups(lax); (s)%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]%fwd-inv-gblock-rem: ⊦ inv(gstore \ ginval) ∧ n ∈ gstore ∧ ¬ n ∈ ginval ∧ gstore[n] = gblock → inv(gblock); (forward) from specification apersistence-base