ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Polynomial.nthRootsFinset_def
lemma nthRootsFinset_def (n : ℕ) (R : Type*) [CommRing R] [IsDomain R] [DecidableEq R] :
    nthRootsFinset n R = Multiset.toFinset (nthRoots n (1 : R)) 
Arguments: (n : ℕ) (R : Type u_1) [CommRing R] [IsDomain R] [DecidableEq R]
Goal: Polynomial.nthRootsFinset n R = (Polynomial.nthRoots n 1).toFinset
-- Polynomial.mem_nthRootsFinset
@[simp]
theorem mem_nthRootsFinset {n : ℕ} (h : 0 < n) {x : R} :
    x ∈ nthRootsFinset n R ↔ x ^ (n : ℕ) = 1 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {n : ℕ} (h : 0 < n) {x : R}
Goal: x ∈ Polynomial.nthRootsFinset n R ↔ x ^ n = 1
-- Polynomial.nthRootsFinset_zero
@[simp]
theorem nthRootsFinset_zero : nthRootsFinset 0 R = ∅ 
Arguments: {R : Type u} [CommRing R] [IsDomain R]
Goal: Polynomial.nthRootsFinset 0 R = ∅
-- Polynomial.mul_mem_nthRootsFinset
theorem mul_mem_nthRootsFinset
    {η₁ η₂ : R} (hη₁ : η₁ ∈ nthRootsFinset n R) (hη₂ : η₂ ∈ nthRootsFinset n R) :
    η₁ * η₂ ∈ nthRootsFinset n R 
Arguments: {R : Type u} {n : ℕ} [CommRing R] [IsDomain R] {η₁ η₂ : R} (hη₁ : η₁ ∈ Polynomial.nthRootsFinset n R) (hη₂ : η₂ ∈ Polynomial.nthRootsFinset n R)
Goal: η₁ * η₂ ∈ Polynomial.nthRootsFinset n R
-- Polynomial.ne_zero_of_mem_nthRootsFinset
theorem ne_zero_of_mem_nthRootsFinset {η : R} (hη : η ∈ nthRootsFinset n R) : η ≠ 0 
Arguments: {R : Type u} {n : ℕ} [CommRing R] [IsDomain R] {η : R} (hη : η ∈ Polynomial.nthRootsFinset n R)
Goal: η ≠ 0
-- Polynomial.one_mem_nthRootsFinset
theorem one_mem_nthRootsFinset (hn : 0 < n) : 1 ∈ nthRootsFinset n R 
Arguments: {R : Type u} {n : ℕ} [CommRing R] [IsDomain R] (hn : 0 < n)
Goal: 1 ∈ Polynomial.nthRootsFinset n R
-- Polynomial.zero_of_eval_zero
theorem zero_of_eval_zero [Infinite R] (p : R[X]) (h : ∀ x, p.eval x = 0) : p = 0 
Arguments: {R : Type u} [CommRing R] [IsDomain R] [Infinite R] (p : Polynomial R) (h : ∀ (x : R), Polynomial.eval x p = 0)
Goal: p = 0
-- Polynomial.funext
theorem funext [Infinite R] {p q : R[X]} (ext : ∀ r : R, p.eval r = q.eval r) : p = q 
Arguments: {R : Type u} [CommRing R] [IsDomain R] [Infinite R] {p q : Polynomial R} (ext : ∀ (r : R), Polynomial.eval r p = Polynomial.eval r q)
Goal: p = q
-- Polynomial.aroots_def
theorem aroots_def (p : T[X]) (S) [CommRing S] [IsDomain S] [Algebra T S] :
    p.aroots S = (p.map (algebraMap T S)).roots 
Arguments: {T : Type w} [CommRing T] (p : Polynomial T) (S : Type u_1) [CommRing S] [IsDomain S] [Algebra T S]
Goal: p.aroots S = (Polynomial.map (algebraMap T S) p).roots
-- Polynomial.mem_aroots'
theorem mem_aroots' [CommRing S] [IsDomain S] [Algebra T S] {p : T[X]} {a : S} :
    a ∈ p.aroots S ↔ p.map (algebraMap T S) ≠ 0 ∧ aeval a p = 0 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S] {p : Polynomial T} {a : S}
