| # avol0 = # avol2, # avol1 = # avol2, # lpt1 = # avol2, # buf = EB_PAGE_SIZE, avol2[n] = mapped(buf2), avol1[n] = mapped(buf1), mapped(buf1) = avol0[n], m3 < EB_PAGE_SIZE, n < # avol2, ebm-vol-inv(avol0), is-aligned(m2, EB_PAGE_SIZE), m2 ≤ # buf1, # buf2 ≤ LEB_SIZE, ¬ rofs0 → # buf1 = m2, ¬ rofs0 → buf2 = buf1 + subarray(buf, 0, m3), rofs0 → m2 = # buf1 ∧ buf2 = buf1 + subarray(buf, 0, m3) ∨ m2 < # buf1 ∧ m2 + m3 < # buf1 ∧ buf2 = buf1 ∧ subarray(buf, 0, m3) = subarray(buf1, m2, m3) ⊦ buf1 = buf2.align↓ |
# buf = EB_PAGE_SIZE, # lpt1 = # avol2, # avol1 = # avol2, # avol0 = # avol2, avol1[n] = mapped(buf1), avol2[n] = mapped(buf2), mapped(buf1) = avol0[n], n < # avol2, m3 < EB_PAGE_SIZE, ebm-vol-inv(avol0), is-aligned(m2, EB_PAGE_SIZE), # buf2 ≤ LEB_SIZE, m2 ≤ # buf1, ¬ rofs0 → buf2 = buf1 + subarray(buf, 0, m3), ¬ rofs0 → # buf1 = m2, m2 = # buf1 ∧ buf2 = buf1 + subarray(buf, 0, m3) ∨ m2 < # buf1 ∧ m2 + m3 < # buf1 ∧ buf2 = buf1 ∧ subarray(buf, 0, m3) = subarray(buf1, m2, m3) ⊦ buf1 = buf2.align↓
Used simplifier rules: ⊦ (buf0 + buf1).align↓ = buf0 ↔ is-aligned(# buf0, EB_PAGE_SIZE) ∧ # buf1 < EB_PAGE_SIZE; (s)% ⊦ # subarray(buf, m, n) = n; (s)%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]%# buf = n ⊦ subarray(buf, 0, n) = buf; (s)