File: Mathlib/FieldTheory/PrimitiveElement.lean

full_name: Field.exists_primitive_element_of_finite_top
code: /-- **Primitive element theorem** assuming E is finite. -/
theorem exists_primitive_element_of_finite_top [Finite E] : ∃ α : E, F⟮α⟯ = ⊤ 
goal: ∃ α, F⟮α⟯ = ⊤

full_name: Field.exists_primitive_element_of_finite_bot
code: /-- Primitive element theorem for finite dimensional extension of a finite field. -/
theorem exists_primitive_element_of_finite_bot [Finite F] [FiniteDimensional F E] :
    ∃ α : E, F⟮α⟯ = ⊤ 
goal: ∃ α, F⟮α⟯ = ⊤

full_name: Field.primitive_element_inf_aux_exists_c
code: theorem primitive_element_inf_aux_exists_c (f g : F[X]) :
    ∃ c : F, ∀ α' ∈ (f.map ϕ).roots, ∀ β' ∈ (g.map ϕ).roots, -(α' - α) / (β' - β) ≠ ϕ c 
goal: ∃ c, ∀ α' ∈ (Polynomial.map ϕ f).roots, ∀ β' ∈ (Polynomial.map ϕ g).roots, -(α' - α) / (β' - β) ≠ ϕ c

full_name: Field.primitive_element_inf_aux
code: /-- This is the heart of the proof of the primitive element theorem. It shows that if `F` is
infinite and `α` and `β` are separable over `F` then `F⟮α, β⟯` is generated by a single element. -/
theorem primitive_element_inf_aux [Algebra.IsSeparable F E] : ∃ γ : E, F⟮α, β⟯ = F⟮γ⟯ 
goal: ∃ γ, F⟮α, β⟯ = F⟮γ⟯

full_name: _private.Mathlib.FieldTheory.PrimitiveElement.0.Field.primitive_element_inf_aux_of_finite_intermediateField
code: private theorem primitive_element_inf_aux_of_finite_intermediateField
    [Finite (IntermediateField F E)] : ∃ γ : E, F⟮α, β⟯ = F⟮γ⟯ 
goal: ∃ γ, F⟮α, β⟯ = F⟮γ⟯

full_name: Field.exists_primitive_element
code: /-- **Primitive element theorem**: a finite separable field extension `E` of `F` has a
  primitive element, i.e. there is an `α ∈ E` such that `F⟮α⟯ = (⊤ : Subalgebra F E)`. -/
theorem exists_primitive_element : ∃ α : E, F⟮α⟯ = ⊤ 
goal: ∃ α, F⟮α⟯ = ⊤

full_name: Field.powerBasisOfFiniteOfSeparable
code: /-- Alternative phrasing of primitive element theorem:
a finite separable field extension has a basis `1, α, α^2, ..., α^n`.

See also `exists_primitive_element`. -/
noncomputable def powerBasisOfFiniteOfSeparable : PowerBasis F E 
goal: PowerBasis F E

full_name: Field.isAlgebraic_of_adjoin_eq_adjoin
code: theorem isAlgebraic_of_adjoin_eq_adjoin {α : E} {m n : ℕ} (hneq : m ≠ n)
    (heq : F⟮α ^ m⟯ = F⟮α ^ n⟯) : IsAlgebraic F α 
goal: IsAlgebraic F α

full_name: Field.isAlgebraic_of_finite_intermediateField
code: theorem isAlgebraic_of_finite_intermediateField
    [Finite (IntermediateField F E)] : Algebra.IsAlgebraic F E 
goal: Algebra.IsAlgebraic F E

full_name: Field.FiniteDimensional.of_finite_intermediateField
code: theorem FiniteDimensional.of_finite_intermediateField
    [Finite (IntermediateField F E)] : FiniteDimensional F E 
goal: FiniteDimensional F E

