| gstore1 = gstore0[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, m, LEB_SIZE, m1, true)], gstore0[maxino] = groupblock(gndlist0, lax0, m, m0, m1, false), remove-refsize0(istore0) = istore0, remove-refsize0(gstore2) = gstore2, dom gstore2 ∪ elems nx0 = dom gstore0 ∪ ginval0, elems nx0 ∩ ginval0 = ∅, gndlist ≠ [], # lax1 ≠ # gndlist, m ≤ # gndlist0 + # lax1, m ≤ n, n ≤ # gndlist0 + # lax1, btree-inv (rp, adr, gstore0[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, n, LEB_SIZE, m1, true)] \ ginval0, istore, istore0, zh, ri1, fi3, ld2), inv(groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, n, LEB_SIZE, m1, true)), flushed(gstore0[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, n, LEB_SIZE, m1, true)] \ (ginval0 ∪ elems nx0)), gstore2 \ ginval0 lpt= gstore0 \ elems nx0, ⌊err1⌋ , inv(groupblock(gndlist0, lax0, m, m0, m1, false)), maxino ∈ nx0, btree-inv(rp, adr, gstore0 \ ginval0, istore, istore0, zh, ri0, fi2, ld1), maxino ∈ gstore0, istore0 ⊑ istore, flushed(istore0), inv(istore0), inv(istore), btree-inv(rp, adr, gstore0 \ ginval0, istore, istore0, zh, ri, fi1, ld0), ri-inj(fi0), ri-inj(fi), flushed(gstore0 \ (ginval0 ∪ elems nx0)), inv(gstore2), inv(gstore0 \ ginval0), btree-inv(rp, adr, gstore0 \ ginval0, istore, istore0, zh, fi, fi0, ld), m0 + gndlist.flashsize ≤ LEB_SIZE, # lax1 < # gndlist, inv-flashsize(prefixn(# lax1, gndlist), lax1), ¬ maxino ∈ ginval0, ¬ dups(nx0), ¬ dups(lax1) ⊦ ⟨ax := lax1.to-adr(maxino), err := err1⟩ ⟨gstore0[maxino].gndlist := gstore0[maxino].gndlist + prefixn(# lax1, gndlist); gstore0[maxino].ladrlist := gstore0[maxino].ladrlist + lax1; if err = ESUCCESS then gstore0[maxino].size := gstore0[maxino].size + gndlist.flashsize else {gstore0[maxino].size := LEB_SIZE; gstore0[maxino].failed := true; 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 ∧ err1 = err) |
gstore1 = gstore0[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, m, LEB_SIZE, m1, true)], gstore0[maxino] = groupblock(gndlist0, lax0, m, m0, m1, false), remove-refsize0(istore0) = istore0, remove-refsize0(gstore2) = gstore2, dom gstore2 ∪ elems nx0 = dom gstore0 ∪ ginval0, elems nx0 ∩ ginval0 = ∅, gndlist ≠ [], # lax1 ≠ # gndlist, m ≤ # gndlist0 + # lax1, m ≤ n, n ≤ # gndlist0 + # lax1, btree-inv (rp, adr, gstore0[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, n, LEB_SIZE, m1, true)] \ ginval0, istore, istore0, zh, ri1, fi3, ld2), inv(groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, n, LEB_SIZE, m1, true)), flushed(gstore0[maxino, groupblock(gndlist0 + prefixn(# lax1, gndlist), lax0 + lax1, n, LEB_SIZE, m1, true)] \ (ginval0 ∪ elems nx0)), gstore2 \ ginval0 lpt= gstore0 \ elems nx0, ⌊err1⌋ , inv(groupblock(gndlist0, lax0, m, m0, m1, false)), maxino ∈ nx0, btree-inv(rp, adr, gstore0 \ ginval0, istore, istore0, zh, ri0, fi2, ld1), maxino ∈ gstore0, istore0 ⊑ istore, flushed(istore0), inv(istore0), inv(istore), btree-inv(rp, adr, gstore0 \ ginval0, istore, istore0, zh, ri, fi1, ld0), ri-inj(fi0), ri-inj(fi), flushed(gstore0 \ (ginval0 ∪ elems nx0)), inv(gstore2), inv(gstore0 \ ginval0), btree-inv(rp, adr, gstore0 \ ginval0, istore, istore0, zh, fi, fi0, ld), m0 + gndlist.flashsize ≤ LEB_SIZE, # lax1 < # gndlist, inv-flashsize(prefixn(# lax1, gndlist), lax1), ¬ maxino ∈ ginval0, ¬ dups(nx0), ¬ dups(lax1), ax = lax1.to-adr(maxino), err = err1 ⊦ ⟨gstore0[maxino].gndlist := gstore0[maxino].gndlist + prefixn(# lax1, gndlist)⟩ ⟨gstore0[maxino].ladrlist := gstore0[maxino].ladrlist + lax1; if err = ESUCCESS then gstore0[maxino].size := gstore0[maxino].size + gndlist.flashsize else {gstore0[maxino].size := LEB_SIZE; gstore0[maxino].failed := true; 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 ∧ err1 = err)