| buf0 = mkbuf(align↑(# orphans2 * ENCODED_NAT_SIZE, m2)), err = ESUCCESS, err0 = ESUCCESS, m1 = LEB_SIZE, m2 = EB_PAGE_SIZE, m4 = 0, orphans = orphans1, orphans0 = orphans2, is-aligned(# buf, m2), n ∈ orphans, # buf ≤ m1, orphans ⊆ orphans2, err = ESUCCESS → m0 + # orphans * ENCODED_NAT_SIZE ≤ # buf ∧ is-encoded(orphans2 \ orphans, subarray(buf, 0, m0)), err = ESUCCESS ∨ ⌊err⌋ ⊦ ⟪encode_nat#(n, m0; buf, m; err); m0 := m0 + ENCODED_NAT_SIZE; orphans := orphans -- n⟫ ( ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ is-aligned(# buf, m2) ∧ orphans ⊆ orphans2 ∧ # buf ≤ m1 ∧ (err = ESUCCESS → m0 + # orphans * ENCODED_NAT_SIZE ≤ # buf ∧ is-encoded(orphans2 \ orphans, subarray(buf, 0, m0)))) ∧ # orphans < # orphans1), orphans = ∅, # orphans2 * ENCODED_NAT_SIZE > m1 |
# orphans1 ≠ 0, # orphans2 ≠ 0, orphans1 ≠ ∅, orphans2 ≠ ∅, is-aligned(# buf, EB_PAGE_SIZE), is-encoded(orphans2 \ orphans1, subarray(buf, 0, m0)), 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, orphans1 ⊆ orphans2 ⊦ ⟪encode_nat#(n, m0; buf, m; err); m0 := m0 + ENCODED_NAT_SIZE; orphans := orphans1 -- n⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ is-aligned(# buf, EB_PAGE_SIZE) ∧ orphans ⊆ orphans2 ∧ # buf ≤ LEB_SIZE ∧ (err = ESUCCESS → m0 + # orphans * ENCODED_NAT_SIZE ≤ # buf ∧ is-encoded(orphans2 \ orphans, subarray(buf, 0, m0))) ∧ # orphans < # orphans1)
Used simplifier rules: size-zero-01: ⊦ ns ≠ ∅ → # ns ≠ 0; (forward) from specification set-basic[nat-set]%ne-01: ⊦ n ∈ ns → ns ≠ ∅; (forward) from specification set-basic[nat-set]%sub-in: ⊦ n ∈ ns ∧ ns ⊆ ns0 → n ∈ ns0; (forward) from specification set-basic[nat-set]%let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ m > n ↔ n < m; (s)