Theorem: NormedAddCommGroup.completeSpace_of_summable_imp_tendsto
File: Mathlib/Analysis/Normed/Group/Completeness.lean

Proof steps:
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
⊢ CompleteSpace E
state_after: case a
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
⊢ ∀ (u : ℕ → E), CauchySeq u → ∃ a, Tendsto u atTop (𝓝 a)
tactic: apply Metric.complete_of_cauchySeq_tendsto
state_before: case a
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
⊢ ∀ (u : ℕ → E), CauchySeq u → ∃ a, Tendsto u atTop (𝓝 a)
state_after: case a
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
⊢ ∃ a, Tendsto u atTop (𝓝 a)
tactic: intro u hu
state_before: case a
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
⊢ ∃ a, Tendsto u atTop (𝓝 a)
state_after: case a.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => dist (u (f (i + 1))) (u (f i))
⊢ ∃ a, Tendsto u atTop (𝓝 a)
tactic: obtain ⟨f, hf₁, hf₂⟩ := Metric.exists_subseq_summable_dist_of_cauchySeq u hu
state_before: case a.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => dist (u (f (i + 1))) (u (f i))
⊢ ∃ a, Tendsto u atTop (𝓝 a)
state_after: case a.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
⊢ ∃ a, Tendsto u atTop (𝓝 a)
tactic: simp only [dist_eq_norm] at hf₂
state_before: case a.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
⊢ ∃ a, Tendsto u atTop (𝓝 a)
state_after: case a.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
⊢ ∃ a, Tendsto u atTop (𝓝 a)
tactic: let v n := u (f (n+1)) - u (f n)
state_before: case a.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
⊢ ∃ a, Tendsto u atTop (𝓝 a)
state_after: case a.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
hv_sum : (fun n => ∑ i ∈ range n, v i) = fun n => u (f n) - u (f 0)
⊢ ∃ a, Tendsto u atTop (𝓝 a)
tactic: have hv_sum : (fun n => (∑ i ∈ range n, v i)) = fun n => u (f n) - u (f 0) := by
    ext n
    exact sum_range_sub (u ∘ f) n
state_before: case a.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
hv_sum : (fun n => ∑ i ∈ range n, v i) = fun n => u (f n) - u (f 0)
⊢ ∃ a, Tendsto u atTop (𝓝 a)
state_after: case a.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
hv_sum : (fun n => ∑ i ∈ range n, v i) = fun n => u (f n) - u (f 0)
a : E
ha : Tendsto (fun n => ∑ i ∈ range n, v i) atTop (𝓝 a)
⊢ ∃ a, Tendsto u atTop (𝓝 a)
tactic: obtain ⟨a, ha⟩ := h v hf₂
state_before: case a.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
hv_sum : (fun n => ∑ i ∈ range n, v i) = fun n => u (f n) - u (f 0)
a : E
ha : Tendsto (fun n => ∑ i ∈ range n, v i) atTop (𝓝 a)
⊢ ∃ a, Tendsto u atTop (𝓝 a)
state_after: case a.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
hv_sum : (fun n => ∑ i ∈ range n, v i) = fun n => u (f n) - u (f 0)
a : E
ha : Tendsto (fun n => ∑ i ∈ range n, v i) atTop (𝓝 a)
⊢ Tendsto u atTop (𝓝 (a + u (f 0)))
tactic: refine ⟨a + u (f 0), ?_⟩
state_before: case a.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
hv_sum : (fun n => ∑ i ∈ range n, v i) = fun n => u (f n) - u (f 0)
a : E
ha : Tendsto (fun n => ∑ i ∈ range n, v i) atTop (𝓝 a)
⊢ Tendsto u atTop (𝓝 (a + u (f 0)))
state_after: case a.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
hv_sum : (fun n => ∑ i ∈ range n, v i) = fun n => u (f n) - u (f 0)
a : E
ha : Tendsto (fun n => ∑ i ∈ range n, v i) atTop (𝓝 a)
⊢ Tendsto (u ∘ f) atTop (𝓝 (a + u (f 0)))
tactic: refine tendsto_nhds_of_cauchySeq_of_subseq hu hf₁.tendsto_atTop ?_
state_before: case a.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
hv_sum : (fun n => ∑ i ∈ range n, v i) = fun n => u (f n) - u (f 0)
a : E
ha : Tendsto (fun n => ∑ i ∈ range n, v i) atTop (𝓝 a)
⊢ Tendsto (u ∘ f) atTop (𝓝 (a + u (f 0)))
state_after: case a.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
hv_sum : (fun n => ∑ i ∈ range n, v i) = fun n => u (f n) - u (f 0)
a : E
ha : Tendsto (fun n => u (f n) - u (f 0)) atTop (𝓝 a)
⊢ Tendsto (u ∘ f) atTop (𝓝 (a + u (f 0)))
tactic: rw [hv_sum] at ha
state_before: case a.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
hv_sum : (fun n => ∑ i ∈ range n, v i) = fun n => u (f n) - u (f 0)
a : E
ha : Tendsto (fun n => u (f n) - u (f 0)) atTop (𝓝 a)
⊢ Tendsto (u ∘ f) atTop (𝓝 (a + u (f 0)))
state_after: case a.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
hv_sum : (fun n => ∑ i ∈ range n, v i) = fun n => u (f n) - u (f 0)
a : E
ha : Tendsto (fun n => u (f n) - u (f 0)) atTop (𝓝 a)
h₁ : Tendsto (fun n => u (f n) - u (f 0) + u (f 0)) atTop (𝓝 (a + u (f 0)))
⊢ Tendsto (u ∘ f) atTop (𝓝 (a + u (f 0)))
tactic: have h₁ : Tendsto (fun n => u (f n) - u (f 0) + u (f 0)) atTop (𝓝 (a + u (f 0))) :=
    Tendsto.add_const _ ha
state_before: case a.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
h : ∀ (u : ℕ → E), (Summable fun x => ‖u x‖) → ∃ a, Tendsto (fun n => ∑ i ∈ range n, u i) atTop (𝓝 a)
u : ℕ → E
hu : CauchySeq u
f : ℕ → ℕ
hf₁ : StrictMono f
hf₂ : Summable fun i => ‖u (f (i + 1)) - u (f i)‖
v : ℕ → E := fun n => u (f (n + 1)) - u (f n)
hv_sum : (fun n => ∑ i ∈ range n, v i) = fun n => u (f n) - u (f 0)
a : E
ha : Tendsto (fun n => u (f n) - u (f 0)) atTop (𝓝 a)
h₁ : Tendsto (fun n => u (f n) - u (f 0) + u (f 0)) atTop (𝓝 (a + u (f 0)))
⊢ Tendsto (u ∘ f) atTop (𝓝 (a + u (f 0)))
state_after: no goals
tactic: simpa only [sub_add_cancel] using h₁