Theorem: ContinuousLinearMap.exist_extension_of_finiteDimensional_range
File: Mathlib/Analysis/NormedSpace/HahnBanach/Extension.lean

tactic: set b := finBasis 𝕜 (LinearMap.range f)
state_before: 𝕜 : Type u_1
inst✝⁵ : RCLike 𝕜
E : Type u_2
F : Type u_3
inst✝⁴ : SeminormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : Submodule 𝕜 E
f : ↥p →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(LinearMap.range f)
⊢ ∃ g, f = g.comp p.subtypeL
state_after: 𝕜 : Type u_1
inst✝⁵ : RCLike 𝕜
E : Type u_2
F : Type u_3
inst✝⁴ : SeminormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : Submodule 𝕜 E
f : ↥p →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(LinearMap.range f)
b : Basis (Fin (finrank 𝕜 ↥(LinearMap.range f))) 𝕜 ↥(LinearMap.range f) := finBasis 𝕜 ↥(LinearMap.range f)
⊢ ∃ g, f = g.comp p.subtypeL

tactic: set e := b.equivFunL
state_before: 𝕜 : Type u_1
inst✝⁵ : RCLike 𝕜
E : Type u_2
F : Type u_3
inst✝⁴ : SeminormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : Submodule 𝕜 E
f : ↥p →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(LinearMap.range f)
b : Basis (Fin (finrank 𝕜 ↥(LinearMap.range f))) 𝕜 ↥(LinearMap.range f) := finBasis 𝕜 ↥(LinearMap.range f)
⊢ ∃ g, f = g.comp p.subtypeL
state_after: 𝕜 : Type u_1
inst✝⁵ : RCLike 𝕜
E : Type u_2
F : Type u_3
inst✝⁴ : SeminormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : Submodule 𝕜 E
f : ↥p →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(LinearMap.range f)
b : Basis (Fin (finrank 𝕜 ↥(LinearMap.range f))) 𝕜 ↥(LinearMap.range f) := finBasis 𝕜 ↥(LinearMap.range f)
e : ↥(LinearMap.range f) ≃L[𝕜] Fin (finrank 𝕜 ↥(LinearMap.range f)) → 𝕜 := b.equivFunL
⊢ ∃ g, f = g.comp p.subtypeL

tactic: set fi := fun i ↦ (LinearMap.toContinuousLinearMap (b.coord i)).comp
  (f.codRestrict _ <| LinearMap.mem_range_self _)
state_before: 𝕜 : Type u_1
inst✝⁵ : RCLike 𝕜
E : Type u_2
F : Type u_3
inst✝⁴ : SeminormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : Submodule 𝕜 E
f : ↥p →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(LinearMap.range f)
b : Basis (Fin (finrank 𝕜 ↥(LinearMap.range f))) 𝕜 ↥(LinearMap.range f) := finBasis 𝕜 ↥(LinearMap.range f)
e : ↥(LinearMap.range f) ≃L[𝕜] Fin (finrank 𝕜 ↥(LinearMap.range f)) → 𝕜 := b.equivFunL
⊢ ∃ g, f = g.comp p.subtypeL
state_after: 𝕜 : Type u_1
inst✝⁵ : RCLike 𝕜
E : Type u_2
F : Type u_3
inst✝⁴ : SeminormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : Submodule 𝕜 E
f : ↥p →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(LinearMap.range f)
b : Basis (Fin (finrank 𝕜 ↥(LinearMap.range f))) 𝕜 ↥(LinearMap.range f) := finBasis 𝕜 ↥(LinearMap.range f)
e : ↥(LinearMap.range f) ≃L[𝕜] Fin (finrank 𝕜 ↥(LinearMap.range f)) → 𝕜 := b.equivFunL
fi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → ↥p →L[𝕜] 𝕜 :=
  fun i => (LinearMap.toContinuousLinearMap (b.coord i)).comp (f.codRestrict (LinearMap.range f) ⋯)
⊢ ∃ g, f = g.comp p.subtypeL

