| # @(maxino, ind.flashsize) ' = # ind ', istore[m] = indexblock(indx, lax, m0), 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), inv(indexblock(indx, lax, m0)), m ∈ istore, istore0 ⊑ istore ⊦ dups(nx), @(m, maxino, ind.flashsize) ∈ istore, @(m, maxino, ind.flashsize) ∈ istore0, inv(istore[m, indexblock(indx + ind ', lax + @(maxino, ind.flashsize) ', m0)]) ∧ true |
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), inv(indexblock(indx + ind ', lax + @(maxino, ind.flashsize) ', m0)), @(m, maxino, ind.flashsize) ∈ istore0, @(m, maxino, ind.flashsize) ∈ istore
Used simplifier rules: ⊦ inv(istore) → (inv(istore[n, iblock]) ↔ inv(iblock)); (ss)% ⊦ # ind ' = 0 +1; (s)% ⊦ # ladr ' = 0 +1; (s)