-- Mathlib/Analysis/NormedSpace/HahnBanach/SeparatingDual.lean
/-- If a space of linear maps from `E` to `F` is complete, and `E` is nontrivial, then `F` is
complete. -/
lemma completeSpace_of_completeSpace_continuousLinearMap [CompleteSpace (E →L[𝕜] F)] :
    CompleteSpace F

Proof state:
𝕜 : Type u_3
E : Type u_4
F : Type u_5
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace 𝕜 F
inst✝² : SeparatingDual 𝕜 E
inst✝¹ : Nontrivial E
inst✝ : CompleteSpace (E →L[𝕜] F)
f : ℕ → F
hf : CauchySeq f
v : E
hv : v ≠ 0
φ : E →L[𝕜] 𝕜
hφ : φ v = 1
g : ℕ → E →L[𝕜] F := fun n => ((ContinuousLinearMap.smulRightL 𝕜 E F) φ) (f n)
this✝ : CauchySeq g
a : E →L[𝕜] F
ha : Tendsto g atTop (𝓝 a)
this : Continuous fun i => i v
⊢ Tendsto (fun n => (g n) v) atTop (𝓝 (a v))

Tactic:
exact (this.tendsto _).comp ha

Result:
no goals

Proof state:
case intro.intro.intro
𝕜 : Type u_3
E : Type u_4
F : Type u_5
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace 𝕜 F
inst✝² : SeparatingDual 𝕜 E
inst✝¹ : Nontrivial E
inst✝ : CompleteSpace (E →L[𝕜] F)
f : ℕ → F
hf : CauchySeq f
v : E
hv : v ≠ 0
φ : E →L[𝕜] 𝕜
hφ : φ v = 1
g : ℕ → E →L[𝕜] F := fun n => ((ContinuousLinearMap.smulRightL 𝕜 E F) φ) (f n)
this✝ : CauchySeq g
a : E →L[𝕜] F
ha : Tendsto g atTop (𝓝 a)
this : Tendsto (fun n => (g n) v) atTop (𝓝 (a v))
⊢ Tendsto f atTop (𝓝 (a v))

Tactic:
simpa [g, ContinuousLinearMap.smulRightL, hφ]

Result:
no goals

Proof state:
𝕜 : Type u_3
E : Type u_4
F : Type u_5
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace 𝕜 F
inst✝² : SeparatingDual 𝕜 E
inst✝¹ : Nontrivial E
inst✝ : CompleteSpace (E →L[𝕜] F)
f : ℕ → F
hf : CauchySeq f
v : E
hv : v ≠ 0
φ : E →L[𝕜] 𝕜
hφ : φ v = 1
g : ℕ → E →L[𝕜] F := fun n => ((ContinuousLinearMap.smulRightL 𝕜 E F) φ) (f n)
this : CauchySeq g
a : E →L[𝕜] F
ha : Tendsto g atTop (𝓝 a)
⊢ Tendsto (fun n => (g n) v) atTop (𝓝 (a v))

Tactic:
have : Continuous (fun (i : E →L[𝕜] F) ↦ i v) := by fun_prop

Result:
𝕜 : Type u_3
E : Type u_4
F : Type u_5
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace 𝕜 F
inst✝² : SeparatingDual 𝕜 E
inst✝¹ : Nontrivial E
inst✝ : CompleteSpace (E →L[𝕜] F)
f : ℕ → F
hf : CauchySeq f
v : E
hv : v ≠ 0
φ : E →L[𝕜] 𝕜
hφ : φ v = 1
g : ℕ → E →L[𝕜] F := fun n => ((ContinuousLinearMap.smulRightL 𝕜 E F) φ) (f n)
this✝ : CauchySeq g
a : E →L[𝕜] F
ha : Tendsto g atTop (𝓝 a)
this : Continuous fun i => i v
⊢ Tendsto (fun n => (g n) v) atTop (𝓝 (a v))

Proof state:
𝕜 : Type u_3
E : Type u_4
F : Type u_5
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace 𝕜 F
inst✝² : SeparatingDual 𝕜 E
inst✝¹ : Nontrivial E
inst✝ : CompleteSpace (E →L[𝕜] F)
f : ℕ → F
hf : CauchySeq f
⊢ ∃ a, Tendsto f atTop (𝓝 a)

Tactic:
obtain ⟨v, hv⟩ : ∃ (v : E), v ≠ 0 := exists_ne 0

Result:
case intro
𝕜 : Type u_3
E : Type u_4
F : Type u_5
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace 𝕜 F
inst✝² : SeparatingDual 𝕜 E
inst✝¹ : Nontrivial E
inst✝ : CompleteSpace (E →L[𝕜] F)
f : ℕ → F
hf : CauchySeq f
v : E
hv : v ≠ 0
⊢ ∃ a, Tendsto f atTop (𝓝 a)

