| gstore = gstore0, ax = ax0, elems nx0 ∩ ginval0 = ∅, dom gstore2 ∪ elems nx0 = dom gstore0 ∪ ginval0, remove-refsize0(gstore2) = gstore2, remove-refsize0(istore0) = istore0, gstore0[maxino] = groupblock(gndlist0, lax, m, m0, m1, false), maxino ∈ nx0, m0 + gndlist.flashsize ≤ LEB_SIZE, btree-inv(rp, adr, gstore0 \ ginval0, istore, istore0, zh, fi, fi0, ld), inv(gstore0 \ ginval0), inv(gstore2), flushed(gstore0 \ (ginval0 ∪ elems nx0)), gstore2 \ ginval0 lpt= gstore0 \ elems nx0, ri-inj(fi), ri-inj(fi0), btree-inv(rp, adr, gstore0 \ ginval0, istore, istore0, zh, ri, fi1, ld0), inv(istore), inv(istore0), flushed(istore0), istore0 ⊑ istore, maxino ∈ gstore0, inv(groupblock(gndlist0, lax, m, m0, m1, false)), ¬ dups(nx0), ¬ maxino ∈ ginval0, (∀ ri, fi, ld. ¬ btree-inv(rp, adr, gstore0 \ ginval0, istore, istore0, zh, ri, fi, ld)) ∨ ¬ inv-journal(nx0, gstore0, gstore2, ginval0) ∨ ¬ maxino ∈ nx0 ∨ ¬ gstore0[maxino].size + gndlist.flashsize ≤ LEB_SIZE ∨ gstore0[maxino].failed ⊦ |
gstore0[maxino] = groupblock(gndlist0, lax, m, m0, m1, false), remove-refsize0(istore0) = istore0, remove-refsize0(gstore2) = gstore2, dom gstore2 ∪ elems nx0 = dom gstore0 ∪ ginval0, elems nx0 ∩ ginval0 = ∅, inv(groupblock(gndlist0, lax, m, m0, m1, false)), 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), gstore2 \ ginval0 lpt= gstore0 \ elems nx0, 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, maxino ∈ nx0, ∀ ri, fi, ld. ¬ btree-inv(rp, adr, gstore0 \ ginval0, istore, istore0, zh, ri, fi, ld) ⊦ dups(nx0), maxino ∈ ginval0
Used simplifier rules: sel-11: ⊦ groupblock(gndlist, lax, m, m0, m1, boolvar).failed ↔ boolvar; from specification ablock[group-store]%sel-07: ⊦ groupblock(gndlist, lax, m, m0, m1, boolvar).size = m0; from specification ablock[group-store]%inv-journal: ⊦ inv-journal(nx, gstore, gstore0, ginval) ↔ ¬ ¬ ( inv(gstore \ ginval) ∧ inv(gstore0) ∧ flushed(gstore \ (ginval ∪ elems nx)) ∧ elems nx ∩ ginval = ∅ ∧ ¬ dups(nx) ∧ dom gstore0 ∪ elems nx = dom gstore ∪ ginval ∧ gstore0 \ ginval lpt= gstore \ elems nx ∧ remove-refsize0(gstore0) = gstore0); from specification apersistence-base