File: Mathlib/FieldTheory/PurelyInseparable.lean

full_name: IsPurelyInseparable.isIntegral
code: /-- Typeclass for purely inseparable field extensions: an algebraic extension `E / F` is purely
inseparable if and only if the minimal polynomial of every element of `E ∖ F` is not separable. -/
class IsPurelyInseparable : Prop where
  isIntegral : Algebra.IsIntegral F E
  inseparable' (x : E) : IsSeparable F x → x ∈ (algebraMap F E).range
goal: Algebra.IsIntegral F E

full_name: IsPurelyInseparable
code: /-- Typeclass for purely inseparable field extensions: an algebraic extension `E / F` is purely
inseparable if and only if the minimal polynomial of every element of `E ∖ F` is not separable. -/
class IsPurelyInseparable : Prop where
  isIntegral : Algebra.IsIntegral F E
  inseparable' (x : E) : IsSeparable F x → x ∈ (algebraMap F E).range
goal: Prop

full_name: IsPurelyInseparable.inseparable'
code: /-- Typeclass for purely inseparable field extensions: an algebraic extension `E / F` is purely
inseparable if and only if the minimal polynomial of every element of `E ∖ F` is not separable. -/
class IsPurelyInseparable : Prop where
  isIntegral : Algebra.IsIntegral F E
  inseparable' (x : E) : IsSeparable F x → x ∈ (algebraMap F E).range
goal: IsSeparable F x → x ∈ (algebraMap F E).range

full_name: IsPurelyInseparable.isIntegral'
code: theorem IsPurelyInseparable.isIntegral' [IsPurelyInseparable F E] (x : E) : IsIntegral F x 
goal: IsIntegral F x

full_name: IsPurelyInseparable.isAlgebraic
code: theorem IsPurelyInseparable.isAlgebraic [IsPurelyInseparable F E] :
    Algebra.IsAlgebraic F E 
goal: Algebra.IsAlgebraic F E

full_name: IsPurelyInseparable.inseparable
code: theorem IsPurelyInseparable.inseparable [IsPurelyInseparable F E] :
    ∀ x : E, IsSeparable F x → x ∈ (algebraMap F E).range 
goal: IsSeparable F x → x ∈ (algebraMap F E).range

full_name: isPurelyInseparable_iff
code: theorem isPurelyInseparable_iff : IsPurelyInseparable F E ↔ ∀ x : E,
    IsIntegral F x ∧ (IsSeparable F x → x ∈ (algebraMap F E).range) 
goal: IsPurelyInseparable F E ↔ ∀ (x : E), IsIntegral F x ∧ (IsSeparable F x → x ∈ (algebraMap F E).range)

full_name: AlgEquiv.isPurelyInseparable
code: /-- Transfer `IsPurelyInseparable` across an `AlgEquiv`. -/
theorem AlgEquiv.isPurelyInseparable (e : K ≃ₐ[F] E) [IsPurelyInseparable F K] :
    IsPurelyInseparable F E 
goal: IsPurelyInseparable F E

full_name: AlgEquiv.isPurelyInseparable_iff
code: theorem AlgEquiv.isPurelyInseparable_iff (e : K ≃ₐ[F] E) :
    IsPurelyInseparable F K ↔ IsPurelyInseparable F E 
goal: IsPurelyInseparable F K ↔ IsPurelyInseparable F E

full_name: Algebra.IsAlgebraic.isPurelyInseparable_of_isSepClosed
code: /-- If `E / F` is an algebraic extension, `F` is separably closed,
then `E / F` is purely inseparable. -/
theorem Algebra.IsAlgebraic.isPurelyInseparable_of_isSepClosed [Algebra.IsAlgebraic F E]
    [IsSepClosed F] : IsPurelyInseparable F E 
goal: IsPurelyInseparable F E

full_name: IsPurelyInseparable.surjective_algebraMap_of_isSeparable
code: /-- If `E / F` is both purely inseparable and separable, then `algebraMap F E` is surjective. -/
theorem IsPurelyInseparable.surjective_algebraMap_of_isSeparable
    [IsPurelyInseparable F E] [Algebra.IsSeparable F E] : Function.Surjective (algebraMap F E) 
goal: Function.Surjective ⇑(algebraMap F E)

full_name: IsPurelyInseparable.bijective_algebraMap_of_isSeparable
code: /-- If `E / F` is both purely inseparable and separable, then `algebraMap F E` is bijective. -/
theorem IsPurelyInseparable.bijective_algebraMap_of_isSeparable
    [IsPurelyInseparable F E] [Algebra.IsSeparable F E] : Function.Bijective (algebraMap F E) 
goal: Function.Bijective ⇑(algebraMap F E)

full_name: IntermediateField.eq_bot_of_isPurelyInseparable_of_isSeparable
code: /-- If an intermediate field of `E / F` is both purely inseparable and separable, then it is equal
to `F`. -/
theorem IntermediateField.eq_bot_of_isPurelyInseparable_of_isSeparable (L : IntermediateField F E)
    [IsPurelyInseparable F L] [Algebra.IsSeparable F L] : L = ⊥ 
goal: L = ⊥

full_name: separableClosure.eq_bot_of_isPurelyInseparable
code: /-- If `E / F` is purely inseparable, then the separable closure of `F` in `E` is
equal to `F`. -/
theorem separableClosure.eq_bot_of_isPurelyInseparable [IsPurelyInseparable F E] :
    separableClosure F E = ⊥ 
goal: separableClosure F E = ⊥

full_name: separableClosure.eq_bot_iff
code: /-- If `E / F` is an algebraic extension, then the separable closure of `F` in `E` is
equal to `F` if and only if `E / F` is purely inseparable. -/
theorem separableClosure.eq_bot_iff [Algebra.IsAlgebraic F E] :
    separableClosure F E = ⊥ ↔ IsPurelyInseparable F E 
