| # 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) |
# 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))) ⊦ (∃ buf, buf2. buf1 + buf0 + validtrailer = buf + buf2 ∧ ( abs-padding(buf) ∧ abs-nodes(buf2, m + # buf, a ', ladr ', false) ∨ ladr.off = m ∧ ladr.size = # buf ∧ abs-node(buf, a) ∧ abs-nodes(buf2, ladr.off + # buf, [], [], false))) ↔ ladr = @(m, 2 * NODE_HEADER_SIZE + a.alignedsize)
Used simplifier rules: ⊦ ladr '.tail = []; (s)% ⊦ ladr '.head = ladr; (s)% ⊦ ladr ' ≠ []; (s)%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ x + [] = x; (s)