| ⟨awbuf_write_buf#(n, buf, adr, m, nx, lpt, ns, bleb; avol, isbuf; err)⟩ (avol = avol1 ∧ (isbuf ↔ isbuf0) ∧ err = err0), # lpt = # avol, bleb = buffered(m0), awbuf-inv(avol, bleb), avol0 ↓ avol1, # avol[m0].data + n ≤ LEB_SIZE, n ≤ # buf ⊦ ⟨awbuf_write_buf#(n, buf, adr, m, nx, lpt, ns, bleb; avol, isbuf; err)⟩ (synced(avol) ∧ avol0 ↓ avol), bleb = nobuffer, avol0 ↓ avol |
⟨awbuf_write_buf#(n, buf, adr, m, nx, lpt, ns, buffered(m0); avol, isbuf; err)⟩ (avol = avol1 ∧ (isbuf ↔ isbuf0) ∧ err = err0), # lpt = # avol, avol[m0] = mapped(buf0), m0 < # avol, awbuf-inv(avol, buffered(m0)), avol0 ↓ avol1, n ≤ # buf, # buf0 + n ≤ LEB_SIZE, ¬ avol0 ↓ avol ⊦ ⟨awbuf_write_buf#(n, buf, adr, m, nx, lpt, ns, buffered(m0); avol, isbuf; err)⟩ (synced(avol) ∧ avol0 ↓ avol)
Used simplifier rules: fwd-buffered-mapped: ⊦ awbuf-inv(avol, buffered(n)) → n < # avol ∧ avol[n].mapped?;% ⊦ mapped(buf).data = buf; (s)% ⊦ m < n → n ≠ 0; (s)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ aleb.mapped? ↔ (∃ buf. aleb = mapped(buf)); (as)%inv-buf-in-vol: ⊦ awbuf-inv(avol, buffered(n)) → n < # avol; (forward) from specification awbuf-inv% ⊦ nobuffer ≠ buffered(m); (s)