| # buf = # orphans1 * ENCODED_NAT_SIZE, m + m4 * ENCODED_NAT_SIZE = # buf, err = ESUCCESS, err0 = ESUCCESS, m2 = 0, m3 = n0, m4 = m1, n0 = # orphans1, orphans2 = ∅, is-encoded(orphans1, buf), err = ESUCCESS → (∃ orphans. is-encoded(orphans0, subarray(buf, 0, m)) ∧ is-encoded(orphans, subarray(buf, m, # buf - m)) ∧ orphans ∩ orphans0 = ∅), err = ESUCCESS ∨ ⌊err⌋ ⊦ ⟪decode_nat#(m, buf; n, m0; err); if err = ESUCCESS then orphans0 := orphans0 ++ n; m := m + ENCODED_NAT_SIZE; m4 := m4 - 1⟫ ( ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ m + m4 * ENCODED_NAT_SIZE = # buf ∧ ( err = ESUCCESS → (∃ orphans. is-encoded(orphans0, subarray(buf, 0, m)) ∧ is-encoded(orphans, subarray(buf, m, # buf - m)) ∧ orphans ∩ orphans0 = ∅))) ∧ m4 < m1), m4 = 0 |
# buf = # orphans1 * ENCODED_NAT_SIZE, m + m1 * ENCODED_NAT_SIZE = # buf, orphans ∩ orphans0 = ∅, m1 ≠ 0, is-encoded(orphans1, buf), is-encoded(orphans0, subarray(buf, 0, m)), is-encoded(orphans, subarray(buf, m, # buf - m)) ⊦ ⟪decode_nat#(m, buf; n, m0; err); if err = ESUCCESS then orphans0 := orphans0 ++ n; m := m + ENCODED_NAT_SIZE; m4 := m1 - 1⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ m + m4 * ENCODED_NAT_SIZE = # buf ∧ ( err = ESUCCESS → is-encoded(orphans0, subarray(buf, 0, m)) ∧ (∃ orphans. is-encoded(orphans, subarray(buf, m, # buf - m)) ∧ orphans ∩ orphans0 = ∅)) ∧ m4 < m1)