| adr0 = adr1, istore1 = istore, inv-journal(nx, gstore, gstore0, ginval), inv-index(istore, istore0), pstate.index?, inv-state(pstate, nx, gstore, istore, bv), btree-inv(r0, adr0, istore, istore0, zh, ri, fi), r0 ∈ zh, zh[r0].dirty ⊦ ⟪btree_commit_rec#(r0, adr0, istore0, ginval, gstore, gstore0, nx, ino, ns; adr1, err, zh, istore, pstate, bv)⟫ ( istore1 ⊑ istore ∧ inv-state(pstate, nx, gstore, istore, bv) ∧ inv-journal(nx, gstore, gstore0, ginval) ∧ inv-index(istore, istore0) ∧ (err ≠ ESUCCESS → btree-inv(r0, adr0, istore, istore0, zh, ri, fi)) ∧ ( err = ESUCCESS → btree-inv(r0, adr1, istore, istore, zh, ri, ri) ∧ btree-inv (r0, adr0, istore[adr1.lnum, istore[adr1.lnum].ref-size:= (istore[adr1.lnum].ref-size - adr1.size)], istore0, zh[r0, zh[r0].dirty:= true], ri, fi) ∧ ¬ zh[r0].dirty)) |