| # buf1 = # buf, # buf = n0 + n + 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 + align↑(encoding-size(a), ENCODED_ELEM_ALIGNMENT) ≤ # buf, n + encoding-size(a) ≤ # buf ⊦ is-encoded-aligned(a, subarray(buf1, n, align↑(encoding-size(a), ENCODED_ELEM_ALIGNMENT))) |
⊦ is-encoded-aligned(a, buf) ↔ (∃ buf0, buf1. buf = buf0 + buf1 ∧ is-encoded(a, buf0) ∧ # buf = size-aligned(a, ENCODED_ELEM_ALIGNMENT))
# buf = n0 + n + encoding-size(a), # buf1 = # buf, subarray(buf1, 0, n) = subarray(buf, 0, n), subarray(buf1, n + encoding-size(a), n0) = subarray(buf, n + encoding-size(a), n0), is-encoded(a, subarray(buf1, n, encoding-size(a))), n + encoding-size(a) ≤ # buf, n + align↑(encoding-size(a), ENCODED_ELEM_ALIGNMENT) ≤ # buf ⊦ ∃ buf0, buf2. subarray(buf1, n, align↑(encoding-size(a), ENCODED_ELEM_ALIGNMENT)) = buf0 + buf2 ∧ is-encoded(a, buf0) ∧ # subarray(buf1, n, align↑(encoding-size(a), ENCODED_ELEM_ALIGNMENT)) = size-aligned(a, ENCODED_ELEM_ALIGNMENT)
Used terms: subarray(buf1, n, align↑(encoding-size(a), ENCODED_ELEM_ALIGNMENT)), a