| # 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) |
# lpt2 = # avol1, # avol0 = # avol1, # lpt1 = # avol1, # buf = EB_PAGE_SIZE, 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) ⊦ ⟪apersistence_io_commit#(lpt0, adr0, m0, avol; ns0, adr, m, plog, lpt, ns; err); if err ≠ ESUCCESS then rofs := true⟫ ⟨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)