| # lpt = # avol, m = m2, m1 = m3, ¬ rofs, ebm-vol-inv(avol), wbuf-cons(bleb, wbuf, avol, rofs), ¬ rofs → bleb = buffered(m3) ∨ (bleb = nobuffer ∨ wbuf.nbytes = 0) ∧ m3 < # avol ∧ avol[m3].mapped? ∧ m0 = # avol[m3].data ⊦ ⟪apersistence_io_add_log_leb#(m1, adr, m, avol, lpt, ns; plog; err); if err = ESUCCESS then wbuf_move_buf#(m1, m0, rofs, avol; bleb, wbuf; err)⟫ wbuf-cons(bleb, wbuf, avol, rofs) |
# lpt = # avol, # wbuf.content = EB_PAGE_SIZE, ebm-vol-inv(avol), bleb ≠ nobuffer → bleb.leb < # avol ∧ wbuf-cons(wbuf, avol[bleb.leb], false), bleb = buffered(m3) ∨ (bleb = nobuffer ∨ wbuf.nbytes = 0) ∧ m3 < # avol ∧ avol[m3].mapped? ∧ m0 = # avol[m3].data ⊦ ⟪apersistence_io_add_log_leb#(m3, adr, m, avol, lpt, ns; plog; err); rofs := false; if err = ESUCCESS then wbuf_move_buf#(m3, m0, rofs, avol; bleb, wbuf; err)⟫ (# wbuf.content = EB_PAGE_SIZE ∧ (bleb ≠ nobuffer → bleb.leb < # avol ∧ wbuf-cons(wbuf, avol[bleb.leb], rofs)))
Used simplifier rules: ⊦ wbuf-cons(bleb, wbuf, avol, rofs) ↔ # wbuf.content = EB_PAGE_SIZE ∧ ( bleb ≠ nobuffer → bleb.leb < # avol ∧ wbuf-cons(wbuf, avol[bleb.leb], rofs)); (s)