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

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✝⁷ : 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✝² : 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✝⁷ : 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✝² : 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: 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✝⁷ : 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✝² : 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✝⁷ : 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✝² : 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: haveI := 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✝⁷ : 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✝² : 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✝⁷ : 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✝² : 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 : IsSeparable (↥F⟮α⟯) E
⊢ finrank (↥F⟮α⟯) E = finrank (↥⊤) E

tactic: rw [IntermediateField.finrank_top, ← AlgHom.card_of_splits _ _ A, Fintype.card_eq_one_iff]
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✝⁷ : 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✝² : 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 : 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✝⁷ : 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✝² : 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 : 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✝⁷ : 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✝² : 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 : IsSeparable (↥F⟮α⟯) E
⊢ ∀ (x : E), Splits (algebraMap (↥F⟮α⟯) A) (minpoly (↥F⟮α⟯) x)

tactic: exact ⟨{ __ := φ, commutes' := fun _ ↦ rfl }, fun ψ ↦ AlgHom.restrictScalars_injective F <|
  Eq.symm <| h _ (ψ.commutes <| AdjoinSimple.gen F α).symm⟩
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✝⁷ : 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✝² : 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 : IsSeparable (↥F⟮α⟯) E
⊢ ∃ x, ∀ (y : E →ₐ[↥F⟮α⟯] A), y = x
state_after: no goals

tactic: exact fun x ↦ (IsIntegral.of_finite F x).minpoly_splits_tower_top (hA x)
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✝⁷ : 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✝² : 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 : IsSeparable (↥F⟮α⟯) E
⊢ ∀ (x : E), Splits (algebraMap (↥F⟮α⟯) A) (minpoly (↥F⟮α⟯) x)
state_after: no goals