| # buf = 2 * NODE_HEADER_SIZE + n0, # buf1 = # buf, subarray(buf1, NODE_HEADER_SIZE, NODE_HEADER_SIZE + n0) = subarray(buf, NODE_HEADER_SIZE, NODE_HEADER_SIZE + n0), is-aligned(n0, 2 * NODE_HEADER_SIZE), is-encoded(nodeheader(n0, true), subarray(buf1, 0, NODE_HEADER_SIZE)) ⊦ buf = mkbuf(0), copy(validtrailer, 0, buf1, NODE_HEADER_SIZE + n0, NODE_HEADER_SIZE) = subarray(buf1, 0, NODE_HEADER_SIZE) + subarray(buf1, NODE_HEADER_SIZE, n0) + validtrailer |
⊦ buf = buf0 ↔ # buf = # buf0 ∧ (∀ n. n < # buf → buf[n] = buf0[n])
# buf1 = # buf, # buf = 2 * NODE_HEADER_SIZE + n0, subarray(buf1, NODE_HEADER_SIZE, NODE_HEADER_SIZE + n0) = subarray(buf, NODE_HEADER_SIZE, NODE_HEADER_SIZE + n0), is-aligned(n0, 2 * NODE_HEADER_SIZE), is-encoded(nodeheader(n0, true), subarray(buf1, 0, NODE_HEADER_SIZE)) ⊦ buf = mkbuf(0), # copy(validtrailer, 0, buf1, NODE_HEADER_SIZE + n0, NODE_HEADER_SIZE) = #(subarray(buf1, 0, NODE_HEADER_SIZE) + subarray(buf1, NODE_HEADER_SIZE, n0) + validtrailer) ∧ (∀ n. n < # copy(validtrailer, 0, buf1, NODE_HEADER_SIZE + n0, NODE_HEADER_SIZE) → copy(validtrailer, 0, buf1, NODE_HEADER_SIZE + n0, NODE_HEADER_SIZE)[n] = (subarray(buf1, 0, NODE_HEADER_SIZE) + subarray(buf1, NODE_HEADER_SIZE, n0) + validtrailer)[n])
Used terms: subarray(buf1, 0, NODE_HEADER_SIZE) + subarray(buf1, NODE_HEADER_SIZE, n0) + validtrailer, copy(validtrailer, 0, buf1, NODE_HEADER_SIZE + n0, NODE_HEADER_SIZE)