| # buf = EB_PAGE_SIZE, # lpt1 = # avol2, # avol1 = # avol2, # avol0 = # avol2, avol1[n] = mapped(buf1), avol2[n] = mapped(buf1), mapped(buf1) = avol0[n], subarray(buf, 0, m3) = subarray(buf1, m2, m3), m2 + m3 < # buf1, m2 < # buf1, n < # avol2, m3 < EB_PAGE_SIZE, m2 + m3 < LEB_SIZE, m2 < LEB_SIZE, ebm-vol-inv(avol0), is-aligned(m2, EB_PAGE_SIZE), # buf1 ≤ LEB_SIZE ⊦ is-aligned(# buf1, EB_PAGE_SIZE) |
⊦ ebm-vol-inv(avol) ↔ (∀ n. n < # avol ∧ avol[n].mapped? → # avol[n].data ≤ LEB_SIZE ∧ is-aligned(# avol[n].data, EB_PAGE_SIZE))
# avol0 = # avol2, # avol1 = # avol2, # lpt1 = # avol2, # buf = EB_PAGE_SIZE, avol2[n] = mapped(buf1), avol1[n] = mapped(buf1), mapped(buf1) = avol0[n], subarray(buf, 0, m3) = subarray(buf1, m2, m3), m2 < LEB_SIZE, m2 + m3 < LEB_SIZE, m3 < EB_PAGE_SIZE, n < # avol2, m2 < # buf1, m2 + m3 < # buf1, is-aligned(m2, EB_PAGE_SIZE), # buf1 ≤ LEB_SIZE, ∀ n. n < # avol0 ∧ avol0[n].mapped? → # avol0[n].data ≤ LEB_SIZE ∧ is-aligned(# avol0[n].data, EB_PAGE_SIZE) ⊦ is-aligned(# buf1, EB_PAGE_SIZE)
Used terms: avol0