goal: separableClosure F E = ⊥ ↔ IsPurelyInseparable F E

full_name: isPurelyInseparable_self
code: instance isPurelyInseparable_self : IsPurelyInseparable F F 
goal: IsPurelyInseparable F F

full_name: isPurelyInseparable_iff_pow_mem
code: /-- A field extension `E / F` of exponential characteristic `q` is purely inseparable
if and only if for every element `x` of `E`, there exists a natural number `n` such that
`x ^ (q ^ n)` is contained in `F`. -/
theorem isPurelyInseparable_iff_pow_mem (q : ℕ) [ExpChar F q] :
    IsPurelyInseparable F E ↔ ∀ x : E, ∃ n : ℕ, x ^ q ^ n ∈ (algebraMap F E).range 
goal: IsPurelyInseparable F E ↔ ∀ (x : E), ∃ n, x ^ q ^ n ∈ (algebraMap F E).range

full_name: IsPurelyInseparable.pow_mem
code: theorem IsPurelyInseparable.pow_mem (q : ℕ) [ExpChar F q] [IsPurelyInseparable F E] (x : E) :
    ∃ n : ℕ, x ^ q ^ n ∈ (algebraMap F E).range 
goal: ∃ n, x ^ q ^ n ∈ (algebraMap F E).range

full_name: perfectClosure
code: /-- The relative perfect closure of `F` in `E`, consists of the elements `x` of `E` such that there
exists a natural number `n` such that `x ^ (ringExpChar F) ^ n` is contained in `F`, where
`ringExpChar F` is the exponential characteristic of `F`. It is also the maximal purely inseparable
subextension of `E / F` (`le_perfectClosure_iff`). -/
def perfectClosure : IntermediateField F E 
goal: IntermediateField F E

full_name: mem_perfectClosure_iff
code: theorem mem_perfectClosure_iff {x : E} :
    x ∈ perfectClosure F E ↔ ∃ n : ℕ, x ^ (ringExpChar F) ^ n ∈ (algebraMap F E).range 
goal: x ∈ perfectClosure F E ↔ ∃ n, x ^ ringExpChar F ^ n ∈ (algebraMap F E).range

full_name: mem_perfectClosure_iff_pow_mem
code: theorem mem_perfectClosure_iff_pow_mem (q : ℕ) [ExpChar F q] {x : E} :
    x ∈ perfectClosure F E ↔ ∃ n : ℕ, x ^ q ^ n ∈ (algebraMap F E).range 
goal: x ∈ perfectClosure F E ↔ ∃ n, x ^ q ^ n ∈ (algebraMap F E).range

full_name: mem_perfectClosure_iff_natSepDegree_eq_one
code: /-- An element is contained in the relative perfect closure if and only if its mininal polynomial
has separable degree one. -/
theorem mem_perfectClosure_iff_natSepDegree_eq_one {x : E} :
    x ∈ perfectClosure F E ↔ (minpoly F x).natSepDegree = 1 
goal: x ∈ perfectClosure F E ↔ (minpoly F x).natSepDegree = 1

full_name: isPurelyInseparable_iff_perfectClosure_eq_top
code: /-- A field extension `E / F` is purely inseparable if and only if the relative perfect closure of
`F` in `E` is equal to `E`. -/
theorem isPurelyInseparable_iff_perfectClosure_eq_top :
    IsPurelyInseparable F E ↔ perfectClosure F E = ⊤ 
goal: IsPurelyInseparable F E ↔ perfectClosure F E = ⊤

full_name: perfectClosure.isPurelyInseparable
code: /-- The relative perfect closure of `F` in `E` is purely inseparable over `F`. -/
instance perfectClosure.isPurelyInseparable : IsPurelyInseparable F (perfectClosure F E) 
goal: IsPurelyInseparable F ↥(perfectClosure F E)

full_name: perfectClosure.isAlgebraic
code: /-- The relative perfect closure of `F` in `E` is algebraic over `F`. -/
instance perfectClosure.isAlgebraic : Algebra.IsAlgebraic F (perfectClosure F E) 
goal: Algebra.IsAlgebraic F ↥(perfectClosure F E)

