| # avol0 = # avol1, avol1[n] = mapped(buf1), n < # avol0, ∀ n0. n0 < # avol0 → (buffered(n0) ≠ buffered(n) → avol0[n0] = avol1[n0]) ∧ (¬ false ∧ buffered(n0) = buffered(n) → avol0[n0] = abs⊕(avol1[n0], mkwbuf(buf, m0, m1))) ∧ ( false ∧ buffered(n0) = buffered(n) → mkwbuf(buf, m0, m1).offset = # avol1[n0].data ∧ avol0[n0] = abs⊕(avol1[n0], mkwbuf(buf, m0, m1)) ∨ mkwbuf(buf, m0, m1).offset < # avol1[n0].data ∧ mkwbuf(buf, m0, m1).offset + mkwbuf(buf, m0, m1).nbytes < # avol1[n0].data ∧ avol0[n0] = avol1[n0] ∧ subarray(mkwbuf(buf, m0, m1).content, 0, mkwbuf(buf, m0, m1).nbytes) = subarray(avol1[n0].data, mkwbuf(buf, m0, m1).offset, mkwbuf(buf, m0, m1).nbytes)) ⊦ avol0[n] = mapped(buf1 + subarray(buf, 0, m1)) |
# avol0 = # avol1, avol1[n] = mapped(buf1), n < # avol1, ∀ n0. n0 < # avol1 → avol0[n0] = avol1[n0] ∧ n0 ≠ n ⊦ avol0[n] = mapped(buf1 + subarray(buf, 0, m1))
Used simplifier rules: ⊦ mkwbuf(buf, m, m0).nbytes = m0; (s)% ⊦ mkwbuf(buf, m, m0).content = buf; (s)%⊦ abs⊕(mapped(buf), wbuf) = mapped(buf + subarray(wbuf.content, 0, wbuf.nbytes)); (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% ⊦ buffered(m) = buffered(m0) ↔ m = m0; (s)