| # lpt = # avol, # buf1 = EB_PAGE_SIZE, avol[m4] = mapped(buf2), m2 + n < EB_PAGE_SIZE, m4 < # avol, ebm-vol-inv(avol), wbuf-cons(mkwbuf(buf1, m1, m2), mapped(buf2), false), m1 + m2 + n ≤ LEB_SIZE, n ≤ # buf ⊦ wbuf-cons(mkwbuf(copy(buf, 0, buf1, m2, n), m1, m2 + n), mapped(buf2), false) |
⊦ wbuf-cons(wbuf, aleb, rofs) ↔ aleb.mapped? ∧ wbuf.nbytes < # wbuf.content ∧ # wbuf.content = EB_PAGE_SIZE ∧ (¬ rofs → # aleb.data = wbuf.offset) ∧ (rofs → wbuf.offset ≤ # aleb.data) ∧ is-aligned(wbuf.offset, EB_PAGE_SIZE)
# buf1 = EB_PAGE_SIZE, # lpt = # avol, avol[m4] = mapped(buf2), m4 < # avol, m2 + n < EB_PAGE_SIZE, ebm-vol-inv(avol), wbuf-cons(mkwbuf(buf1, m1, m2), mapped(buf2), false), n ≤ # buf, m1 + m2 + n ≤ LEB_SIZE ⊦ mapped(buf2).mapped? ∧ mkwbuf(copy(buf, 0, buf1, m2, n), m1, m2 + n).nbytes < # mkwbuf(copy(buf, 0, buf1, m2, n), m1, m2 + n).content ∧ # mkwbuf(copy(buf, 0, buf1, m2, n), m1, m2 + n).content = EB_PAGE_SIZE ∧ (¬ false → # mapped(buf2).data = mkwbuf(copy(buf, 0, buf1, m2, n), m1, m2 + n).offset) ∧ (false → mkwbuf(copy(buf, 0, buf1, m2, n), m1, m2 + n).offset ≤ # mapped(buf2).data) ∧ is-aligned(mkwbuf(copy(buf, 0, buf1, m2, n), m1, m2 + n).offset, EB_PAGE_SIZE)
Used terms: false, mapped(buf2), mkwbuf(copy(buf, 0, buf1, m2, n), m1, m2 + n)