full_name: perfectClosure.eq_bot_of_isSeparable
code: /-- If `E / F` is separable, then the perfect closure of `F` in `E` is equal to `F`. Note that
  the converse is not necessarily true (see https://math.stackexchange.com/a/3009197)
  even when `E / F` is algebraic. -/
theorem perfectClosure.eq_bot_of_isSeparable [Algebra.IsSeparable F E] : perfectClosure F E = ⊥ 
goal: perfectClosure F E = ⊥

full_name: le_perfectClosure
code: /-- An intermediate field of `E / F` is contained in the relative perfect closure of `F` in `E`
if it is purely inseparable over `F`. -/
theorem le_perfectClosure (L : IntermediateField F E) [h : IsPurelyInseparable F L] :
    L ≤ perfectClosure F E 
goal: L ≤ perfectClosure F E

full_name: le_perfectClosure_iff
code: /-- An intermediate field of `E / F` is contained in the relative perfect closure of `F` in `E`
if and only if it is purely inseparable over `F`. -/
theorem le_perfectClosure_iff (L : IntermediateField F E) :
    L ≤ perfectClosure F E ↔ IsPurelyInseparable F L 
goal: L ≤ perfectClosure F E ↔ IsPurelyInseparable F ↥L

full_name: separableClosure_inf_perfectClosure
code: theorem separableClosure_inf_perfectClosure : separableClosure F E ⊓ perfectClosure F E = ⊥ 
goal: separableClosure F E ⊓ perfectClosure F E = ⊥

full_name: map_mem_perfectClosure_iff
code: /-- If `i` is an `F`-algebra homomorphism from `E` to `K`, then `i x` is contained in
`perfectClosure F K` if and only if `x` is contained in `perfectClosure F E`. -/
theorem map_mem_perfectClosure_iff (i : E →ₐ[F] K) {x : E} :
    i x ∈ perfectClosure F K ↔ x ∈ perfectClosure F E 
goal: i x ∈ perfectClosure F K ↔ x ∈ perfectClosure F E

full_name: perfectClosure.comap_eq_of_algHom
code: /-- If `i` is an `F`-algebra homomorphism from `E` to `K`, then the preimage of `perfectClosure F K`
under the map `i` is equal to `perfectClosure F E`. -/
theorem perfectClosure.comap_eq_of_algHom (i : E →ₐ[F] K) :
    (perfectClosure F K).comap i = perfectClosure F E 
goal: IntermediateField.comap i (perfectClosure F K) = perfectClosure F E

full_name: perfectClosure.map_le_of_algHom
code: /-- If `i` is an `F`-algebra homomorphism from `E` to `K`, then the image of `perfectClosure F E`
under the map `i` is contained in `perfectClosure F K`. -/
theorem perfectClosure.map_le_of_algHom (i : E →ₐ[F] K) :
    (perfectClosure F E).map i ≤ perfectClosure F K 
goal: IntermediateField.map i (perfectClosure F E) ≤ perfectClosure F K

full_name: perfectClosure.map_eq_of_algEquiv
code: /-- If `i` is an `F`-algebra isomorphism of `E` and `K`, then the image of `perfectClosure F E`
under the map `i` is equal to in `perfectClosure F K`. -/
theorem perfectClosure.map_eq_of_algEquiv (i : E ≃ₐ[F] K) :
    (perfectClosure F E).map i.toAlgHom = perfectClosure F K 
goal: IntermediateField.map (↑i) (perfectClosure F E) = perfectClosure F K

full_name: perfectClosure.algEquivOfAlgEquiv
code: /-- If `E` and `K` are isomorphic as `F`-algebras, then `perfectClosure F E` and
`perfectClosure F K` are also isomorphic as `F`-algebras. -/
def perfectClosure.algEquivOfAlgEquiv (i : E ≃ₐ[F] K) :
    perfectClosure F E ≃ₐ[F] perfectClosure F K 
goal: ↥(perfectClosure F E) ≃ₐ[F] ↥(perfectClosure F K)

full_name: perfectClosure.perfectRing
code: /-- If `E` is a perfect field of exponential characteristic `p`, then the (relative) perfect closure
`perfectClosure F E` is perfect. -/
instance perfectClosure.perfectRing (p : ℕ) [ExpChar E p]
    [PerfectRing E p] : PerfectRing (perfectClosure F E) p 
goal: PerfectRing (↥(perfectClosure F E)) p

full_name: perfectClosure.perfectField
code: /-- If `E` is a perfect field, then the (relative) perfect closure
`perfectClosure F E` is perfect. -/
instance perfectClosure.perfectField [PerfectField E] : PerfectField (perfectClosure F E) 
goal: PerfectField ↥(perfectClosure F E)

full_name: IsPurelyInseparable.tower_bot
code: /-- If `K / E / F` is a field extension tower such that `K / F` is purely inseparable,
then `E / F` is also purely inseparable. -/
theorem IsPurelyInseparable.tower_bot [Algebra E K] [IsScalarTower F E K]
    [IsPurelyInseparable F K] : IsPurelyInseparable F E 
goal: IsPurelyInseparable F E

full_name: IsPurelyInseparable.tower_top
code: /-- If `K / E / F` is a field extension tower such that `K / F` is purely inseparable,
then `K / E` is also purely inseparable. -/
theorem IsPurelyInseparable.tower_top [Algebra E K] [IsScalarTower F E K]
    [h : IsPurelyInseparable F K] : IsPurelyInseparable E K 
goal: IsPurelyInseparable E K

full_name: IsPurelyInseparable.trans
code: /-- If `E / F` and `K / E` are both purely inseparable extensions, then `K / F` is also
purely inseparable. -/
theorem IsPurelyInseparable.trans [Algebra E K] [IsScalarTower F E K]
    [h1 : IsPurelyInseparable F E] [h2 : IsPurelyInseparable E K] : IsPurelyInseparable F K 
goal: IsPurelyInseparable F K

full_name: isPurelyInseparable_iff_natSepDegree_eq_one
code: /-- A field extension `E / F` is purely inseparable if and only if for every element `x` of `E`,
its minimal polynomial has separable degree one. -/
theorem isPurelyInseparable_iff_natSepDegree_eq_one :
    IsPurelyInseparable F E ↔ ∀ x : E, (minpoly F x).natSepDegree = 1 
goal: IsPurelyInseparable F E ↔ ∀ (x : E), (minpoly F x).natSepDegree = 1

full_name: IsPurelyInseparable.natSepDegree_eq_one
code: theorem IsPurelyInseparable.natSepDegree_eq_one [IsPurelyInseparable F E] (x : E) :
    (minpoly F x).natSepDegree = 1 
goal: (minpoly F x).natSepDegree = 1

full_name: isPurelyInseparable_iff_minpoly_eq_X_pow_sub_C
code: /-- A field extension `E / F` of exponential characteristic `q` is purely inseparable
if and only if for every element `x` of `E`, the minimal polynomial of `x` over `F` is of form
`X ^ (q ^ n) - y` for some natural number `n` and some element `y` of `F`. -/
theorem isPurelyInseparable_iff_minpoly_eq_X_pow_sub_C (q : ℕ) [hF : ExpChar F q] :
    IsPurelyInseparable F E ↔ ∀ x : E, ∃ (n : ℕ) (y : F), minpoly F x = X ^ q ^ n - C y 
goal: IsPurelyInseparable F E ↔ ∀ (x : E), ∃ n y, minpoly F x = Polynomial.X ^ q ^ n - Polynomial.C y

full_name: IsPurelyInseparable.minpoly_eq_X_pow_sub_C
code: theorem IsPurelyInseparable.minpoly_eq_X_pow_sub_C (q : ℕ) [ExpChar F q] [IsPurelyInseparable F E]
    (x : E) : ∃ (n : ℕ) (y : F), minpoly F x = X ^ q ^ n - C y 
goal: ∃ n y, minpoly F x = Polynomial.X ^ q ^ n - Polynomial.C y

full_name: isPurelyInseparable_iff_minpoly_eq_X_sub_C_pow
code: /-- A field extension `E / F` of exponential characteristic `q` is purely inseparable
if and only if for every element `x` of `E`, the minimal polynomial of `x` over `F` is of form
`(X - x) ^ (q ^ n)` for some natural number `n`. -/
theorem isPurelyInseparable_iff_minpoly_eq_X_sub_C_pow (q : ℕ) [hF : ExpChar F q] :
    IsPurelyInseparable F E ↔
    ∀ x : E, ∃ n : ℕ, (minpoly F x).map (algebraMap F E) = (X - C x) ^ q ^ n 
goal: IsPurelyInseparable F E ↔
  ∀ (x : E), ∃ n, Polynomial.map (algebraMap F E) (minpoly F x) = (Polynomial.X - Polynomial.C x) ^ q ^ n

full_name: IsPurelyInseparable.minpoly_eq_X_sub_C_pow
code: theorem IsPurelyInseparable.minpoly_eq_X_sub_C_pow (q : ℕ) [ExpChar F q] [IsPurelyInseparable F E]
    (x : E) : ∃ n : ℕ, (minpoly F x).map (algebraMap F E) = (X - C x) ^ q ^ n 
goal: ∃ n, Polynomial.map (algebraMap F E) (minpoly F x) = (Polynomial.X - Polynomial.C x) ^ q ^ n

full_name: isPurelyInseparable_of_finSepDegree_eq_one
code: /-- If an algebraic extension has finite separable degree one, then it is purely inseparable. -/
theorem isPurelyInseparable_of_finSepDegree_eq_one [Algebra.IsAlgebraic F E]
    (hdeg : finSepDegree F E = 1) : IsPurelyInseparable F E 
goal: IsPurelyInseparable F E

full_name: IsPurelyInseparable.injective_comp_algebraMap
code: /-- If `E / F` is purely inseparable, then for any reduced ring `L`, the map `(E →+* L) → (F →+* L)`
induced by `algebraMap F E` is injective. In particular, a purely inseparable field extension
is an epimorphism in the category of fields. -/
theorem IsPurelyInseparable.injective_comp_algebraMap [IsPurelyInseparable F E]
    (L : Type w) [CommRing L] [IsReduced L] :
    Function.Injective fun f : E →+* L ↦ f.comp (algebraMap F E) 
goal: Function.Injective fun f => f.comp (algebraMap F E)

full_name: instSubsingletonAlgHomOfIsPurelyInseparable
code: /-- If `E / F` is purely inseparable, then for any reduced `F`-algebra `L`, there exists at most one
`F`-algebra homomorphism from `E` to `L`. -/
instance instSubsingletonAlgHomOfIsPurelyInseparable [IsPurelyInseparable F E] (L : Type w)
    [CommRing L] [IsReduced L] [Algebra F L] : Subsingleton (E →ₐ[F] L) 
goal: Subsingleton (E →ₐ[F] L)

full_name: instUniqueAlgHomOfIsPurelyInseparable
code: instance instUniqueAlgHomOfIsPurelyInseparable [IsPurelyInseparable F E] (L : Type w)
    [CommRing L] [IsReduced L] [Algebra F L] [Algebra E L] [IsScalarTower F E L] :
    Unique (E →ₐ[F] L) 
goal: Unique (E →ₐ[F] L)

full_name: instUniqueEmbOfIsPurelyInseparable
code: /-- If `E / F` is purely inseparable, then `Field.Emb F E` has exactly one element. -/
instance instUniqueEmbOfIsPurelyInseparable [IsPurelyInseparable F E] :
    Unique (Emb F E) 
goal: Unique (Field.Emb F E)

full_name: IsPurelyInseparable.finSepDegree_eq_one
code: /-- A purely inseparable extension has finite separable degree one. -/
theorem IsPurelyInseparable.finSepDegree_eq_one [IsPurelyInseparable F E] :
    finSepDegree F E = 1 
goal: Field.finSepDegree F E = 1

full_name: IsPurelyInseparable.sepDegree_eq_one
code: /-- A purely inseparable extension has separable degree one. -/
theorem IsPurelyInseparable.sepDegree_eq_one [IsPurelyInseparable F E] :
    sepDegree F E = 1 
goal: Field.sepDegree F E = 1

full_name: IsPurelyInseparable.insepDegree_eq
code: /-- A purely inseparable extension has inseparable degree equal to degree. -/
theorem IsPurelyInseparable.insepDegree_eq [IsPurelyInseparable F E] :
    insepDegree F E = Module.rank F E 
goal: Field.insepDegree F E = Module.rank F E

full_name: IsPurelyInseparable.finInsepDegree_eq
code: /-- A purely inseparable extension has finite inseparable degree equal to degree. -/
theorem IsPurelyInseparable.finInsepDegree_eq [IsPurelyInseparable F E] :
    finInsepDegree F E = finrank F E 
goal: Field.finInsepDegree F E = FiniteDimensional.finrank F E

full_name: isPurelyInseparable_iff_finSepDegree_eq_one
code: /-- An algebraic extension is purely inseparable if and only if it has finite separable
degree one. -/
theorem isPurelyInseparable_iff_finSepDegree_eq_one [Algebra.IsAlgebraic F E] :
    IsPurelyInseparable F E ↔ finSepDegree F E = 1 
goal: IsPurelyInseparable F E ↔ Field.finSepDegree F E = 1

full_name: isPurelyInseparable_iff_fd_isPurelyInseparable
code: /-- An algebraic extension is purely inseparable if and only if all of its finite dimensional
subextensions are purely inseparable. -/
theorem isPurelyInseparable_iff_fd_isPurelyInseparable [Algebra.IsAlgebraic F E] :
    IsPurelyInseparable F E ↔
    ∀ L : IntermediateField F E, FiniteDimensional F L → IsPurelyInseparable F L 
goal: IsPurelyInseparable F E ↔ ∀ (L : IntermediateField F E), FiniteDimensional F ↥L → IsPurelyInseparable F ↥L

full_name: IsPurelyInseparable.normal
code: /-- A purely inseparable extension is normal. -/
instance IsPurelyInseparable.normal [IsPurelyInseparable F E] : Normal F E 
goal: Normal F E

full_name: separableClosure.isPurelyInseparable
code: /-- If `E / F` is algebraic, then `E` is purely inseparable over the
separable closure of `F` in `E`. -/
theorem separableClosure.isPurelyInseparable [Algebra.IsAlgebraic F E] :
    IsPurelyInseparable (separableClosure F E) E 
goal: IsPurelyInseparable (↥(separableClosure F E)) E

full_name: separableClosure_le
code: /-- An intermediate field of `E / F` contains the separable closure of `F` in `E`
if `E` is purely inseparable over it. -/
theorem separableClosure_le (L : IntermediateField F E)
    [h : IsPurelyInseparable L E] : separableClosure F E ≤ L 
goal: separableClosure F E ≤ L

full_name: separableClosure_le_iff
code: /-- If `E / F` is algebraic, then an intermediate field of `E / F` contains the
separable closure of `F` in `E` if and only if `E` is purely inseparable over it. -/
theorem separableClosure_le_iff [Algebra.IsAlgebraic F E] (L : IntermediateField F E) :
    separableClosure F E ≤ L ↔ IsPurelyInseparable L E 
goal: separableClosure F E ≤ L ↔ IsPurelyInseparable (↥L) E

full_name: eq_separableClosure
code: /-- If an intermediate field of `E / F` is separable over `F`, and `E` is purely inseparable
over it, then it is equal to the separable closure of `F` in `E`. -/
theorem eq_separableClosure (L : IntermediateField F E)
    [Algebra.IsSeparable F L] [IsPurelyInseparable L E] : L = separableClosure F E 
goal: L = separableClosure F E

full_name: eq_separableClosure_iff
code: /-- If `E / F` is algebraic, then an intermediate field of `E / F` is equal to the separable closure
of `F` in `E` if and only if it is separable over `F`, and `E` is purely inseparable
over it. -/
theorem eq_separableClosure_iff [Algebra.IsAlgebraic F E] (L : IntermediateField F E) :
    L = separableClosure F E ↔ Algebra.IsSeparable F L ∧ IsPurelyInseparable L E 
goal: L = separableClosure F E ↔ Algebra.IsSeparable F ↥L ∧ IsPurelyInseparable (↥L) E

full_name: IntermediateField.isPurelyInseparable_bot
code: instance isPurelyInseparable_bot : IsPurelyInseparable F (⊥ : IntermediateField F E) 
goal: IsPurelyInseparable F ↥⊥

full_name: IntermediateField.isPurelyInseparable_adjoin_simple_iff_natSepDegree_eq_one
code: /-- `F⟮x⟯ / F` is a purely inseparable extension if and only if the mininal polynomial of `x`
has separable degree one. -/
theorem isPurelyInseparable_adjoin_simple_iff_natSepDegree_eq_one {x : E} :
    IsPurelyInseparable F F⟮x⟯ ↔ (minpoly F x).natSepDegree = 1 
goal: IsPurelyInseparable F ↥F⟮x⟯ ↔ (minpoly F x).natSepDegree = 1

full_name: IntermediateField.isPurelyInseparable_adjoin_simple_iff_pow_mem
code: /-- If `F` is of exponential characteristic `q`, then `F⟮x⟯ / F` is a purely inseparable extension
if and only if `x ^ (q ^ n)` is contained in `F` for some `n : ℕ`. -/
theorem isPurelyInseparable_adjoin_simple_iff_pow_mem (q : ℕ) [hF : ExpChar F q] {x : E} :
    IsPurelyInseparable F F⟮x⟯ ↔ ∃ n : ℕ, x ^ q ^ n ∈ (algebraMap F E).range 
goal: IsPurelyInseparable F ↥F⟮x⟯ ↔ ∃ n, x ^ q ^ n ∈ (algebraMap F E).range

full_name: IntermediateField.isPurelyInseparable_adjoin_iff_pow_mem
code: /-- If `F` is of exponential characteristic `q`, then `F(S) / F` is a purely inseparable extension
if and only if for any `x ∈ S`, `x ^ (q ^ n)` is contained in `F` for some `n : ℕ`. -/
theorem isPurelyInseparable_adjoin_iff_pow_mem (q : ℕ) [hF : ExpChar F q] {S : Set E} :
    IsPurelyInseparable F (adjoin F S) ↔ ∀ x ∈ S, ∃ n : ℕ, x ^ q ^ n ∈ (algebraMap F E).range 
goal: IsPurelyInseparable F ↥(IntermediateField.adjoin F S) ↔ ∀ x ∈ S, ∃ n, x ^ q ^ n ∈ (algebraMap F E).range

full_name: IntermediateField.isPurelyInseparable_sup
code: /-- A compositum of two purely inseparable extensions is purely inseparable. -/
instance isPurelyInseparable_sup (L1 L2 : IntermediateField F E)
    [h1 : IsPurelyInseparable F L1] [h2 : IsPurelyInseparable F L2] :
    IsPurelyInseparable F (L1 ⊔ L2 : IntermediateField F E) 
goal: IsPurelyInseparable F ↥(L1 ⊔ L2)

full_name: IntermediateField.isPurelyInseparable_iSup
code: /-- A compositum of purely inseparable extensions is purely inseparable. -/
instance isPurelyInseparable_iSup {ι : Sort*} {t : ι → IntermediateField F E}
    [h : ∀ i, IsPurelyInseparable F (t i)] :
    IsPurelyInseparable F (⨆ i, t i : IntermediateField F E) 
goal: IsPurelyInseparable F ↥(⨆ i, t i)

full_name: IntermediateField.adjoin_eq_adjoin_pow_expChar_pow_of_isSeparable
code: /-- If `F` is a field of exponential characteristic `q`, `F(S) / F` is separable, then
`F(S) = F(S ^ (q ^ n))` for any natural number `n`. -/
theorem adjoin_eq_adjoin_pow_expChar_pow_of_isSeparable (S : Set E)
    [Algebra.IsSeparable F (adjoin F S)] (q : ℕ) [ExpChar F q] (n : ℕ) :
    adjoin F S = adjoin F ((· ^ q ^ n) '' S) 
goal: IntermediateField.adjoin F S = IntermediateField.adjoin F ((fun x => x ^ q ^ n) '' S)

full_name: IntermediateField.adjoin_eq_adjoin_pow_expChar_pow_of_isSeparable'
code: /-- If `E / F` is a separable field extension of exponential characteristic `q`, then
`F(S) = F(S ^ (q ^ n))` for any subset `S` of `E` and any natural number `n`. -/
theorem adjoin_eq_adjoin_pow_expChar_pow_of_isSeparable' [Algebra.IsSeparable F E] (S : Set E)
    (q : ℕ) [ExpChar F q] (n : ℕ) : adjoin F S = adjoin F ((· ^ q ^ n) '' S) 
goal: IntermediateField.adjoin F S = IntermediateField.adjoin F ((fun x => x ^ q ^ n) '' S)

full_name: IntermediateField.adjoin_eq_adjoin_pow_expChar_of_isSeparable
code: /-- If `F` is a field of exponential characteristic `q`, `F(S) / F` is separable, then
`F(S) = F(S ^ q)`. -/
theorem adjoin_eq_adjoin_pow_expChar_of_isSeparable (S : Set E) [Algebra.IsSeparable F (adjoin F S)]
    (q : ℕ) [ExpChar F q] : adjoin F S = adjoin F ((· ^ q) '' S) 
goal: IntermediateField.adjoin F S = IntermediateField.adjoin F ((fun x => x ^ q) '' S)

full_name: IntermediateField.adjoin_eq_adjoin_pow_expChar_of_isSeparable'
code: /-- If `E / F` is a separable field extension of exponential characteristic `q`, then
`F(S) = F(S ^ q)` for any subset `S` of `E`. -/
theorem adjoin_eq_adjoin_pow_expChar_of_isSeparable' [Algebra.IsSeparable F E] (S : Set E)
    (q : ℕ) [ExpChar F q] : adjoin F S = adjoin F ((· ^ q) '' S) 
goal: IntermediateField.adjoin F S = IntermediateField.adjoin F ((fun x => x ^ q) '' S)

full_name: Field.span_map_pow_expChar_pow_eq_top_of_isSeparable
code: /-- If `E / F` is a separable extension of exponential characteristic `q`, if `{ u_i }` is a family
of elements of `E` which `F`-linearly spans `E`, then `{ u_i ^ (q ^ n) }` also `F`-linearly spans
`E` for any natural number `n`. -/
theorem Field.span_map_pow_expChar_pow_eq_top_of_isSeparable [Algebra.IsSeparable F E]
    (h : Submodule.span F (Set.range v) = ⊤) :
    Submodule.span F (Set.range (v · ^ q ^ n)) = ⊤ 
goal: Submodule.span F (Set.range fun x => v x ^ q ^ n) = ⊤

full_name: _private.Mathlib.FieldTheory.PurelyInseparable.0.LinearIndependent.map_pow_expChar_pow_of_fd_isSeparable
code: /-- If `E / F` is a finite separable extension of exponential characteristic `q`, if `{ u_i }` is a
family of elements of `E` which is `F`-linearly independent, then `{ u_i ^ (q ^ n) }` is also
`F`-linearly independent for any natural number `n`. A special case of
`LinearIndependent.map_pow_expChar_pow_of_isSeparable`
and is an intermediate result used to prove it. -/
private theorem LinearIndependent.map_pow_expChar_pow_of_fd_isSeparable
    [FiniteDimensional F E] [Algebra.IsSeparable F E]
    (h : LinearIndependent F v) : LinearIndependent F (v · ^ q ^ n) 
goal: LinearIndependent F fun x => v x ^ q ^ n

full_name: LinearIndependent.map_pow_expChar_pow_of_isSeparable
code: /-- If `E / F` is a separable extension of exponential characteristic `q`, if `{ u_i }` is a
family of elements of `E` which is `F`-linearly independent, then `{ u_i ^ (q ^ n) }` is also
`F`-linearly independent for any natural number `n`. -/
theorem LinearIndependent.map_pow_expChar_pow_of_isSeparable [Algebra.IsSeparable F E]
    (h : LinearIndependent F v) : LinearIndependent F (v · ^ q ^ n) 
goal: LinearIndependent F fun x => v x ^ q ^ n

full_name: LinearIndependent.map_pow_expChar_pow_of_isIntegral'
code: /-- If `E / F` is a field extension of exponential characteristic `q`, if `{ u_i }` is a
family of separable elements of `E` which is `F`-linearly independent, then `{ u_i ^ (q ^ n) }`
is also `F`-linearly independent for any natural number `n`. -/
theorem LinearIndependent.map_pow_expChar_pow_of_isIntegral'
    (hsep : ∀ i : ι, IsSeparable F (v i))
    (h : LinearIndependent F v) : LinearIndependent F (v · ^ q ^ n) 
goal: LinearIndependent F fun x => v x ^ q ^ n

full_name: Basis.mapPowExpCharPowOfIsSeparable
code: /-- If `E / F` is a separable extension of exponential characteristic `q`, if `{ u_i }` is an
`F`-basis of `E`, then `{ u_i ^ (q ^ n) }` is also an `F`-basis of `E`
for any natural number `n`. -/
def Basis.mapPowExpCharPowOfIsSeparable [Algebra.IsSeparable F E]
    (b : Basis ι F E) : Basis ι F E 
goal: Basis ι F E

full_name: isSepClosed_iff_isPurelyInseparable_algebraicClosure
code: /-- If `E` is an algebraic closure of `F`, then `F` is separably closed if and only if `E / F` is
purely inseparable. -/
theorem isSepClosed_iff_isPurelyInseparable_algebraicClosure [IsAlgClosure F E] :
    IsSepClosed F ↔ IsPurelyInseparable F E 
goal: IsSepClosed F ↔ IsPurelyInseparable F E

full_name: Algebra.IsAlgebraic.isSepClosed
code: /-- If `E / F` is an algebraic extension, `F` is separably closed,
then `E` is also separably closed. -/
theorem Algebra.IsAlgebraic.isSepClosed [Algebra.IsAlgebraic F E]
    [IsSepClosed F] : IsSepClosed E 
goal: IsSepClosed E

full_name: perfectField_of_perfectClosure_eq_bot
code: theorem perfectField_of_perfectClosure_eq_bot [h : PerfectField E] (eq : perfectClosure F E = ⊥) :
    PerfectField F 
goal: PerfectField F

full_name: perfectField_of_isSeparable_of_perfectField_top
code: /-- If `E / F` is a separable extension, `E` is perfect, then `F` is also prefect. -/
theorem perfectField_of_isSeparable_of_perfectField_top [Algebra.IsSeparable F E] [PerfectField E] :
    PerfectField F 
goal: PerfectField F

full_name: perfectField_iff_isSeparable_algebraicClosure
code: /-- If `E` is an algebraic closure of `F`, then `F` is perfect if and only if `E / F` is
separable. -/
theorem perfectField_iff_isSeparable_algebraicClosure [IsAlgClosure F E] :
    PerfectField F ↔ Algebra.IsSeparable F E 
goal: PerfectField F ↔ Algebra.IsSeparable F E

full_name: Field.finSepDegree_eq
code: /-- If `E / F` is algebraic, then the `Field.finSepDegree F E` is equal to `Field.sepDegree F E`
as a natural number. This means that the cardinality of `Field.Emb F E` and the degree of
`(separableClosure F E) / F` are both finite or infinite, and when they are finite, they
coincide. -/
theorem finSepDegree_eq [Algebra.IsAlgebraic F E] :
    finSepDegree F E = Cardinal.toNat (sepDegree F E) 
goal: Field.finSepDegree F E = Cardinal.toNat (Field.sepDegree F E)

full_name: Field.finSepDegree_mul_finInsepDegree
code: /-- The finite separable degree multiply by the finite inseparable degree is equal
to the (finite) field extension degree. -/
theorem finSepDegree_mul_finInsepDegree : finSepDegree F E * finInsepDegree F E = finrank F E 
goal: Field.finSepDegree F E * Field.finInsepDegree F E = FiniteDimensional.finrank F E

full_name: separableClosure.adjoin_eq_of_isAlgebraic_of_isSeparable
code: /-- If `K / E / F` is a field extension tower, such that `E / F` is algebraic and `K / E`
is separable, then `E` adjoin `separableClosure F K` is equal to `K`. It is a special case of
`separableClosure.adjoin_eq_of_isAlgebraic`, and is an intermediate result used to prove it. -/
lemma adjoin_eq_of_isAlgebraic_of_isSeparable [Algebra.IsAlgebraic F E]
    [Algebra.IsSeparable E K] : adjoin E (separableClosure F K : Set K) = ⊤ 
goal: IntermediateField.adjoin E ↑(separableClosure F K) = ⊤

full_name: separableClosure.adjoin_eq_of_isAlgebraic
code: /-- If `K / E / F` is a field extension tower, such that `E / F` is algebraic, then
`E` adjoin `separableClosure F K` is equal to `separableClosure E K`. -/
theorem adjoin_eq_of_isAlgebraic [Algebra.IsAlgebraic F E] :
    adjoin E (separableClosure F K) = separableClosure E K 
goal: IntermediateField.adjoin E ↑(separableClosure F K) = separableClosure E K

full_name: LinearIndependent.map_of_isPurelyInseparable_of_isSeparable
code: /-- If `K / E / F` is a field extension tower such that `E / F` is purely inseparable,
if `{ u_i }` is a family of separable elements of `K` which is `F`-linearly independent,
then it is also `E`-linearly independent. -/
theorem LinearIndependent.map_of_isPurelyInseparable_of_isSeparable [IsPurelyInseparable F E]
    {ι : Type*} {v : ι → K} (hsep : ∀ i : ι, IsSeparable F (v i))
    (h : LinearIndependent F v) : LinearIndependent E v 
goal: LinearIndependent E v

full_name: Field.sepDegree_eq_of_isPurelyInseparable_of_isSeparable
code: /-- If `K / E / F` is a field extension tower, such that `E / F` is purely inseparable and `K / E`
is separable, then the separable degree of `K / F` is equal to the degree of `K / E`.
It is a special case of `Field.lift_sepDegree_mul_lift_sepDegree_of_isAlgebraic`, and is an
intermediate result used to prove it. -/
lemma sepDegree_eq_of_isPurelyInseparable_of_isSeparable
    [IsPurelyInseparable F E] [Algebra.IsSeparable E K] : sepDegree F K = Module.rank E K 
goal: Field.sepDegree F K = Module.rank E K

full_name: Field.lift_rank_mul_lift_sepDegree_of_isSeparable
code: /-- If `K / E / F` is a field extension tower, such that `E / F` is separable,
then $[E:F] [K:E]_s = [K:F]_s$.
It is a special case of `Field.lift_sepDegree_mul_lift_sepDegree_of_isAlgebraic`, and is an
intermediate result used to prove it. -/
lemma lift_rank_mul_lift_sepDegree_of_isSeparable [Algebra.IsSeparable F E] :
    Cardinal.lift.{w} (Module.rank F E) * Cardinal.lift.{v} (sepDegree E K) =
    Cardinal.lift.{v} (sepDegree F K) 
goal: Cardinal.lift.{w, v} (Module.rank F E) * Cardinal.lift.{v, w} (Field.sepDegree E K) =
  Cardinal.lift.{v, w} (Field.sepDegree F K)

full_name: Field.rank_mul_sepDegree_of_isSeparable
code: /-- The same-universe version of `Field.lift_rank_mul_lift_sepDegree_of_isSeparable`. -/
lemma rank_mul_sepDegree_of_isSeparable (K : Type v) [Field K] [Algebra F K]
    [Algebra E K] [IsScalarTower F E K] [Algebra.IsSeparable F E] :
    Module.rank F E * sepDegree E K = sepDegree F K 
goal: Module.rank F E * Field.sepDegree E K = Field.sepDegree F K

full_name: Field.sepDegree_eq_of_isPurelyInseparable
code: /-- If `K / E / F` is a field extension tower, such that `E / F` is purely inseparable,
then $[K:F]_s = [K:E]_s$.
It is a special case of `Field.lift_sepDegree_mul_lift_sepDegree_of_isAlgebraic`, and is an
intermediate result used to prove it. -/
lemma sepDegree_eq_of_isPurelyInseparable [IsPurelyInseparable F E] :
    sepDegree F K = sepDegree E K 
goal: Field.sepDegree F K = Field.sepDegree E K

full_name: Field.lift_sepDegree_mul_lift_sepDegree_of_isAlgebraic
code: /-- If `K / E / F` is a field extension tower, such that `E / F` is algebraic, then their
separable degrees satisfy the tower law: $[E:F]_s [K:E]_s = [K:F]_s$. -/
theorem lift_sepDegree_mul_lift_sepDegree_of_isAlgebraic [Algebra.IsAlgebraic F E] :
    Cardinal.lift.{w} (sepDegree F E) * Cardinal.lift.{v} (sepDegree E K) =
    Cardinal.lift.{v} (sepDegree F K) 
goal: Cardinal.lift.{w, v} (Field.sepDegree F E) * Cardinal.lift.{v, w} (Field.sepDegree E K) =
  Cardinal.lift.{v, w} (Field.sepDegree F K)

full_name: Field.sepDegree_mul_sepDegree_of_isAlgebraic
code: /-- The same-universe version of `Field.lift_sepDegree_mul_lift_sepDegree_of_isAlgebraic`. -/
theorem sepDegree_mul_sepDegree_of_isAlgebraic (K : Type v) [Field K] [Algebra F K]
    [Algebra E K] [IsScalarTower F E K] [Algebra.IsAlgebraic F E] :
    sepDegree F E * sepDegree E K = sepDegree F K 
goal: Field.sepDegree F E * Field.sepDegree E K = Field.sepDegree F K

full_name: IntermediateField.sepDegree_adjoin_eq_of_isAlgebraic_of_isPurelyInseparable
code: /-- If `K / E / F` is a field extension tower, such that `E / F` is purely inseparable, then
for any subset `S` of `K` such that `F(S) / F` is algebraic, the `E(S) / E` and `F(S) / F` have
the same separable degree. -/
theorem IntermediateField.sepDegree_adjoin_eq_of_isAlgebraic_of_isPurelyInseparable
    (S : Set K) [Algebra.IsAlgebraic F (adjoin F S)] [IsPurelyInseparable F E] :
    sepDegree E (adjoin E S) = sepDegree F (adjoin F S) 
goal: Field.sepDegree E ↥(IntermediateField.adjoin E S) = Field.sepDegree F ↥(IntermediateField.adjoin F S)

full_name: IntermediateField.sepDegree_adjoin_eq_of_isAlgebraic_of_isPurelyInseparable'
code: /-- If `K / E / F` is a field extension tower, such that `E / F` is purely inseparable, then
for any intermediate field `S` of `K / F` such that `S / F` is algebraic, the `E(S) / E` and
`S / F` have the same separable degree. -/
theorem IntermediateField.sepDegree_adjoin_eq_of_isAlgebraic_of_isPurelyInseparable'
    (S : IntermediateField F K) [Algebra.IsAlgebraic F S] [IsPurelyInseparable F E] :
    sepDegree E (adjoin E (S : Set K)) = sepDegree F S 
goal: Field.sepDegree E ↥(IntermediateField.adjoin E ↑S) = Field.sepDegree F ↥S

full_name: minpoly.map_eq_of_isSeparable_of_isPurelyInseparable
code: /-- If `K / E / F` is a field extension tower, such that `E / F` is purely inseparable, then
for any element `x` of `K` separable over `F`, it has the same minimal polynomials over `F` and
over `E`. -/
theorem minpoly.map_eq_of_isSeparable_of_isPurelyInseparable (x : K)
    (hsep : IsSeparable F x) [IsPurelyInseparable F E] :
    (minpoly F x).map (algebraMap F E) = minpoly E x 
goal: Polynomial.map (algebraMap F E) (minpoly F x) = minpoly E x

full_name: Polynomial.Separable.map_irreducible_of_isPurelyInseparable
code: /-- If `E / F` is a purely inseparable field extension, `f` is a separable irreducible polynomial
over `F`, then it is also irreducible over `E`. -/
theorem Polynomial.Separable.map_irreducible_of_isPurelyInseparable {f : F[X]} (hsep : f.Separable)
    (hirr : Irreducible f) [IsPurelyInseparable F E] : Irreducible (f.map (algebraMap F E)) 
goal: Irreducible (Polynomial.map (algebraMap F E) f)