| buf = mkbuf(align↑(# orphans * ENCODED_NAT_SIZE, m2)), err = ESUCCESS, m0 = 0, m1 = LEB_SIZE, m2 = EB_PAGE_SIZE, orphans0 = orphans ⊦ ⟪while err = ESUCCESS ∧ orphans ≠ ∅ do {/* (prepost-encode-orphans : invariant (err = ESUCCESS ∨ ⌊err⌋ ) ∧ is-aligned(# buf, m2) ∧ orphans ⊆ orphans` ∧ # buf ≤ m1 ∧ (err = ESUCCESS → m0 + # orphans * ENCODED_NAT_SIZE ≤ # buf ∧ is-encoded(orphans` \ orphans, subarray(buf, 0, m0))) wfbound # orphans) */; choose n with n ∈ orphans in {encode_nat#(n, m0; buf, m; err); m0 := m0 + ENCODED_NAT_SIZE; orphans := orphans -- n}}⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → is-encoded-pad(orphans0, # orphans0, buf) ∧ # buf ≤ LEB_SIZE)), # orphans * ENCODED_NAT_SIZE > m1 |
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), # buf ≤ m1, orphans ⊆ orphans2, err = ESUCCESS → m0 + # orphans * ENCODED_NAT_SIZE ≤ # buf ∧ is-encoded(orphans2 \ orphans, subarray(buf, 0, m0)), err = ESUCCESS ∨ ⌊err⌋ ⊦ ⟪choose n with n ∈ orphans in {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
buf0 = mkbuf(align↑(# orphans2 * ENCODED_NAT_SIZE, m2)), err0 = ESUCCESS, m1 = LEB_SIZE, m2 = EB_PAGE_SIZE, m4 = 0, orphans0 = orphans2, is-aligned(# buf, m2), # buf ≤ m1, orphans ⊆ orphans2, err = ESUCCESS → m0 + # orphans * ENCODED_NAT_SIZE ≤ # buf ∧ is-encoded(orphans2 \ orphans, subarray(buf, 0, m0)), err = ESUCCESS ∨ ⌊err⌋ ⊦ # orphans2 * ENCODED_NAT_SIZE > m1, (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → is-encoded-pad(orphans0, # orphans0, buf) ∧ # buf ≤ LEB_SIZE), err = ESUCCESS ∧ orphans ≠ ∅
Used simplifier rules: ⊦ m > n ↔ n < m; (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ # mkbuf(n) = n; (s)% ⊦ EB_PAGE_SIZE ≠ 0; (s)%m ≠ 0 ⊦ is-aligned(align↑(n, m), m); (s)% ⊦ ns ⊆ ns; (s)% ⊦ n + 0 = n; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic%m ≠ 0 ⊦ n0 ≤ align↑(n0, m); (s)% ⊦ ns \ ns = ∅; (s)% ⊦ subarray(buf, n, 0) = mkbuf(0); (s)% ⊦ is-encoded(∅, buf) ↔ buf = mkbuf(0); (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ is-aligned(LEB_SIZE, EB_PAGE_SIZE); (ss)%n ≠ 0, is-aligned(m, n) ⊦ m < align↑(m0, n) ↔ m < m0; (s)% ⊦ m ≤ n → (n < m ↔ false); (s) Used formulas: (err = ESUCCESS ∨ ⌊err⌋ ) ∧ is-aligned(# buf, m2) ∧ orphans ⊆ orphans` ∧ # buf ≤ m1 ∧ ( err = ESUCCESS → m0 + # orphans * ENCODED_NAT_SIZE ≤ # buf ∧ is-encoded(orphans` \ orphans, subarray(buf, 0, m0))), # orphans = # orphans