| # lpt = # avol, # avol0 = # avol, # lpt1 = # avol, # buf = EB_PAGE_SIZE, rofs0 ↔ rofs, adr = adr0, lpt0 = lpt1, m = m0, ns = ns0, ns1 = ns2, plog = plog0, abs(avol, bleb, mkwbuf(buf, m1, m2), avol0, rofs), awbuf-inv(avol, bleb), ebm-vol-inv(avol0), synced(avol), bleb ≠ nobuffer → bleb.leb < # avol ∧ wbuf-cons(mkwbuf(buf, m1, m2), avol0[bleb.leb], rofs) ⊦ ⟪wbuf_commit#(lpt, adr2, m3, avol0; ns1, adr0, m0, plog0, lpt1, ns0, rofs; err)⟫ ⟨awbuf_commit#(lpt, adr2, m3, avol, bleb; ns2, adr, m, plog, lpt0, ns, rofs0; err0)⟩ ( abs(avol, bleb, mkwbuf(buf, m1, m2), avol0, rofs) ∧ adr = adr0 ∧ m = m0 ∧ plog = plog0 ∧ lpt0 = lpt1 ∧ ns = ns0 ∧ (rofs0 ↔ rofs) ∧ ns1 = ns2 ∧ err = err0) |
# buf = EB_PAGE_SIZE, # lpt1 = # avol1, # avol0 = # avol1, # lpt2 = # avol1, rofs0 ↔ rofs, adr = adr3, adr0 = adr2, adr1 = adr3, avol = avol0, lpt = lpt1, lpt0 = lpt2, lpt3 = lpt1, m = m5, m0 = m3, m4 = m5, ns = ns4, ns0 = ns1, ns1 = ns2, ns3 = ns4, plog = plog0, plog1 = plog0, abs(avol1, bleb, mkwbuf(buf, m1, m2), avol0, rofs), awbuf-inv(avol1, bleb), ebm-vol-inv(avol0), synced(avol1), bleb ≠ nobuffer → bleb.leb < # avol1 ∧ wbuf-cons(mkwbuf(buf, m1, m2), avol0[bleb.leb], rofs) ⊦ ⟪if # lpt0 = # avol then {apersistence_io_commit#(lpt0, adr0, m0, avol; ns0, adr, m, plog, lpt, ns; err); if err ≠ ESUCCESS then rofs := true} else abort⟫ ⟨awbuf_commit#(lpt2, adr2, m3, avol1, bleb; ns2, adr1, m4, plog1, lpt3, ns3, rofs0; err0)⟩ ( abs(avol1, bleb, mkwbuf(buf, m1, m2), avol0, rofs) ∧ adr1 = adr ∧ m4 = m ∧ plog1 = plog ∧ lpt3 = lpt ∧ ns3 = ns ∧ (rofs0 ↔ rofs) ∧ ns0 = ns2 ∧ err = err0)
Used simplifier rules: wbuf_commit# (LPT, PROOTADR0, PMAXINO0, PVOL ; ORPHANS, PROOTADR, PMAXINO, PLOG, PLPT, PORPHANS, ROFS ; ERR ) {if # LPT = # PVOL then {apersistence_io_commit# (LPT, PROOTADR0, PMAXINO0, PVOL ; ORPHANS, PROOTADR, PMAXINO, PLOG, PLPT, PORPHANS ; ERR); if ERR ≠ ESUCCESS then ROFS := true} else abort };