| # buf = # orphans1 * ENCODED_NAT_SIZE, (ENCODED_NAT_SIZE * m2 + ENCODED_NAT_SIZE) + m = # buf, orphans ∩ orphans0 = ∅, is-encoded(orphans, subarray(buf, m, ENCODED_NAT_SIZE * m2 + ENCODED_NAT_SIZE)), is-encoded(orphans0, subarray(buf, 0, m)), is-encoded(orphans1, buf), is-encoded(n, subarray(buf, m, ENCODED_NAT_SIZE)), m + ENCODED_NAT_SIZE ≤ # buf ⊦ is-encoded(orphans0 ++ n, subarray(buf, 0, m + ENCODED_NAT_SIZE)) ∧ (∃ orphans. is-encoded(orphans, subarray(buf, m + ENCODED_NAT_SIZE, ENCODED_NAT_SIZE * m2)) ∧ orphans ∩ (orphans0 ++ n) = ∅) |
⊦ n + m ≤ # buf → (∃ buf0, buf1, buf2. buf = buf0 + buf1 + buf2 ∧ # buf0 = n ∧ # buf1 = m)
# buf = # orphans1 * ENCODED_NAT_SIZE, (ENCODED_NAT_SIZE * m2 + ENCODED_NAT_SIZE) + m = # buf, orphans ∩ orphans0 = ∅, is-encoded(n, subarray(buf, m, ENCODED_NAT_SIZE)), is-encoded(orphans1, buf), is-encoded(orphans0, subarray(buf, 0, m)), is-encoded(orphans, subarray(buf, m, ENCODED_NAT_SIZE * m2 + ENCODED_NAT_SIZE)), m + ENCODED_NAT_SIZE ≤ # buf, m + ENCODED_NAT_SIZE ≤ # buf → (∃ buf0, buf1, buf2. buf = buf0 + buf1 + buf2 ∧ # buf0 = m ∧ # buf1 = ENCODED_NAT_SIZE) ⊦ is-encoded(orphans0 ++ n, subarray(buf, 0, m + ENCODED_NAT_SIZE)) ∧ (∃ orphans. is-encoded(orphans, subarray(buf, m + ENCODED_NAT_SIZE, ENCODED_NAT_SIZE * m2)) ∧ orphans ∩ (orphans0 ++ n) = ∅)
Used terms: m, ENCODED_NAT_SIZE, buf