| ⟨awbuf_write_buf#(n, buf, adr, m, nx, lpt, ns, buffered(m1); avol, isbuf; err)⟩ (avol = avol1 ∧ (isbuf ↔ isbuf0) ∧ err = err0), # lpt = # avol, avol[m1] = mapped(buf0), bleb = buffered(m1), m0 = m, n0 = n, m1 < # avol, awbuf-inv(avol, buffered(m1)), avol0 ↓ avol1, # buf0 + n ≤ LEB_SIZE, n ≤ # buf, bleb ≠ nobuffer → avol[bleb.leb].mapped? ∧ bleb.leb < # avol ∧ bleb.isbuf? ⊦ avol0 ↓ avol, bleb ≠ nobuffer ∧ # avol[bleb.leb].data + n0 ≤ LEB_SIZE ∧ n0 ≤ # buf |
Used simplifier rules: fwd-buffered-mapped: ⊦ awbuf-inv(avol, buffered(n)) → n < # avol ∧ avol[n].mapped?;%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ ¬ n < n; (s)% ⊦ m + n < m + n0 ↔ n < n0; (s)% ⊦ mapped(buf).data = buf; (s)% ⊦ mapped(buf) = mapped(buf0) ↔ buf = buf0; (s)%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat%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% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ aleb.mapped? ↔ (∃ buf. aleb = mapped(buf)); (as)% ⊦ buffered(m).isbuf?; (s)% ⊦ buffered(m).leb = m; (s)% ⊦ nobuffer ≠ buffered(m); (s)