| # buf2 = EB_PAGE_SIZE, # lpt0 = # avol1, # avol0 = # avol1, # buf3 = n5 + n1, (n0 + # buf4) + n3 + n2 = LEB_SIZE, avol1[m2] = mapped(buf4 + subarray(buf2, 0, n2 + n0)), avol0[m2] = mapped(buf4), n0 < EB_PAGE_SIZE, n2 + n0 < EB_PAGE_SIZE, m2 < # avol1, n1 < n2, awbuf-inv(avol1, buffered(m2)), ebm-vol-inv(avol0), is-aligned(# buf4, EB_PAGE_SIZE), n0 + n1 ≤ EB_PAGE_SIZE, n1 ≤ n2 + n3, # buf4 ≤ LEB_SIZE ⊦ EB_PAGE_SIZE = 1, n0 = 0, subarray(buf2, n0, n1) = subarray(subarray(buf2, 0, n2 + n0), n0, n1) |
⊦ n0 + n1 ≤ # buf ∧ m0 + m1 ≤ n1 → subarray(subarray(buf, n0, n1), m0, m1) = subarray(buf, n0 + m0, m1)
Used simplifier rules: ⊦ n + 0 = n; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ subarray(buf, n0, n1) = subarray(buf, n0, n2) ↔ n1 = n2; (ss)%# buf = n ⊦ subarray(buf, 0, n) = buf; (s)% ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s)% ⊦ m < n → m ≤ n; (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic%transitivity: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification oelem[nat-set]% ⊦ m < n → n ≠ 0; (s)% ⊦ m +1 = m + 1; (s)% ⊦ m < n → ¬ n < m; (s) Used terms: n1, n0, n2 + n0, 0, buf2