Goal: a ∈ p.aroots S ↔ Polynomial.map (algebraMap T S) p ≠ 0 ∧ (Polynomial.aeval a) p = 0
-- Polynomial.mem_aroots
theorem mem_aroots [CommRing S] [IsDomain S] [Algebra T S]
    [NoZeroSMulDivisors T S] {p : T[X]} {a : S} : a ∈ p.aroots S ↔ p ≠ 0 ∧ aeval a p = 0 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S] [NoZeroSMulDivisors T S] {p : Polynomial T} {a : S}
Goal: a ∈ p.aroots S ↔ p ≠ 0 ∧ (Polynomial.aeval a) p = 0
-- Polynomial.aroots_mul
theorem aroots_mul [CommRing S] [IsDomain S] [Algebra T S]
    [NoZeroSMulDivisors T S] {p q : T[X]} (hpq : p * q ≠ 0) :
    (p * q).aroots S = p.aroots S + q.aroots S 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S] [NoZeroSMulDivisors T S] {p q : Polynomial T} (hpq : p * q ≠ 0)
Goal: (p * q).aroots S = p.aroots S + q.aroots S
-- Polynomial.aroots_X_sub_C
@[simp]
theorem aroots_X_sub_C [CommRing S] [IsDomain S] [Algebra T S]
    (r : T) : aroots (X - C r) S = {algebraMap T S r} 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S] (r : T)
Goal: (Polynomial.X - Polynomial.C r).aroots S = {(algebraMap T S) r}
-- Polynomial.aroots_X
@[simp]
theorem aroots_X [CommRing S] [IsDomain S] [Algebra T S] :
    aroots (X : T[X]) S = {0} 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S]
Goal: Polynomial.X.aroots S = {0}
-- Polynomial.aroots_C
@[simp]
theorem aroots_C [CommRing S] [IsDomain S] [Algebra T S] (a : T) : (C a).aroots S = 0 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S] (a : T)
Goal: (Polynomial.C a).aroots S = 0
-- Polynomial.aroots_zero
@[simp]
theorem aroots_zero (S) [CommRing S] [IsDomain S] [Algebra T S] : (0 : T[X]).aroots S = 0 
Arguments: {T : Type w} [CommRing T] (S : Type u_1) [CommRing S] [IsDomain S] [Algebra T S]
Goal: Polynomial.aroots 0 S = 0
-- Polynomial.aroots_one
@[simp]
theorem aroots_one [CommRing S] [IsDomain S] [Algebra T S] :
    (1 : T[X]).aroots S = 0 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S]
Goal: Polynomial.aroots 1 S = 0
-- Polynomial.aroots_neg
@[simp]
theorem aroots_neg [CommRing S] [IsDomain S] [Algebra T S] (p : T[X]) :
    (-p).aroots S = p.aroots S 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S] (p : Polynomial T)
Goal: (-p).aroots S = p.aroots S
-- Polynomial.aroots_C_mul
@[simp]
theorem aroots_C_mul [CommRing S] [IsDomain S] [Algebra T S]
    [NoZeroSMulDivisors T S] {a : T} (p : T[X]) (ha : a ≠ 0) :
    (C a * p).aroots S = p.aroots S 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S] [NoZeroSMulDivisors T S] {a : T} (p : Polynomial T) (ha : a ≠ 0)
Goal: (Polynomial.C a * p).aroots S = p.aroots S
-- Polynomial.aroots_smul_nonzero
@[simp]
theorem aroots_smul_nonzero [CommRing S] [IsDomain S] [Algebra T S]
    [NoZeroSMulDivisors T S] {a : T} (p : T[X]) (ha : a ≠ 0) :
    (a • p).aroots S = p.aroots S 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S] [NoZeroSMulDivisors T S] {a : T} (p : Polynomial T) (ha : a ≠ 0)
Goal: (a • p).aroots S = p.aroots S
-- Polynomial.aroots_pow
@[simp]
theorem aroots_pow [CommRing S] [IsDomain S] [Algebra T S] (p : T[X]) (n : ℕ) :
    (p ^ n).aroots S = n • p.aroots S 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S] (p : Polynomial T) (n : ℕ)
Goal: (p ^ n).aroots S = n • p.aroots S
-- Polynomial.aroots_X_pow
theorem aroots_X_pow [CommRing S] [IsDomain S] [Algebra T S] (n : ℕ) :
    (X ^ n : T[X]).aroots S = n • ({0} : Multiset S) 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S] (n : ℕ)
