| # buf = (2 * NODE_HEADER_SIZE + a.alignedsize) + x.flashsize, abs-nodes(buf, m, a ' + x, @(m0, m1) ' + lax0, false), ∀ buf0, a, x, m, m0, m1, lax0. # buf0 < # buf → # buf0 = (2 * NODE_HEADER_SIZE + a.alignedsize) + x.flashsize ∧ abs-nodes(buf0, m, a ' + x, @(m0, m1) ' + lax0, false) → (∃ buf2, buf1. buf0 = buf2 + buf1 ∧ m0 = m ∧ m1 = # buf2 ∧ abs-node(buf2, a) ∧ abs-nodes(buf1, m + # buf2, x, lax0, false)) ⊦ ∃ buf0, buf1. buf = buf0 + buf1 ∧ m0 = m ∧ m1 = # buf0 ∧ abs-node(buf0, a) ∧ abs-nodes(buf1, m + # buf0, x, lax0, false) |
⊦ 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)))
# buf = (2 * NODE_HEADER_SIZE + a.alignedsize) + x.flashsize, ∃ buf0, buf1. buf = buf0 + buf1 ∧ ( abs-padding(buf0) ∧ abs-nodes(buf1, m + # buf0, a ' + x, @(m0, m1) ' + lax0, false) ∨ @(m0, m1) ' + lax0 ≠ [] ∧ (@(m0, m1) ' + lax0).head.off = m ∧ (@(m0, m1) ' + lax0).head.size = # buf0 ∧ abs-node(buf0, a) ∧ abs-nodes(buf1, m + # buf0, x, (@(m0, m1) ' + lax0).tail, false)), ∀ buf0, a, x, m, m0, m1, lax0. # buf0 < # buf → # buf0 = (2 * NODE_HEADER_SIZE + a.alignedsize) + x.flashsize ∧ abs-nodes(buf0, m, a ' + x, @(m0, m1) ' + lax0, false) → (∃ buf2, buf1. buf0 = buf2 + buf1 ∧ m0 = m ∧ m1 = # buf2 ∧ abs-node(buf2, a) ∧ abs-nodes(buf1, m + # buf2, x, lax0, false)) ⊦ ∃ buf0, buf1. buf = buf0 + buf1 ∧ m0 = m ∧ m1 = # buf0 ∧ abs-node(buf0, a) ∧ abs-nodes(buf1, m + # buf0, x, lax0, false)
Used terms: false, @(m0, m1) ' + lax0, x, a, m, buf