| ginval = ginval3, gstore = gstore3, nx = nx0, remove-refsize0(istore1) = istore1, remove-refsize0(gstore2) = gstore2, elems nx0 ∩ ginval3 = ∅, dom gstore2 ∪ elems nx0 = dom gstore3 ∪ ginval3, btree-inv(rp, adr, istore2, istore1, zh, fi, fi0), inv(istore1), inv(istore2), inv(gstore2), inv(gstore3 \ ginval3), ri-inj(fi0), ri-inj(fi), istore1 ⊑ istore2, ¬ dups(nx0), pstate.index? → pstate.lnum ∈ istore2, pstate.journal? → nx0 ≠ [] ∧ pstate.lnum = nx0.last ∧ pstate.lnum ∈ gstore3 ⊦ ⟪apersistence_allocate_gnd#(adr, istore2, istore1, gstore2, maxino0, ginval2, true; ginval, gstore, nx, pstate; err)⟫ ⟨index_allocate_gnd#(fi, fi0, gstore2, maxino0, ginval2, true; ginval3, gstore3, nx0; err0)⟩ (ginval3 = ginval ∧ gstore3 = gstore ∧ nx0 = nx ∧ err = err0) |
inv-journal(nx, gstore, gstore0, ginval), inv-index(istore, istore0), inv-state(pstate, nx, gstore, istore, syn), syn ⊦ ⟪apersistence_allocate_gnd#(adr, istore, istore0, gstore0, maxino, ginval0, syn; ginval, gstore, nx, pstate; err)⟫ (inv-journal(nx, gstore, gstore0, ginval) ∧ inv-state(pstate, nx, gstore, istore, syn))
syn0 ↔ true, adr0 = adr, ginval = ginval3, ginval1 = ginval2, gstore = gstore3, gstore1 = gstore2, istore3 = istore2, istore4 = istore1, maxino1 = maxino0, nx = nx0, remove-refsize0(gstore2) = gstore2, remove-refsize0(istore1) = istore1, elems nx0 ∩ ginval3 = ∅, dom gstore2 ∪ elems nx0 = dom gstore3 ∪ ginval3, btree-inv(rp, adr, istore2, istore1, zh, fi, fi0), inv(gstore3 \ ginval3), inv(gstore2), inv(istore2), inv(istore1), inv-index(istore2, istore1), inv-journal(nx, gstore, gstore2, ginval), inv-state(pstate, nx, gstore, istore2, true), ri-inj(fi), ri-inj(fi0), istore1 ⊑ istore2, pstate.journal? → nx0 ≠ [] ∧ pstate.lnum = nx0.last ∧ pstate.lnum ∈ gstore3, pstate.index? → pstate.lnum ∈ istore2 ⊦ [apersistence_allocate_gnd#(adr, istore2, istore1, gstore2, maxino0, ginval2, true; ginval, gstore, nx, pstate; err)] ( inv-journal(nx, gstore, gstore1, ginval) ∧ inv-state(pstate, nx, gstore, istore3, syn0) → ⟨index_allocate_gnd#(fi, fi0, gstore2, maxino0, ginval2, true; ginval3, gstore3, nx0; err0)⟩ (ginval3 = ginval ∧ gstore3 = gstore ∧ nx0 = nx ∧ err = err0)), dups(nx0)
Used simplifier rules: ⊦ inv-journal(nx, gstore, gstore0, ginval) ↔ inv(gstore \ ginval) ∧ inv(gstore0) ∧ elems nx ∩ ginval = ∅ ∧ ¬ dups(nx) ∧ dom gstore0 ∪ elems nx = dom gstore ∪ ginval ∧ remove-refsize0(gstore0) = gstore0; (s)%⊦ inv-index(istore, istore0) ↔ inv(istore) ∧ inv(istore0) ∧ istore0 ⊑ istore ∧ remove-refsize0(istore0) = istore0; (s)%⊦ inv-state(pstate, nx, gstore, istore, syn) ↔ ( pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore) ∧ (pstate.index? → pstate.lnum ∈ istore) ∧ (pstate = unbuffered → syn); (s)