| maxino = LEB_SIZE ⊦ ⟪btree_format#(maxino0, maxino, maxino1; adr, adr0, istore, istore0, ginval, gstore, gstore0, nx, maxino2, ginval0, pstate, syn; rp, err)⟫ ( ( err = ESUCCESS → syn ∧ (∃ ri, fi. btree-inv(rp, adr0, istore, istore0, zh, ri, fi)) ∧ inv-journal(nx, gstore, gstore0, ginval) ∧ inv-index(istore, istore0) ∧ inv-state(pstate, nx, gstore, istore, syn)) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → btree-inv(rp, adr0, istore, istore0, zh, ∅, ∅) ∧ gstore = ∅ ∧ ginval = ∅ ∧ maxino2 = maxino1 ∧ nx = [] ∧ ginval0 = ∅)) |
⊦ ⟪btree_format#(maxino0, LEB_SIZE, maxino1; adr, adr0, istore, istore0, ginval, gstore, gstore0, nx, maxino2, ginval0, pstate, syn; rp, err)⟫ ( ( err = ESUCCESS → syn ∧ (∃ ri, fi. btree-inv(rp, adr0, istore, istore0, zh, ri, fi)) ∧ inv(gstore \ ginval) ∧ inv(gstore0) ∧ elems nx ∩ ginval = ∅ ∧ ¬ dups(nx) ∧ dom gstore0 ∪ elems nx = dom gstore ∪ ginval ∧ remove-refsize0(gstore0) = gstore0 ∧ inv(istore) ∧ inv(istore0) ∧ istore0 ⊑ istore ∧ remove-refsize0(istore0) = istore0 ∧ (pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore) ∧ (pstate.index? → pstate.lnum ∈ istore)) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → btree-inv(rp, adr0, istore, istore0, zh, ∅, ∅) ∧ gstore = ∅ ∧ ginval = ∅ ∧ maxino2 = maxino1 ∧ nx = [] ∧ ginval0 = ∅))
Used simplifier rules: ⊦ 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)%⊦ inv-index(istore, istore0) ↔ inv(istore) ∧ inv(istore0) ∧ istore0 ⊑ istore ∧ remove-refsize0(istore0) = istore0; (s)%⊦ 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)