| abs-failed(buf), is-aligned(n, NODE_HEADER_SIZE), n ≤ # buf, ∀ buf0, m, x, lax, n. # buf0 < # buf → abs-nodes(buf0, m, x, lax, true) ∧ is-aligned(n, NODE_HEADER_SIZE) ∧ n ≤ # buf0 → (∃ x0, lax0. x0 ⊑ x ∧ lax0 ⊑ lax ∧ abs-nodes(subarray(buf0, 0, n), m, x0, lax0, true)) ⊦ abs-nodes(subarray(buf, 0, n), m, [], [], true) |
⊦ abs-failed(buf) ↔ # buf ≥ NODE_HEADER_SIZE ∧ is-aligned(# buf, NODE_HEADER_SIZE) ∧ (∃ buf0, buf1. buf = buf0 + buf1 ∧ # buf0 = NODE_HEADER_SIZE ∧ (is-garbage-header(buf0) ∨ (∃ ndhd. is-encoded(ndhd, buf0) ∧ # buf1 ≤ align↑(ndhd.size, 2 * NODE_HEADER_SIZE))))
is-aligned(n, NODE_HEADER_SIZE), is-aligned(# buf, NODE_HEADER_SIZE), n ≤ # buf, # buf ≥ NODE_HEADER_SIZE, ∃ buf0, buf1. buf = buf0 + buf1 ∧ # buf0 = NODE_HEADER_SIZE ∧ (is-garbage-header(buf0) ∨ (∃ ndhd. is-encoded(ndhd, buf0) ∧ # buf1 ≤ align↑(ndhd.size, 2 * NODE_HEADER_SIZE))), ∀ buf0, m, x, lax, n. # buf0 < # buf → abs-nodes(buf0, m, x, lax, true) ∧ is-aligned(n, NODE_HEADER_SIZE) ∧ n ≤ # buf0 → (∃ x0, lax0. x0 ⊑ x ∧ lax0 ⊑ lax ∧ abs-nodes(subarray(buf0, 0, n), m, x0, lax0, true)) ⊦ abs-nodes(subarray(buf, 0, n), m, [], [], true)
Used terms: buf