| elems nx0 ∩ ginval0 = ∅, dom gstore2 ∪ elems nx0 = dom gstore ∪ ginval0, remove-refsize0(gstore2) = gstore2, remove-refsize0(istore0) = istore0, gstore[maxino] = groupblock(gndlist0, lax0, m, m0, m1, false), gstore1 = gstore[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, m, LEB_SIZE, m1, true)], gstore0 = gstore[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, m, LEB_SIZE, m1, true)], # lax1 ≠ # gndlist, gndlist ≠ [], maxino ∈ gstore, inv-flashsize(prefixn(# lax1, gndlist), lax1), # lax1 < # gndlist, m0 + gndlist.flashsize ≤ LEB_SIZE, btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, fi, fi0, ld), inv(gstore \ ginval0), inv(gstore2), flushed(gstore \ (ginval0 ∪ elems nx0)), ri-inj(fi), ri-inj(fi0), btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, ri, fi1, ld0), inv(istore), inv(istore0), flushed(istore0), istore0 ⊑ istore, btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, ri0, fi2, ld1), maxino ∈ nx0, inv(groupblock(gndlist0, lax0, m, m0, m1, false)), ⌊err1⌋ , gstore2 \ ginval0 lpt= gstore \ elems nx0, flushed(gstore[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, n, LEB_SIZE, m1, true)] \ (ginval0 ∪ elems nx0)), inv(groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, n, LEB_SIZE, m1, true)), btree-inv (rp, adr, gstore[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, n, LEB_SIZE, m1, true)] \ ginval0, istore, istore0, zh, ri1, fi3, ld2), n ≤ # gndlist0 + # lax1, m ≤ n, m ≤ # gndlist0 + # lax1, ¬ dups(lax1), ¬ dups(nx0), ¬ maxino ∈ ginval0 ⊦ ∃ ax. ⟨choose n with gstore0[maxino].flushindex ≤ n ∧ n ≤ # gstore0[maxino].gndlist in gstore0[maxino].flushindex := n⟩ ( gstore0 = gstore1[maxino, gstore1[maxino].flushindex:= n] ∧ btree-inv(rp, adr, gstore1[maxino, gstore1[maxino].flushindex:= n] \ ginval0, istore, istore0, zh, fi, fi0, ld) ∧ ax2 = ax) |
elems nx0 ∩ ginval0 = ∅, dom gstore2 ∪ elems nx0 = dom gstore ∪ ginval0, remove-refsize0(gstore2) = gstore2, remove-refsize0(istore0) = istore0, gstore[maxino] = groupblock(gndlist0, lax0, m, m0, m1, false), gstore1 = gstore[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, m, LEB_SIZE, m1, true)], gstore0 = gstore[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, m, LEB_SIZE, m1, true)], # lax1 ≠ # gndlist, gndlist ≠ [], maxino ∈ gstore, inv-flashsize(prefixn(# lax1, gndlist), lax1), # lax1 < # gndlist, m0 + gndlist.flashsize ≤ LEB_SIZE, btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, fi, fi0, ld), inv(gstore \ ginval0), inv(gstore2), flushed(gstore \ (ginval0 ∪ elems nx0)), ri-inj(fi), ri-inj(fi0), btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, ri, fi1, ld0), inv(istore), inv(istore0), flushed(istore0), istore0 ⊑ istore, btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, ri0, fi2, ld1), maxino ∈ nx0, inv(groupblock(gndlist0, lax0, m, m0, m1, false)), ⌊err1⌋ , gstore2 \ ginval0 lpt= gstore \ elems nx0, flushed(gstore[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, n, LEB_SIZE, m1, true)] \ (ginval0 ∪ elems nx0)), inv(groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, n, LEB_SIZE, m1, true)), btree-inv (rp, adr, gstore[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, n, LEB_SIZE, m1, true)] \ ginval0, istore, istore0, zh, ri1, fi3, ld2), n ≤ # gndlist0 + # lax1, m ≤ n, m ≤ # gndlist0 + # lax1, ¬ dups(lax1), ¬ dups(nx0), ¬ maxino ∈ ginval0, gstore0[maxino] = groupblock(gndlist1, lax, m2, m3, m4, boolvar) ⊦ ∃ ax. ⟨choose n with m2 ≤ n ∧ n ≤ # gndlist1 in gstore0[maxino].flushindex := n⟩ ( gstore0 = gstore1[maxino, gstore1[maxino].flushindex:= n] ∧ btree-inv(rp, adr, gstore1[maxino, gstore1[maxino].flushindex:= n] \ ginval0, istore, istore0, zh, fi, fi0, ld) ∧ ax2 = ax)
Used simplifier rules: ⊦ ( ( ( (gndlist = gblock.gndlist ∧ lax = gblock.ladrlist) ∧ m = gblock.flushindex) ∧ m0 = gblock.size) ∧ m1 = gblock.ref-size) ∧ (boolvar ↔ gblock.failed) ↔ gblock = groupblock(gndlist, lax, m, m0, m1, boolvar); (elim) Used terms: gstore0[maxino], gndlist1, lax, m2, m3, m4, boolvar