| lax.head = @(m0, m1), is-encoded(nodeheader(m, boolvar0), subarray(buf1 + buf0, 0, NODE_HEADER_SIZE)), 2 * NODE_HEADER_SIZE + align↑(m, 2 * NODE_HEADER_SIZE) ≤ # buf1 + # buf0, abs-padding(buf1) ∧ abs-nodes(buf0, n + # buf1, nd ' + x0, lax, weak) ∨ lax ≠ [] ∧ m0 = n ∧ m1 = # buf1 ∧ abs-node(buf1, nd) ∧ abs-nodes(buf0, n + # buf1, x0, lax.tail, weak) ⊦ (NODE_HEADER_SIZE + align↑(m, 2 * NODE_HEADER_SIZE)) + NODE_HEADER_SIZE ≤ #(buf1 + buf0) ∧ 0 + NODE_HEADER_SIZE ≤ # validtrailer ∧ subarray(buf1 + buf0, NODE_HEADER_SIZE + align↑(m, 2 * NODE_HEADER_SIZE), NODE_HEADER_SIZE) = subarray(validtrailer, 0, NODE_HEADER_SIZE) |
lax.head = @(m0, m1), is-encoded(nodeheader(m, boolvar0), subarray(buf1 + buf0, 0, NODE_HEADER_SIZE)), 2 * NODE_HEADER_SIZE + align↑(m, 2 * NODE_HEADER_SIZE) ≤ # buf1 + # buf0, abs-padding(buf1) ∧ abs-nodes(buf0, n + # buf1, nd ' + x0, lax, weak) ∨ lax ≠ [] ∧ m0 = n ∧ m1 = # buf1 ∧ abs-node(buf1, nd) ∧ abs-nodes(buf0, n + # buf1, x0, lax.tail, weak) ⊦ subarray(buf1 + buf0, NODE_HEADER_SIZE + align↑(m, 2 * NODE_HEADER_SIZE), NODE_HEADER_SIZE) = validtrailer
Used simplifier rules: # buf = n ⊦ subarray(buf, 0, n) = buf; (s)% ⊦ m ≤ m; (s)% ⊦ # validtrailer = NODE_HEADER_SIZE; (s)% ⊦ n + 0 = n; (s)%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]% ⊦ #(buf + buf0) = # buf + # buf0; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m + m = 2 * m; (s)