Goal: (Polynomial.X ^ n).aroots S = n • {0}
-- Polynomial.aroots_C_mul_X_pow
theorem aroots_C_mul_X_pow [CommRing S] [IsDomain S] [Algebra T S]
    [NoZeroSMulDivisors T S] {a : T} (ha : a ≠ 0) (n : ℕ) :
    (C a * X ^ n : T[X]).aroots S = n • ({0} : Multiset S) 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S] [NoZeroSMulDivisors T S] {a : T} (ha : a ≠ 0) (n : ℕ)
Goal: (Polynomial.C a * Polynomial.X ^ n).aroots S = n • {0}
-- Polynomial.aroots_monomial
@[simp]
theorem aroots_monomial [CommRing S] [IsDomain S] [Algebra T S]
    [NoZeroSMulDivisors T S] {a : T} (ha : a ≠ 0) (n : ℕ) :
    (monomial n a).aroots S = n • ({0} : Multiset S) 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S] [NoZeroSMulDivisors T S] {a : T} (ha : a ≠ 0) (n : ℕ)
Goal: ((Polynomial.monomial n) a).aroots S = n • {0}
-- Polynomial.rootSet_def
theorem rootSet_def (p : T[X]) (S) [CommRing S] [IsDomain S] [Algebra T S] [DecidableEq S] :
    p.rootSet S = (p.aroots S).toFinset 
Arguments: {T : Type w} [CommRing T] (p : Polynomial T) (S : Type u_1) [CommRing S] [IsDomain S] [Algebra T S] [DecidableEq S]
Goal: p.rootSet S = ↑(p.aroots S).toFinset
-- Polynomial.rootSet_C
@[simp]
theorem rootSet_C [CommRing S] [IsDomain S] [Algebra T S] (a : T) : (C a).rootSet S = ∅ 
Arguments: {S : Type v} {T : Type w} [CommRing T] [CommRing S] [IsDomain S] [Algebra T S] (a : T)
Goal: (Polynomial.C a).rootSet S = ∅
-- Polynomial.rootSet_zero
@[simp]
theorem rootSet_zero (S) [CommRing S] [IsDomain S] [Algebra T S] : (0 : T[X]).rootSet S = ∅ 
Arguments: {T : Type w} [CommRing T] (S : Type u_1) [CommRing S] [IsDomain S] [Algebra T S]
Goal: Polynomial.rootSet 0 S = ∅
-- Polynomial.rootSet_one
@[simp]
theorem rootSet_one (S) [CommRing S] [IsDomain S] [Algebra T S] : (1 : T[X]).rootSet S = ∅ 
Arguments: {T : Type w} [CommRing T] (S : Type u_1) [CommRing S] [IsDomain S] [Algebra T S]
Goal: Polynomial.rootSet 1 S = ∅
-- Polynomial.rootSet_neg
@[simp]
theorem rootSet_neg (p : T[X]) (S) [CommRing S] [IsDomain S] [Algebra T S] :
    (-p).rootSet S = p.rootSet S 
Arguments: {T : Type w} [CommRing T] (p : Polynomial T) (S : Type u_1) [CommRing S] [IsDomain S] [Algebra T S]
Goal: (-p).rootSet S = p.rootSet S
-- Polynomial.rootSet_finite
theorem rootSet_finite (p : T[X]) (S : Type*) [CommRing S] [IsDomain S] [Algebra T S] :
    (p.rootSet S).Finite 
Arguments: {T : Type w} [CommRing T] (p : Polynomial T) (S : Type u_1) [CommRing S] [IsDomain S] [Algebra T S]
Goal: (p.rootSet S).Finite
-- Polynomial.bUnion_roots_finite
theorem bUnion_roots_finite {R S : Type*} [Semiring R] [CommRing S] [IsDomain S] [DecidableEq S]
    (m : R →+* S) (d : ℕ) {U : Set R} (h : U.Finite) :
    (⋃ (f : R[X]) (_ : f.natDegree ≤ d ∧ ∀ i, f.coeff i ∈ U),
        ((f.map m).roots.toFinset.toSet : Set S)).Finite 
