| ∃ n, buf0, buf1. n ∈ ns ∧ buf = buf0 + buf1 ∧ is-encoded(n, buf0) ∧ is-encoded(ns -- n, buf1), ∀ ns0, buf. # ns0 < # ns → is-encoded(ns0, buf) → # buf = # ns0 * ENCODED_NAT_SIZE ⊦ # buf = # ns * ENCODED_NAT_SIZE, ns = ∅ |
# buf1 = ENCODED_NAT_SIZE, is-encoded(ns -- n, buf0), is-encoded(n, buf1), n ∈ ns, ∀ ns0, buf. # ns0 < # ns → is-encoded(ns0, buf) → # buf = # ns0 * ENCODED_NAT_SIZE ⊦ # ns = 0, ENCODED_NAT_SIZE + # buf0 = # ns * ENCODED_NAT_SIZE, ns = ∅
Used simplifier rules: size-zero-01: ⊦ ns ≠ ∅ → # ns ≠ 0; (forward) from specification set-basic[nat-set]%ne-01: ⊦ n ∈ ns → ns ≠ ∅; (forward) from specification set-basic[nat-set]%is-encoded-size: ⊦ is-encoded(n, buf) → # buf = ENCODED_NAT_SIZE; (forward) from specification encoding-fixed-size[encoding-nat]%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]% ⊦ #(buf + buf0) = # buf + # buf0; (s)