Theorem: summable_of_ratio_norm_eventually_le
File: Mathlib/Analysis/SpecificLimits/Normed.lean

tactic: by_cases hr₀ : 0 ≤ r
state_before: α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
h : ∀ᶠ (n : ℕ) in atTop, ‖f (n + 1)‖ ≤ r * ‖f n‖
⊢ Summable f

tactic: rw [eventually_atTop] at h
state_before: case pos
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
h : ∀ᶠ (n : ℕ) in atTop, ‖f (n + 1)‖ ≤ r * ‖f n‖
hr₀ : 0 ≤ r
⊢ Summable f

tactic: rcases h with ⟨N, hN⟩
state_before: case pos
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
h : ∃ a, ∀ (b : ℕ), b ≥ a → ‖f (b + 1)‖ ≤ r * ‖f b‖
hr₀ : 0 ≤ r
⊢ Summable f

tactic: rw [← @summable_nat_add_iff α _ _ _ _ N]
state_before: case pos.intro
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
hr₀ : 0 ≤ r
N : ℕ
hN : ∀ (b : ℕ), b ≥ N → ‖f (b + 1)‖ ≤ r * ‖f b‖
⊢ Summable f

tactic: refine' summable_of_norm_bounded (fun n ↦ ‖f N‖ * r ^ n)
  (Summable.mul_left _ <| summable_geometric_of_lt_1 hr₀ hr₁) fun n ↦ _
state_before: case pos.intro
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
hr₀ : 0 ≤ r
N : ℕ
hN : ∀ (b : ℕ), b ≥ N → ‖f (b + 1)‖ ≤ r * ‖f b‖
⊢ Summable fun n => f (n + N)

tactic: simp only
state_before: case pos.intro
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
hr₀ : 0 ≤ r
N : ℕ
hN : ∀ (b : ℕ), b ≥ N → ‖f (b + 1)‖ ≤ r * ‖f b‖
n : ℕ
⊢ ‖f (n + N)‖ ≤ (fun n => ‖f N‖ * r ^ n) n

tactic: conv_rhs => rw [mul_comm, ← zero_add N]
state_before: case pos.intro
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
hr₀ : 0 ≤ r
N : ℕ
hN : ∀ (b : ℕ), b ≥ N → ‖f (b + 1)‖ ≤ r * ‖f b‖
n : ℕ
⊢ ‖f (n + N)‖ ≤ ‖f N‖ * r ^ n

tactic: refine' le_geom (u := fun n ↦ ‖f (n + N)‖) hr₀ n fun i _ ↦ _
state_before: case pos.intro
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
hr₀ : 0 ≤ r
N : ℕ
hN : ∀ (b : ℕ), b ≥ N → ‖f (b + 1)‖ ≤ r * ‖f b‖
n : ℕ
⊢ ‖f (n + N)‖ ≤ r ^ n * ‖f (0 + N)‖

tactic: convert hN (i + N) (N.le_add_left i) using 3
state_before: case pos.intro
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
hr₀ : 0 ≤ r
N : ℕ
hN : ∀ (b : ℕ), b ≥ N → ‖f (b + 1)‖ ≤ r * ‖f b‖
n i : ℕ
x✝ : i < n
⊢ (fun n => ‖f (n + N)‖) (i + 1) ≤ r * (fun n => ‖f (n + N)‖) i

tactic: ac_rfl
state_before: case h.e'_3.h.e'_3.h.e'_1
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
hr₀ : 0 ≤ r
N : ℕ
hN : ∀ (b : ℕ), b ≥ N → ‖f (b + 1)‖ ≤ r * ‖f b‖
n i : ℕ
x✝ : i < n
⊢ i + 1 + N = i + N + 1

tactic: push_neg at hr₀
state_before: case neg
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
h : ∀ᶠ (n : ℕ) in atTop, ‖f (n + 1)‖ ≤ r * ‖f n‖
hr₀ : ¬0 ≤ r
⊢ Summable f

tactic: refine' summable_of_norm_bounded_eventually 0 summable_zero _
state_before: case neg
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
h : ∀ᶠ (n : ℕ) in atTop, ‖f (n + 1)‖ ≤ r * ‖f n‖
hr₀ : r < 0
⊢ Summable f

tactic: rw [Nat.cofinite_eq_atTop]
state_before: case neg
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
h : ∀ᶠ (n : ℕ) in atTop, ‖f (n + 1)‖ ≤ r * ‖f n‖
hr₀ : r < 0
⊢ ∀ᶠ (i : ℕ) in cofinite, ‖f i‖ ≤ OfNat.ofNat 0 i

tactic: filter_upwards [h]with _ hn
state_before: case neg
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
h : ∀ᶠ (n : ℕ) in atTop, ‖f (n + 1)‖ ≤ r * ‖f n‖
hr₀ : r < 0
⊢ ∀ᶠ (i : ℕ) in atTop, ‖f i‖ ≤ OfNat.ofNat 0 i

tactic: by_contra' h
state_before: case h
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
h : ∀ᶠ (n : ℕ) in atTop, ‖f (n + 1)‖ ≤ r * ‖f n‖
hr₀ : r < 0
a✝ : ℕ
hn : ‖f (a✝ + 1)‖ ≤ r * ‖f a✝‖
⊢ ‖f a✝‖ ≤ OfNat.ofNat 0 a✝

tactic: exact not_lt.mpr (norm_nonneg _) (lt_of_le_of_lt hn <| mul_neg_of_neg_of_pos hr₀ h)
state_before: case h
α✝ : Type ?u.1269724
β : Type ?u.1269727
ι : Type ?u.1269730
α : Type u_1
inst✝¹ : SeminormedAddCommGroup α
inst✝ : CompleteSpace α
f : ℕ → α
r : ℝ
hr₁ : r < 1
h✝ : ∀ᶠ (n : ℕ) in atTop, ‖f (n + 1)‖ ≤ r * ‖f n‖
hr₀ : r < 0
a✝ : ℕ
hn : ‖f (a✝ + 1)‖ ≤ r * ‖f a✝‖
h : OfNat.ofNat 0 a✝ < ‖f a✝‖
⊢ False