| # buf = EB_PAGE_SIZE, # lpt0 = # avol, # avol0 = # avol, buffered(m) ≠ bleb0, m < # avol, abs(avol, bleb0, mkwbuf(buf, m0, m2), avol0, rofs), awbuf-inv(avol, bleb0), ebm-vol-inv(avol0), synced(avol), bleb0 ≠ nobuffer → bleb0.leb < # avol ∧ wbuf-cons(mkwbuf(buf, m0, m2), avol0[bleb0.leb], rofs) ⊦ ⟪wbuf_unmap#(m, bleb0, adr0, m1, plog0, lpt0, ns0; avol0)⟫ ⟨awbuf_unmap#(m, adr0, m1, plog0, lpt0, ns0, bleb0, rofs; avol)⟩ abs(avol, bleb0, mkwbuf(buf, m0, m2), avol0, rofs) |
# avol0 = # avol1, # lpt0 = # avol1, # buf = EB_PAGE_SIZE, adr = adr0, avol = avol0, bleb = bleb0, lpt = lpt0, m = m1, m0 = m4, ns = ns0, plog = plog0, m4 < # avol1, abs(avol1, bleb0, mkwbuf(buf, m3, m2), avol0, rofs), awbuf-inv(avol1, bleb0), ebm-vol-inv(avol0), synced(avol1), bleb0 ≠ nobuffer → bleb0.leb < # avol1 ∧ wbuf-cons(mkwbuf(buf, m3, m2), avol0[bleb0.leb], rofs) ⊦ ⟪if m0 < # avol ∧ buffered(m0) ≠ bleb then apersistence_io_unmap#(m0, adr, m, plog, lpt, ns; avol) else abort⟫ ⟨awbuf_unmap#(m4, adr0, m1, plog0, lpt0, ns0, bleb0, rofs; avol1)⟩ abs(avol1, bleb0, mkwbuf(buf, m3, m2), avol, rofs), buffered(m4) = bleb0
Used simplifier rules: wbuf_unmap# (LNUM, BUFLEB, PROOTADR, PMAXINO, PLOG, PLPT, PORPHANS; PVOL) {if LNUM < # PVOL ∧ buffered(LNUM) ≠ BUFLEB then apersistence_io_unmap# (LNUM, PROOTADR, PMAXINO, PLOG, PLPT, PORPHANS; PVOL) else abort };