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

tactic: apply Metric.complete_of_cauchySeq_tendsto
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: 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), 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: obtain ⟨f, hf₁, hf₂⟩ := Metric.exists_subseq_summable_dist_of_cauchySeq 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: 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 => 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: 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)‖
⊢ ∃ 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: 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)
⊢ ∃ 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: obtain ⟨a, ha⟩ := h v 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)‖
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: 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)
⊢ ∃ 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 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 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: 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 => ∑ 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: 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)
⊢ 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: simpa only [sub_add_cancel] using h₁
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: ext n
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)
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)
⊢ (fun n => ∑ i ∈ range n, v i) = fun n => u (f n) - u (f 0)
state_after: case h
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)
n : ℕ
⊢ ∑ i ∈ range n, v i = u (f n) - u (f 0)

tactic: exact sum_range_sub (u ∘ f) n
state_before: case h
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)
n : ℕ
⊢ ∑ i ∈ range n, v i = u (f n) - u (f 0)
state_after: no goals