| # buf1 = # buf, # buf = n0 + n + encoding-size(a), align↑(encoding-size(a), ENCODED_ELEM_ALIGNMENT) = n1 + encoding-size(a), subarray(buf1, n + encoding-size(a), n0) = subarray(buf, n + encoding-size(a), n0), subarray(buf1, 0, n) = subarray(buf, 0, n), is-encoded(a, subarray(buf1, n, encoding-size(a))), n + n1 + encoding-size(a) ≤ # buf, n + encoding-size(a) ≤ # buf ⊦ subarray(buf1, n, n1 + encoding-size(a)) = subarray(buf1, n, encoding-size(a)) + subarray(buf1, n + encoding-size(a), n1) |
⊦ m0 + n0 + n1 ≤ # buf → subarray(buf, m0, n0) + subarray(buf, n0 + m0, n1) = subarray(buf, m0, n0 + n1)
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat% ⊦ m < n → n ≠ 0; (s)% ⊦ m ≤ n → (n < m ↔ false); (s)%# buf = n ⊦ subarray(buf, 0, n) = buf; (s)%c: ⊦ m + n = n + m; from specification nat-basic Used terms: n1, encoding-size(a), n, buf1