| # 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) |
# buf = # orphans1 * ENCODED_NAT_SIZE, m + m1 * ENCODED_NAT_SIZE = # buf, m1 = m2 + 1, orphans ∩ orphans0 = ∅, is-encoded(orphans, subarray(buf, m, # buf - m)), is-encoded(orphans0, subarray(buf, 0, m)), is-encoded(orphans1, buf) ⊦ ⟪decode_nat#(m, buf; n, m0; err); if err = ESUCCESS then orphans0 := orphans0 ++ n; m := m + ENCODED_NAT_SIZE; m4 := m2⟫ ( (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), m1 = 0
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: m1, m2