Proof state:
case intro.intro
𝕜 : Type u_3
E : Type u_4
F : Type u_5
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace 𝕜 F
inst✝² : SeparatingDual 𝕜 E
inst✝¹ : Nontrivial E
inst✝ : CompleteSpace (E →L[𝕜] F)
f : ℕ → F
hf : CauchySeq f
v : E
hv : v ≠ 0
φ : E →L[𝕜] 𝕜
hφ : φ v = 1
g : ℕ → E →L[𝕜] F := fun n => ((ContinuousLinearMap.smulRightL 𝕜 E F) φ) (f n)
⊢ ∃ a, Tendsto f atTop (𝓝 a)

Tactic:
have : CauchySeq g := (ContinuousLinearMap.smulRightL 𝕜 E F φ).lipschitz.cauchySeq_comp hf

Result:
case intro.intro
𝕜 : Type u_3
E : Type u_4
F : Type u_5
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace 𝕜 F
inst✝² : SeparatingDual 𝕜 E
inst✝¹ : Nontrivial E
inst✝ : CompleteSpace (E →L[𝕜] F)
f : ℕ → F
hf : CauchySeq f
v : E
hv : v ≠ 0
φ : E →L[𝕜] 𝕜
hφ : φ v = 1
g : ℕ → E →L[𝕜] F := fun n => ((ContinuousLinearMap.smulRightL 𝕜 E F) φ) (f n)
this : CauchySeq g
⊢ ∃ a, Tendsto f atTop (𝓝 a)

Proof state:
case intro.intro
𝕜 : Type u_3
E : Type u_4
F : Type u_5
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace 𝕜 F
inst✝² : SeparatingDual 𝕜 E
inst✝¹ : Nontrivial E
inst✝ : CompleteSpace (E →L[𝕜] F)
f : ℕ → F
hf : CauchySeq f
v : E
hv : v ≠ 0
φ : E →L[𝕜] 𝕜
hφ : φ v = 1
⊢ ∃ a, Tendsto f atTop (𝓝 a)

Tactic:
let g : ℕ → (E →L[𝕜] F) := fun n ↦ ContinuousLinearMap.smulRightL 𝕜 E F φ (f n)

Result:
case intro.intro
𝕜 : Type u_3
E : Type u_4
F : Type u_5
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace 𝕜 F
inst✝² : SeparatingDual 𝕜 E
inst✝¹ : Nontrivial E
inst✝ : CompleteSpace (E →L[𝕜] F)
f : ℕ → F
hf : CauchySeq f
v : E
hv : v ≠ 0
φ : E →L[𝕜] 𝕜
hφ : φ v = 1
g : ℕ → E →L[𝕜] F := fun n => ((ContinuousLinearMap.smulRightL 𝕜 E F) φ) (f n)
⊢ ∃ a, Tendsto f atTop (𝓝 a)

Proof state:
𝕜 : Type u_3
E : Type u_4
F : Type u_5
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace 𝕜 F
inst✝² : SeparatingDual 𝕜 E
inst✝¹ : Nontrivial E
inst✝ : CompleteSpace (E →L[𝕜] F)
f : ℕ → F
hf : CauchySeq f
v : E
hv : v ≠ 0
φ : E →L[𝕜] 𝕜
hφ : φ v = 1
g : ℕ → E →L[𝕜] F := fun n => ((ContinuousLinearMap.smulRightL 𝕜 E F) φ) (f n)
this : CauchySeq g
a : E →L[𝕜] F
ha : Tendsto g atTop (𝓝 a)
⊢ Continuous fun i => i v

Tactic:
fun_prop

Result:
no goals

Proof state:
case intro.intro.intro
𝕜 : Type u_3
E : Type u_4
F : Type u_5
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace 𝕜 F
inst✝² : SeparatingDual 𝕜 E
inst✝¹ : Nontrivial E
inst✝ : CompleteSpace (E →L[𝕜] F)
f : ℕ → F
hf : CauchySeq f
v : E
hv : v ≠ 0
φ : E →L[𝕜] 𝕜
hφ : φ v = 1
g : ℕ → E →L[𝕜] F := fun n => ((ContinuousLinearMap.smulRightL 𝕜 E F) φ) (f n)
this : CauchySeq g
a : E →L[𝕜] F
ha : Tendsto g atTop (𝓝 a)
⊢ Tendsto f atTop (𝓝 (a v))

Tactic:
have : Tendsto (fun n ↦ g n v) atTop (𝓝 (a v)) := by
  have : Continuous (fun (i : E →L[𝕜] F) ↦ i v) := by fun_prop
  exact (this.tendsto _).comp ha

Result:
case intro.intro.intro
𝕜 : Type u_3
E : Type u_4
F : Type u_5
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace 𝕜 F
inst✝² : SeparatingDual 𝕜 E
inst✝¹ : Nontrivial E
inst✝ : CompleteSpace (E →L[𝕜] F)
f : ℕ → F
hf : CauchySeq f
v : E
hv : v ≠ 0
φ : E →L[𝕜] 𝕜
hφ : φ v = 1
g : ℕ → E →L[𝕜] F := fun n => ((ContinuousLinearMap.smulRightL 𝕜 E F) φ) (f n)
this✝ : CauchySeq g
a : E →L[𝕜] F
ha : Tendsto g atTop (𝓝 a)
this : Tendsto (fun n => (g n) v) atTop (𝓝 (a v))
⊢ Tendsto f atTop (𝓝 (a v))