File: Mathlib/RingTheory/Polynomial/SeparableDegree.lean

full_name: Polynomial.IsSeparableContraction
code: /-- A separable contraction of a polynomial `f` is a separable polynomial `g` such that
`g(x^(q^m)) = f(x)` for some `m : ℕ`. -/
def IsSeparableContraction (f : F[X]) (g : F[X]) : Prop 
goal: Prop

full_name: Polynomial.HasSeparableContraction
code: /-- The condition of having a separable contraction. -/
def HasSeparableContraction (f : F[X]) : Prop 
goal: Prop

full_name: Polynomial.HasSeparableContraction.contraction
code: /-- A choice of a separable contraction. -/
def HasSeparableContraction.contraction : F[X] 
goal: Polynomial F

full_name: Polynomial.HasSeparableContraction.degree
code: /-- The separable degree of a polynomial is the degree of a given separable contraction. -/
def HasSeparableContraction.degree : ℕ 
goal: ℕ

full_name: Polynomial.HasSeparableContraction.isSeparableContraction
code: /-- The `HasSeparableContraction.contraction` is indeed a separable contraction. -/
theorem HasSeparableContraction.isSeparableContraction :
    IsSeparableContraction q f hf.contraction 
goal: Polynomial.IsSeparableContraction q f hf.contraction

full_name: Polynomial.IsSeparableContraction.dvd_degree'
code: /-- The separable degree divides the degree, in function of the exponential characteristic of F. -/
theorem IsSeparableContraction.dvd_degree' {g} (hf : IsSeparableContraction q f g) :
    ∃ m : ℕ, g.natDegree * q ^ m = f.natDegree 
goal: Polynomial.IsSeparableContraction q f g → ∃ m, g.natDegree * q ^ m = f.natDegree

full_name: Polynomial.HasSeparableContraction.dvd_degree'
code: theorem HasSeparableContraction.dvd_degree' : ∃ m : ℕ, hf.degree * q ^ m = f.natDegree 
goal: ∃ m, hf.degree * q ^ m = f.natDegree

full_name: Polynomial.HasSeparableContraction.dvd_degree
code: /-- The separable degree divides the degree. -/
theorem HasSeparableContraction.dvd_degree : hf.degree ∣ f.natDegree 
goal: hf.degree ∣ f.natDegree

full_name: Polynomial.HasSeparableContraction.eq_degree
code: /-- In exponential characteristic one, the separable degree equals the degree. -/
theorem HasSeparableContraction.eq_degree {f : F[X]} (hf : HasSeparableContraction 1 f) :
    hf.degree = f.natDegree 
goal: hf.degree = f.natDegree

full_name: Irreducible.hasSeparableContraction
code: /-- Every irreducible polynomial can be contracted to a separable polynomial.
https://stacks.math.columbia.edu/tag/09H0 -/
theorem _root_.Irreducible.hasSeparableContraction (q : ℕ) [hF : ExpChar F q] {f : F[X]}
    (irred : Irreducible f) : HasSeparableContraction q f 
goal: Polynomial.HasSeparableContraction q f

full_name: Polynomial.contraction_degree_eq_or_insep
code: /-- If two expansions (along the positive characteristic) of two separable polynomials `g` and `g'`
agree, then they have the same degree. -/
theorem contraction_degree_eq_or_insep [hq : NeZero q] [CharP F q] (g g' : F[X]) (m m' : ℕ)
    (h_expand : expand F (q ^ m) g = expand F (q ^ m') g') (hg : g.Separable) (hg' : g'.Separable) :
    g.natDegree = g'.natDegree 
goal: g.natDegree = g'.natDegree

full_name: Polynomial.IsSeparableContraction.degree_eq
code: /-- The separable degree equals the degree of any separable contraction, i.e., it is unique. -/
theorem IsSeparableContraction.degree_eq [hF : ExpChar F q] (g : F[X])
    (hg : IsSeparableContraction q f g) : g.natDegree = hf.degree 
goal: g.natDegree = hf.degree