| # buf0 = a.alignedsize, # buf1 = NODE_HEADER_SIZE, is-encoded(nodeheader(node-size-headerless(a), false), buf1), is-encoded(a, subarray(buf0, 0, node-size-headerless(a))) ⊦ abs-nodes(buf1 + buf0 + validtrailer, m, a ' + [], ladr ', false) ↔ ladr = @(m, 2 * NODE_HEADER_SIZE + a.alignedsize) |
⊦ abs-nodes(buf, m, a ' + x, lax, weak) ↔ (∃ buf0, buf1. buf = buf0 + buf1 ∧ ( abs-padding(buf0) ∧ abs-nodes(buf1, m + # buf0, a ' + x, lax, weak) ∨ lax ≠ [] ∧ lax.head.off = m ∧ lax.head.size = # buf0 ∧ abs-node(buf0, a) ∧ abs-nodes(buf1, m + # buf0, x, lax.tail, weak)))
# buf1 = NODE_HEADER_SIZE, # buf0 = a.alignedsize, is-encoded(a, subarray(buf0, 0, node-size-headerless(a))), is-encoded(nodeheader(node-size-headerless(a), false), buf1) ⊦ (∃ buf3, buf2. buf1 + buf0 + validtrailer = buf3 + buf2 ∧ ( abs-padding(buf3) ∧ abs-nodes(buf2, m + # buf3, a ' + [], ladr ', false) ∨ ladr ' ≠ [] ∧ ladr '.head.off = m ∧ ladr '.head.size = # buf3 ∧ abs-node(buf3, a) ∧ abs-nodes(buf2, m + # buf3, [], ladr '.tail, false))) ↔ ladr = @(m, 2 * NODE_HEADER_SIZE + a.alignedsize)
Used terms: false, ladr ', [], a, m, buf1 + buf0 + validtrailer