| # buf = NODE_HEADER_SIZE, is-encoded(nodeheader(node-size-headerless(nd), false), buf), is-encoded(nd, subarray(buf0, 0, node-size-headerless(nd))), range=(buf + buf0, NODE_HEADER_SIZE + align↑(node-size-headerless(nd), 2 * NODE_HEADER_SIZE), validtrailer, 0, NODE_HEADER_SIZE), NODE_HEADER_SIZE + align↑(node-size-headerless(nd), 2 * NODE_HEADER_SIZE) ≤ # buf0, node-size-headerless(nd) ≤ # buf0 ⊦ ∃ buf2, buf3. buf + subarray(buf0, 0, NODE_HEADER_SIZE + align↑(node-size-headerless(nd), 2 * NODE_HEADER_SIZE)) = buf2 + buf3 + validtrailer ∧ is-encoded(nodeheader(node-size-headerless(nd), false), buf2) ∧ is-encoded(nd, subarray(buf3, 0, node-size-headerless(nd))) ∧ # buf3 = align↑(node-size-headerless(nd), 2 * NODE_HEADER_SIZE) |
⊦ n ≤ # buf → (∃ buf0, buf1. buf = buf0 + buf1 ∧ # buf0 = n)
# buf = NODE_HEADER_SIZE, is-encoded(nd, subarray(buf0, 0, node-size-headerless(nd))), is-encoded(nodeheader(node-size-headerless(nd), false), buf), range=(buf + buf0, NODE_HEADER_SIZE + align↑(node-size-headerless(nd), 2 * NODE_HEADER_SIZE), validtrailer, 0, NODE_HEADER_SIZE), node-size-headerless(nd) ≤ # buf0, NODE_HEADER_SIZE + align↑(node-size-headerless(nd), 2 * NODE_HEADER_SIZE) ≤ # buf0, align↑(node-size-headerless(nd), 2 * NODE_HEADER_SIZE) ≤ # buf0 → (∃ buf2, buf1. buf0 = buf2 + buf1 ∧ # buf2 = align↑(node-size-headerless(nd), 2 * NODE_HEADER_SIZE)) ⊦ ∃ buf2, buf3. buf + subarray(buf0, 0, NODE_HEADER_SIZE + align↑(node-size-headerless(nd), 2 * NODE_HEADER_SIZE)) = buf2 + buf3 + validtrailer ∧ is-encoded(nodeheader(node-size-headerless(nd), false), buf2) ∧ is-encoded(nd, subarray(buf3, 0, node-size-headerless(nd))) ∧ # buf3 = align↑(node-size-headerless(nd), 2 * NODE_HEADER_SIZE)
Used terms: align↑(node-size-headerless(nd), 2 * NODE_HEADER_SIZE), buf0