| gstore[maxino] = groupblock(gndlist0, lax0, m, m0, m1, false), remove-refsize0(istore0) = istore0, remove-refsize0(gstore2) = gstore2, dom gstore2 ∪ elems nx0 = dom gstore ∪ ginval0, elems nx0 ∩ ginval0 = ∅, # lax1 = # gndlist, maxino ∈ gstore, m ≤ # gndlist0 + # gndlist, m ≤ n0, n0 ≤ # gndlist0 + # gndlist, btree-inv (rp, adr, gstore[maxino, groupblock(gndlist0 + gndlist, lax0 + lax1, n0, m0 + gndlist.flashsize, m1, false)] \ ginval0, istore, istore0, zh, ri1, fi3, ld2), inv(groupblock(gndlist0 + gndlist, lax0 + lax1, n0, m0 + gndlist.flashsize, m1, false)), flushed(gstore[maxino, groupblock(gndlist0 + gndlist, lax0 + lax1, n0, m0 + gndlist.flashsize, m1, false)] \ (ginval0 ∪ elems nx0)), gstore2 \ ginval0 lpt= gstore \ elems nx0, inv(groupblock(gndlist0, lax0, m, m0, m1, false)), maxino ∈ nx0, btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, ri0, fi2, ld1), istore0 ⊑ istore, flushed(istore0), inv(istore0), inv(istore), btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, ri, fi1, ld0), ri-inj(fi0), ri-inj(fi), flushed(gstore \ (ginval0 ∪ elems nx0)), inv(gstore2), inv(gstore \ ginval0), btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, fi, fi0, ld), m0 + gndlist.flashsize ≤ LEB_SIZE, inv-flashsize(gndlist, lax1), ¬ maxino ∈ ginval0, ¬ dups(nx0), ¬ dups(lax1) ⊦ m ≤ n0 ∧ n0 ≤ # gndlist0 + # gndlist ∧ ⟨gstore0 := gstore[maxino, groupblock(gndlist0 + gndlist, lax0 + lax1, n0, m0 + gndlist.flashsize, m1, false)]⟩ ( gstore0 = gstore[maxino, groupblock(gndlist0 + gndlist, lax0 + lax1, n0, m0 + gndlist.flashsize, m1, false)] ∧ btree-inv (rp, adr, gstore[maxino, groupblock(gndlist0 + gndlist, lax0 + lax1, n0, m0 + gndlist.flashsize, m1, false)] \ ginval0, istore, istore0, zh, fi, fi0, ld)) |
gstore[maxino] = groupblock(gndlist0, lax0, m, m0, m1, false), remove-refsize0(istore0) = istore0, remove-refsize0(gstore2) = gstore2, dom gstore2 ∪ elems nx0 = dom gstore ∪ ginval0, elems nx0 ∩ ginval0 = ∅, # lax1 = # gndlist, maxino ∈ gstore, m ≤ # gndlist0 + # gndlist, m ≤ n0, n0 ≤ # gndlist0 + # gndlist, btree-inv (rp, adr, gstore[maxino, groupblock(gndlist0 + gndlist, lax0 + lax1, n0, m0 + gndlist.flashsize, m1, false)] \ ginval0, istore, istore0, zh, ri1, fi3, ld2), inv(groupblock(gndlist0 + gndlist, lax0 + lax1, n0, m0 + gndlist.flashsize, m1, false)), flushed(gstore[maxino, groupblock(gndlist0 + gndlist, lax0 + lax1, n0, m0 + gndlist.flashsize, m1, false)] \ (ginval0 ∪ elems nx0)), gstore2 \ ginval0 lpt= gstore \ elems nx0, inv(groupblock(gndlist0, lax0, m, m0, m1, false)), maxino ∈ nx0, btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, ri0, fi2, ld1), istore0 ⊑ istore, flushed(istore0), inv(istore0), inv(istore), btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, ri, fi1, ld0), ri-inj(fi0), ri-inj(fi), flushed(gstore \ (ginval0 ∪ elems nx0)), inv(gstore2), inv(gstore \ ginval0), btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, fi, fi0, ld), m0 + gndlist.flashsize ≤ LEB_SIZE, inv-flashsize(gndlist, lax1), ¬ maxino ∈ ginval0, ¬ dups(nx0), ¬ dups(lax1) ⊦ ⟨gstore0 := gstore[maxino, groupblock(gndlist0 + gndlist, lax0 + lax1, n0, m0 + gndlist.flashsize, m1, false)]⟩ ( gstore0 = gstore[maxino, groupblock(gndlist0 + gndlist, lax0 + lax1, n0, m0 + gndlist.flashsize, m1, false)] ∧ btree-inv (rp, adr, gstore[maxino, groupblock(gndlist0 + gndlist, lax0 + lax1, n0, m0 + gndlist.flashsize, m1, false)] \ ginval0, istore, istore0, zh, fi, fi0, ld))