| remove-refsize0(gstore1) = gstore1, remove-refsize0(istore0) = istore0, elems nx ∩ ginval2 = ∅, dom gstore1 ∪ elems nx = dom gstore2 ∪ ginval2, inv(gstore2 \ ginval2), inv(gstore1), inv(istore), inv(istore0), m ∈ istore, istore0 ⊑ istore ⊦ dups(nx), @(m, maxino, ind.flashsize) ∈ istore, @(m, maxino, ind.flashsize) ∈ istore0, inv(istore[m, (istore[m].indlist:= (istore[m].indlist + ind ')).ladrlist:= (istore[m].ladrlist + @(maxino, ind.flashsize) ')]) ∧ istore0 ⊑ istore[m, (istore[m].indlist:= (istore[m].indlist + ind ')).ladrlist:= (istore[m].ladrlist + @(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(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) ')]
Used simplifier rules: ⊦ (indx = iblock.indlist ∧ lax = iblock.ladrlist) ∧ m = iblock.ref-size ↔ iblock = indexblock(indx, lax, m); (elim) Used terms: istore[m], indx, lax, m0