| # lpt = # avol, avol[m3] = mapped(buf), m3 < # avol, awbuf-inv(avol, bleb), bleb ≠ nobuffer → avol[bleb.leb].mapped? ∧ bleb.leb < # avol ∧ bleb.isbuf?, bleb = nobuffer ∨ is-aligned(# avol[bleb.leb].data, EB_PAGE_SIZE) ⊦ awbuf-inv(avol, buffered(m3)) |
⊦ awbuf-inv(avol, bleb) ↔ ¬ ¬ ( (∀ n. n < # avol ∧ avol[n].mapped? → # avol[n].data ≤ LEB_SIZE ∧ (buffered(n) ≠ bleb → is-aligned(# avol[n].data, EB_PAGE_SIZE))) ∧ (bleb ≠ nobuffer → bleb.leb < # avol ∧ avol[bleb.leb].mapped?))
# lpt = # avol, avol[m3] = mapped(buf), m3 < # avol, awbuf-inv(avol, bleb), bleb ≠ nobuffer → avol[bleb.leb].mapped? ∧ bleb.leb < # avol ∧ bleb.isbuf?, bleb = nobuffer ∨ is-aligned(# avol[bleb.leb].data, EB_PAGE_SIZE) ⊦ (∀ n. n < # avol ∧ avol[n].mapped? → # avol[n].data ≤ LEB_SIZE ∧ (buffered(n) ≠ buffered(m3) → is-aligned(# avol[n].data, EB_PAGE_SIZE))) ∧ (buffered(m3) ≠ nobuffer → buffered(m3).leb < # avol ∧ avol[buffered(m3).leb].mapped?)
Used terms: buffered(m3), avol