| # buf0 = EB_PAGE_SIZE, # lpt0 = # avol1, # avol0 = # avol1, avol0[m5] = mapped(buf), n < # avol1, m5 < # avol1, awbuf-inv(avol1, bleb), ebm-vol-inv(avol0), synced(avol1), bleb ≠ nobuffer → bleb.leb < # avol1 ∧ wbuf-cons(mkwbuf(buf0, m4, m3), avol0[bleb.leb], false), ∀ n0. n0 < # avol1 → (buffered(n0) ≠ bleb → avol1[n0] = avol0[n0]) ∧ (buffered(n0) = bleb → avol1[n0] = abs⊕(avol0[n0], mkwbuf(buf0, m4, m3))), bleb = nobuffer ∨ m3 = 0 ⊦ avol1[n] = avol0[n], bleb = buffered(m5), n = m5 |
Used simplifier rules: ⊦ buffered(m) = buffered(m0) ↔ m = m0; (s)% ⊦ nobuffer ≠ buffered(m); (s)% ⊦ buffered(m).leb = m; (s)%wbuf-cons-mapped: ⊦ wbuf-cons(wbuf, aleb, boolvar) → aleb.mapped?; (forward) from specification wbuf-base%inv-buf-in-vol: ⊦ awbuf-inv(avol, buffered(n)) → n < # avol; (forward) from specification awbuf-inv% ⊦ aleb.mapped? ↔ (∃ buf. aleb = mapped(buf)); (as)%⊦ abs⊕(mapped(buf), wbuf) = mapped(buf + subarray(wbuf.content, 0, wbuf.nbytes)); (s)% ⊦ mkwbuf(buf, m, m0).content = buf; (s)% ⊦ mkwbuf(buf, m, m0).nbytes = m0; (s)% ⊦ subarray(buf, n, 0) = mkbuf(0); (s)% ⊦ buf + mkbuf(0) = buf; (s)%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer] Used terms: n