| # avol0 = # avol1, # lpt0 = # avol1, # buf1 = EB_PAGE_SIZE, rofs0 ↔ rofs, avol0[m4] = mapped(buf2), adr = adr0, avol = avol0, bleb = buffered(m4), buf0 = buf, lpt = lpt0, m = m3, m0 = EB_PAGE_SIZE, n2 = n, ns = ns0, plog = plog0, ¬ rofs, wbuf = mkwbuf(buf1, m1, m2), m2 < EB_PAGE_SIZE, m4 < # avol1, abs(avol1, buffered(m4), mkwbuf(buf1, m1, m2), avol0, rofs), awbuf-inv(avol1, buffered(m4)), ebm-vol-inv(avol0), is-aligned(m1, EB_PAGE_SIZE), # avol1[m4].data + n ≤ LEB_SIZE, n ≤ # buf, wbuf.nbytes + n2 ≤ # wbuf.content, 0 + n2 ≤ # buf0, ¬ rofs → wbuf.offset + wbuf.nbytes + n2 ≤ LEB_SIZE ∧ n2 ≤ # buf0, ¬ rofs → # buf2 = m1, rofs → m1 ≤ # buf2 ⊦ ⟪err := ESUCCESS⟫ ⟨awbuf_write_buf#(n, buf, adr0, m3, plog0, lpt0, ns0, buffered(m4); avol1, rofs0; err0)⟩ ( abs (avol1, buffered(m4), (wbuf.content:= copy(buf0, 0, wbuf.content, wbuf.nbytes, n2)) .nbytes:= ((wbuf.content:= copy(buf0, 0, wbuf.content, wbuf.nbytes, n2)).nbytes + n2), avol, rofs) ∧ (rofs0 ↔ rofs) ∧ err = err0), bleb = nobuffer, wbuf.nbytes + n2 ≥ m0 |
# buf1 = EB_PAGE_SIZE, # lpt0 = # avol1, # avol0 = # avol1, rofs0 ↔ rofs, avol0[m4] = mapped(buf2), adr = adr0, avol = avol0, bleb = buffered(m4), buf0 = buf, lpt = lpt0, m = m3, m0 = EB_PAGE_SIZE, n2 = n, ns = ns0, plog = plog0, ¬ rofs, wbuf = mkwbuf(buf1, m1, m2), m4 < # avol1, m2 < EB_PAGE_SIZE, abs(avol1, buffered(m4), mkwbuf(buf1, m1, m2), avol0, rofs), awbuf-inv(avol1, buffered(m4)), ebm-vol-inv(avol0), is-aligned(m1, EB_PAGE_SIZE), 0 + n2 ≤ # buf0, wbuf.nbytes + n2 ≤ # wbuf.content, n ≤ # buf, # avol1[m4].data + n ≤ LEB_SIZE, rofs → m1 ≤ # buf2, ¬ rofs → # buf2 = m1, ¬ rofs → wbuf.offset + wbuf.nbytes + n2 ≤ LEB_SIZE ∧ n2 ≤ # buf0 ⊦ ⟨awbuf_write_buf#(n, buf, adr0, m3, plog0, lpt0, ns0, buffered(m4); avol1, rofs0; err0)⟩ ( abs (avol1, buffered(m4), (wbuf.content:= copy(buf0, 0, wbuf.content, wbuf.nbytes, n2)) .nbytes:= ((wbuf.content:= copy(buf0, 0, wbuf.content, wbuf.nbytes, n2)).nbytes + n2), avol, rofs) ∧ (rofs0 ↔ rofs) ∧ ESUCCESS = err0), bleb = nobuffer, wbuf.nbytes + n2 ≥ m0