Arguments: {R : Type u_1} {S : Type u_2} [Semiring R] [CommRing S] [IsDomain S] [DecidableEq S] (m : R →+* S) (d : ℕ) {U : Set R} (h : U.Finite)
Goal: (⋃ f, ⋃ (_ : f.natDegree ≤ d ∧ ∀ (i : ℕ), f.coeff i ∈ U), ↑(Polynomial.map m f).roots.toFinset).Finite
-- Polynomial.mem_rootSet'
theorem mem_rootSet' {p : T[X]} {S : Type*} [CommRing S] [IsDomain S] [Algebra T S] {a : S} :
    a ∈ p.rootSet S ↔ p.map (algebraMap T S) ≠ 0 ∧ aeval a p = 0 
Arguments: {T : Type w} [CommRing T] {p : Polynomial T} {S : Type u_1} [CommRing S] [IsDomain S] [Algebra T S] {a : S}
Goal: a ∈ p.rootSet S ↔ Polynomial.map (algebraMap T S) p ≠ 0 ∧ (Polynomial.aeval a) p = 0
-- Polynomial.mem_rootSet
theorem mem_rootSet {p : T[X]} {S : Type*} [CommRing S] [IsDomain S] [Algebra T S]
    [NoZeroSMulDivisors T S] {a : S} : a ∈ p.rootSet S ↔ p ≠ 0 ∧ aeval a p = 0 
Arguments: {T : Type w} [CommRing T] {p : Polynomial T} {S : Type u_1} [CommRing S] [IsDomain S] [Algebra T S] [NoZeroSMulDivisors T S] {a : S}
Goal: a ∈ p.rootSet S ↔ p ≠ 0 ∧ (Polynomial.aeval a) p = 0
-- Polynomial.mem_rootSet_of_ne
theorem mem_rootSet_of_ne {p : T[X]} {S : Type*} [CommRing S] [IsDomain S] [Algebra T S]
    [NoZeroSMulDivisors T S] (hp : p ≠ 0) {a : S} : a ∈ p.rootSet S ↔ aeval a p = 0 
