Theorem: NormedAddCommGroup.cauchy_series_of_le_geometric''
File: Mathlib/Analysis/SpecificLimits/Normed.lean

tactic: set v : ℕ → α := fun n ↦ if n < N then 0 else u n
state_before: α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
⊢ CauchySeq fun n => ∑ k in Finset.range (n + 1), u k

tactic: have hC : 0 ≤ C :=
  (zero_le_mul_right <| pow_pos hr₀ N).mp ((norm_nonneg _).trans <| h N <| le_refl N)
state_before: α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
v : ℕ → α := fun n => if n < N then 0 else u n
⊢ CauchySeq fun n => ∑ k in Finset.range (n + 1), u k

tactic: have : ∀ n ≥ N, u n = v n := by
  intro n hn
  simp [hn, if_neg (not_lt.mpr hn)]
state_before: α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
v : ℕ → α := fun n => if n < N then 0 else u n
hC : 0 ≤ C
⊢ CauchySeq fun n => ∑ k in Finset.range (n + 1), u k

tactic: refine'
  cauchySeq_sum_of_eventually_eq this (NormedAddCommGroup.cauchy_series_of_le_geometric' hr₁ _)
state_before: α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
v : ℕ → α := fun n => if n < N then 0 else u n
hC : 0 ≤ C
this : ∀ (n : ℕ), n ≥ N → u n = v n
⊢ CauchySeq fun n => ∑ k in Finset.range (n + 1), u k

tactic: intro n
state_before: case refine'_2
α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
v : ℕ → α := fun n => if n < N then 0 else u n
hC : 0 ≤ C
this : ∀ (n : ℕ), n ≥ N → u n = v n
⊢ ∀ (n : ℕ), ‖v n‖ ≤ C * r ^ n

tactic: simp only
state_before: case refine'_2
α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
v : ℕ → α := fun n => if n < N then 0 else u n
hC : 0 ≤ C
this : ∀ (n : ℕ), n ≥ N → u n = v n
n : ℕ
⊢ ‖v n‖ ≤ C * r ^ n

tactic: split_ifs with H
state_before: case refine'_2
α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
v : ℕ → α := fun n => if n < N then 0 else u n
hC : 0 ≤ C
this : ∀ (n : ℕ), n ≥ N → u n = v n
n : ℕ
⊢ ‖if n < N then 0 else u n‖ ≤ C * r ^ n

tactic: intro n hn
state_before: α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
v : ℕ → α := fun n => if n < N then 0 else u n
hC : 0 ≤ C
⊢ ∀ (n : ℕ), n ≥ N → u n = v n

tactic: simp [hn, if_neg (not_lt.mpr hn)]
state_before: α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
v : ℕ → α := fun n => if n < N then 0 else u n
hC : 0 ≤ C
n : ℕ
hn : n ≥ N
⊢ u n = v n

tactic: exact C
state_before: case refine'_1
α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
v : ℕ → α := fun n => if n < N then 0 else u n
hC : 0 ≤ C
this : ∀ (n : ℕ), n ≥ N → u n = v n
⊢ ℝ

tactic: rw [norm_zero]
state_before: case refine'_2.inl
α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
v : ℕ → α := fun n => if n < N then 0 else u n
hC : 0 ≤ C
this : ∀ (n : ℕ), n ≥ N → u n = v n
n : ℕ
H : n < N
⊢ ‖0‖ ≤ C * r ^ n

tactic: exact mul_nonneg hC (pow_nonneg hr₀.le _)
state_before: case refine'_2.inl
α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
v : ℕ → α := fun n => if n < N then 0 else u n
hC : 0 ≤ C
this : ∀ (n : ℕ), n ≥ N → u n = v n
n : ℕ
H : n < N
⊢ 0 ≤ C * r ^ n

tactic: push_neg at H
state_before: case refine'_2.inr
α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
v : ℕ → α := fun n => if n < N then 0 else u n
hC : 0 ≤ C
this : ∀ (n : ℕ), n ≥ N → u n = v n
n : ℕ
H : ¬n < N
⊢ ‖u n‖ ≤ C * r ^ n

tactic: exact h _ H
state_before: case refine'_2.inr
α : Type u_1
β : Type ?u.1175572
ι : Type ?u.1175575
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
N : ℕ
r : ℝ
hr₀ : 0 < r
hr₁ : r < 1
h : ∀ (n : ℕ), n ≥ N → ‖u n‖ ≤ C * r ^ n
v : ℕ → α := fun n => if n < N then 0 else u n
hC : 0 ≤ C
this : ∀ (n : ℕ), n ≥ N → u n = v n
n : ℕ
H : N ≤ n
⊢ ‖u n‖ ≤ C * r ^ n