| # σ = ⌜n⌝ , ∀ n0. ⌜n0⌝ < ⌜n⌝ + # ⌜λ n. zero⌝ → (σ + ⌜λ n. zero⌝ )[n0] = zero, # ⌜λ n. zero⌝ = ∞ ∨ σ = [] ⊦ ⌜n⌝ = #(⌜λ n. zero⌝ to n) ∧ (n0 < n → σ[n0] = (⌜λ n. zero⌝ to n)[n0]) |
# σ = ⌜n⌝ , n0 < n, ∀ n1. (σ + ⌜λ n. zero⌝ )[n1] = zero ⊦ σ[n0] = zero
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%m < n ⊦ (nf0 to n)[m] = nf0(m); (s)% ⊦ m < n → (n ≤ m ↔ false); (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ ⌜dx⌝ [n] = dx[n]; (s)% ⊦ ⌜m⌝ = ⌜m0⌝ ↔ m = m0; (s)% ⊦ # ⌜nf0 to n⌝ = ⌜n⌝ ; (s)% ⊦ ⌜nf0⌝ to n = ⌜nf0 to n⌝ ; (s)% ⊦ ⌜m⌝ < ∞; (s)%add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf%add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf% ⊦ ⌜m⌝ + ∞ = ∞; (s)% ⊦ # ⌜nf0⌝ = ∞; (s)