ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Polynomial.Gal.restrictDvd_def
theorem restrictDvd_def [Decidable (q = 0)] (hpq : p ∣ q) :
    restrictDvd hpq =
      if hq : q = 0 then 1
      else
        @restrict F _ p _ _ _
          ⟨splits_of_splits_of_dvd (algebraMap F q.SplittingField) hq (SplittingField.splits q)
              hpq⟩ 
Arguments: {F : Type u_1} [Field F] {p q : F[X]} [Decidable (q = 0)] (hpq : p ∣ q)
Goal: Polynomial.Gal.restrictDvd hpq = if hq : q = 0 then 1 else Polynomial.Gal.restrict p q.SplittingField
-- Polynomial.Gal.restrictDvd_surjective
theorem restrictDvd_surjective (hpq : p ∣ q) (hq : q ≠ 0) :
    Function.Surjective (restrictDvd hpq) 
Arguments: {F : Type u_1} [Field F] {p q : F[X]} (hpq : p ∣ q) (hq : q ≠ 0)
Goal: Function.Surjective ⇑(Polynomial.Gal.restrictDvd hpq)
-- Polynomial.Gal.restrictProd_injective
theorem restrictProd_injective : Function.Injective (restrictProd p q) 
Arguments: {F : Type u_1} [Field F] (p q : F[X])
Goal: Function.Injective ⇑(Polynomial.Gal.restrictProd p q)
-- Polynomial.Gal.mul_splits_in_splittingField_of_mul
theorem mul_splits_in_splittingField_of_mul {p₁ q₁ p₂ q₂ : F[X]} (hq₁ : q₁ ≠ 0) (hq₂ : q₂ ≠ 0)
    (h₁ : p₁.Splits (algebraMap F q₁.SplittingField))
    (h₂ : p₂.Splits (algebraMap F q₂.SplittingField)) :
    (p₁ * p₂).Splits (algebraMap F (q₁ * q₂).SplittingField) 
Arguments: {F : Type u_1} [Field F] {p₁ q₁ p₂ q₂ : F[X]} (hq₁ : q₁ ≠ 0) (hq₂ : q₂ ≠ 0) (h₁ : Polynomial.Splits (algebraMap F q₁.SplittingField) p₁) (h₂ : Polynomial.Splits (algebraMap F q₂.SplittingField) p₂)
Goal: Polynomial.Splits (algebraMap F (q₁ * q₂).SplittingField) (p₁ * p₂)
-- Polynomial.Gal.splits_in_splittingField_of_comp
theorem splits_in_splittingField_of_comp (hq : q.natDegree ≠ 0) :
    p.Splits (algebraMap F (p.comp q).SplittingField) 
Arguments: {F : Type u_1} [Field F] (p q : F[X]) (hq : q.natDegree ≠ 0)
Goal: Polynomial.Splits (algebraMap F (p.comp q).SplittingField) p
-- Polynomial.Gal.restrictComp_surjective
theorem restrictComp_surjective (hq : q.natDegree ≠ 0) :
    Function.Surjective (restrictComp p q hq) 
Arguments: {F : Type u_1} [Field F] (p q : F[X]) (hq : q.natDegree ≠ 0)
Goal: Function.Surjective ⇑(Polynomial.Gal.restrictComp p q hq)
-- Polynomial.Gal.card_of_separable
theorem card_of_separable (hp : p.Separable) : Fintype.card p.Gal = finrank F p.SplittingField 
Arguments: {F : Type u_1} [Field F] {p : F[X]} (hp : p.Separable)
Goal: Fintype.card p.Gal = FiniteDimensional.finrank F p.SplittingField
-- Polynomial.Gal.prime_degree_dvd_card
theorem prime_degree_dvd_card [CharZero F] (p_irr : Irreducible p) (p_deg : p.natDegree.Prime) :
    p.natDegree ∣ Fintype.card p.Gal 