full_name: Field.exists_primitive_element_of_finite_intermediateField
code: theorem exists_primitive_element_of_finite_intermediateField
    [Finite (IntermediateField F E)] (K : IntermediateField F E) : ∃ α : E, F⟮α⟯ = K 
goal: ∃ α, F⟮α⟯ = K

full_name: Field.FiniteDimensional.of_exists_primitive_element
code: theorem FiniteDimensional.of_exists_primitive_element [Algebra.IsAlgebraic F E]
    (h : ∃ α : E, F⟮α⟯ = ⊤) : FiniteDimensional F E 
goal: FiniteDimensional F E

full_name: Field.finite_intermediateField_of_exists_primitive_element
code: theorem finite_intermediateField_of_exists_primitive_element [Algebra.IsAlgebraic F E]
    (h : ∃ α : E, F⟮α⟯ = ⊤) : Finite (IntermediateField F E) 
goal: Finite (IntermediateField F E)

full_name: Field.exists_primitive_element_iff_finite_intermediateField
code: /-- **Steinitz theorem**: an algebraic extension `E` of `F` has a
  primitive element (i.e. there is an `α ∈ E` such that `F⟮α⟯ = (⊤ : Subalgebra F E)`)
  if and only if there exist only finitely many intermediate fields between `E` and `F`. -/
theorem exists_primitive_element_iff_finite_intermediateField :
    (Algebra.IsAlgebraic F E ∧ ∃ α : E, F⟮α⟯ = ⊤) ↔ Finite (IntermediateField F E) 
goal: (Algebra.IsAlgebraic F E ∧ ∃ α, F⟮α⟯ = ⊤) ↔ Finite (IntermediateField F E)

full_name: AlgHom.card
code: @[simp]
theorem AlgHom.card (K : Type*) [Field K] [IsAlgClosed K] [Algebra F K] :
    Fintype.card (E →ₐ[F] K) = finrank F E 
goal: Fintype.card (E →ₐ[F] K) = FiniteDimensional.finrank F E

full_name: AlgHom.card_of_splits
code: @[simp]
theorem AlgHom.card_of_splits (L : Type*) [Field L] [Algebra F L]
    (hL : ∀ x : E, (minpoly F x).Splits (algebraMap F L)) :
    Fintype.card (E →ₐ[F] L) = finrank F E 
goal: Fintype.card (E →ₐ[F] L) = FiniteDimensional.finrank F E

full_name: Field.primitive_element_iff_minpoly_natDegree_eq
code: theorem primitive_element_iff_minpoly_natDegree_eq (α : E) :
    F⟮α⟯ = ⊤ ↔ (minpoly F α).natDegree = finrank F E 
goal: F⟮α⟯ = ⊤ ↔ (minpoly F α).natDegree = FiniteDimensional.finrank F E

full_name: Field.primitive_element_iff_minpoly_degree_eq
code: theorem primitive_element_iff_minpoly_degree_eq (α : E) :
    F⟮α⟯ = ⊤ ↔ (minpoly F α).degree = finrank F E 
goal: F⟮α⟯ = ⊤ ↔ (minpoly F α).degree = ↑(FiniteDimensional.finrank F E)

full_name: Field.primitive_element_iff_algHom_eq_of_eval'
code: theorem primitive_element_iff_algHom_eq_of_eval' (α : E) :
    F⟮α⟯ = ⊤ ↔ Function.Injective fun φ : E →ₐ[F] A ↦ φ α 
goal: F⟮α⟯ = ⊤ ↔ Function.Injective fun φ => φ α

full_name: Field.primitive_element_iff_algHom_eq_of_eval
code: theorem primitive_element_iff_algHom_eq_of_eval (α : E)
    (φ : E →ₐ[F] A) : F⟮α⟯ = ⊤ ↔ ∀ ψ : E →ₐ[F] A, φ α = ψ α → φ = ψ 
goal: F⟮α⟯ = ⊤ ↔ ∀ (ψ : E →ₐ[F] A), φ α = ψ α → φ = ψ