| # buf1 = # buf, # buf = n0 + n + ENCODED_ELEM_SIZE, subarray(buf1, n + ENCODED_ELEM_SIZE, n0) = subarray(buf, n + ENCODED_ELEM_SIZE, n0), subarray(buf1, 0, n) = subarray(buf, 0, n), subarray(buf1, n, ENCODED_ELEM_SIZE) = mkempbuf(ENCODED_ELEM_SIZE), n1 < n + ENCODED_ELEM_SIZE, n1 < # buf, n < # buf, is-encoded(a, subarray(buf1, n, ENCODED_ELEM_SIZE)), n + ENCODED_ELEM_SIZE ≤ # buf, n ≤ n1 ⊦ n0 + ENCODED_ELEM_SIZE = 0, buf1[n1] = empty |
⊦ buf = buf0 ↔ # buf = # buf0 ∧ (∀ n. n < # buf → buf[n] = buf0[n])
# subarray(buf1, n, ENCODED_ELEM_SIZE) = # mkempbuf(ENCODED_ELEM_SIZE), # buf = n0 + n + ENCODED_ELEM_SIZE, # buf1 = # buf, subarray(buf1, 0, n) = subarray(buf, 0, n), subarray(buf1, n + ENCODED_ELEM_SIZE, n0) = subarray(buf, n + ENCODED_ELEM_SIZE, n0), n < # buf, n1 < # buf, n1 < n + ENCODED_ELEM_SIZE, is-encoded(a, subarray(buf1, n, ENCODED_ELEM_SIZE)), n ≤ n1, n + ENCODED_ELEM_SIZE ≤ # buf, ∀ n0. n0 < # subarray(buf1, n, ENCODED_ELEM_SIZE) → subarray(buf1, n, ENCODED_ELEM_SIZE)[n0] = mkempbuf(ENCODED_ELEM_SIZE)[n0] ⊦ n0 + ENCODED_ELEM_SIZE = 0, buf1[n1] = empty
Used terms: mkempbuf(ENCODED_ELEM_SIZE), subarray(buf1, n, ENCODED_ELEM_SIZE)