Arguments: {F : Type u_1} [Field F] {p : F[X]} [CharZero F] (p_irr : Irreducible p) (p_deg : Nat.Prime p.natDegree)
Goal: p.natDegree ∣ Fintype.card p.Gal
-- minpoly.isIntegrallyClosed_eq_field_fractions
theorem isIntegrallyClosed_eq_field_fractions [IsDomain S] {s : S} (hs : IsIntegral R s) :
    minpoly K (algebraMap S L s) = (minpoly R s).map (algebraMap R K) 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] (K : Type u_3) (L : Type u_4) [Field K] [Algebra R K] [IsFractionRing R K] [CommRing L] [Nontrivial L] [Algebra R L] [Algebra S L] [Algebra K L] [IsScalarTower R K L] [IsScalarTower R S L] [IsIntegrallyClosed R] [IsDomain S] {s : S} (hs : IsIntegral R s)
Goal: minpoly K ((algebraMap S L) s) = Polynomial.map (algebraMap R K) (minpoly R s)
-- minpoly.isIntegrallyClosed_eq_field_fractions'
theorem isIntegrallyClosed_eq_field_fractions' [IsDomain S] [Algebra K S] [IsScalarTower R K S]
    {s : S} (hs : IsIntegral R s) : minpoly K s = (minpoly R s).map (algebraMap R K) 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] (K : Type u_3) [Field K] [Algebra R K] [IsFractionRing R K] [IsIntegrallyClosed R] [IsDomain S] [Algebra K S] [IsScalarTower R K S] {s : S} (hs : IsIntegral R s)
Goal: minpoly K s = Polynomial.map (algebraMap R K) (minpoly R s)
-- minpoly.isIntegrallyClosed_dvd
theorem isIntegrallyClosed_dvd {s : S} (hs : IsIntegral R s) {p : R[X]}
    (hp : Polynomial.aeval s p = 0) : minpoly R s ∣ p 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] [IsDomain S] [NoZeroSMulDivisors R S] [IsIntegrallyClosed R] {s : S} (hs : IsIntegral R s) {p : R[X]} (hp : (Polynomial.aeval s) p = 0)
Goal: minpoly R s ∣ p
-- minpoly.isIntegrallyClosed_dvd_iff
theorem isIntegrallyClosed_dvd_iff {s : S} (hs : IsIntegral R s) (p : R[X]) :
    Polynomial.aeval s p = 0 ↔ minpoly R s ∣ p 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] [IsDomain S] [NoZeroSMulDivisors R S] [IsIntegrallyClosed R] {s : S} (hs : IsIntegral R s) (p : R[X])
Goal: (Polynomial.aeval s) p = 0 ↔ minpoly R s ∣ p
-- minpoly.ker_eval
theorem ker_eval {s : S} (hs : IsIntegral R s) :
    RingHom.ker ((Polynomial.aeval s).toRingHom : R[X] →+* S) =
    Ideal.span ({minpoly R s} : Set R[X]) 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] [IsDomain S] [NoZeroSMulDivisors R S] [IsIntegrallyClosed R] {s : S} (hs : IsIntegral R s)
Goal: RingHom.ker (Polynomial.aeval s).toRingHom = Ideal.span {minpoly R s}
-- minpoly.IsIntegrallyClosed.degree_le_of_ne_zero
theorem IsIntegrallyClosed.degree_le_of_ne_zero {s : S} (hs : IsIntegral R s) {p : R[X]}
    (hp0 : p ≠ 0) (hp : Polynomial.aeval s p = 0) : degree (minpoly R s) ≤ degree p 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] [IsDomain S] [NoZeroSMulDivisors R S] [IsIntegrallyClosed R] {s : S} (hs : IsIntegral R s) {p : R[X]} (hp0 : p ≠ 0) (hp : (Polynomial.aeval s) p = 0)
Goal: (minpoly R s).degree ≤ p.degree
-- IsIntegrallyClosed.minpoly.unique
theorem _root_.IsIntegrallyClosed.minpoly.unique {s : S} {P : R[X]} (hmo : P.Monic)
    (hP : Polynomial.aeval s P = 0)
    (Pmin : ∀ Q : R[X], Q.Monic → Polynomial.aeval s Q = 0 → degree P ≤ degree Q) :
    P = minpoly R s 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] [IsDomain S] [NoZeroSMulDivisors R S] [IsIntegrallyClosed R] {s : S} {P : R[X]} (hmo : P.Monic) (hP : (Polynomial.aeval s) P = 0) (Pmin : ∀ (Q : R[X]), Q.Monic → (Polynomial.aeval s) Q = 0 → P.degree ≤ Q.degree)
Goal: P = minpoly R s
-- minpoly.prime_of_isIntegrallyClosed
theorem prime_of_isIntegrallyClosed {x : S} (hx : IsIntegral R x) : Prime (minpoly R x) 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] [IsDomain S] [NoZeroSMulDivisors R S] [IsIntegrallyClosed R] {x : S} (hx : IsIntegral R x)
Goal: Prime (minpoly R x)
-- minpoly.ToAdjoin.injective
theorem ToAdjoin.injective (hx : IsIntegral R x) : Function.Injective (Minpoly.toAdjoin R x) 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] [IsDomain S] [NoZeroSMulDivisors R S] [IsIntegrallyClosed R] {x : S} (hx : IsIntegral R x)
Goal: Function.Injective ⇑(AdjoinRoot.Minpoly.toAdjoin R x)
-- minpoly.equivAdjoin_apply
@[simps!]
def equivAdjoin (hx : IsIntegral R x) : AdjoinRoot (minpoly R x) ≃ₐ[R] adjoin R ({x} : Set S) 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] [IsDomain S] [NoZeroSMulDivisors R S] [IsIntegrallyClosed R] {x : S} (hx : IsIntegral R x) (a : AdjoinRoot (minpoly R x))
Goal: (minpoly.equivAdjoin hx) a =
  (QuotientAddGroup.lift (Submodule.toAddSubgroup (Ideal.span {minpoly R x}))
      ↑(Polynomial.eval₂RingHom (algebraMap R ↥(Algebra.adjoin R {x})) ⟨x, ⋯⟩) ⋯)
    a
-- minpoly.equivAdjoin_symm_apply
@[simps!]
def equivAdjoin (hx : IsIntegral R x) : AdjoinRoot (minpoly R x) ≃ₐ[R] adjoin R ({x} : Set S) 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] [IsDomain S] [NoZeroSMulDivisors R S] [IsIntegrallyClosed R] {x : S} (hx : IsIntegral R x) (b : ↥(Algebra.adjoin R {x}))
Goal: (minpoly.equivAdjoin hx).symm b = Function.surjInv ⋯ b
-- Algebra.adjoin.powerBasis'_dim
@[simp]
theorem _root_.Algebra.adjoin.powerBasis'_dim (hx : IsIntegral R x) :
    (Algebra.adjoin.powerBasis' hx).dim = (minpoly R x).natDegree 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] [IsDomain S] [NoZeroSMulDivisors R S] [IsIntegrallyClosed R] {x : S} (hx : IsIntegral R x)
Goal: (Algebra.adjoin.powerBasis' hx).dim = (minpoly R x).natDegree
-- Algebra.adjoin.powerBasis'_gen
@[simp]
theorem _root_.Algebra.adjoin.powerBasis'_gen (hx : IsIntegral R x) :
    (adjoin.powerBasis' hx).gen = ⟨x, SetLike.mem_coe.1 <| subset_adjoin <| mem_singleton x⟩ 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] [IsDomain S] [NoZeroSMulDivisors R S] [IsIntegrallyClosed R] {x : S} (hx : IsIntegral R x)
Goal: (Algebra.adjoin.powerBasis' hx).gen = ⟨x, ⋯⟩
-- PowerBasis.ofGenMemAdjoin'_dim
@[simp]
theorem _root_.PowerBasis.ofGenMemAdjoin'_dim (B : PowerBasis R S) (hint : IsIntegral R x)
    (hx : B.gen ∈ adjoin R ({x} : Set S)) :
    (B.ofGenMemAdjoin' hint hx).dim = (minpoly R x).natDegree 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] [IsDomain S] [NoZeroSMulDivisors R S] [IsIntegrallyClosed R] {x : S} (B : PowerBasis R S) (hint : IsIntegral R x) (hx : B.gen ∈ Algebra.adjoin R {x})
Goal: (B.ofGenMemAdjoin' hint hx).dim = (minpoly R x).natDegree
-- PowerBasis.ofGenMemAdjoin'_gen
@[simp]
theorem _root_.PowerBasis.ofGenMemAdjoin'_gen (B : PowerBasis R S) (hint : IsIntegral R x)
    (hx : B.gen ∈ adjoin R ({x} : Set S)) :
    (B.ofGenMemAdjoin' hint hx).gen = x 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [IsDomain R] [Algebra R S] [IsDomain S] [NoZeroSMulDivisors R S] [IsIntegrallyClosed R] {x : S} (B : PowerBasis R S) (hint : IsIntegral R x) (hx : B.gen ∈ Algebra.adjoin R {x})
Goal: (B.ofGenMemAdjoin' hint hx).gen = x
-- minpolyDiv_spec
lemma minpolyDiv_spec :
    minpolyDiv R x * (X - C x) = (minpoly R x).map (algebraMap R S) 
Arguments: (R : Type u_2) {S : Type u_1} [CommRing R] [CommRing S] [Algebra R S] (x : S)
Goal: minpolyDiv R x * (Polynomial.X - Polynomial.C x) = Polynomial.map (algebraMap R S) (minpoly R x)
-- coeff_minpolyDiv
lemma coeff_minpolyDiv (i) : coeff (minpolyDiv R x) i =
    algebraMap R S (coeff (minpoly R x) (i + 1)) + coeff (minpolyDiv R x) (i + 1) * x 
Arguments: (R : Type u_2) {S : Type u_1} [CommRing R] [CommRing S] [Algebra R S] (x : S) (i : ℕ)
Goal: (minpolyDiv R x).coeff i = (algebraMap R S) ((minpoly R x).coeff (i + 1)) + (minpolyDiv R x).coeff (i + 1) * x
-- minpolyDiv_ne_zero
lemma minpolyDiv_ne_zero [Nontrivial S] : minpolyDiv R x ≠ 0 
Arguments: {R : Type u_2} {S : Type u_1} [CommRing R] [CommRing S] [Algebra R S] {x : S} (hx : IsIntegral R x) [Nontrivial S]
Goal: minpolyDiv R x ≠ 0
-- minpolyDiv_eq_zero
lemma minpolyDiv_eq_zero (hx : ¬IsIntegral R x) : minpolyDiv R x = 0 
Arguments: {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Algebra R S] {x : S} (hx : ¬IsIntegral R x)
Goal: minpolyDiv R x = 0
-- minpolyDiv_monic
lemma minpolyDiv_monic : Monic (minpolyDiv R x) 
Arguments: {R : Type u_2} {S : Type u_1} [CommRing R] [CommRing S] [Algebra R S] {x : S} (hx : IsIntegral R x)
Goal: (minpolyDiv R x).Monic
-- eval_minpolyDiv_self
lemma eval_minpolyDiv_self : (minpolyDiv R x).eval x = aeval x (derivative <| minpoly R x) 
Arguments: {R : Type u_2} {S : Type u_1} [CommRing R] [CommRing S] [Algebra R S] {x : S}
Goal: Polynomial.eval x (minpolyDiv R x) = (Polynomial.aeval x) (Polynomial.derivative (minpoly R x))
-- minpolyDiv_eval_eq_zero_of_ne_of_aeval_eq_zero
lemma minpolyDiv_eval_eq_zero_of_ne_of_aeval_eq_zero [IsDomain S]
    {y} (hxy : y ≠ x) (hy : aeval y (minpoly R x) = 0) : (minpolyDiv R x).eval y = 0 
Arguments: {R : Type u_2} {S : Type u_1} [CommRing R] [CommRing S] [Algebra R S] {x : S} [IsDomain S] {y : S} (hxy : y ≠ x) (hy : (Polynomial.aeval y) (minpoly R x) = 0)
Goal: Polynomial.eval y (minpolyDiv R x) = 0
-- eval₂_minpolyDiv_of_eval₂_eq_zero
lemma eval₂_minpolyDiv_of_eval₂_eq_zero {T} [CommRing T]
    [IsDomain T] [DecidableEq T] {x y}
    (σ : S →+* T) (hy : eval₂ (σ.comp (algebraMap R S)) y (minpoly R x) = 0) :
    eval₂ σ y (minpolyDiv R x) =
      if σ x = y then σ (aeval x (derivative <| minpoly R x)) else 0 
Arguments: {R : Type u_3} {S : Type u_2} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [IsDomain T] [DecidableEq T] {x : S} {y : T} (σ : S →+* T) (hy : Polynomial.eval₂ (σ.comp (algebraMap R S)) y (minpoly R x) = 0)
Goal: Polynomial.eval₂ σ y (minpolyDiv R x) =
  if σ x = y then σ ((Polynomial.aeval x) (Polynomial.derivative (minpoly R x))) else 0
-- eval₂_minpolyDiv_self
lemma eval₂_minpolyDiv_self {T} [CommRing T] [Algebra R T] [IsDomain T] [DecidableEq T] (x : S)
    (σ₁ σ₂ : S →ₐ[R] T) :
    eval₂ σ₁ (σ₂ x) (minpolyDiv R x) =
      if σ₁ x = σ₂ x then σ₁ (aeval x (derivative <| minpoly R x)) else 0 
Arguments: {R : Type u_2} {S : Type u_3} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [IsDomain T] [DecidableEq T] (x : S) (σ₁ σ₂ : S →ₐ[R] T)
Goal: Polynomial.eval₂ (↑σ₁) (σ₂ x) (minpolyDiv R x) =
  if σ₁ x = σ₂ x then σ₁ ((Polynomial.aeval x) (Polynomial.derivative (minpoly R x))) else 0
-- eval_minpolyDiv_of_aeval_eq_zero
lemma eval_minpolyDiv_of_aeval_eq_zero [IsDomain S] [DecidableEq S]
    {y} (hy : aeval y (minpoly R x) = 0) :
    (minpolyDiv R x).eval y = if x = y then aeval x (derivative <| minpoly R x) else 0 
Arguments: {R : Type u_2} {S : Type u_1} [CommRing R] [CommRing S] [Algebra R S] {x : S} [IsDomain S] [DecidableEq S] {y : S} (hy : (Polynomial.aeval y) (minpoly R x) = 0)
Goal: Polynomial.eval y (minpolyDiv R x) = if x = y then (Polynomial.aeval x) (Polynomial.derivative (minpoly R x)) else 0
-- natDegree_minpolyDiv_succ
lemma natDegree_minpolyDiv_succ [Nontrivial S] :
    natDegree (minpolyDiv R x) + 1 = natDegree (minpoly R x) 
Arguments: {R : Type u_2} {S : Type u_1} [CommRing R] [CommRing S] [Algebra R S] {x : S} (hx : IsIntegral R x) [Nontrivial S]
Goal: (minpolyDiv R x).natDegree + 1 = (minpoly R x).natDegree
-- natDegree_minpolyDiv
lemma natDegree_minpolyDiv :
    natDegree (minpolyDiv R x) = natDegree (minpoly R x) - 1 
Arguments: {R : Type u_2} {S : Type u_1} [CommRing R] [CommRing S] [Algebra R S] {x : S}
Goal: (minpolyDiv R x).natDegree = (minpoly R x).natDegree - 1
-- natDegree_minpolyDiv_lt
lemma natDegree_minpolyDiv_lt [Nontrivial S] :
    natDegree (minpolyDiv R x) < natDegree (minpoly R x) 
Arguments: {R : Type u_2} {S : Type u_1} [CommRing R] [CommRing S] [Algebra R S] {x : S} (hx : IsIntegral R x) [Nontrivial S]
Goal: (minpolyDiv R x).natDegree < (minpoly R x).natDegree
-- coeff_minpolyDiv_mem_adjoin
lemma coeff_minpolyDiv_mem_adjoin (x : S) (i) :
    coeff (minpolyDiv R x) i ∈ Algebra.adjoin R {x} 
Arguments: {R : Type u_2} {S : Type u_1} [CommRing R] [CommRing S] [Algebra R S] (x : S) (i : ℕ)
Goal: (minpolyDiv R x).coeff i ∈ Algebra.adjoin R {x}
-- minpolyDiv_eq_of_isIntegrallyClosed
lemma minpolyDiv_eq_of_isIntegrallyClosed [IsDomain R] [IsIntegrallyClosed R] [IsDomain S]
    [Algebra R K] [Algebra K S] [IsScalarTower R K S] [IsFractionRing R K] :
    minpolyDiv R x = minpolyDiv K x 
Arguments: {R : Type u_1} (K : Type u_3) {S : Type u_2} [CommRing R] [Field K] [CommRing S] [Algebra R S] {x : S} (hx : IsIntegral R x) [IsDomain R] [IsIntegrallyClosed R] [IsDomain S] [Algebra R K] [Algebra K S] [IsScalarTower R K S] [IsFractionRing R K]
Goal: minpolyDiv R x = minpolyDiv K x
-- coeff_minpolyDiv_sub_pow_mem_span
lemma coeff_minpolyDiv_sub_pow_mem_span {i} (hi : i ≤ natDegree (minpolyDiv R x)) :
    coeff (minpolyDiv R x) (natDegree (minpolyDiv R x) - i) - x ^ i ∈
      Submodule.span R ((x ^ ·) '' Set.Iio i) 
Arguments: {R : Type u_2} {S : Type u_1} [CommRing R] [CommRing S] [Algebra R S] {x : S} (hx : IsIntegral R x) {i : ℕ} (hi : i ≤ (minpolyDiv R x).natDegree)
Goal: (minpolyDiv R x).coeff ((minpolyDiv R x).natDegree - i) - x ^ i ∈ Submodule.span R ((fun x_1 => x ^ x_1) '' Set.Iio i)
-- span_coeff_minpolyDiv
lemma span_coeff_minpolyDiv :
    Submodule.span R (Set.range (coeff (minpolyDiv R x))) =
      Subalgebra.toSubmodule (Algebra.adjoin R {x}) 
Arguments: {R : Type u_2} {S : Type u_1} [CommRing R] [CommRing S] [Algebra R S] {x : S} (hx : IsIntegral R x)
Goal: Submodule.span R (Set.range (minpolyDiv R x).coeff) = Subalgebra.toSubmodule (Algebra.adjoin R {x})
-- sum_smul_minpolyDiv_eq_X_pow
lemma sum_smul_minpolyDiv_eq_X_pow (E) [Field E] [Algebra K E] [IsAlgClosed E]
    [FiniteDimensional K L] [Algebra.IsSeparable K L]
    {x : L} (hxL : Algebra.adjoin K {x} = ⊤) {r : ℕ} (hr : r < finrank K L) :
    ∑ σ : L →ₐ[K] E, ((x ^ r / aeval x (derivative <| minpoly K x)) •
      minpolyDiv K x).map σ = (X ^ r : E[X]) 
Arguments: {K : Type u_2} {L : Type u_3} [Field K] [Field L] [Algebra K L] (E : Type u_1) [Field E] [Algebra K E] [IsAlgClosed E] [FiniteDimensional K L] [Algebra.IsSeparable K L] {x : L} (hxL : Algebra.adjoin K {x} = ⊤) {r : ℕ} (hr : r < FiniteDimensional.finrank K L)
Goal: ∑ σ : L →ₐ[K] E,
    Polynomial.map (↑σ) ((x ^ r / (Polynomial.aeval x) (Polynomial.derivative (minpoly K x))) • minpolyDiv K x) =
  Polynomial.X ^ r
-- PerfectClosure.r_iff
@[mk_iff]
inductive PerfectClosure.R : ℕ × K → ℕ × K → Prop
  | intro : ∀ n x, PerfectClosure.R (n, x) (n + 1, frobenius K p x)
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p]
Goal: ∀ (a a_1 : ℕ × K), PerfectClosure.R K p a a_1 ↔ ∃ n x, a = (n, x) ∧ a_1 = (n + 1, (frobenius K p) x)
-- PerfectClosure.mk_surjective
theorem mk_surjective : Function.Surjective (mk K p) 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p]
Goal: Function.Surjective (PerfectClosure.mk K p)
-- PerfectClosure.mk_succ_pow
@[simp] theorem mk_succ_pow (m : ℕ) (x : K) : mk K p ⟨m + 1, x ^ p⟩ = mk K p ⟨m, x⟩ 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p] (m : ℕ) (x : K)
Goal: PerfectClosure.mk K p (m + 1, x ^ p) = PerfectClosure.mk K p (m, x)
-- PerfectClosure.quot_mk_eq_mk
@[simp]
theorem quot_mk_eq_mk (x : ℕ × K) : (Quot.mk (R K p) x : PerfectClosure K p) = mk K p x 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p] (x : ℕ × K)
Goal: Quot.mk (PerfectClosure.R K p) x = PerfectClosure.mk K p x
-- PerfectClosure.liftOn_mk
@[simp]
theorem liftOn_mk {L : Sort _} (f : ℕ × K → L) (hf : ∀ x y, R K p x y → f x = f y) (x : ℕ × K) :
    (mk K p x).liftOn f hf = f x 
Arguments: {K : Type u} [CommRing K] {p : ℕ} [Fact (Nat.Prime p)] [CharP K p] {L : Type u_1} (f : ℕ × K → L) (hf : ∀ (x y : ℕ × K), PerfectClosure.R K p x y → f x = f y) (x : ℕ × K)
Goal: (PerfectClosure.mk K p x).liftOn f hf = f x
-- PerfectClosure.induction_on
@[elab_as_elim]
theorem induction_on (x : PerfectClosure K p) {q : PerfectClosure K p → Prop}
    (h : ∀ x, q (mk K p x)) : q x 
Arguments: {K : Type u} [CommRing K] {p : ℕ} [Fact (Nat.Prime p)] [CharP K p] (x : PerfectClosure K p) {q : PerfectClosure K p → Prop} (h : ∀ (x : ℕ × K), q (PerfectClosure.mk K p x))
Goal: q x
-- _private.Mathlib.FieldTheory.PerfectClosure.0.PerfectClosure.mul_aux_left
private theorem mul_aux_left (x1 x2 y : ℕ × K) (H : R K p x1 x2) :
    mk K p (x1.1 + y.1, (frobenius K p)^[y.1] x1.2 * (frobenius K p)^[x1.1] y.2) =
      mk K p (x2.1 + y.1, (frobenius K p)^[y.1] x2.2 * (frobenius K p)^[x2.1] y.2) 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p] (x1 x2 y : ℕ × K) (H : PerfectClosure.R K p x1 x2)
Goal: PerfectClosure.mk K p (x1.1 + y.1, (⇑(frobenius K p))^[y.1] x1.2 * (⇑(frobenius K p))^[x1.1] y.2) =
  PerfectClosure.mk K p (x2.1 + y.1, (⇑(frobenius K p))^[y.1] x2.2 * (⇑(frobenius K p))^[x2.1] y.2)
-- _private.Mathlib.FieldTheory.PerfectClosure.0.PerfectClosure.mul_aux_right
private theorem mul_aux_right (x y1 y2 : ℕ × K) (H : R K p y1 y2) :
    mk K p (x.1 + y1.1, (frobenius K p)^[y1.1] x.2 * (frobenius K p)^[x.1] y1.2) =
      mk K p (x.1 + y2.1, (frobenius K p)^[y2.1] x.2 * (frobenius K p)^[x.1] y2.2) 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p] (x y1 y2 : ℕ × K) (H : PerfectClosure.R K p y1 y2)
Goal: PerfectClosure.mk K p (x.1 + y1.1, (⇑(frobenius K p))^[y1.1] x.2 * (⇑(frobenius K p))^[x.1] y1.2) =
  PerfectClosure.mk K p (x.1 + y2.1, (⇑(frobenius K p))^[y2.1] x.2 * (⇑(frobenius K p))^[x.1] y2.2)
-- PerfectClosure.mk_mul_mk
@[simp]
theorem mk_mul_mk (x y : ℕ × K) :
    mk K p x * mk K p y =
      mk K p (x.1 + y.1, (frobenius K p)^[y.1] x.2 * (frobenius K p)^[x.1] y.2) 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p] (x y : ℕ × K)
Goal: PerfectClosure.mk K p x * PerfectClosure.mk K p y =
  PerfectClosure.mk K p (x.1 + y.1, (⇑(frobenius K p))^[y.1] x.2 * (⇑(frobenius K p))^[x.1] y.2)
-- PerfectClosure.one_def
theorem one_def : (1 : PerfectClosure K p) = mk K p (0, 1) 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p]
Goal: 1 = PerfectClosure.mk K p (0, 1)
-- _private.Mathlib.FieldTheory.PerfectClosure.0.PerfectClosure.add_aux_left
private theorem add_aux_left (x1 x2 y : ℕ × K) (H : R K p x1 x2) :
    mk K p (x1.1 + y.1, (frobenius K p)^[y.1] x1.2 + (frobenius K p)^[x1.1] y.2) =
      mk K p (x2.1 + y.1, (frobenius K p)^[y.1] x2.2 + (frobenius K p)^[x2.1] y.2) 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p] (x1 x2 y : ℕ × K) (H : PerfectClosure.R K p x1 x2)
Goal: PerfectClosure.mk K p (x1.1 + y.1, (⇑(frobenius K p))^[y.1] x1.2 + (⇑(frobenius K p))^[x1.1] y.2) =
  PerfectClosure.mk K p (x2.1 + y.1, (⇑(frobenius K p))^[y.1] x2.2 + (⇑(frobenius K p))^[x2.1] y.2)
-- _private.Mathlib.FieldTheory.PerfectClosure.0.PerfectClosure.add_aux_right
private theorem add_aux_right (x y1 y2 : ℕ × K) (H : R K p y1 y2) :
    mk K p (x.1 + y1.1, (frobenius K p)^[y1.1] x.2 + (frobenius K p)^[x.1] y1.2) =
      mk K p (x.1 + y2.1, (frobenius K p)^[y2.1] x.2 + (frobenius K p)^[x.1] y2.2) 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p] (x y1 y2 : ℕ × K) (H : PerfectClosure.R K p y1 y2)
Goal: PerfectClosure.mk K p (x.1 + y1.1, (⇑(frobenius K p))^[y1.1] x.2 + (⇑(frobenius K p))^[x.1] y1.2) =
  PerfectClosure.mk K p (x.1 + y2.1, (⇑(frobenius K p))^[y2.1] x.2 + (⇑(frobenius K p))^[x.1] y2.2)
