| # 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, ¬ rofs → wbuf.offset + wbuf.nbytes + n2 ≤ LEB_SIZE ∧ n2 ≤ # buf0, ¬ rofs → # buf2 = m1, rofs → m1 ≤ # buf2 ⊦ ⟨awbuf_write_buf#(n, buf, adr0, m3, plog0, lpt0, ns0, buffered(m4); avol1, rofs0; err0)⟩ (abs(avol1, buffered(m4), wbuf, avol, rofs) ∧ (rofs0 ↔ rofs) ∧ EROFS = err0), bleb = nobuffer |
# avol0 = # avol1, # lpt0 = # avol1, # buf1 = EB_PAGE_SIZE, avol0[m4] = mapped(buf2), rofs0, m4 < # avol1, m2 < EB_PAGE_SIZE, abs(avol1, buffered(m4), mkwbuf(buf1, m1, m2), avol0, true), awbuf-inv(avol1, buffered(m4)), ebm-vol-inv(avol0), is-aligned(m1, EB_PAGE_SIZE), m1 ≤ # buf2, # avol1[m4].data + n ≤ LEB_SIZE, n ≤ # buf ⊦ ⟨awbuf_write_buf#(n, buf, adr0, m3, plog0, lpt0, ns0, buffered(m4); avol1, rofs0; err0)⟩ (abs(avol1, buffered(m4), mkwbuf(buf1, m1, m2), avol0, true) ∧ rofs0 ∧ EROFS = err0)
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%inv-buf-in-vol: ⊦ awbuf-inv(avol, buffered(n)) → n < # avol; (forward) from specification awbuf-inv%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ nobuffer ≠ buffered(m); (s)