tactic: choose gi hgf _ using fun i ↦ exists_extension_norm_eq p (fi i)
state_before: 𝕜 : Type u_1
inst✝⁵ : RCLike 𝕜
E : Type u_2
F : Type u_3
inst✝⁴ : SeminormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : Submodule 𝕜 E
f : ↥p →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(LinearMap.range f)
b : Basis (Fin (finrank 𝕜 ↥(LinearMap.range f))) 𝕜 ↥(LinearMap.range f) := finBasis 𝕜 ↥(LinearMap.range f)
e : ↥(LinearMap.range f) ≃L[𝕜] Fin (finrank 𝕜 ↥(LinearMap.range f)) → 𝕜 := b.equivFunL
fi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → ↥p →L[𝕜] 𝕜 :=
  fun i => (LinearMap.toContinuousLinearMap (b.coord i)).comp (f.codRestrict (LinearMap.range f) ⋯)
⊢ ∃ g, f = g.comp p.subtypeL
state_after: 𝕜 : Type u_1
inst✝⁵ : RCLike 𝕜
E : Type u_2
F : Type u_3
inst✝⁴ : SeminormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : Submodule 𝕜 E
f : ↥p →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(LinearMap.range f)
b : Basis (Fin (finrank 𝕜 ↥(LinearMap.range f))) 𝕜 ↥(LinearMap.range f) := finBasis 𝕜 ↥(LinearMap.range f)
e : ↥(LinearMap.range f) ≃L[𝕜] Fin (finrank 𝕜 ↥(LinearMap.range f)) → 𝕜 := b.equivFunL
fi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → ↥p →L[𝕜] 𝕜 :=
  fun i => (LinearMap.toContinuousLinearMap (b.coord i)).comp (f.codRestrict (LinearMap.range f) ⋯)
gi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → E →L[𝕜] 𝕜
hgf : ∀ (i : Fin (finrank 𝕜 ↥(LinearMap.range f))) (x : ↥p), (gi i) ↑x = (fi i) x
a✝ : ∀ (i : Fin (finrank 𝕜 ↥(LinearMap.range f))), ‖gi i‖ = ‖fi i‖
⊢ ∃ g, f = g.comp p.subtypeL

tactic: use (LinearMap.range f).subtypeL.comp <| e.symm.toContinuousLinearMap.comp (.pi gi)
state_before: 𝕜 : Type u_1
inst✝⁵ : RCLike 𝕜
E : Type u_2
F : Type u_3
inst✝⁴ : SeminormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : Submodule 𝕜 E
f : ↥p →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(LinearMap.range f)
b : Basis (Fin (finrank 𝕜 ↥(LinearMap.range f))) 𝕜 ↥(LinearMap.range f) := finBasis 𝕜 ↥(LinearMap.range f)
e : ↥(LinearMap.range f) ≃L[𝕜] Fin (finrank 𝕜 ↥(LinearMap.range f)) → 𝕜 := b.equivFunL
fi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → ↥p →L[𝕜] 𝕜 :=
  fun i => (LinearMap.toContinuousLinearMap (b.coord i)).comp (f.codRestrict (LinearMap.range f) ⋯)
gi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → E →L[𝕜] 𝕜
hgf : ∀ (i : Fin (finrank 𝕜 ↥(LinearMap.range f))) (x : ↥p), (gi i) ↑x = (fi i) x
a✝ : ∀ (i : Fin (finrank 𝕜 ↥(LinearMap.range f))), ‖gi i‖ = ‖fi i‖
⊢ ∃ g, f = g.comp p.subtypeL
state_after: case h
𝕜 : Type u_1
inst✝⁵ : RCLike 𝕜
E : Type u_2
F : Type u_3
inst✝⁴ : SeminormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : Submodule 𝕜 E
f : ↥p →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(LinearMap.range f)
b : Basis (Fin (finrank 𝕜 ↥(LinearMap.range f))) 𝕜 ↥(LinearMap.range f) := finBasis 𝕜 ↥(LinearMap.range f)
e : ↥(LinearMap.range f) ≃L[𝕜] Fin (finrank 𝕜 ↥(LinearMap.range f)) → 𝕜 := b.equivFunL
fi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → ↥p →L[𝕜] 𝕜 :=
  fun i => (LinearMap.toContinuousLinearMap (b.coord i)).comp (f.codRestrict (LinearMap.range f) ⋯)
gi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → E →L[𝕜] 𝕜
hgf : ∀ (i : Fin (finrank 𝕜 ↥(LinearMap.range f))) (x : ↥p), (gi i) ↑x = (fi i) x
a✝ : ∀ (i : Fin (finrank 𝕜 ↥(LinearMap.range f))), ‖gi i‖ = ‖fi i‖
⊢ f = ((LinearMap.range f).subtypeL.comp ((↑e.symm).comp (pi gi))).comp p.subtypeL

