| syn ↔ syn0, adr = adr0, ginval = ginval0, ginval1 = ginval2, ginval3 = ginval0, ginval4 = ginval2, ginval5 = ginval6, gstore = crash(gstore0, gstore1, ginval0, nx), gstore2 = gstore1, gstore3 = gstore0, gstore4 = gstore1, istore = remove-refsize0(crash(istore0, istore1)), istore2 = istore1, maxino = maxino0, maxino1 = maxino0, maxino2 = maxino3, nx0 = nx, nx1 = nx, nx2 = nx3, syn0, btree-inv(rp, adr0, istore0, istore1, zh, fi, fi0), inv-index(istore0, istore1), inv-journal(nx, gstore0, gstore1, ginval0), inv-journal(nx1, gstore3, gstore4, ginval3), inv-state(pstate, nx, gstore0, istore0, syn0), ri-inj(fi0), ri-inj(fi), ∃ ri, fi. btree-inv(rp, adr0, istore0, istore1, zh, ri, fi) ⊦ ⟪btree_recover#(; maxino2, nx2, ginval5, rp0, adr1, adr, istore, istore2, ginval, gstore, gstore2, nx0, maxino, ginval1, pstate0, syn1; err)⟫ ( ( err = ESUCCESS → (∃ fi, fi1, ginval2, gstore1, gstore0, nx, maxino0, ginval0, syn. ( ginval2 = ginval3 ∧ gstore1 = crash(gstore3, gstore4, ginval3, nx1) ∧ gstore0 = gstore4 ∧ nx = nx1 ∧ maxino0 = maxino1 ∧ ginval0 = ginval4 ∧ fi1 = fi0) ∧ ⟨index+persistence_recover#(; maxino3, nx3, ginval6, fi, fi1, ginval2, gstore1, gstore0, nx, maxino0, ginval0, syn; err0)⟩ ( ( ginval2 = ginval ∧ gstore1 = gstore ∧ gstore0 = gstore2 ∧ nx = nx0 ∧ maxino0 = maxino ∧ ginval0 = ginval1 ∧ btree-inv(rp0, adr, istore, istore2, zh0, fi, fi1) ∧ (syn ↔ syn1)) ∧ maxino2 = maxino3 ∧ nx2 = nx3 ∧ ginval5 = ginval6 ∧ err = err0))) ∧ ( err ≠ ESUCCESS → (∀ fi, fi0, ginval, gstore, gstore0, nx, maxino, ginval0, syn. ⟨index+persistence_recover#(; maxino3, nx3, ginval6, fi1, fi2, ginval7, gstore5, gstore6, nx4, maxino4, ginval8, syn2; err0)⟩ ( fi = fi1 ∧ fi0 = fi2 ∧ ginval = ginval7 ∧ gstore = gstore5 ∧ gstore0 = gstore6 ∧ nx = nx4 ∧ maxino = maxino4 ∧ ginval0 = ginval8 ∧ (syn ↔ syn2) ∧ maxino2 = maxino3 ∧ nx2 = nx3 ∧ ginval5 = ginval6 ∧ err = err0)))) |
ginval = ginval0, ginval1 = ginval2, ginval5 = ginval6, gstore = crash(gstore0, gstore1, ginval0, nx), gstore2 = gstore1, istore = remove-refsize0(crash(istore0, istore1)), maxino = maxino0, maxino2 = maxino3, nx0 = nx, nx2 = nx3, remove-refsize0(gstore1) = gstore1, remove-refsize0(istore1) = istore1, elems nx ∩ ginval0 = ∅, dom gstore1 ∪ elems nx = dom gstore0 ∪ ginval0, btree-inv(rp, adr0, istore0, istore1, zh, fi, fi0), btree-inv(rp, adr0, istore0, istore1, zh, ri, fi3), inv(gstore0 \ ginval0), inv(gstore1), inv(istore0), inv(istore1), ri-inj(fi), ri-inj(fi0), istore1 ⊑ istore0, ¬ dups(nx), pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore0, pstate.index? → pstate.lnum ∈ istore0 ⊦ ⟪btree_recover#(; maxino2, nx2, ginval5, rp0, adr1, adr0, istore, istore1, ginval, gstore, gstore2, nx0, maxino, ginval1, pstate0, syn1; err)⟫ ( ( err = ESUCCESS → (∃ fi3, syn. ⟨gstore3 := crash(gstore0, gstore1, ginval0, nx); index+persistence_recover#(; maxino3, nx3, ginval6, fi3, fi0, ginval0, gstore3, gstore1, nx, maxino0, ginval2, syn; err0)⟩ ( ginval0 = ginval ∧ gstore3 = gstore ∧ gstore1 = gstore2 ∧ nx = nx0 ∧ maxino0 = maxino ∧ ginval2 = ginval1 ∧ btree-inv(rp0, adr0, istore, istore1, zh0, fi3, fi0) ∧ (syn ↔ syn1) ∧ maxino2 = maxino3 ∧ nx2 = nx3 ∧ ginval5 = ginval6 ∧ ESUCCESS = err0))) ∧ ( err ≠ ESUCCESS → (∀ fi, fi0, ginval, gstore, gstore0, nx, maxino, ginval0, syn. ⟨index+persistence_recover#(; maxino3, nx3, ginval6, fi1, fi2, ginval7, gstore5, gstore6, nx4, maxino4, ginval8, syn2; err0)⟩ ( fi = fi1 ∧ fi0 = fi2 ∧ ginval = ginval7 ∧ gstore = gstore5 ∧ gstore0 = gstore6 ∧ nx = nx4 ∧ maxino = maxino4 ∧ ginval0 = ginval8 ∧ (syn ↔ syn2) ∧ maxino2 = maxino3 ∧ nx2 = nx3 ∧ ginval5 = ginval6 ∧ err = err0))))
Used simplifier rules: ⊦ 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)%⊦ 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)