Theorem: LinearMap.continuous_of_isClosed_graph
File: Mathlib/Analysis/NormedSpace/Banach.lean

tactic: letI : CompleteSpace g.graph := completeSpace_coe_iff_isComplete.mpr hg.isComplete
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_1
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
f : E →L[𝕜] F
inst✝¹ : CompleteSpace F
inst✝ : CompleteSpace E
g : E →ₗ[𝕜] F
hg : IsClosed ↑(graph g)
⊢ Continuous ↑g

tactic: let φ₀ : E →ₗ[𝕜] E × F := LinearMap.id.prod g
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_1
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
f : E →L[𝕜] F
inst✝¹ : CompleteSpace F
inst✝ : CompleteSpace E
g : E →ₗ[𝕜] F
hg : IsClosed ↑(graph g)
this : CompleteSpace { x // x ∈ graph g } := Iff.mpr completeSpace_coe_iff_isComplete (IsClosed.isComplete hg)
⊢ Continuous ↑g

tactic: have : Function.LeftInverse Prod.fst φ₀ := fun x => rfl
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_1
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
f : E →L[𝕜] F
inst✝¹ : CompleteSpace F
inst✝ : CompleteSpace E
g : E →ₗ[𝕜] F
hg : IsClosed ↑(graph g)
this : CompleteSpace { x // x ∈ graph g } := Iff.mpr completeSpace_coe_iff_isComplete (IsClosed.isComplete hg)
φ₀ : E →ₗ[𝕜] E × F := prod id g
⊢ Continuous ↑g

tactic: let φ : E ≃ₗ[𝕜] g.graph :=
  (LinearEquiv.ofLeftInverse this).trans (LinearEquiv.ofEq _ _ g.graph_eq_range_prod.symm)
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_1
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
f : E →L[𝕜] F
inst✝¹ : CompleteSpace F
inst✝ : CompleteSpace E
g : E →ₗ[𝕜] F
hg : IsClosed ↑(graph g)
this✝ : CompleteSpace { x // x ∈ graph g } := Iff.mpr completeSpace_coe_iff_isComplete (IsClosed.isComplete hg)
φ₀ : E →ₗ[𝕜] E × F := prod id g
this : LeftInverse Prod.fst ↑φ₀
⊢ Continuous ↑g

tactic: let ψ : g.graph ≃L[𝕜] E :=
  φ.symm.toContinuousLinearEquivOfContinuous continuous_subtype_val.fst
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_1
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
f : E →L[𝕜] F
inst✝¹ : CompleteSpace F
inst✝ : CompleteSpace E
g : E →ₗ[𝕜] F
hg : IsClosed ↑(graph g)
this✝ : CompleteSpace { x // x ∈ graph g } := Iff.mpr completeSpace_coe_iff_isComplete (IsClosed.isComplete hg)
φ₀ : E →ₗ[𝕜] E × F := prod id g
this : LeftInverse Prod.fst ↑φ₀
φ : E ≃ₗ[𝕜] { x // x ∈ graph g } :=
  LinearEquiv.trans (LinearEquiv.ofLeftInverse this)
    (LinearEquiv.ofEq (range φ₀) (graph g) (_ : range (prod id g) = graph g))
⊢ Continuous ↑g

tactic: exact (continuous_subtype_val.comp ψ.symm.continuous).snd
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_1
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
f : E →L[𝕜] F
inst✝¹ : CompleteSpace F
inst✝ : CompleteSpace E
g : E →ₗ[𝕜] F
hg : IsClosed ↑(graph g)
this✝ : CompleteSpace { x // x ∈ graph g } := Iff.mpr completeSpace_coe_iff_isComplete (IsClosed.isComplete hg)
φ₀ : E →ₗ[𝕜] E × F := prod id g
this : LeftInverse Prod.fst ↑φ₀
φ : E ≃ₗ[𝕜] { x // x ∈ graph g } :=
  LinearEquiv.trans (LinearEquiv.ofLeftInverse this)
    (LinearEquiv.ofEq (range φ₀) (graph g) (_ : range (prod id g) = graph g))
ψ : { x // x ∈ graph g } ≃L[𝕜] E :=
  LinearEquiv.toContinuousLinearEquivOfContinuous (LinearEquiv.symm φ) (_ : Continuous fun a => (↑a).fst)
⊢ Continuous ↑g