-- PerfectClosure.mk_add_mk
@[simp]
theorem mk_add_mk (x y : ℕ × K) :
    mk K p x + mk K p y =
      mk K p (x.1 + y.1, (frobenius K p)^[y.1] x.2 + (frobenius K p)^[x.1] y.2) 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p] (x y : ℕ × K)
Goal: PerfectClosure.mk K p x + PerfectClosure.mk K p y =
  PerfectClosure.mk K p (x.1 + y.1, (⇑(frobenius K p))^[y.1] x.2 + (⇑(frobenius K p))^[x.1] y.2)
-- PerfectClosure.neg_mk
@[simp]
theorem neg_mk (x : ℕ × K) : -mk K p x = mk K p (x.1, -x.2) 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p] (x : ℕ × K)
Goal: -PerfectClosure.mk K p x = PerfectClosure.mk K p (x.1, -x.2)
-- PerfectClosure.zero_def
theorem zero_def : (0 : PerfectClosure K p) = mk K p (0, 0) 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p]
Goal: 0 = PerfectClosure.mk K p (0, 0)
-- PerfectClosure.mk_zero_zero
@[simp]
theorem mk_zero_zero : mk K p (0, 0) = 0 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p]
Goal: PerfectClosure.mk K p (0, 0) = 0
-- PerfectClosure.mk_zero
theorem mk_zero (n : ℕ) : mk K p (n, 0) = 0 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p] (n : ℕ)
Goal: PerfectClosure.mk K p (n, 0) = 0
-- PerfectClosure.R.sound
theorem R.sound (m n : ℕ) (x y : K) (H : (frobenius K p)^[m] x = y) :
    mk K p (n, x) = mk K p (m + n, y) 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p] (m n : ℕ) (x y : K) (H : (⇑(frobenius K p))^[m] x = y)
Goal: PerfectClosure.mk K p (n, x) = PerfectClosure.mk K p (m + n, y)
-- PerfectClosure.mk_eq_iff
theorem mk_eq_iff (x y : ℕ × K) :
    mk K p x = mk K p y ↔ ∃ z, (frobenius K p)^[y.1 + z] x.2 = (frobenius K p)^[x.1 + z] y.2 
Arguments: (K : Type u) [CommRing K] (p : ℕ) [Fact (Nat.Prime p)] [CharP K p] (x y : ℕ × K)
Goal: PerfectClosure.mk K p x = PerfectClosure.mk K p y ↔
  ∃ z, (⇑(frobenius K p))^[y.1 + z] x.2 = (⇑(frobenius K p))^[x.1 + z] y.2