| ⌜m⌝ = # σ, ⌜m0⌝ = (⌜m⌝ + # σ1) + # σ2, ⌜n⌝ < # σσ, m0 < m, mon(σσ), ∀ n. ⌜n⌝ < # σσ → (∃ σ1. σσ[n] + σ1 = σ), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ (∃ σ1. (σ to m) + σ1 = σσ[n])), ∀ m1. ¬ m0 < m1 → (∃ n0. ⌜n0⌝ < # σσ ∧ (∃ σ1. (σσ[n] + σ2 to m1) + σ1 = σσ[n0])) ⊦ m = m0, m = 0, σσ = [] |
⌜m0⌝ = (⌜m⌝ + # σ1) + # σ2, ⌜m⌝ = # σ, ⌜m1⌝ = # σ2, m0 < m, ⌜n⌝ < # σσ, mon(σσ), ∀ m1. ¬ m0 < m1 → (∃ n0. ⌜n0⌝ < # σσ ∧ (∃ σ1. (σσ[n] + σ2 to m1) + σ1 = σσ[n0])), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ (∃ σ1. (σ to m) + σ1 = σσ[n])), ∀ n. ⌜n⌝ < # σσ → (∃ σ1. σσ[n] + σ1 = σ) ⊦ m = 0, m = m0, σσ = []
Used simplifier rules: natinf freely generated by ∞, ⌜ ⌝;;% ⊦ ∞ + ⌜m⌝ = ∞; (s)% ⊦ 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% ⊦ ⌜m⌝ ≠ ∞; (s)