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