| ⌜m0⌝ = # σ0, ⌜m⌝ = # σ, mon(σσ), ∀ n. ⌜n⌝ < # σσ → (∃ σ1. σσ[n] + σ1 = σ), ∀ n. ⌜n⌝ < # σσ → (∃ σ1. σσ[n] + σ1 = σ0), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ (∃ σ1. (σ to m) + σ1 = σσ[n])), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ (∃ σ1. (σ0 to m) + σ1 = σσ[n])) ⊦ ⌜m⌝ < # σ0, ⌜m⌝ = # σ0, σσ = [] |
⌜m⌝ = # σ, ⌜m0⌝ = # σ0, mon(σσ), m0 < m, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ (∃ σ1. (σ to m) + σ1 = σσ[n])), ∀ n. ⌜n⌝ < # σσ → (∃ σ1. σσ[n] + σ1 = σ0), ∀ n. ⌜n⌝ < # σσ → (∃ σ1. σσ[n] + σ1 = σ), ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ (∃ σ1. (σ0 to m1) + σ1 = σσ[n])) ⊦ σσ = [], m = m0, m = 0
Used simplifier rules: f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic1%neq-01: ⊦ m ≠ n → (¬ m < n ↔ n < m); from specification nat-basic1%less-fin: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; from specification nat-inf%inj: ⊦ ⌜m⌝ = ⌜m0⌝ ↔ m = m0; from specification nat-inf-basic