tactic: ext x
state_before: case h
𝕜 : Type u_1
inst✝⁵ : RCLike 𝕜
E : Type u_2
F : Type u_3
inst✝⁴ : SeminormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : Submodule 𝕜 E
f : ↥p →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(LinearMap.range f)
b : Basis (Fin (finrank 𝕜 ↥(LinearMap.range f))) 𝕜 ↥(LinearMap.range f) := finBasis 𝕜 ↥(LinearMap.range f)
e : ↥(LinearMap.range f) ≃L[𝕜] Fin (finrank 𝕜 ↥(LinearMap.range f)) → 𝕜 := b.equivFunL
fi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → ↥p →L[𝕜] 𝕜 :=
  fun i => (LinearMap.toContinuousLinearMap (b.coord i)).comp (f.codRestrict (LinearMap.range f) ⋯)
gi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → E →L[𝕜] 𝕜
hgf : ∀ (i : Fin (finrank 𝕜 ↥(LinearMap.range f))) (x : ↥p), (gi i) ↑x = (fi i) x
a✝ : ∀ (i : Fin (finrank 𝕜 ↥(LinearMap.range f))), ‖gi i‖ = ‖fi i‖
⊢ f = ((LinearMap.range f).subtypeL.comp ((↑e.symm).comp (pi gi))).comp p.subtypeL
state_after: case h.h
𝕜 : Type u_1
inst✝⁵ : RCLike 𝕜
E : Type u_2
F : Type u_3
inst✝⁴ : SeminormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : Submodule 𝕜 E
f : ↥p →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(LinearMap.range f)
b : Basis (Fin (finrank 𝕜 ↥(LinearMap.range f))) 𝕜 ↥(LinearMap.range f) := finBasis 𝕜 ↥(LinearMap.range f)
e : ↥(LinearMap.range f) ≃L[𝕜] Fin (finrank 𝕜 ↥(LinearMap.range f)) → 𝕜 := b.equivFunL
fi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → ↥p →L[𝕜] 𝕜 :=
  fun i => (LinearMap.toContinuousLinearMap (b.coord i)).comp (f.codRestrict (LinearMap.range f) ⋯)
gi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → E →L[𝕜] 𝕜
hgf : ∀ (i : Fin (finrank 𝕜 ↥(LinearMap.range f))) (x : ↥p), (gi i) ↑x = (fi i) x
a✝ : ∀ (i : Fin (finrank 𝕜 ↥(LinearMap.range f))), ‖gi i‖ = ‖fi i‖
x : ↥p
⊢ f x = (((LinearMap.range f).subtypeL.comp ((↑e.symm).comp (pi gi))).comp p.subtypeL) x

tactic: simp [fi, e, hgf]
state_before: case h.h
𝕜 : Type u_1
inst✝⁵ : RCLike 𝕜
E : Type u_2
F : Type u_3
inst✝⁴ : SeminormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : Submodule 𝕜 E
f : ↥p →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(LinearMap.range f)
b : Basis (Fin (finrank 𝕜 ↥(LinearMap.range f))) 𝕜 ↥(LinearMap.range f) := finBasis 𝕜 ↥(LinearMap.range f)
e : ↥(LinearMap.range f) ≃L[𝕜] Fin (finrank 𝕜 ↥(LinearMap.range f)) → 𝕜 := b.equivFunL
fi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → ↥p →L[𝕜] 𝕜 :=
  fun i => (LinearMap.toContinuousLinearMap (b.coord i)).comp (f.codRestrict (LinearMap.range f) ⋯)
gi : Fin (finrank 𝕜 ↥(LinearMap.range f)) → E →L[𝕜] 𝕜
hgf : ∀ (i : Fin (finrank 𝕜 ↥(LinearMap.range f))) (x : ↥p), (gi i) ↑x = (fi i) x
a✝ : ∀ (i : Fin (finrank 𝕜 ↥(LinearMap.range f))), ‖gi i‖ = ‖fi i‖
x : ↥p
⊢ f x = (((LinearMap.range f).subtypeL.comp ((↑e.symm).comp (pi gi))).comp p.subtypeL) x
state_after: no goals