| # buf = # orphans1 * ENCODED_NAT_SIZE, (ENCODED_NAT_SIZE * m2 + ENCODED_NAT_SIZE) + m = # buf, err = ESUCCESS, orphans ∩ orphans0 = ∅, is-encoded(orphans1, buf), is-encoded(orphans0, subarray(buf, 0, m)), is-encoded(orphans, subarray(buf, m, ENCODED_NAT_SIZE * m2 + ENCODED_NAT_SIZE)), err = ESUCCESS → is-encoded(n, subarray(buf, m, ENCODED_NAT_SIZE)) ∧ m + ENCODED_NAT_SIZE ≤ # buf ∧ m0 = ENCODED_NAT_SIZE, err = ESUCCESS ∨ ⌊err⌋ ⊦ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (m + ENCODED_NAT_SIZE) + m2 * ENCODED_NAT_SIZE = # buf ∧ ( err = ESUCCESS → is-encoded(orphans0 ++ n, subarray(buf, 0, m + ENCODED_NAT_SIZE)) ∧ (∃ orphans. is-encoded(orphans, subarray(buf, m + ENCODED_NAT_SIZE, # buf - m + ENCODED_NAT_SIZE)) ∧ orphans ∩ (orphans0 ++ n) = ∅)) ∧ ¬ m2 < m2 |
# buf = # orphans1 * ENCODED_NAT_SIZE, (ENCODED_NAT_SIZE * m2 + ENCODED_NAT_SIZE) + m = # buf, orphans ∩ orphans0 = ∅, is-encoded(n, subarray(buf, m, ENCODED_NAT_SIZE)), is-encoded(orphans1, buf), is-encoded(orphans0, subarray(buf, 0, m)), is-encoded(orphans, subarray(buf, m, ENCODED_NAT_SIZE * m2 + ENCODED_NAT_SIZE)), m + ENCODED_NAT_SIZE ≤ # buf ⊦ is-encoded(orphans0 ++ n, subarray(buf, 0, m + ENCODED_NAT_SIZE)) ∧ (∃ orphans. is-encoded(orphans, subarray(buf, m + ENCODED_NAT_SIZE, # buf - m + ENCODED_NAT_SIZE)) ∧ orphans ∩ (orphans0 ++ n) = ∅)
Used simplifier rules: ⊦ # subarray(buf, m, n) = n; (s)%is-encoded-size: ⊦ is-encoded(n, buf) → # buf = ENCODED_NAT_SIZE; (forward) from specification encoding-fixed-size[encoding-nat]% ⊦ ¬ n < n; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%mult-c: ⊦ m * n = n * m; from specification nat-mult