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