| # buf2 = EB_PAGE_SIZE, # buf0 = EB_PAGE_SIZE, # buf = 0, emptypage = buf0 + buf2 + buf3, is-encoded(nx, buf3), is-encoded(rnode(m0), buf2), is-encoded(rnode(m), buf0), ∀ buf4. ¬ is-aligned(# buf4, EB_PAGE_SIZE) ∨ ¬(∃ buf0, buf1. buf4 + emptypage = buf0 + buf1 ∧ is-encoded(rnode(m0), buf0) ∧ is-encoded(nx, buf1)) ⊦ |
⊦ buf = buf0 ↔ # buf = # buf0 ∧ (∀ n. n < # buf → buf[n] = buf0[n])
Used simplifier rules: is-encoded-size: ⊦ is-encoded(nx, buf) → # buf = # nx * EB_PAGE_SIZE;% ⊦ # emptypage = EB_PAGE_SIZE; (s)% ⊦ #(buf + buf0) = # buf + # buf0; (s)%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ m < n → (n ≤ m ↔ false); (s)%n < # emptypage ⊦ (emptypage)[n] = empty; (s)% ⊦ m + m = 2 * m; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ m * n + m0 * n = n ↔ m + m0 = 1 ∨ n = 0; (s)%n < n0 ⊦ (* n) ≠ m0 + (* n0); (s)% ⊦ EB_PAGE_SIZE ≠ 0; (s)%mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult%mult-c: ⊦ m * n = n * m; from specification nat-mult Used terms: buf0 + buf2 + buf3, emptypage