Theorem: SeparatingDual.dualMap_surjective_iff
File: Mathlib/Analysis/NormedSpace/HahnBanach/SeparatingDual.lean

Proof steps:
state_before: R : Type u_1
V : Type u_2
inst✝¹⁰ : Field R
inst✝⁹ : AddCommGroup V
inst✝⁸ : TopologicalSpace R
inst✝⁷ : TopologicalSpace V
inst✝⁶ : TopologicalRing R
inst✝⁵ : TopologicalAddGroup V
inst✝⁴ : Module R V
inst✝³ : SeparatingDual R V
W : Type u_3
inst✝² : AddCommGroup W
inst✝¹ : Module R W
inst✝ : FiniteDimensional R W
f : W →ₗ[R] V
⊢ Surjective (⇑f.dualMap ∘ ContinuousLinearMap.toLinearMap) ↔ Injective ⇑f
state_after: case mp
R : Type u_1
V : Type u_2
inst✝¹⁰ : Field R
inst✝⁹ : AddCommGroup V
inst✝⁸ : TopologicalSpace R
inst✝⁷ : TopologicalSpace V
inst✝⁶ : TopologicalRing R
inst✝⁵ : TopologicalAddGroup V
inst✝⁴ : Module R V
inst✝³ : SeparatingDual R V
W : Type u_3
inst✝² : AddCommGroup W
inst✝¹ : Module R W
inst✝ : FiniteDimensional R W
f : W →ₗ[R] V
hf : Surjective (⇑f.dualMap ∘ ContinuousLinearMap.toLinearMap)
⊢ Injective ⇑f

case mpr
R : Type u_1
V : Type u_2
inst✝¹⁰ : Field R
inst✝⁹ : AddCommGroup V
inst✝⁸ : TopologicalSpace R
inst✝⁷ : TopologicalSpace V
inst✝⁶ : TopologicalRing R
inst✝⁵ : TopologicalAddGroup V
inst✝⁴ : Module R V
inst✝³ : SeparatingDual R V
W : Type u_3
inst✝² : AddCommGroup W
inst✝¹ : Module R W
inst✝ : FiniteDimensional R W
f : W →ₗ[R] V
hf : Injective ⇑f
⊢ Surjective (⇑f.dualMap ∘ ContinuousLinearMap.toLinearMap)
tactic: constructor <;> intro hf
state_before: case mpr
R : Type u_1
V : Type u_2
inst✝¹⁰ : Field R
inst✝⁹ : AddCommGroup V
inst✝⁸ : TopologicalSpace R
inst✝⁷ : TopologicalSpace V
inst✝⁶ : TopologicalRing R
inst✝⁵ : TopologicalAddGroup V
inst✝⁴ : Module R V
inst✝³ : SeparatingDual R V
W : Type u_3
inst✝² : AddCommGroup W
inst✝¹ : Module R W
inst✝ : FiniteDimensional R W
f : W →ₗ[R] V
hf : Injective ⇑f
⊢ Surjective (⇑f.dualMap ∘ ContinuousLinearMap.toLinearMap)
state_after: case mpr
R : Type u_1
V : Type u_2
inst✝¹⁰ : Field R
inst✝⁹ : AddCommGroup V
inst✝⁸ : TopologicalSpace R
inst✝⁷ : TopologicalSpace V
inst✝⁶ : TopologicalRing R
inst✝⁵ : TopologicalAddGroup V
inst✝⁴ : Module R V
inst✝³ : SeparatingDual R V
W : Type u_3
inst✝² : AddCommGroup W
inst✝¹ : Module R W
inst✝ : FiniteDimensional R W
f : W →ₗ[R] V
hf : Injective ⇑f
this : Injective (⇑(ContinuousLinearMap.coeLM R).flip ∘ ⇑f)
⊢ Surjective (⇑f.dualMap ∘ ContinuousLinearMap.toLinearMap)
tactic: have := (separatingDual_iff_injective.mp ‹_›).comp hf
state_before: case mpr
R : Type u_1
V : Type u_2
inst✝¹⁰ : Field R
inst✝⁹ : AddCommGroup V
inst✝⁸ : TopologicalSpace R
inst✝⁷ : TopologicalSpace V
inst✝⁶ : TopologicalRing R
inst✝⁵ : TopologicalAddGroup V
inst✝⁴ : Module R V
inst✝³ : SeparatingDual R V
W : Type u_3
inst✝² : AddCommGroup W
inst✝¹ : Module R W
inst✝ : FiniteDimensional R W
f : W →ₗ[R] V
hf : Injective ⇑f
this : Injective (⇑(ContinuousLinearMap.coeLM R).flip ∘ ⇑f)
⊢ Surjective (⇑f.dualMap ∘ ContinuousLinearMap.toLinearMap)
state_after: case mpr
R : Type u_1
V : Type u_2
inst✝¹⁰ : Field R
inst✝⁹ : AddCommGroup V
inst✝⁸ : TopologicalSpace R
inst✝⁷ : TopologicalSpace V
inst✝⁶ : TopologicalRing R
inst✝⁵ : TopologicalAddGroup V
inst✝⁴ : Module R V
inst✝³ : SeparatingDual R V
W : Type u_3
inst✝² : AddCommGroup W
inst✝¹ : Module R W
inst✝ : FiniteDimensional R W
f : W →ₗ[R] V
hf : Injective ⇑f
this : Injective ⇑((ContinuousLinearMap.coeLM R).flip ∘ₗ f)
⊢ Surjective (⇑f.dualMap ∘ ContinuousLinearMap.toLinearMap)
tactic: rw [← LinearMap.coe_comp] at this
state_before: case mpr
R : Type u_1
V : Type u_2
inst✝¹⁰ : Field R
inst✝⁹ : AddCommGroup V
inst✝⁸ : TopologicalSpace R
inst✝⁷ : TopologicalSpace V
inst✝⁶ : TopologicalRing R
inst✝⁵ : TopologicalAddGroup V
inst✝⁴ : Module R V
inst✝³ : SeparatingDual R V
W : Type u_3
inst✝² : AddCommGroup W
inst✝¹ : Module R W
inst✝ : FiniteDimensional R W
f : W →ₗ[R] V
hf : Injective ⇑f
this : Injective ⇑((ContinuousLinearMap.coeLM R).flip ∘ₗ f)
⊢ Surjective (⇑f.dualMap ∘ ContinuousLinearMap.toLinearMap)
state_after: no goals
tactic: exact LinearMap.flip_surjective_iff₁.mpr this