| # lpt = # avol, m = m2, m1 = m3, awbuf-inv(avol, bleb), bleb ≠ buffered(m1) → (bleb ≠ nobuffer → avol[bleb.leb].mapped? ∧ bleb.leb < # avol ∧ bleb.isbuf?) ∧ ( bleb = nobuffer ∨ is-aligned(# avol[bleb.leb].data, EB_PAGE_SIZE) → m1 < # avol → m1 < # avol ∧ (avol[m1].mapped? → avol[m1].mapped? ∧ m1 < # avol)), bleb = buffered(m1) ∨ (bleb = nobuffer ∨ is-aligned(# avol[bleb.leb].data, EB_PAGE_SIZE)) ∧ m1 < # avol ∧ avol[m1].mapped? ∧ m0 = # avol[m1].data, bleb = buffered(m3) ∨ (bleb = nobuffer ∨ is-aligned(# avol[bleb.leb].data, EB_PAGE_SIZE)) ∧ m3 < # avol ∧ avol[m3].mapped? ∧ m0 = # avol[m3].data ⊦ ⟪fail_or_success#(; ; err); if err = ESUCCESS then bleb := buffered(m1)⟫ awbuf-inv(avol, bleb) |
# lpt = # avol, awbuf-inv(avol, bleb), bleb ≠ buffered(m3) → bleb ≠ nobuffer → avol[bleb.leb].mapped? ∧ bleb.leb < # avol ∧ bleb.isbuf?, bleb = buffered(m3) ∨ (bleb = nobuffer ∨ is-aligned(# avol[bleb.leb].data, EB_PAGE_SIZE)) ∧ m3 < # avol ∧ avol[m3].mapped? ∧ m0 = # avol[m3].data ⊦ ⟪fail_or_success#(; ; err); if err = ESUCCESS then bleb := buffered(m3)⟫ awbuf-inv(avol, bleb)