| ⌜m⌝ = # σσ[n] + # σ2, (σ0 to m + 1) + σ1 = σσ[n], ⌜m⌝ < # σ0, mon(σσ), ⌜n⌝ < # σσ, ∀ n. ⌜n⌝ < # σσ → (∃ σ1. σσ[n] + σ1 = σ0), ∀ m0. ¬ m < m0 → (∃ n0. ⌜n0⌝ < # σσ ∧ (∃ σ1. (σσ[n] + σ2 to m0) + σ1 = σσ[n0])) ⊦ ⌜m⌝ = # σ0, σσ = [] |
Used simplifier rules: size-append: ⊦ #(σ + σ1) = # σ + # σ1; from specification stream%add-fin: ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; from specification nat-inf%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2%size-succ: ⊦ # σ < ⌜n⌝ + ⌜1⌝ ↔ ¬ ⌜n⌝ < # σ; from specification stream%add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf%add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf%size-to: ¬ # σ < ⌜n⌝ ⊦ #(σ to n) = ⌜n⌝ ; from specification stream%append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream%add-cancel-03: ⊦ ⌜n⌝ + n∞ = ⌜n⌝ ↔ n∞ = ⌜0⌝ ; from specification nat-inf%sum-zero-fin: ⊦ ⌜n⌝ + n∞ = ⌜0⌝ ↔ n∞ = ⌜0⌝ ∧ n = 0; from specification nat-inf