| lebs(avol1, n, m0) = lebs(avol0, n, m0), n + m0 < # avol0, n + m0 < # avol1, avol0 ⊆ avol1, n ≤ n + m0 ∧ ¬ n + m0 < n + m0 ∧ n + m0 < # avol0 → avol0[n + m0].mapped? ∧ # avol0[n + m0].data = LEB_SIZE ⊦ (avol1[n + m0].mapped? ⊃ avol1[n + m0].data + mkempbuf(LEB_SIZE - # avol1[n + m0].data);mkempbuf(LEB_SIZE)) = (avol0[n + m0].mapped? ⊃ avol0[n + m0].data + mkempbuf(LEB_SIZE - # avol0[n + m0].data);mkempbuf(LEB_SIZE)) |
# buf = LEB_SIZE, avol0[n + m0] = mapped(buf), lebs(avol1, n, m0) = lebs(avol0, n, m0), n + m0 < # avol0, n + m0 < # avol1, avol0 ⊆ avol1 ⊦ avol1[n + m0].data + mkempbuf(LEB_SIZE - # avol1[n + m0].data) = buf
Used simplifier rules: append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]% ⊦ buf + mkempbuf(0) = buf; (s)% ⊦ m - m = 0; (s)% ⊦ mapped(buf).data = buf; (s)% ⊦ aleb.mapped? ↔ (∃ buf. aleb = mapped(buf)); (as)%n < # avol0 ⊦ avol0 ⊆ avol1 ∧ avol0[n].mapped? → avol1[n].mapped?; (s)% ⊦ m < n → (n ≤ m ↔ false); (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ ¬ n < n; (s)% ⊦ m + n < m + n0 ↔ n < n0; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m ≤ m + n; (s)