Theorem: Field.primitive_element_iff_algHom_eq_of_eval
File: Mathlib/FieldTheory/PrimitiveElement.lean

Proof steps:
state_before: F✝ : Type u_1
E✝ : Type u_2
inst✝¹¹ : Field F✝
inst✝¹⁰ : Field E✝
inst✝⁹ : Algebra F✝ E✝
inst✝⁸ : FiniteDimensional F✝ E✝
inst✝⁷ : Algebra.IsSeparable F✝ E✝
F : Type u_3
E : Type u_4
inst✝⁶ : Field F
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : FiniteDimensional F E
inst✝² : Algebra.IsSeparable F E
A : Type u_5
inst✝¹ : Field A
inst✝ : Algebra F A
hA : ∀ (x : E), Splits (algebraMap F A) (minpoly F x)
α : E
φ : E →ₐ[F] A
⊢ F⟮α⟯ = ⊤ ↔ ∀ (ψ : E →ₐ[F] A), φ α = ψ α → φ = ψ
state_after: F✝ : Type u_1
E✝ : Type u_2
inst✝¹¹ : Field F✝
inst✝¹⁰ : Field E✝
inst✝⁹ : Algebra F✝ E✝
inst✝⁸ : FiniteDimensional F✝ E✝
inst✝⁷ : Algebra.IsSeparable F✝ E✝
F : Type u_3
E : Type u_4
inst✝⁶ : Field F
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : FiniteDimensional F E
inst✝² : Algebra.IsSeparable F E
A : Type u_5
inst✝¹ : Field A
inst✝ : Algebra F A
hA : ∀ (x : E), Splits (algebraMap F A) (minpoly F x)
α : E
φ : E →ₐ[F] A
h : ∀ (ψ : E →ₐ[F] A), φ α = ψ α → φ = ψ
⊢ finrank (↥F⟮α⟯) E = finrank (↥⊤) E
tactic: refine ⟨fun h ψ hψ ↦ (Field.primitive_element_iff_algHom_eq_of_eval' F A hA α).mp h hψ,
    fun h ↦ eq_of_le_of_finrank_eq' le_top ?_⟩
state_before: F✝ : Type u_1
E✝ : Type u_2
inst✝¹¹ : Field F✝
inst✝¹⁰ : Field E✝
inst✝⁹ : Algebra F✝ E✝
inst✝⁸ : FiniteDimensional F✝ E✝
inst✝⁷ : Algebra.IsSeparable F✝ E✝
F : Type u_3
E : Type u_4
inst✝⁶ : Field F
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : FiniteDimensional F E
inst✝² : Algebra.IsSeparable F E
A : Type u_5
inst✝¹ : Field A
inst✝ : Algebra F A
hA : ∀ (x : E), Splits (algebraMap F A) (minpoly F x)
α : E
φ : E →ₐ[F] A
h : ∀ (ψ : E →ₐ[F] A), φ α = ψ α → φ = ψ
⊢ finrank (↥F⟮α⟯) E = finrank (↥⊤) E
state_after: F✝ : Type u_1
E✝ : Type u_2
inst✝¹¹ : Field F✝
inst✝¹⁰ : Field E✝
inst✝⁹ : Algebra F✝ E✝
inst✝⁸ : FiniteDimensional F✝ E✝
inst✝⁷ : Algebra.IsSeparable F✝ E✝
F : Type u_3
E : Type u_4
inst✝⁶ : Field F
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : FiniteDimensional F E
inst✝² : Algebra.IsSeparable F E
A : Type u_5
inst✝¹ : Field A
inst✝ : Algebra F A
hA : ∀ (x : E), Splits (algebraMap F A) (minpoly F x)
α : E
φ : E →ₐ[F] A
h : ∀ (ψ : E →ₐ[F] A), φ α = ψ α → φ = ψ
this : Algebra (↥F⟮α⟯) A := (φ.comp F⟮α⟯.val).toAlgebra
⊢ finrank (↥F⟮α⟯) E = finrank (↥⊤) E
tactic: letI : Algebra F⟮α⟯ A := (φ.comp F⟮α⟯.val).toAlgebra
state_before: F✝ : Type u_1
E✝ : Type u_2
inst✝¹¹ : Field F✝
inst✝¹⁰ : Field E✝
inst✝⁹ : Algebra F✝ E✝
inst✝⁸ : FiniteDimensional F✝ E✝
inst✝⁷ : Algebra.IsSeparable F✝ E✝
F : Type u_3
E : Type u_4
inst✝⁶ : Field F
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : FiniteDimensional F E
inst✝² : Algebra.IsSeparable F E
A : Type u_5
inst✝¹ : Field A
inst✝ : Algebra F A
hA : ∀ (x : E), Splits (algebraMap F A) (minpoly F x)
α : E
φ : E →ₐ[F] A
h : ∀ (ψ : E →ₐ[F] A), φ α = ψ α → φ = ψ
this : Algebra (↥F⟮α⟯) A := (φ.comp F⟮α⟯.val).toAlgebra
⊢ finrank (↥F⟮α⟯) E = finrank (↥⊤) E
state_after: F✝ : Type u_1
E✝ : Type u_2
inst✝¹¹ : Field F✝
inst✝¹⁰ : Field E✝
inst✝⁹ : Algebra F✝ E✝
inst✝⁸ : FiniteDimensional F✝ E✝
inst✝⁷ : Algebra.IsSeparable F✝ E✝
F : Type u_3
E : Type u_4
inst✝⁶ : Field F
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : FiniteDimensional F E
inst✝² : Algebra.IsSeparable F E
A : Type u_5
inst✝¹ : Field A
inst✝ : Algebra F A
hA : ∀ (x : E), Splits (algebraMap F A) (minpoly F x)
α : E
φ : E →ₐ[F] A
h : ∀ (ψ : E →ₐ[F] A), φ α = ψ α → φ = ψ
this✝ : Algebra (↥F⟮α⟯) A := (φ.comp F⟮α⟯.val).toAlgebra
this : Algebra.IsSeparable (↥F⟮α⟯) E
⊢ finrank (↥F⟮α⟯) E = finrank (↥⊤) E
tactic: haveI := Algebra.isSeparable_tower_top_of_isSeparable F F⟮α⟯ E
state_before: F✝ : Type u_1
E✝ : Type u_2
inst✝¹¹ : Field F✝
inst✝¹⁰ : Field E✝
inst✝⁹ : Algebra F✝ E✝
inst✝⁸ : FiniteDimensional F✝ E✝
inst✝⁷ : Algebra.IsSeparable F✝ E✝
F : Type u_3
E : Type u_4
inst✝⁶ : Field F
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : FiniteDimensional F E
inst✝² : Algebra.IsSeparable F E
A : Type u_5
inst✝¹ : Field A
inst✝ : Algebra F A
hA : ∀ (x : E), Splits (algebraMap F A) (minpoly F x)
α : E
φ : E →ₐ[F] A
h : ∀ (ψ : E →ₐ[F] A), φ α = ψ α → φ = ψ
this✝ : Algebra (↥F⟮α⟯) A := (φ.comp F⟮α⟯.val).toAlgebra
this : Algebra.IsSeparable (↥F⟮α⟯) E
⊢ finrank (↥F⟮α⟯) E = finrank (↥⊤) E
state_after: F✝ : Type u_1
E✝ : Type u_2
inst✝¹¹ : Field F✝
inst✝¹⁰ : Field E✝
inst✝⁹ : Algebra F✝ E✝
inst✝⁸ : FiniteDimensional F✝ E✝
inst✝⁷ : Algebra.IsSeparable F✝ E✝
F : Type u_3
E : Type u_4
inst✝⁶ : Field F
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : FiniteDimensional F E
inst✝² : Algebra.IsSeparable F E
A : Type u_5
inst✝¹ : Field A
inst✝ : Algebra F A
hA : ∀ (x : E), Splits (algebraMap F A) (minpoly F x)
α : E
φ : E →ₐ[F] A
h : ∀ (ψ : E →ₐ[F] A), φ α = ψ α → φ = ψ
this✝ : Algebra (↥F⟮α⟯) A := (φ.comp F⟮α⟯.val).toAlgebra
this : Algebra.IsSeparable (↥F⟮α⟯) E
⊢ ∃ x, ∀ (y : E →ₐ[↥F⟮α⟯] A), y = x

F✝ : Type u_1
E✝ : Type u_2
inst✝¹¹ : Field F✝
inst✝¹⁰ : Field E✝
inst✝⁹ : Algebra F✝ E✝
inst✝⁸ : FiniteDimensional F✝ E✝
inst✝⁷ : Algebra.IsSeparable F✝ E✝
F : Type u_3
E : Type u_4
inst✝⁶ : Field F
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : FiniteDimensional F E
inst✝² : Algebra.IsSeparable F E
A : Type u_5
inst✝¹ : Field A
inst✝ : Algebra F A
hA : ∀ (x : E), Splits (algebraMap F A) (minpoly F x)
α : E
φ : E →ₐ[F] A
h : ∀ (ψ : E →ₐ[F] A), φ α = ψ α → φ = ψ
this✝ : Algebra (↥F⟮α⟯) A := (φ.comp F⟮α⟯.val).toAlgebra
this : Algebra.IsSeparable (↥F⟮α⟯) E
⊢ ∀ (x : E), Splits (algebraMap (↥F⟮α⟯) A) (minpoly (↥F⟮α⟯) x)
tactic: rw [IntermediateField.finrank_top, ← AlgHom.card_of_splits _ _ A, Fintype.card_eq_one_iff]