Arguments: {T : Type w} [CommRing T] {p : Polynomial T} {S : Type u_1} [CommRing S] [IsDomain S] [Algebra T S] [NoZeroSMulDivisors T S] (hp : p ≠ 0) {a : S}
Goal: a ∈ p.rootSet S ↔ (Polynomial.aeval a) p = 0
-- Polynomial.rootSet_maps_to'
theorem rootSet_maps_to' {p : T[X]} {S S'} [CommRing S] [IsDomain S] [Algebra T S] [CommRing S']
    [IsDomain S'] [Algebra T S'] (hp : p.map (algebraMap T S') = 0 → p.map (algebraMap T S) = 0)
    (f : S →ₐ[T] S') : (p.rootSet S).MapsTo f (p.rootSet S') 
Arguments: {T : Type w} [CommRing T] {p : Polynomial T} {S : Type u_1} {S' : Type u_2} [CommRing S] [IsDomain S] [Algebra T S] [CommRing S'] [IsDomain S'] [Algebra T S'] (hp : Polynomial.map (algebraMap T S') p = 0 → Polynomial.map (algebraMap T S) p = 0) (f : S →ₐ[T] S')
Goal: Set.MapsTo (⇑f) (p.rootSet S) (p.rootSet S')
-- Polynomial.ne_zero_of_mem_rootSet
theorem ne_zero_of_mem_rootSet {p : T[X]} [CommRing S] [IsDomain S] [Algebra T S] {a : S}
    (h : a ∈ p.rootSet S) : p ≠ 0 
Arguments: {S : Type v} {T : Type w} [CommRing T] {p : Polynomial T} [CommRing S] [IsDomain S] [Algebra T S] {a : S} (h : a ∈ p.rootSet S)
Goal: p ≠ 0
-- Polynomial.aeval_eq_zero_of_mem_rootSet
theorem aeval_eq_zero_of_mem_rootSet {p : T[X]} [CommRing S] [IsDomain S] [Algebra T S] {a : S}
    (hx : a ∈ p.rootSet S) : aeval a p = 0 
Arguments: {S : Type v} {T : Type w} [CommRing T] {p : Polynomial T} [CommRing S] [IsDomain S] [Algebra T S] {a : S} (hx : a ∈ p.rootSet S)
Goal: (Polynomial.aeval a) p = 0
-- Polynomial.rootSet_mapsTo
theorem rootSet_mapsTo {p : T[X]} {S S'} [CommRing S] [IsDomain S] [Algebra T S] [CommRing S']
    [IsDomain S'] [Algebra T S'] [NoZeroSMulDivisors T S'] (f : S →ₐ[T] S') :
    (p.rootSet S).MapsTo f (p.rootSet S') 
Arguments: {T : Type w} [CommRing T] {p : Polynomial T} {S : Type u_1} {S' : Type u_2} [CommRing S] [IsDomain S] [Algebra T S] [CommRing S'] [IsDomain S'] [Algebra T S'] [NoZeroSMulDivisors T S'] (f : S →ₐ[T] S')
Goal: Set.MapsTo (⇑f) (p.rootSet S) (p.rootSet S')
-- Polynomial.eq_zero_of_natDegree_lt_card_of_eval_eq_zero
lemma eq_zero_of_natDegree_lt_card_of_eval_eq_zero {R} [CommRing R] [IsDomain R]
    (p : R[X]) {ι} [Fintype ι] {f : ι → R} (hf : Function.Injective f)
    (heval : ∀ i, p.eval (f i) = 0) (hcard : natDegree p < Fintype.card ι) : p = 0 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] (p : Polynomial R) {ι : Type u_2} [Fintype ι] {f : ι → R} (hf : Function.Injective f) (heval : ∀ (i : ι), Polynomial.eval (f i) p = 0) (hcard : p.natDegree < Fintype.card ι)
Goal: p = 0
-- Polynomial.eq_zero_of_natDegree_lt_card_of_eval_eq_zero'
lemma eq_zero_of_natDegree_lt_card_of_eval_eq_zero' {R} [CommRing R] [IsDomain R]
    (p : R[X]) (s : Finset R) (heval : ∀ i ∈ s, p.eval i = 0) (hcard : natDegree p < s.card) :
    p = 0 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] (p : Polynomial R) (s : Finset R) (heval : ∀ i ∈ s, Polynomial.eval i p = 0) (hcard : p.natDegree < s.card)
Goal: p = 0
-- Polynomial.eq_zero_of_forall_eval_zero_of_natDegree_lt_card
lemma eq_zero_of_forall_eval_zero_of_natDegree_lt_card
    (f : R[X]) (hf : ∀ r, f.eval r = 0) (hfR : f.natDegree < #R) : f = 0 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (f : Polynomial R) (hf : ∀ (r : R), Polynomial.eval r f = 0) (hfR : ↑f.natDegree < Cardinal.mk R)
Goal: f = 0
-- Polynomial.exists_eval_ne_zero_of_natDegree_lt_card
lemma exists_eval_ne_zero_of_natDegree_lt_card (f : R[X]) (hf : f ≠ 0) (hfR : f.natDegree < #R) :
    ∃ r, f.eval r ≠ 0 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (f : Polynomial R) (hf : f ≠ 0) (hfR : ↑f.natDegree < Cardinal.mk R)
Goal: ∃ r, Polynomial.eval r f ≠ 0
-- Polynomial.monic_prod_multiset_X_sub_C
theorem monic_prod_multiset_X_sub_C : Monic (p.roots.map fun a => X - C a).prod 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R}
Goal: (Multiset.map (fun a => Polynomial.X - Polynomial.C a) p.roots).prod.Monic
-- Polynomial.prod_multiset_root_eq_finset_root
theorem prod_multiset_root_eq_finset_root [DecidableEq R] :
    (p.roots.map fun a => X - C a).prod =
      p.roots.toFinset.prod fun a => (X - C a) ^ rootMultiplicity a p 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R} [DecidableEq R]
Goal: (Multiset.map (fun a => Polynomial.X - Polynomial.C a) p.roots).prod =
  ∏ a ∈ p.roots.toFinset, (Polynomial.X - Polynomial.C a) ^ Polynomial.rootMultiplicity a p
-- Polynomial.prod_multiset_X_sub_C_dvd
theorem prod_multiset_X_sub_C_dvd (p : R[X]) : (p.roots.map fun a => X - C a).prod ∣ p 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (p : Polynomial R)
Goal: (Multiset.map (fun a => Polynomial.X - Polynomial.C a) p.roots).prod ∣ p
-- Multiset.prod_X_sub_C_dvd_iff_le_roots
theorem _root_.Multiset.prod_X_sub_C_dvd_iff_le_roots {p : R[X]} (hp : p ≠ 0) (s : Multiset R) :
    (s.map fun a => X - C a).prod ∣ p ↔ s ≤ p.roots 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R} (hp : p ≠ 0) (s : Multiset R)
Goal: (Multiset.map (fun a => Polynomial.X - Polynomial.C a) s).prod ∣ p ↔ s ≤ p.roots
-- Polynomial.exists_prod_multiset_X_sub_C_mul
theorem exists_prod_multiset_X_sub_C_mul (p : R[X]) :
    ∃ q,
      (p.roots.map fun a => X - C a).prod * q = p ∧
        Multiset.card p.roots + q.natDegree = p.natDegree ∧ q.roots = 0 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (p : Polynomial R)
Goal: ∃ q,
  (Multiset.map (fun a => Polynomial.X - Polynomial.C a) p.roots).prod * q = p ∧
    Multiset.card p.roots + q.natDegree = p.natDegree ∧ q.roots = 0
-- Polynomial.C_leadingCoeff_mul_prod_multiset_X_sub_C
theorem C_leadingCoeff_mul_prod_multiset_X_sub_C (hroots : Multiset.card p.roots = p.natDegree) :
    C p.leadingCoeff * (p.roots.map fun a => X - C a).prod = p 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R} (hroots : Multiset.card p.roots = p.natDegree)
Goal: Polynomial.C p.leadingCoeff * (Multiset.map (fun a => Polynomial.X - Polynomial.C a) p.roots).prod = p
-- Polynomial.prod_multiset_X_sub_C_of_monic_of_roots_card_eq
theorem prod_multiset_X_sub_C_of_monic_of_roots_card_eq (hp : p.Monic)
    (hroots : Multiset.card p.roots = p.natDegree) : (p.roots.map fun a => X - C a).prod = p 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R} (hp : p.Monic) (hroots : Multiset.card p.roots = p.natDegree)
Goal: (Multiset.map (fun a => Polynomial.X - Polynomial.C a) p.roots).prod = p
-- Polynomial.Monic.isUnit_leadingCoeff_of_dvd
theorem Monic.isUnit_leadingCoeff_of_dvd {a p : R[X]} (hp : Monic p) (hap : a ∣ p) :
    IsUnit a.leadingCoeff 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {a p : Polynomial R} (hp : p.Monic) (hap : a ∣ p)
Goal: IsUnit a.leadingCoeff
-- Polynomial.Monic.irreducible_iff_degree_lt
theorem Monic.irreducible_iff_degree_lt {p : R[X]} (p_monic : Monic p) (p_1 : p ≠ 1) :
    Irreducible p ↔ ∀ q, degree q ≤ ↑(p.natDegree / 2) → q ∣ p → IsUnit q 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R} (p_monic : p.Monic) (p_1 : p ≠ 1)
Goal: Irreducible p ↔ ∀ (q : Polynomial R), q.degree ≤ ↑(p.natDegree / 2) → q ∣ p → IsUnit q
-- Polynomial.le_rootMultiplicity_map
theorem le_rootMultiplicity_map {p : A[X]} {f : A →+* B} (hmap : map f p ≠ 0) (a : A) :
    rootMultiplicity a p ≤ rootMultiplicity (f a) (p.map f) 
Arguments: {A : Type u_1} {B : Type u_2} [CommRing A] [CommRing B] {p : Polynomial A} {f : A →+* B} (hmap : Polynomial.map f p ≠ 0) (a : A)
Goal: Polynomial.rootMultiplicity a p ≤ Polynomial.rootMultiplicity (f a) (Polynomial.map f p)
-- Polynomial.eq_rootMultiplicity_map
theorem eq_rootMultiplicity_map {p : A[X]} {f : A →+* B} (hf : Function.Injective f) (a : A) :
    rootMultiplicity a p = rootMultiplicity (f a) (p.map f) 
Arguments: {A : Type u_1} {B : Type u_2} [CommRing A] [CommRing B] {p : Polynomial A} {f : A →+* B} (hf : Function.Injective ⇑f) (a : A)
Goal: Polynomial.rootMultiplicity a p = Polynomial.rootMultiplicity (f a) (Polynomial.map f p)
-- Polynomial.count_map_roots
theorem count_map_roots [IsDomain A] [DecidableEq B] {p : A[X]} {f : A →+* B} (hmap : map f p ≠ 0)
    (b : B) :
    (p.roots.map f).count b ≤ rootMultiplicity b (p.map f) 
Arguments: {A : Type u_1} {B : Type u_2} [CommRing A] [CommRing B] [IsDomain A] [DecidableEq B] {p : Polynomial A} {f : A →+* B} (hmap : Polynomial.map f p ≠ 0) (b : B)
Goal: Multiset.count b (Multiset.map (⇑f) p.roots) ≤ Polynomial.rootMultiplicity b (Polynomial.map f p)
-- Polynomial.count_map_roots_of_injective
theorem count_map_roots_of_injective [IsDomain A] [DecidableEq B] (p : A[X]) {f : A →+* B}
    (hf : Function.Injective f) (b : B) :
    (p.roots.map f).count b ≤ rootMultiplicity b (p.map f) 
Arguments: {A : Type u_1} {B : Type u_2} [CommRing A] [CommRing B] [IsDomain A] [DecidableEq B] (p : Polynomial A) {f : A →+* B} (hf : Function.Injective ⇑f) (b : B)
Goal: Multiset.count b (Multiset.map (⇑f) p.roots) ≤ Polynomial.rootMultiplicity b (Polynomial.map f p)
-- Polynomial.map_roots_le
theorem map_roots_le [IsDomain A] [IsDomain B] {p : A[X]} {f : A →+* B} (h : p.map f ≠ 0) :
    p.roots.map f ≤ (p.map f).roots 
Arguments: {A : Type u_1} {B : Type u_2} [CommRing A] [CommRing B] [IsDomain A] [IsDomain B] {p : Polynomial A} {f : A →+* B} (h : Polynomial.map f p ≠ 0)
Goal: Multiset.map (⇑f) p.roots ≤ (Polynomial.map f p).roots
-- Polynomial.map_roots_le_of_injective
theorem map_roots_le_of_injective [IsDomain A] [IsDomain B] (p : A[X]) {f : A →+* B}
    (hf : Function.Injective f) : p.roots.map f ≤ (p.map f).roots 
Arguments: {A : Type u_1} {B : Type u_2} [CommRing A] [CommRing B] [IsDomain A] [IsDomain B] (p : Polynomial A) {f : A →+* B} (hf : Function.Injective ⇑f)
Goal: Multiset.map (⇑f) p.roots ≤ (Polynomial.map f p).roots
-- Polynomial.card_roots_le_map
theorem card_roots_le_map [IsDomain A] [IsDomain B] {p : A[X]} {f : A →+* B} (h : p.map f ≠ 0) :
    Multiset.card p.roots ≤ Multiset.card (p.map f).roots 
Arguments: {A : Type u_1} {B : Type u_2} [CommRing A] [CommRing B] [IsDomain A] [IsDomain B] {p : Polynomial A} {f : A →+* B} (h : Polynomial.map f p ≠ 0)
Goal: Multiset.card p.roots ≤ Multiset.card (Polynomial.map f p).roots
-- Polynomial.card_roots_le_map_of_injective
theorem card_roots_le_map_of_injective [IsDomain A] [IsDomain B] {p : A[X]} {f : A →+* B}
    (hf : Function.Injective f) : Multiset.card p.roots ≤ Multiset.card (p.map f).roots 
Arguments: {A : Type u_1} {B : Type u_2} [CommRing A] [CommRing B] [IsDomain A] [IsDomain B] {p : Polynomial A} {f : A →+* B} (hf : Function.Injective ⇑f)
Goal: Multiset.card p.roots ≤ Multiset.card (Polynomial.map f p).roots
-- Polynomial.roots_map_of_injective_of_card_eq_natDegree
theorem roots_map_of_injective_of_card_eq_natDegree [IsDomain A] [IsDomain B] {p : A[X]}
    {f : A →+* B} (hf : Function.Injective f) (hroots : Multiset.card p.roots = p.natDegree) :
    p.roots.map f = (p.map f).roots 
Arguments: {A : Type u_1} {B : Type u_2} [CommRing A] [CommRing B] [IsDomain A] [IsDomain B] {p : Polynomial A} {f : A →+* B} (hf : Function.Injective ⇑f) (hroots : Multiset.card p.roots = p.natDegree)
Goal: Multiset.map (⇑f) p.roots = (Polynomial.map f p).roots
-- mul_le_mul_of_nonneg_left
@[gcongr]
theorem mul_le_mul_of_nonneg_left [PosMulMono α] (h : b ≤ c) (a0 : 0 ≤ a) : a * b ≤ a * c 
Arguments: {α : Type u_1} {a b c : α} [Mul α] [Zero α] [Preorder α] [PosMulMono α] (h : b ≤ c) (a0 : 0 ≤ a)
Goal: a * b ≤ a * c
-- mul_le_mul_of_nonneg_right
@[gcongr]
theorem mul_le_mul_of_nonneg_right [MulPosMono α] (h : b ≤ c) (a0 : 0 ≤ a) : b * a ≤ c * a 
Arguments: {α : Type u_1} {a b c : α} [Mul α] [Zero α] [Preorder α] [MulPosMono α] (h : b ≤ c) (a0 : 0 ≤ a)
Goal: b * a ≤ c * a
-- mul_lt_mul_of_pos_left
@[gcongr]
theorem mul_lt_mul_of_pos_left [PosMulStrictMono α] (bc : b < c) (a0 : 0 < a) : a * b < a * c 
Arguments: {α : Type u_1} {a b c : α} [Mul α] [Zero α] [Preorder α] [PosMulStrictMono α] (bc : b < c) (a0 : 0 < a)
Goal: a * b < a * c
-- mul_lt_mul_of_pos_right
@[gcongr]
theorem mul_lt_mul_of_pos_right [MulPosStrictMono α] (bc : b < c) (a0 : 0 < a) : b * a < c * a 
Arguments: {α : Type u_1} {a b c : α} [Mul α] [Zero α] [Preorder α] [MulPosStrictMono α] (bc : b < c) (a0 : 0 < a)
Goal: b * a < c * a
-- lt_of_mul_lt_mul_left
theorem lt_of_mul_lt_mul_left [PosMulReflectLT α] (h : a * b < a * c) (a0 : 0 ≤ a) : b < c 
Arguments: {α : Type u_1} {a b c : α} [Mul α] [Zero α] [Preorder α] [PosMulReflectLT α] (h : a * b < a * c) (a0 : 0 ≤ a)
Goal: b < c
-- lt_of_mul_lt_mul_right
theorem lt_of_mul_lt_mul_right [MulPosReflectLT α] (h : b * a < c * a) (a0 : 0 ≤ a) : b < c 
Arguments: {α : Type u_1} {a b c : α} [Mul α] [Zero α] [Preorder α] [MulPosReflectLT α] (h : b * a < c * a) (a0 : 0 ≤ a)
Goal: b < c
-- le_of_mul_le_mul_left
theorem le_of_mul_le_mul_left [PosMulReflectLE α] (bc : a * b ≤ a * c) (a0 : 0 < a) : b ≤ c 
Arguments: {α : Type u_1} {a b c : α} [Mul α] [Zero α] [Preorder α] [PosMulReflectLE α] (bc : a * b ≤ a * c) (a0 : 0 < a)
Goal: b ≤ c
-- le_of_mul_le_mul_right
theorem le_of_mul_le_mul_right [MulPosReflectLE α] (bc : b * a ≤ c * a) (a0 : 0 < a) : b ≤ c 
Arguments: {α : Type u_1} {a b c : α} [Mul α] [Zero α] [Preorder α] [MulPosReflectLE α] (bc : b * a ≤ c * a) (a0 : 0 < a)
Goal: b ≤ c
-- mul_lt_mul_left
@[simp]
theorem mul_lt_mul_left [PosMulStrictMono α] [PosMulReflectLT α] (a0 : 0 < a) :
    a * b < a * c ↔ b < c 
Arguments: {α : Type u_1} {a b c : α} [Mul α] [Zero α] [Preorder α] [PosMulStrictMono α] [PosMulReflectLT α] (a0 : 0 < a)
Goal: a * b < a * c ↔ b < c
-- mul_lt_mul_right
@[simp]
theorem mul_lt_mul_right [MulPosStrictMono α] [MulPosReflectLT α] (a0 : 0 < a) :
    b * a < c * a ↔ b < c 
Arguments: {α : Type u_1} {a b c : α} [Mul α] [Zero α] [Preorder α] [MulPosStrictMono α] [MulPosReflectLT α] (a0 : 0 < a)
Goal: b * a < c * a ↔ b < c