| # 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), abs-padding(copy(validtrailer, 0, buf1, NODE_HEADER_SIZE + n0, NODE_HEADER_SIZE)) |
⊦ abs-padding(buf) ↔ (∃ buf0, buf1. buf = buf0 + buf1 + validtrailer ∧ is-encoded(nodeheader(# buf1, true), buf0) ∧ is-aligned(# buf1, 2 * NODE_HEADER_SIZE))
# 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), ∃ buf0, buf2. copy(validtrailer, 0, buf1, NODE_HEADER_SIZE + n0, NODE_HEADER_SIZE) = buf0 + buf2 + validtrailer ∧ is-encoded(nodeheader(# buf2, true), buf0) ∧ is-aligned(# buf2, 2 * NODE_HEADER_SIZE)
Used terms: copy(validtrailer, 0, buf1, NODE_HEADER_SIZE + n0, NODE_HEADER_SIZE)