| # avol0 = # avol, # lpt0 = # avol, # buf = EB_PAGE_SIZE, avol0[m] = mapped(buf0), n < # avol, m < # avol, awbuf-inv(avol, buffered(m)), ebm-vol-inv(avol0), synced(avol), wbuf-cons(mkwbuf(buf, m2, m1), mapped(buf0), false), n < # avol → (n ≠ m → avol[n] = avol0[n]) ∧ (n = m → avol[m] = mapped(buf0 + subarray(buf, 0, m1))), ∀ n0. n0 < # avol → (n0 ≠ m → avol[n0] = avol0[n0]) ∧ (n0 = m → avol[m] = mapped(buf0 + subarray(buf, 0, m1))) ⊦ avol[n] = avol0[n] |
# buf = EB_PAGE_SIZE, # lpt0 = # avol, # avol0 = # avol, avol0[m] = mapped(buf0), avol[m] = mapped(buf0 + subarray(buf, 0, m1)), m < # avol, awbuf-inv(avol, buffered(m)), ebm-vol-inv(avol0), synced(avol), wbuf-cons(mkwbuf(buf, m2, m1), mapped(buf0), false), ∀ n0. n0 < # avol → n0 ≠ m → avol[n0] = avol0[n0] ⊦ m1 = 0
Used simplifier rules: append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]% ⊦ # subarray(buf, m, n) = n; (s)% ⊦ buf + buf0 = buf ↔ # buf0 = 0; (s)% ⊦ mapped(buf) = mapped(buf0) ↔ buf = buf0; (s)%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic