| # buf = # orphans1 * ENCODED_NAT_SIZE, m + m0 * ENCODED_NAT_SIZE = # buf, err = ESUCCESS, err0 = ESUCCESS, m0 = m1, m2 = 0, m3 = n, n = # 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⌋ ⊦ ⟪let n = ?, m0 = ? in {decode_nat#(m, buf; n, m0; err); if err = ESUCCESS then orphans0 := orphans0 ++ n; m := m + ENCODED_NAT_SIZE}; m0 := m0 - 1⟫ ( ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ m + m0 * ENCODED_NAT_SIZE = # buf ∧ ( err = ESUCCESS → (∃ orphans. is-encoded(orphans0, subarray(buf, 0, m)) ∧ is-encoded(orphans, subarray(buf, m, # buf - m)) ∧ orphans ∩ orphans0 = ∅))) ∧ m0 < m1), m0 = 0 |
# 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