| # buf0 = # buf, # orphans1 = m + 1, subarray(buf0, 0, m0) = subarray(buf, 0, m0), subarray(buf0, m0 + ENCODED_NAT_SIZE, # buf - m0 + ENCODED_NAT_SIZE) = subarray(buf, m0 + ENCODED_NAT_SIZE, # buf - m0 + ENCODED_NAT_SIZE), is-aligned(# buf, EB_PAGE_SIZE), is-encoded(orphans2 \ orphans1, subarray(buf, 0, m0)), is-encoded(n, subarray(buf0, m0, ENCODED_NAT_SIZE)), n ∈ orphans1, n ∈ orphans2, # buf ≤ LEB_SIZE, # orphans2 * ENCODED_NAT_SIZE ≤ LEB_SIZE, m0 + # orphans1 * ENCODED_NAT_SIZE ≤ # buf, m0 + # orphans1 * ENCODED_NAT_SIZE ≤ LEB_SIZE, m0 + ENCODED_NAT_SIZE ≤ # buf, m0 + ENCODED_NAT_SIZE ≤ LEB_SIZE, orphans1 ⊆ orphans2 ⊦ # orphans2 = 0, # orphans1 = 0, orphans1 = ∅, orphans2 = ∅, m0 + ENCODED_NAT_SIZE + m * ENCODED_NAT_SIZE ≤ # buf ∧ is-encoded((orphans2 \ orphans1) ++ n, subarray(buf0, 0, m0 + ENCODED_NAT_SIZE)) |
# buf0 = # buf, # orphans1 = m + 1, subarray(buf0, 0, m0) = subarray(buf, 0, m0), subarray(buf0, m0 + ENCODED_NAT_SIZE, # buf - m0 + ENCODED_NAT_SIZE) = subarray(buf, m0 + ENCODED_NAT_SIZE, # buf - m0 + ENCODED_NAT_SIZE), is-aligned(# buf, EB_PAGE_SIZE), is-encoded(orphans2 \ orphans1, subarray(buf, 0, m0)), is-encoded(n, subarray(buf0, m0, ENCODED_NAT_SIZE)), n ∈ orphans1, n ∈ orphans2, m0 + ENCODED_NAT_SIZE ≤ # buf, m0 + ENCODED_NAT_SIZE ≤ LEB_SIZE, # buf ≤ LEB_SIZE, # orphans2 * ENCODED_NAT_SIZE ≤ LEB_SIZE, m0 + ENCODED_NAT_SIZE * m + ENCODED_NAT_SIZE ≤ # buf, m0 + ENCODED_NAT_SIZE * m + ENCODED_NAT_SIZE ≤ LEB_SIZE, orphans1 ⊆ orphans2 ⊦ # orphans2 = 0, orphans1 = ∅, orphans2 = ∅, is-encoded((orphans2 \ orphans1) ++ n, subarray(buf0, 0, m0 + ENCODED_NAT_SIZE))
Used simplifier rules: mult-c: ⊦ m * n = n * m; from specification nat-mult%mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult% ⊦ m * (n + 1) = m * n + m; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m + 1 ≠ 0; (s)%let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat