| buf = mkbuf(0) ∨ buf = buf0 + buf1 ∧ abs-padding(buf0) ∧ abs-nodes(buf1, m + # buf0, [], [], false), ∀ buf0, m, x, lax. # buf0 < # buf → abs-nodes(buf0, m, x, lax, false) → is-aligned(# buf0, 2 * NODE_HEADER_SIZE) ⊦ is-aligned(# buf, 2 * NODE_HEADER_SIZE) |
buf = buf0 + buf1, abs-nodes(buf1, m + # buf0, [], [], false), abs-padding(buf0), ∀ buf0, m, x, lax. # buf0 < # buf → abs-nodes(buf0, m, x, lax, false) → is-aligned(# buf0, 2 * NODE_HEADER_SIZE) ⊦ is-aligned(# buf, 2 * NODE_HEADER_SIZE)
Used simplifier rules: ⊦ # mkbuf(n) = n; (s)% ⊦ 2 * m = 0 ↔ m = 0; (s)% ⊦ NODE_HEADER_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%n ≠ 0 ⊦ is-aligned(0, n); (s)