| (σ0 to m + 1) + σ1 = σσ[n], ⌜m⌝ = # σσ[n] + # σ2, ⌜m⌝ < # σ0, ⌜n⌝ < # σσ, mon(σσ), ∀ n. ⌜n⌝ < # σσ → (∃ σ1. σσ[n] + σ1 = σ0), ∀ m0. ¬ m < m0 → (∃ n0. ⌜n0⌝ < # σσ ∧ (∃ σ1. (σσ[n] + σ2 to m0) + σ1 = σσ[n0])) ⊦ σσ = [], ⌜m⌝ = # σ0 |
Used simplifier rules: ⊦ #(σ + σ1) = # σ + # σ1; (s)% ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ # σ < ⌜n⌝ + ⌜1⌝ ↔ ¬ ⌜n⌝ < # σ; (s)%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%¬ # σ < ⌜n⌝ ⊦ #(σ to n) = ⌜n⌝ ; (s)%append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream% ⊦ ⌜n⌝ + n∞ = ⌜n⌝ ↔ n∞ = ⌜0⌝ ; (s)% ⊦ n∞ + n∞1 = ⌜0⌝ ↔ n∞ = ⌜0⌝ ∧ n∞1 = ⌜0⌝ ; (ws)% ⊦ ⌜m⌝ = ⌜m0⌝ ↔ m = m0; (s)