| # buf = # orphans1 * ENCODED_NAT_SIZE, m = 0, m0 = n, n = # orphans1, is-encoded(orphans1, buf) ⊦ ⟪orphans0 := ∅; err := ESUCCESS; while err = ESUCCESS ∧ m0 ≠ 0 do {/* (prepost-decode-orphans : invariant (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 = ∅)) wfbound m0) */; 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⌋ ) ∧ (err = ESUCCESS → orphans0 = orphans1)) |
# buf = # orphans1 * ENCODED_NAT_SIZE, m = 0, m0 = n, n = # orphans1, orphans0 = ∅, is-encoded(orphans1, buf) ⊦ ⟪err := ESUCCESS; while err = ESUCCESS ∧ m0 ≠ 0 do {/* (prepost-decode-orphans : invariant (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 = ∅)) wfbound m0) */; 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⌋ ) ∧ (err = ESUCCESS → orphans0 = orphans1))