| istore[m] = indexblock(indx, lax, m0), remove-refsize0(istore0) = istore0, remove-refsize0(gstore1) = gstore1, elems nx ∩ ginval2 = ∅, dom gstore1 ∪ elems nx = dom gstore2 ∪ ginval2, inv(istore0), inv(istore), inv(gstore1), inv(gstore2 \ ginval2), m ∈ istore, istore0 ⊑ istore ⊦ dups(nx), @(m, maxino, ind.flashsize) ∈ istore0, @(m, maxino, ind.flashsize) ∈ istore, inv(istore[m, (istore[m].indlist:= (indx + ind ')).ladrlist:= (lax + @(maxino, ind.flashsize) ')]) ∧ istore0 ⊑ istore[m, (istore[m].indlist:= (indx + ind ')).ladrlist:= (lax + @(maxino, ind.flashsize) ')] |
istore[m] = indexblock(indx, lax, m0), remove-refsize0(istore0) = istore0, remove-refsize0(gstore1) = gstore1, elems nx ∩ ginval2 = ∅, dom gstore1 ∪ elems nx = dom gstore2 ∪ ginval2, inv(indexblock(indx, lax, m0)), inv(istore0), inv(istore), inv(gstore1), inv(gstore2 \ ginval2), m ∈ istore, istore0 ⊑ istore ⊦ dups(nx), @(m, maxino, ind.flashsize) ∈ istore0, @(m, maxino, ind.flashsize) ∈ istore, inv(istore[m, indexblock(indx + ind ', lax + @(maxino, ind.flashsize) ', m0)]) ∧ istore0 ⊑ istore[m, indexblock(indx + ind ', lax + @(maxino, ind.flashsize) ', m0)]
Used simplifier rules: ⊦ indexblock(indx, lax, m).ladrlist:= lax0 = indexblock(indx, lax0, m); (s)%⊦ indexblock(indx, lax, m).indlist:= indx0 = indexblock(indx0, lax, m); (s)%fwd-inv-iblock: ⊦ inv(istore) ∧ n ∈ istore ∧ istore[n] = iblock → inv(iblock); (forward) from specification apersistence-base