| 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 = ∅, ax = ax0, gstore1 = gstore0, maxino ∈ nx0, btree-inv(rp, adr, gstore0 \ ginval0, istore, istore0, zh, ri0, fi2, ld1), 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 ∈ ginval0, ¬ dups(nx0), nx = nx0, gstore = gstore0 ⊦ [if maxino ∈ nx ∧ gstore[maxino].size + gndlist.flashsize ≤ LEB_SIZE ∧ ¬ gstore[maxino].failed then apersistence_add_gnds#(maxino, gndlist, nx; ax, gstore; err) else abort] ( (∃ ri, fi, ld. btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, ri, fi, ld)) ∧ inv(gstore \ ginval0) ∧ flushed(gstore \ (ginval0 ∪ elems nx0)) ∧ dom gstore2 ∪ elems nx0 = dom gstore ∪ ginval0 ∧ gstore2 \ ginval0 lpt= gstore \ elems nx0 → ⟨index+persistence_add_gnds#(maxino, gndlist, nx0; ax0, gstore1; err0)⟩ (gstore1 = gstore ∧ btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, fi, fi0, ld) ∧ ax = ax0 ∧ err = err0)) |
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 = ∅, ax = ax0, gstore1 = gstore0, maxino ∈ nx0, btree-inv(rp, adr, gstore0 \ ginval0, istore, istore0, zh, ri0, fi2, ld1), 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 ∈ ginval0, ¬ dups(nx0), nx = nx0, gstore = gstore0 ⊦ [apersistence_add_gnds#(maxino, gndlist, nx; ax, gstore; err)] ( (∃ ri, fi, ld. btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, ri, fi, ld)) ∧ inv(gstore \ ginval0) ∧ flushed(gstore \ (ginval0 ∪ elems nx0)) ∧ dom gstore2 ∪ elems nx0 = dom gstore ∪ ginval0 ∧ gstore2 \ ginval0 lpt= gstore \ elems nx0 → ⟨index+persistence_add_gnds#(maxino, gndlist, nx0; ax0, gstore1; err0)⟩ (gstore1 = gstore ∧ btree-inv(rp, adr, gstore \ ginval0, istore, istore0, zh, fi, fi0, ld) ∧ ax = ax0 ∧ err = err0))
Used simplifier rules: sel-07: ⊦ groupblock(gndlist, lax, m, m0, m1, boolvar).size = m0; from specification ablock[group-store]%sel-11: ⊦ groupblock(gndlist, lax, m, m0, m1, boolvar).failed ↔ boolvar; from specification ablock[group-store]