ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- RatFunc.toFractionRing_injective
theorem toFractionRing_injective : Function.Injective (toFractionRing : _ → FractionRing K[X])
  -- Porting note: the `xy` input was `rfl` and then there was no need for the `subst`
  
Arguments: {K : Type u} [CommRing K]
Goal: Function.Injective RatFunc.toFractionRing
-- RatFunc.liftOn_def
protected irreducible_def liftOn {P : Sort v} (x : RatFunc K) (f : K[X] → K[X] → P)
    (H : ∀ {p q p' q'} (_hq : q ∈ K[X]⁰) (_hq' : q' ∈ K[X]⁰), q' * p = q * p' → f p q = f p' q') :
    P 
Arguments: {K : Type u_1} [CommRing K] {P : Sort u_2} (x : RatFunc K) (f : K[X] → K[X] → P) (H : ∀ {p q p' q' : K[X]}, q ∈ K[X]⁰ → q' ∈ K[X]⁰ → q' * p = q * p' → f p q = f p' q')
Goal: x.liftOn f H = Localization.liftOn x.toFractionRing (fun p q => f p ↑q) ⋯
-- RatFunc.liftOn_ofFractionRing_mk
theorem liftOn_ofFractionRing_mk {P : Sort v} (n : K[X]) (d : K[X]⁰) (f : K[X] → K[X] → P)
    (H : ∀ {p q p' q'} (_hq : q ∈ K[X]⁰) (_hq' : q' ∈ K[X]⁰), q' * p = q * p' → f p q = f p' q') :
    RatFunc.liftOn (ofFractionRing (Localization.mk n d)) f @H = f n d 
Arguments: {K : Type u} [CommRing K] {P : Sort v} (n : K[X]) (d : ↥K[X]⁰) (f : K[X] → K[X] → P) (H : ∀ {p q p' q' : K[X]}, q ∈ K[X]⁰ → q' ∈ K[X]⁰ → q' * p = q * p' → f p q = f p' q')
Goal: { toFractionRing := Localization.mk n d }.liftOn f H = f n ↑d
-- RatFunc.liftOn_condition_of_liftOn'_condition
theorem liftOn_condition_of_liftOn'_condition {P : Sort v} {f : K[X] → K[X] → P}
    (H : ∀ {p q a} (hq : q ≠ 0) (_ha : a ≠ 0), f (a * p) (a * q) = f p q) ⦃p q p' q' : K[X]⦄
    (hq : q ≠ 0) (hq' : q' ≠ 0) (h : q' * p = q * p') : f p q = f p' q' 
Arguments: {K : Type u} [CommRing K] {P : Sort v} {f : K[X] → K[X] → P} (H : ∀ {p q a : K[X]}, q ≠ 0 → a ≠ 0 → f (a * p) (a * q) = f p q) ⦃p q p' q' : K[X]⦄ (hq : q ≠ 0) (hq' : q' ≠ 0) (h : q' * p = q * p')
Goal: f p q = f p' q'
-- RatFunc.mk_def
protected irreducible_def mk (p q : K[X]) : RatFunc K 
Arguments: {K : Type u_1} [CommRing K] [IsDomain K] (p q : K[X])
Goal: RatFunc.mk p q = { toFractionRing := (algebraMap K[X] (FractionRing K[X])) p / (algebraMap K[X] (FractionRing K[X])) q }
-- RatFunc.mk_eq_div'
theorem mk_eq_div' (p q : K[X]) :
    RatFunc.mk p q = ofFractionRing (algebraMap _ _ p / algebraMap _ _ q) 
Arguments: {K : Type u} [CommRing K] [IsDomain K] (p q : K[X])
Goal: RatFunc.mk p q = { toFractionRing := (algebraMap K[X] (FractionRing K[X])) p / (algebraMap K[X] (FractionRing K[X])) q }
-- RatFunc.mk_zero
theorem mk_zero (p : K[X]) : RatFunc.mk p 0 = ofFractionRing (0 : FractionRing K[X]) 
Arguments: {K : Type u} [CommRing K] [IsDomain K] (p : K[X])
Goal: RatFunc.mk p 0 = { toFractionRing := 0 }
-- RatFunc.mk_coe_def
theorem mk_coe_def (p : K[X]) (q : K[X]⁰) :
    -- Porting note: filled in `(FractionRing K[X])` that was an underscore.
    RatFunc.mk p q = ofFractionRing (IsLocalization.mk' (FractionRing K[X]) p q) 
Arguments: {K : Type u} [CommRing K] [IsDomain K] (p : K[X]) (q : ↥K[X]⁰)
Goal: RatFunc.mk p ↑q = { toFractionRing := IsLocalization.mk' (FractionRing K[X]) p q }
-- RatFunc.mk_def_of_mem
theorem mk_def_of_mem (p : K[X]) {q} (hq : q ∈ K[X]⁰) :
    RatFunc.mk p q = ofFractionRing (IsLocalization.mk' (FractionRing K[X]) p ⟨q, hq⟩) 
Arguments: {K : Type u} [CommRing K] [IsDomain K] (p : K[X]) {q : K[X]} (hq : q ∈ K[X]⁰)
Goal: RatFunc.mk p q = { toFractionRing := IsLocalization.mk' (FractionRing K[X]) p ⟨q, hq⟩ }
-- RatFunc.mk_def_of_ne
theorem mk_def_of_ne (p : K[X]) {q : K[X]} (hq : q ≠ 0) :
    RatFunc.mk p q =
      ofFractionRing (IsLocalization.mk' (FractionRing K[X]) p
        ⟨q, mem_nonZeroDivisors_iff_ne_zero.mpr hq⟩) 
Arguments: {K : Type u} [CommRing K] [IsDomain K] (p : K[X]) {q : K[X]} (hq : q ≠ 0)
Goal: RatFunc.mk p q = { toFractionRing := IsLocalization.mk' (FractionRing K[X]) p ⟨q, ⋯⟩ }
-- RatFunc.mk_eq_localization_mk
theorem mk_eq_localization_mk (p : K[X]) {q : K[X]} (hq : q ≠ 0) :
    RatFunc.mk p q =
      ofFractionRing (Localization.mk p ⟨q, mem_nonZeroDivisors_iff_ne_zero.mpr hq⟩) 
Arguments: {K : Type u} [CommRing K] [IsDomain K] (p : K[X]) {q : K[X]} (hq : q ≠ 0)
Goal: RatFunc.mk p q = { toFractionRing := Localization.mk p ⟨q, ⋯⟩ }
-- RatFunc.mk_one'
theorem mk_one' (p : K[X]) :
    RatFunc.mk p 1 = ofFractionRing (algebraMap K[X] (FractionRing K[X]) p) 
Arguments: {K : Type u} [CommRing K] [IsDomain K] (p : K[X])
Goal: RatFunc.mk p 1 = { toFractionRing := (algebraMap K[X] (FractionRing K[X])) p }
-- RatFunc.mk_eq_mk
theorem mk_eq_mk {p q p' q' : K[X]} (hq : q ≠ 0) (hq' : q' ≠ 0) :
    RatFunc.mk p q = RatFunc.mk p' q' ↔ p * q' = p' * q 
Arguments: {K : Type u} [CommRing K] [IsDomain K] {p q p' q' : K[X]} (hq : q ≠ 0) (hq' : q' ≠ 0)
Goal: RatFunc.mk p q = RatFunc.mk p' q' ↔ p * q' = p' * q
-- RatFunc.liftOn_mk
theorem liftOn_mk {P : Sort v} (p q : K[X]) (f : K[X] → K[X] → P) (f0 : ∀ p, f p 0 = f 0 1)
    (H' : ∀ {p q p' q'} (_hq : q ≠ 0) (_hq' : q' ≠ 0), q' * p = q * p' → f p q = f p' q')
    (H : ∀ {p q p' q'} (_hq : q ∈ K[X]⁰) (_hq' : q' ∈ K[X]⁰), q' * p = q * p' → f p q = f p' q' :=
      fun {p q p' q'} hq hq' h => H' (nonZeroDivisors.ne_zero hq) (nonZeroDivisors.ne_zero hq') h) :
    (RatFunc.mk p q).liftOn f @H = f p q 
Arguments: {K : Type u} [CommRing K] [IsDomain K] {P : Sort v} (p q : K[X]) (f : K[X] → K[X] → P) (f0 : ∀ (p : K[X]), f p 0 = f 0 1) (H' : ∀ {p q p' q' : K[X]}, q ≠ 0 → q' ≠ 0 → q' * p = q * p' → f p q = f p' q') (H : ∀ {p q p' q' : K[X]}, q ∈ K[X]⁰ → q' ∈ K[X]⁰ → q' * p = q * p' → f p q = f p' q' := ⋯)
Goal: (RatFunc.mk p q).liftOn f H = f p q
-- RatFunc.liftOn'_def
protected irreducible_def liftOn' {P : Sort v} (x : RatFunc K) (f : K[X] → K[X] → P)
  (H : ∀ {p q a} (_hq : q ≠ 0) (_ha : a ≠ 0), f (a * p) (a * q) = f p q) : P 
Arguments: {K : Type u_1} [CommRing K] [IsDomain K] {P : Sort u_2} (x : RatFunc K) (f : K[X] → K[X] → P) (H : ∀ {p q a : K[X]}, q ≠ 0 → a ≠ 0 → f (a * p) (a * q) = f p q)
Goal: x.liftOn' f H = x.liftOn f ⋯
-- RatFunc.liftOn'_mk
theorem liftOn'_mk {P : Sort v} (p q : K[X]) (f : K[X] → K[X] → P) (f0 : ∀ p, f p 0 = f 0 1)
    (H : ∀ {p q a} (_hq : q ≠ 0) (_ha : a ≠ 0), f (a * p) (a * q) = f p q) :
    (RatFunc.mk p q).liftOn' f @H = f p q 
Arguments: {K : Type u} [CommRing K] [IsDomain K] {P : Sort v} (p q : K[X]) (f : K[X] → K[X] → P) (f0 : ∀ (p : K[X]), f p 0 = f 0 1) (H : ∀ {p q a : K[X]}, q ≠ 0 → a ≠ 0 → f (a * p) (a * q) = f p q)
Goal: (RatFunc.mk p q).liftOn' f H = f p q
-- RatFunc.induction_on'
@[elab_as_elim]
protected theorem induction_on' {P : RatFunc K → Prop} :
    ∀ (x : RatFunc K) (_pq : ∀ (p q : K[X]) (_ : q ≠ 0), P (RatFunc.mk p q)), P x
  
Arguments: {K : Type u} [CommRing K] [IsDomain K] {P : RatFunc K → Prop} (x : RatFunc K) (_pq : ∀ (p q : K[X]), q ≠ 0 → P (RatFunc.mk p q))
Goal: P x
-- MvPolynomial.sum_eval_eq_zero
theorem MvPolynomial.sum_eval_eq_zero (f : MvPolynomial σ K)
    (h : f.totalDegree < (q - 1) * Fintype.card σ) : ∑ x, eval x f = 0 
Arguments: {K : Type u_1} {σ : Type u_2} [Fintype K] [Field K] [Fintype σ] [DecidableEq σ] (f : MvPolynomial σ K) (h : f.totalDegree < (Fintype.card K - 1) * Fintype.card σ)
Goal: ∑ x : σ → K, (MvPolynomial.eval x) f = 0
-- char_dvd_card_solutions_of_sum_lt
theorem char_dvd_card_solutions_of_sum_lt {s : Finset ι} {f : ι → MvPolynomial σ K}
    (h : (∑ i ∈ s, (f i).totalDegree) < Fintype.card σ) :
    p ∣ Fintype.card { x : σ → K // ∀ i ∈ s, eval x (f i) = 0 } 
Arguments: {K : Type u_1} {σ : Type u_2} {ι : Type u_3} [Fintype K] [Field K] [Fintype σ] [DecidableEq σ] [DecidableEq K] (p : ℕ) [CharP K p] {s : Finset ι} {f : ι → MvPolynomial σ K} (h : ∑ i ∈ s, (f i).totalDegree < Fintype.card σ)
Goal: p ∣ Fintype.card { x // ∀ i ∈ s, (MvPolynomial.eval x) (f i) = 0 }
-- char_dvd_card_solutions_of_fintype_sum_lt
theorem char_dvd_card_solutions_of_fintype_sum_lt [Fintype ι] {f : ι → MvPolynomial σ K}
    (h : (∑ i, (f i).totalDegree) < Fintype.card σ) :
    p ∣ Fintype.card { x : σ → K // ∀ i, eval x (f i) = 0 } 
Arguments: {K : Type u_1} {σ : Type u_2} {ι : Type u_3} [Fintype K] [Field K] [Fintype σ] [DecidableEq σ] [DecidableEq K] (p : ℕ) [CharP K p] [Fintype ι] {f : ι → MvPolynomial σ K} (h : ∑ i : ι, (f i).totalDegree < Fintype.card σ)
Goal: p ∣ Fintype.card { x // ∀ (i : ι), (MvPolynomial.eval x) (f i) = 0 }
-- char_dvd_card_solutions
theorem char_dvd_card_solutions {f : MvPolynomial σ K} (h : f.totalDegree < Fintype.card σ) :
    p ∣ Fintype.card { x : σ → K // eval x f = 0 } 
Arguments: {K : Type u_1} {σ : Type u_2} [Fintype K] [Field K] [Fintype σ] [DecidableEq σ] [DecidableEq K] (p : ℕ) [CharP K p] {f : MvPolynomial σ K} (h : f.totalDegree < Fintype.card σ)
Goal: p ∣ Fintype.card { x // (MvPolynomial.eval x) f = 0 }
-- char_dvd_card_solutions_of_add_lt
theorem char_dvd_card_solutions_of_add_lt {f₁ f₂ : MvPolynomial σ K}
    (h : f₁.totalDegree + f₂.totalDegree < Fintype.card σ) :
    p ∣ Fintype.card { x : σ → K // eval x f₁ = 0 ∧ eval x f₂ = 0 } 
Arguments: {K : Type u_1} {σ : Type u_2} [Fintype K] [Field K] [Fintype σ] [DecidableEq σ] [DecidableEq K] (p : ℕ) [CharP K p] {f₁ f₂ : MvPolynomial σ K} (h : f₁.totalDegree + f₂.totalDegree < Fintype.card σ)
Goal: p ∣ Fintype.card { x // (MvPolynomial.eval x) f₁ = 0 ∧ (MvPolynomial.eval x) f₂ = 0 }
-- PerfectRing.bijective_frobenius
class PerfectRing (R : Type*) (p : ℕ) [CommSemiring R] [ExpChar R p] : Prop where
    bijective_frobenius : Bijective <| frobenius R p
Arguments: {R : Type u_1} {p : ℕ} [CommSemiring R] [ExpChar R p] [self : PerfectRing R p]
Goal: Function.Bijective ⇑(frobenius R p)
-- PerfectRing.ofSurjective
lemma PerfectRing.ofSurjective (R : Type*) (p : ℕ) [CommRing R] [ExpChar R p]
    [IsReduced R] (h : Surjective <| frobenius R p) : PerfectRing R p 
Arguments: (R : Type u_2) (p : ℕ) [CommRing R] [ExpChar R p] [IsReduced R] (h : Function.Surjective ⇑(frobenius R p))
Goal: PerfectRing R p
-- bijective_frobenius
@[simp]
theorem bijective_frobenius : Bijective (frobenius R p) 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: Function.Bijective ⇑(frobenius R p)
-- bijective_iterateFrobenius
theorem bijective_iterateFrobenius : Bijective (iterateFrobenius R p n) 
Arguments: (R : Type u_1) (p n : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: Function.Bijective ⇑(iterateFrobenius R p n)
-- injective_frobenius
@[simp]
theorem injective_frobenius : Injective (frobenius R p) 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: Function.Injective ⇑(frobenius R p)
-- surjective_frobenius
@[simp]
theorem surjective_frobenius : Surjective (frobenius R p) 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: Function.Surjective ⇑(frobenius R p)
-- frobeniusEquiv_apply
@[simps! apply]
noncomputable def frobeniusEquiv : R ≃+* R 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (a : R)
Goal: (frobeniusEquiv R p) a = (frobenius R p) a
-- coe_frobeniusEquiv
@[simp]
theorem coe_frobeniusEquiv : ⇑(frobeniusEquiv R p) = frobenius R p 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: ⇑(frobeniusEquiv R p) = ⇑(frobenius R p)
-- frobeniusEquiv_def
theorem frobeniusEquiv_def (x : R) : frobeniusEquiv R p x = x ^ p 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R)
Goal: (frobeniusEquiv R p) x = x ^ p
-- iterateFrobeniusEquiv_apply
@[simps! apply]
noncomputable def iterateFrobeniusEquiv : R ≃+* R 
Arguments: (R : Type u_1) (p n : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (a : R)
Goal: (iterateFrobeniusEquiv R p n) a = (iterateFrobenius R p n) a
-- coe_iterateFrobeniusEquiv
@[simp]
theorem coe_iterateFrobeniusEquiv : ⇑(iterateFrobeniusEquiv R p n) = iterateFrobenius R p n 
Arguments: (R : Type u_1) (p n : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: ⇑(iterateFrobeniusEquiv R p n) = ⇑(iterateFrobenius R p n)
-- iterateFrobeniusEquiv_def
theorem iterateFrobeniusEquiv_def (x : R) : iterateFrobeniusEquiv R p n x = x ^ p ^ n 
Arguments: (R : Type u_1) (p n : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R)
Goal: (iterateFrobeniusEquiv R p n) x = x ^ p ^ n
-- iterateFrobeniusEquiv_add_apply
theorem iterateFrobeniusEquiv_add_apply (x : R) : iterateFrobeniusEquiv R p (m + n) x =
    iterateFrobeniusEquiv R p m (iterateFrobeniusEquiv R p n x) 
Arguments: (R : Type u_1) (p m n : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R)
Goal: (iterateFrobeniusEquiv R p (m + n)) x = (iterateFrobeniusEquiv R p m) ((iterateFrobeniusEquiv R p n) x)
-- iterateFrobeniusEquiv_add
theorem iterateFrobeniusEquiv_add : iterateFrobeniusEquiv R p (m + n) =
    (iterateFrobeniusEquiv R p n).trans (iterateFrobeniusEquiv R p m) 
Arguments: (R : Type u_1) (p m n : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: iterateFrobeniusEquiv R p (m + n) = (iterateFrobeniusEquiv R p n).trans (iterateFrobeniusEquiv R p m)
-- iterateFrobeniusEquiv_symm_add_apply
theorem iterateFrobeniusEquiv_symm_add_apply (x : R) : (iterateFrobeniusEquiv R p (m + n)).symm x =
    (iterateFrobeniusEquiv R p m).symm ((iterateFrobeniusEquiv R p n).symm x) 
Arguments: (R : Type u_1) (p m n : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R)
Goal: (iterateFrobeniusEquiv R p (m + n)).symm x = (iterateFrobeniusEquiv R p m).symm ((iterateFrobeniusEquiv R p n).symm x)
-- iterateFrobeniusEquiv_symm_add
theorem iterateFrobeniusEquiv_symm_add : (iterateFrobeniusEquiv R p (m + n)).symm =
    (iterateFrobeniusEquiv R p n).symm.trans (iterateFrobeniusEquiv R p m).symm 
Arguments: (R : Type u_1) (p m n : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: (iterateFrobeniusEquiv R p (m + n)).symm = (iterateFrobeniusEquiv R p n).symm.trans (iterateFrobeniusEquiv R p m).symm
-- iterateFrobeniusEquiv_zero_apply
theorem iterateFrobeniusEquiv_zero_apply (x : R) : iterateFrobeniusEquiv R p 0 x = x 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R)
Goal: (iterateFrobeniusEquiv R p 0) x = x
-- iterateFrobeniusEquiv_one_apply
theorem iterateFrobeniusEquiv_one_apply (x : R) : iterateFrobeniusEquiv R p 1 x = x ^ p 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R)
Goal: (iterateFrobeniusEquiv R p 1) x = x ^ p
-- iterateFrobeniusEquiv_zero
@[simp]
theorem iterateFrobeniusEquiv_zero  : iterateFrobeniusEquiv R p 0 = RingEquiv.refl R 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: iterateFrobeniusEquiv R p 0 = RingEquiv.refl R
-- iterateFrobeniusEquiv_one
@[simp]
theorem iterateFrobeniusEquiv_one : iterateFrobeniusEquiv R p 1 = frobeniusEquiv R p 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: iterateFrobeniusEquiv R p 1 = frobeniusEquiv R p
-- iterateFrobeniusEquiv_eq_pow
theorem iterateFrobeniusEquiv_eq_pow : iterateFrobeniusEquiv R p n = frobeniusEquiv R p ^ n 
Arguments: (R : Type u_1) (p n : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: iterateFrobeniusEquiv R p n = frobeniusEquiv R p ^ n
-- iterateFrobeniusEquiv_symm
theorem iterateFrobeniusEquiv_symm :
    (iterateFrobeniusEquiv R p n).symm = (frobeniusEquiv R p).symm ^ n 
Arguments: (R : Type u_1) (p n : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: (iterateFrobeniusEquiv R p n).symm = (frobeniusEquiv R p).symm ^ n
-- frobeniusEquiv_symm_apply_frobenius
@[simp]
theorem frobeniusEquiv_symm_apply_frobenius (x : R) :
    (frobeniusEquiv R p).symm (frobenius R p x) = x 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R)
Goal: (frobeniusEquiv R p).symm ((frobenius R p) x) = x
-- frobenius_apply_frobeniusEquiv_symm
@[simp]
theorem frobenius_apply_frobeniusEquiv_symm (x : R) :
    frobenius R p ((frobeniusEquiv R p).symm x) = x 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R)
Goal: (frobenius R p) ((frobeniusEquiv R p).symm x) = x
-- frobenius_comp_frobeniusEquiv_symm
@[simp]
theorem frobenius_comp_frobeniusEquiv_symm :
    (frobenius R p).comp (frobeniusEquiv R p).symm = RingHom.id R 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: (frobenius R p).comp ↑(frobeniusEquiv R p).symm = RingHom.id R
-- frobeniusEquiv_symm_comp_frobenius
@[simp]
theorem frobeniusEquiv_symm_comp_frobenius :
    ((frobeniusEquiv R p).symm : R →+* R).comp (frobenius R p) = RingHom.id R 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p]
Goal: (↑(frobeniusEquiv R p).symm).comp (frobenius R p) = RingHom.id R
-- frobeniusEquiv_symm_pow_p
@[simp]
theorem frobeniusEquiv_symm_pow_p (x : R) : ((frobeniusEquiv R p).symm x) ^ p = x 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R)
Goal: (frobeniusEquiv R p).symm x ^ p = x
-- injective_pow_p
theorem injective_pow_p {x y : R} (h : x ^ p = y ^ p) : x = y 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] {x y : R} (h : x ^ p = y ^ p)
Goal: x = y
-- polynomial_expand_eq
lemma polynomial_expand_eq (f : R[X]) :
    expand R p f = (f.map (frobeniusEquiv R p).symm) ^ p 
Arguments: (R : Type u_1) (p : ℕ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (f : R[X])
Goal: (Polynomial.expand R p) f = Polynomial.map (↑(frobeniusEquiv R p).symm) f ^ p
-- not_irreducible_expand
@[simp]
theorem not_irreducible_expand (R p) [CommSemiring R] [Fact p.Prime] [CharP R p] [PerfectRing R p]
    (f : R[X]) : ¬ Irreducible (expand R p f) 
Arguments: (R : Type u_2) (p : ℕ) [CommSemiring R] [Fact (Nat.Prime p)] [CharP R p] [PerfectRing R p] (f : R[X])
Goal: ¬Irreducible ((Polynomial.expand R p) f)
-- PerfectField.separable_of_irreducible
class PerfectField (K : Type*) [Field K] : Prop where
    separable_of_irreducible : ∀ {f : K[X]}, Irreducible f → f.Separable
Arguments: {K : Type u_1} [Field K] [self : PerfectField K] {f : K[X]}
Goal: Irreducible f → f.Separable
-- PerfectRing.toPerfectField
lemma PerfectRing.toPerfectField (K : Type*) (p : ℕ)
    [Field K] [ExpChar K p] [PerfectRing K p] : PerfectField K 
Arguments: (K : Type u_1) (p : ℕ) [Field K] [ExpChar K p] [PerfectRing K p]
Goal: PerfectField K
-- PerfectField.separable_iff_squarefree
theorem separable_iff_squarefree {g : K[X]} : g.Separable ↔ Squarefree g 
Arguments: {K : Type u_1} [Field K] [PerfectField K] {g : K[X]}
Goal: g.Separable ↔ Squarefree g
-- Algebra.IsAlgebraic.perfectField
theorem Algebra.IsAlgebraic.perfectField {K L : Type*} [Field K] [Field L] [Algebra K L]
    [Algebra.IsAlgebraic K L] [PerfectField K] : PerfectField L 
Arguments: {K : Type u_1} {L : Type u_2} [Field K] [Field L] [Algebra K L] [Algebra.IsAlgebraic K L] [PerfectField K]
Goal: PerfectField L
-- Polynomial.roots_expand_pow_map_iterateFrobenius_le
theorem roots_expand_pow_map_iterateFrobenius_le :
    (expand R (p ^ n) f).roots.map (iterateFrobenius R p n) ≤ p ^ n • f.roots 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] (p n : ℕ) [ExpChar R p] (f : R[X])
Goal: Multiset.map (⇑(iterateFrobenius R p n)) ((Polynomial.expand R (p ^ n)) f).roots ≤ p ^ n • f.roots
-- Polynomial.roots_expand_map_frobenius_le
theorem roots_expand_map_frobenius_le :
    (expand R p f).roots.map (frobenius R p) ≤ p • f.roots 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] (p : ℕ) [ExpChar R p] (f : R[X])
Goal: Multiset.map (⇑(frobenius R p)) ((Polynomial.expand R p) f).roots ≤ p • f.roots
-- Polynomial.roots_expand_pow_image_iterateFrobenius_subset
theorem roots_expand_pow_image_iterateFrobenius_subset [DecidableEq R] :
    (expand R (p ^ n) f).roots.toFinset.image (iterateFrobenius R p n) ⊆ f.roots.toFinset 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] (p n : ℕ) [ExpChar R p] (f : R[X]) [DecidableEq R]
Goal: Finset.image (⇑(iterateFrobenius R p n)) ((Polynomial.expand R (p ^ n)) f).roots.toFinset ⊆ f.roots.toFinset
-- Polynomial.roots_expand_image_frobenius_subset
theorem roots_expand_image_frobenius_subset [DecidableEq R] :
    (expand R p f).roots.toFinset.image (frobenius R p) ⊆ f.roots.toFinset 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] (p : ℕ) [ExpChar R p] (f : R[X]) [DecidableEq R]
Goal: Finset.image (⇑(frobenius R p)) ((Polynomial.expand R p) f).roots.toFinset ⊆ f.roots.toFinset
-- Polynomial.roots_expand_pow
theorem roots_expand_pow :
    (expand R (p ^ n) f).roots = p ^ n • f.roots.map (iterateFrobeniusEquiv R p n).symm 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] {p n : ℕ} [ExpChar R p] {f : R[X]} [PerfectRing R p]
Goal: ((Polynomial.expand R (p ^ n)) f).roots = p ^ n • Multiset.map (⇑(iterateFrobeniusEquiv R p n).symm) f.roots
-- Polynomial.roots_expand
theorem roots_expand : (expand R p f).roots = p • f.roots.map (frobeniusEquiv R p).symm 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] {p : ℕ} [ExpChar R p] {f : R[X]} [PerfectRing R p]
Goal: ((Polynomial.expand R p) f).roots = p • Multiset.map (⇑(frobeniusEquiv R p).symm) f.roots
-- Polynomial.roots_X_pow_char_pow_sub_C
theorem roots_X_pow_char_pow_sub_C {y : R} :
    (X ^ p ^ n - C y).roots = p ^ n • {(iterateFrobeniusEquiv R p n).symm y} 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] {p n : ℕ} [ExpChar R p] [PerfectRing R p] {y : R}
Goal: (Polynomial.X ^ p ^ n - Polynomial.C y).roots = p ^ n • {(iterateFrobeniusEquiv R p n).symm y}
-- Polynomial.roots_X_pow_char_pow_sub_C_pow
theorem roots_X_pow_char_pow_sub_C_pow {y : R} {m : ℕ} :
    ((X ^ p ^ n - C y) ^ m).roots = (m * p ^ n) • {(iterateFrobeniusEquiv R p n).symm y} 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] {p n : ℕ} [ExpChar R p] [PerfectRing R p] {y : R} {m : ℕ}
Goal: ((Polynomial.X ^ p ^ n - Polynomial.C y) ^ m).roots = (m * p ^ n) • {(iterateFrobeniusEquiv R p n).symm y}
-- Polynomial.roots_X_pow_char_sub_C
theorem roots_X_pow_char_sub_C {y : R} :
    (X ^ p - C y).roots = p • {(frobeniusEquiv R p).symm y} 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] {p : ℕ} [ExpChar R p] [PerfectRing R p] {y : R}
Goal: (Polynomial.X ^ p - Polynomial.C y).roots = p • {(frobeniusEquiv R p).symm y}
-- Polynomial.roots_X_pow_char_sub_C_pow
theorem roots_X_pow_char_sub_C_pow {y : R} {m : ℕ} :
    ((X ^ p - C y) ^ m).roots = (m * p) • {(frobeniusEquiv R p).symm y} 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] {p : ℕ} [ExpChar R p] [PerfectRing R p] {y : R} {m : ℕ}
Goal: ((Polynomial.X ^ p - Polynomial.C y) ^ m).roots = (m * p) • {(frobeniusEquiv R p).symm y}
-- Polynomial.roots_expand_pow_map_iterateFrobenius
theorem roots_expand_pow_map_iterateFrobenius :
    (expand R (p ^ n) f).roots.map (iterateFrobenius R p n) = p ^ n • f.roots 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] {p n : ℕ} [ExpChar R p] {f : R[X]} [PerfectRing R p]
Goal: Multiset.map (⇑(iterateFrobenius R p n)) ((Polynomial.expand R (p ^ n)) f).roots = p ^ n • f.roots
-- Polynomial.roots_expand_map_frobenius
theorem roots_expand_map_frobenius : (expand R p f).roots.map (frobenius R p) = p • f.roots 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] {p : ℕ} [ExpChar R p] {f : R[X]} [PerfectRing R p]
Goal: Multiset.map (⇑(frobenius R p)) ((Polynomial.expand R p) f).roots = p • f.roots
-- Polynomial.roots_expand_image_iterateFrobenius
theorem roots_expand_image_iterateFrobenius [DecidableEq R] :
    (expand R (p ^ n) f).roots.toFinset.image (iterateFrobenius R p n) = f.roots.toFinset 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] {p n : ℕ} [ExpChar R p] {f : R[X]} [PerfectRing R p] [DecidableEq R]
Goal: Finset.image (⇑(iterateFrobenius R p n)) ((Polynomial.expand R (p ^ n)) f).roots.toFinset = f.roots.toFinset
-- Polynomial.roots_expand_image_frobenius
theorem roots_expand_image_frobenius [DecidableEq R] :
    (expand R p f).roots.toFinset.image (frobenius R p) = f.roots.toFinset 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] {p : ℕ} [ExpChar R p] {f : R[X]} [PerfectRing R p] [DecidableEq R]
Goal: Finset.image (⇑(frobenius R p)) ((Polynomial.expand R p) f).roots.toFinset = f.roots.toFinset
-- Polynomial.rootsExpandToRoots_apply
@[simp]
theorem rootsExpandToRoots_apply (x) : (rootsExpandToRoots p f x : R) = x ^ p 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] (p : ℕ) [ExpChar R p] (f : R[X]) [DecidableEq R] (x : { x // x ∈ ((Polynomial.expand R p) f).roots.toFinset })
Goal: ↑((Polynomial.rootsExpandToRoots p f) x) = ↑x ^ p