| align↑(encoding-size(a), ENCODED_ELEM_ALIGNMENT) = n0 + encoding-size(a), is-encoded(a, subarray(buf, n, encoding-size(a))), n + align↑(encoding-size(a), ENCODED_ELEM_ALIGNMENT) ≤ # buf, n + encoding-size(a) ≤ # buf, encoding-size(a) ≤ align↑(encoding-size(a), ENCODED_ELEM_ALIGNMENT) ⊦ subarray(buf, n, align↑(encoding-size(a), ENCODED_ELEM_ALIGNMENT)) = subarray(buf, n, encoding-size(a)) + subarray(buf, n + encoding-size(a), n0) ∧ align↑(encoding-size(a), ENCODED_ELEM_ALIGNMENT) = size-aligned(a, ENCODED_ELEM_ALIGNMENT) |
align↑(encoding-size(a), ENCODED_ELEM_ALIGNMENT) = n0 + encoding-size(a), is-encoded(a, subarray(buf, n, encoding-size(a))), n + n0 + encoding-size(a) ≤ # buf, n + encoding-size(a) ≤ # buf ⊦ n0 + encoding-size(a) = size-aligned(a, ENCODED_ELEM_ALIGNMENT)
Used simplifier rules: append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]%⊦ m0 + n0 + n1 ≤ # buf → subarray(buf, m0, n0) + subarray(buf, n0 + m0, n1) = subarray(buf, m0, n0 + n1); (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%m ≠ 0 ⊦ n0 ≤ align↑(n0, m); (s)% ⊦ ENCODED_ELEM_ALIGNMENT ≠ 0; (s)