ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Polynomial.induction_with_natDegree_le
theorem induction_with_natDegree_le (P : R[X] → Prop) (N : ℕ) (P_0 : P 0)
    (P_C_mul_pow : ∀ n : ℕ, ∀ r : R, r ≠ 0 → n ≤ N → P (C r * X ^ n))
    (P_C_add : ∀ f g : R[X], f.natDegree < g.natDegree → g.natDegree ≤ N → P f → P g → P (f + g)) :
    ∀ f : R[X], f.natDegree ≤ N → P f 
Arguments: {R : Type u_1} [Semiring R] (P : R[X] → Prop) (N : ℕ) (P_0 : P 0) (P_C_mul_pow : ∀ (n : ℕ) (r : R), r ≠ 0 → n ≤ N → P (Polynomial.C r * Polynomial.X ^ n)) (P_C_add : ∀ (f g : R[X]), f.natDegree < g.natDegree → g.natDegree ≤ N → P f → P g → P (f + g)) (f : R[X])
Goal: f.natDegree ≤ N → P f
-- Polynomial.mono_map_natDegree_eq
theorem mono_map_natDegree_eq {S F : Type*} [Semiring S]
    [FunLike F R[X] S[X]] [AddMonoidHomClass F R[X] S[X]] {φ : F}
    {p : R[X]} (k : ℕ) (fu : ℕ → ℕ) (fu0 : ∀ {n}, n ≤ k → fu n = 0)
    (fc : ∀ {n m}, k ≤ n → n < m → fu n < fu m) (φ_k : ∀ {f : R[X]}, f.natDegree < k → φ f = 0)
    (φ_mon_nat : ∀ n c, c ≠ 0 → (φ (monomial n c)).natDegree = fu n) :
    (φ p).natDegree = fu p.natDegree 
Arguments: {R : Type u_1} [Semiring R] {S : Type u_2} {F : Type u_3} [Semiring S] [FunLike F R[X] S[X]] [AddMonoidHomClass F R[X] S[X]] {φ : F} {p : R[X]} (k : ℕ) (fu : ℕ → ℕ) (fu0 : ∀ {n : ℕ}, n ≤ k → fu n = 0) (fc : ∀ {n m : ℕ}, k ≤ n → n < m → fu n < fu m) (φ_k : ∀ {f : R[X]}, f.natDegree < k → φ f = 0) (φ_mon_nat : ∀ (n : ℕ) (c : R), c ≠ 0 → (φ ((Polynomial.monomial n) c)).natDegree = fu n)
Goal: (φ p).natDegree = fu p.natDegree
-- Polynomial.map_natDegree_eq_sub
theorem map_natDegree_eq_sub {S F : Type*} [Semiring S]
    [FunLike F R[X] S[X]] [AddMonoidHomClass F R[X] S[X]] {φ : F}
    {p : R[X]} {k : ℕ} (φ_k : ∀ f : R[X], f.natDegree < k → φ f = 0)
    (φ_mon : ∀ n c, c ≠ 0 → (φ (monomial n c)).natDegree = n - k) :
    (φ p).natDegree = p.natDegree - k 
Arguments: {R : Type u_1} [Semiring R] {S : Type u_2} {F : Type u_3} [Semiring S] [FunLike F R[X] S[X]] [AddMonoidHomClass F R[X] S[X]] {φ : F} {p : R[X]} {k : ℕ} (φ_k : ∀ (f : R[X]), f.natDegree < k → φ f = 0) (φ_mon : ∀ (n : ℕ) (c : R), c ≠ 0 → (φ ((Polynomial.monomial n) c)).natDegree = n - k)
Goal: (φ p).natDegree = p.natDegree - k
-- Polynomial.map_natDegree_eq_natDegree
theorem map_natDegree_eq_natDegree {S F : Type*} [Semiring S]
    [FunLike F R[X] S[X]] [AddMonoidHomClass F R[X] S[X]]
    {φ : F} (p) (φ_mon_nat : ∀ n c, c ≠ 0 → (φ (monomial n c)).natDegree = n) :
    (φ p).natDegree = p.natDegree 
Arguments: {R : Type u_1} [Semiring R] {S : Type u_2} {F : Type u_3} [Semiring S] [FunLike F R[X] S[X]] [AddMonoidHomClass F R[X] S[X]] {φ : F} (p : R[X]) (φ_mon_nat : ∀ (n : ℕ) (c : R), c ≠ 0 → (φ ((Polynomial.monomial n) c)).natDegree = n)
Goal: (φ p).natDegree = p.natDegree
-- Polynomial.card_support_eq'
theorem card_support_eq' {n : ℕ} (k : Fin n → ℕ) (x : Fin n → R) (hk : Function.Injective k)
    (hx : ∀ i, x i ≠ 0) : (∑ i, C (x i) * X ^ k i).support.card = n 
Arguments: {R : Type u_1} [Semiring R] {n : ℕ} (k : Fin n → ℕ) (x : Fin n → R) (hk : Function.Injective k) (hx : ∀ (i : Fin n), x i ≠ 0)
Goal: (∑ i : Fin n, Polynomial.C (x i) * Polynomial.X ^ k i).support.card = n
-- Polynomial.card_support_eq
theorem card_support_eq {n : ℕ} :
    f.support.card = n ↔
      ∃ (k : Fin n → ℕ) (x : Fin n → R) (hk : StrictMono k) (hx : ∀ i, x i ≠ 0),
        f = ∑ i, C (x i) * X ^ k i 
Arguments: {R : Type u_1} [Semiring R] {f : R[X]} {n : ℕ}
Goal: f.support.card = n ↔
  ∃ k x, ∃ (_ : StrictMono k) (_ : ∀ (i : Fin n), x i ≠ 0), f = ∑ i : Fin n, Polynomial.C (x i) * Polynomial.X ^ k i
-- Polynomial.card_support_eq_one
theorem card_support_eq_one : f.support.card = 1 ↔
    ∃ (k : ℕ) (x : R) (hx : x ≠ 0), f = C x * X ^ k 
Arguments: {R : Type u_1} [Semiring R] {f : R[X]}
Goal: f.support.card = 1 ↔ ∃ k x, ∃ (_ : x ≠ 0), f = Polynomial.C x * Polynomial.X ^ k
-- Polynomial.card_support_eq_two
theorem card_support_eq_two :
    f.support.card = 2 ↔
      ∃ (k m : ℕ) (hkm : k < m) (x y : R) (hx : x ≠ 0) (hy : y ≠ 0),
        f = C x * X ^ k + C y * X ^ m 
Arguments: {R : Type u_1} [Semiring R] {f : R[X]}
Goal: f.support.card = 2 ↔
  ∃ k m,
    ∃ (_ : k < m),
      ∃ x y, ∃ (_ : x ≠ 0) (_ : y ≠ 0), f = Polynomial.C x * Polynomial.X ^ k + Polynomial.C y * Polynomial.X ^ m
-- Polynomial.card_support_eq_three
theorem card_support_eq_three :
    f.support.card = 3 ↔
      ∃ (k m n : ℕ) (hkm : k < m) (hmn : m < n) (x y z : R) (hx : x ≠ 0) (hy : y ≠ 0) (hz : z ≠ 0),
        f = C x * X ^ k + C y * X ^ m + C z * X ^ n 
Arguments: {R : Type u_1} [Semiring R] {f : R[X]}
Goal: f.support.card = 3 ↔
  ∃ k m n,
    ∃ (_ : k < m) (_ : m < n),
      ∃ x y z,
        ∃ (_ : x ≠ 0) (_ : y ≠ 0) (_ : z ≠ 0),
          f = Polynomial.C x * Polynomial.X ^ k + Polynomial.C y * Polynomial.X ^ m + Polynomial.C z * Polynomial.X ^ n
-- FloorRing.exists_prime_mul_pow_lt_factorial
theorem exists_prime_mul_pow_lt_factorial [LinearOrderedRing K] [FloorRing K] (n : ℕ) (a c : K) :
    ∃ p > n, p.Prime ∧ a * c ^ p < (p - 1)! 
Arguments: {K : Type u_1} [LinearOrderedRing K] [FloorRing K] (n : ℕ) (a c : K)
Goal: ∃ p > n, Nat.Prime p ∧ a * c ^ p < ↑(p - 1).factorial
-- FloorRing.exists_prime_mul_pow_div_factorial_lt_one
theorem exists_prime_mul_pow_div_factorial_lt_one [LinearOrderedField K] [FloorRing K]
    (n : ℕ) (a c : K) :
    ∃ p > n, p.Prime ∧ a * c ^ p / (p - 1)! < 1 
Arguments: {K : Type u_1} [LinearOrderedField K] [FloorRing K] (n : ℕ) (a c : K)
Goal: ∃ p > n, Nat.Prime p ∧ a * c ^ p / ↑(p - 1).factorial < 1
-- Nonneg.nat_floor_coe
@[norm_cast]
theorem nat_floor_coe [OrderedSemiring α] [FloorSemiring α] (a : { r : α // 0 ≤ r }) :
    ⌊(a : α)⌋₊ = ⌊a⌋₊ 
Arguments: {α : Type u_1} [OrderedSemiring α] [FloorSemiring α] (a : { r // 0 ≤ r })
Goal: ⌊↑a⌋₊ = ⌊a⌋₊
-- Nonneg.nat_ceil_coe
@[norm_cast]
theorem nat_ceil_coe [OrderedSemiring α] [FloorSemiring α] (a : { r : α // 0 ≤ r }) :
    ⌈(a : α)⌉₊ = ⌈a⌉₊ 
Arguments: {α : Type u_1} [OrderedSemiring α] [FloorSemiring α] (a : { r // 0 ≤ r })
Goal: ⌈↑a⌉₊ = ⌈a⌉₊
-- IdemSemiring.bot_le
class IdemSemiring (α : Type u) extends Semiring α, SemilatticeSup α where
  protected sup := (· + ·)
  protected add_eq_sup : ∀ a b : α, a + b = a ⊔ b := by
    intros
    rfl
    protected bot : α := 0
  protected bot_le : ∀ a, bot ≤ a
Arguments: {α : Type u} [self : IdemSemiring α] (a : α)
Goal: IdemSemiring.bot ≤ a
-- IdemSemiring.add_eq_sup
class IdemSemiring (α : Type u) extends Semiring α, SemilatticeSup α where
  protected sup := (· + ·)
  protected add_eq_sup : ∀ a b : α, a + b = a ⊔ b := by
    intros
    rfl
    protected bot : α := 0
  protected bot_le : ∀ a, bot ≤ a
Arguments: {α : Type u} [self : IdemSemiring α] (a b : α)
Goal: a + b = a ⊔ b
-- KleeneAlgebra.mul_kstar_le_self
class KleeneAlgebra (α : Type*) extends IdemSemiring α, KStar α where
  protected one_le_kstar : ∀ a : α, 1 ≤ a∗
  protected mul_kstar_le_kstar : ∀ a : α, a * a∗ ≤ a∗
  protected kstar_mul_le_kstar : ∀ a : α, a∗ * a ≤ a∗
  protected mul_kstar_le_self : ∀ a b : α, b * a ≤ b → b * a∗ ≤ b
  protected kstar_mul_le_self : ∀ a b : α, a * b ≤ b → a∗ * b ≤ b
Arguments: {α : Type u_5} [self : KleeneAlgebra α] (a b : α)
Goal: b * a ≤ b → b * a∗ ≤ b
-- KleeneAlgebra.kstar_mul_le_self
class KleeneAlgebra (α : Type*) extends IdemSemiring α, KStar α where
  protected one_le_kstar : ∀ a : α, 1 ≤ a∗
  protected mul_kstar_le_kstar : ∀ a : α, a * a∗ ≤ a∗
  protected kstar_mul_le_kstar : ∀ a : α, a∗ * a ≤ a∗
  protected mul_kstar_le_self : ∀ a b : α, b * a ≤ b → b * a∗ ≤ b
  protected kstar_mul_le_self : ∀ a b : α, a * b ≤ b → a∗ * b ≤ b
Arguments: {α : Type u_5} [self : KleeneAlgebra α] (a b : α)
Goal: a * b ≤ b → a∗ * b ≤ b
-- KleeneAlgebra.mul_kstar_le_kstar
class KleeneAlgebra (α : Type*) extends IdemSemiring α, KStar α where
  protected one_le_kstar : ∀ a : α, 1 ≤ a∗
  protected mul_kstar_le_kstar : ∀ a : α, a * a∗ ≤ a∗
  protected kstar_mul_le_kstar : ∀ a : α, a∗ * a ≤ a∗
  protected mul_kstar_le_self : ∀ a b : α, b * a ≤ b → b * a∗ ≤ b
  protected kstar_mul_le_self : ∀ a b : α, a * b ≤ b → a∗ * b ≤ b
Arguments: {α : Type u_5} [self : KleeneAlgebra α] (a : α)
Goal: a * a∗ ≤ a∗
-- KleeneAlgebra.kstar_mul_le_kstar
class KleeneAlgebra (α : Type*) extends IdemSemiring α, KStar α where
  protected one_le_kstar : ∀ a : α, 1 ≤ a∗
  protected mul_kstar_le_kstar : ∀ a : α, a * a∗ ≤ a∗
  protected kstar_mul_le_kstar : ∀ a : α, a∗ * a ≤ a∗
  protected mul_kstar_le_self : ∀ a b : α, b * a ≤ b → b * a∗ ≤ b
  protected kstar_mul_le_self : ∀ a b : α, a * b ≤ b → a∗ * b ≤ b
Arguments: {α : Type u_5} [self : KleeneAlgebra α] (a : α)
Goal: a∗ * a ≤ a∗
-- KleeneAlgebra.one_le_kstar
class KleeneAlgebra (α : Type*) extends IdemSemiring α, KStar α where
  protected one_le_kstar : ∀ a : α, 1 ≤ a∗
  protected mul_kstar_le_kstar : ∀ a : α, a * a∗ ≤ a∗
  protected kstar_mul_le_kstar : ∀ a : α, a∗ * a ≤ a∗
  protected mul_kstar_le_self : ∀ a b : α, b * a ≤ b → b * a∗ ≤ b
  protected kstar_mul_le_self : ∀ a b : α, a * b ≤ b → a∗ * b ≤ b
Arguments: {α : Type u_5} [self : KleeneAlgebra α] (a : α)
Goal: 1 ≤ a∗
-- add_eq_sup
theorem add_eq_sup (a b : α) : a + b = a ⊔ b 
Arguments: {α : Type u_1} [IdemSemiring α] (a b : α)
Goal: a + b = a ⊔ b
-- add_idem
theorem add_idem (a : α) : a + a = a 
Arguments: {α : Type u_1} [IdemSemiring α] (a : α)
Goal: a + a = a
-- nsmul_eq_self
theorem nsmul_eq_self : ∀ {n : ℕ} (_ : n ≠ 0) (a : α), n • a = a
  
Arguments: {α : Type u_1} [IdemSemiring α] {n : ℕ}
Goal: n ≠ 0 → ∀ (a : α), n • a = a
-- add_eq_left_iff_le
theorem add_eq_left_iff_le : a + b = a ↔ b ≤ a 
Arguments: {α : Type u_1} [IdemSemiring α] {a b : α}
Goal: a + b = a ↔ b ≤ a
-- add_eq_right_iff_le
theorem add_eq_right_iff_le : a + b = b ↔ a ≤ b 
Arguments: {α : Type u_1} [IdemSemiring α] {a b : α}
Goal: a + b = b ↔ a ≤ b
-- add_le_iff
theorem add_le_iff : a + b ≤ c ↔ a ≤ c ∧ b ≤ c 
Arguments: {α : Type u_1} [IdemSemiring α] {a b c : α}
Goal: a + b ≤ c ↔ a ≤ c ∧ b ≤ c
-- add_le
theorem add_le (ha : a ≤ c) (hb : b ≤ c) : a + b ≤ c 
Arguments: {α : Type u_1} [IdemSemiring α] {a b c : α} (ha : a ≤ c) (hb : b ≤ c)
Goal: a + b ≤ c
-- one_le_kstar
@[simp]
theorem one_le_kstar : 1 ≤ a∗ 
Arguments: {α : Type u_1} [KleeneAlgebra α] {a : α}
Goal: 1 ≤ a∗
-- mul_kstar_le_kstar
theorem mul_kstar_le_kstar : a * a∗ ≤ a∗ 
Arguments: {α : Type u_1} [KleeneAlgebra α] {a : α}
Goal: a * a∗ ≤ a∗
-- kstar_mul_le_kstar
theorem kstar_mul_le_kstar : a∗ * a ≤ a∗ 
Arguments: {α : Type u_1} [KleeneAlgebra α] {a : α}
Goal: a∗ * a ≤ a∗
-- mul_kstar_le_self
theorem mul_kstar_le_self : b * a ≤ b → b * a∗ ≤ b 
Arguments: {α : Type u_1} [KleeneAlgebra α] {a b : α}
Goal: b * a ≤ b → b * a∗ ≤ b
-- kstar_mul_le_self
theorem kstar_mul_le_self : a * b ≤ b → a∗ * b ≤ b 
Arguments: {α : Type u_1} [KleeneAlgebra α] {a b : α}
Goal: a * b ≤ b → a∗ * b ≤ b
-- mul_kstar_le
theorem mul_kstar_le (hb : b ≤ c) (ha : c * a ≤ c) : b * a∗ ≤ c 
Arguments: {α : Type u_1} [KleeneAlgebra α] {a b c : α} (hb : b ≤ c) (ha : c * a ≤ c)
Goal: b * a∗ ≤ c
-- kstar_mul_le
theorem kstar_mul_le (hb : b ≤ c) (ha : a * c ≤ c) : a∗ * b ≤ c 
Arguments: {α : Type u_1} [KleeneAlgebra α] {a b c : α} (hb : b ≤ c) (ha : a * c ≤ c)
Goal: a∗ * b ≤ c
-- kstar_le_of_mul_le_left
theorem kstar_le_of_mul_le_left (hb : 1 ≤ b) : b * a ≤ b → a∗ ≤ b 
Arguments: {α : Type u_1} [KleeneAlgebra α] {a b : α} (hb : 1 ≤ b)
Goal: b * a ≤ b → a∗ ≤ b
-- kstar_le_of_mul_le_right
theorem kstar_le_of_mul_le_right (hb : 1 ≤ b) : a * b ≤ b → a∗ ≤ b 
Arguments: {α : Type u_1} [KleeneAlgebra α] {a b : α} (hb : 1 ≤ b)
Goal: a * b ≤ b → a∗ ≤ b
-- le_kstar
@[simp]
theorem le_kstar : a ≤ a∗ 
Arguments: {α : Type u_1} [KleeneAlgebra α] {a : α}
Goal: a ≤ a∗
-- kstar_mono
@[mono]
theorem kstar_mono : Monotone (KStar.kstar : α → α) 
Arguments: {α : Type u_1} [KleeneAlgebra α]
Goal: Monotone KStar.kstar
-- kstar_eq_one
@[simp]
theorem kstar_eq_one : a∗ = 1 ↔ a ≤ 1 
Arguments: {α : Type u_1} [KleeneAlgebra α] {a : α}
Goal: a∗ = 1 ↔ a ≤ 1
-- kstar_zero
@[simp] lemma kstar_zero : (0 : α)∗ = 1 
Arguments: {α : Type u_1} [KleeneAlgebra α]
Goal: 0∗ = 1
-- kstar_one
@[simp]
theorem kstar_one : (1 : α)∗ = 1 
Arguments: {α : Type u_1} [KleeneAlgebra α]
Goal: 1∗ = 1
-- kstar_mul_kstar
@[simp]
theorem kstar_mul_kstar (a : α) : a∗ * a∗ = a∗ 
Arguments: {α : Type u_1} [KleeneAlgebra α] (a : α)
Goal: a∗ * a∗ = a∗
-- kstar_eq_self
@[simp]
theorem kstar_eq_self : a∗ = a ↔ a * a = a ∧ 1 ≤ a 
Arguments: {α : Type u_1} [KleeneAlgebra α] {a : α}
Goal: a∗ = a ↔ a * a = a ∧ 1 ≤ a
-- kstar_idem
@[simp]
theorem kstar_idem (a : α) : a∗∗ = a∗ 
Arguments: {α : Type u_1} [KleeneAlgebra α] (a : α)
Goal: a∗∗ = a∗
-- pow_le_kstar
@[simp]
theorem pow_le_kstar : ∀ {n : ℕ}, a ^ n ≤ a∗
  
Arguments: {α : Type u_1} [KleeneAlgebra α] {a : α} {n : ℕ}
Goal: a ^ n ≤ a∗
-- Prod.kstar_def
theorem kstar_def (a : α × β) : a∗ = (a.1∗, a.2∗) 
Arguments: {α : Type u_1} {β : Type u_2} [KleeneAlgebra α] [KleeneAlgebra β] (a : α × β)
Goal: a∗ = (a.1∗, a.2∗)
-- Prod.fst_kstar
@[simp]
theorem fst_kstar (a : α × β) : a∗.1 = a.1∗ 
Arguments: {α : Type u_1} {β : Type u_2} [KleeneAlgebra α] [KleeneAlgebra β] (a : α × β)
Goal: a∗.1 = a.1∗
-- Prod.snd_kstar
@[simp]
theorem snd_kstar (a : α × β) : a∗.2 = a.2∗ 
Arguments: {α : Type u_1} {β : Type u_2} [KleeneAlgebra α] [KleeneAlgebra β] (a : α × β)
Goal: a∗.2 = a.2∗
-- Pi.kstar_def
theorem kstar_def (a : ∀ i, π i) : a∗ = fun i ↦ (a i)∗ 
Arguments: {ι : Type u_3} {π : ι → Type u_4} [(i : ι) → KleeneAlgebra (π i)] (a : (i : ι) → π i)
Goal: a∗ = fun i => (a i)∗
-- Pi.kstar_apply
@[simp]
theorem kstar_apply (a : ∀ i, π i) (i : ι) : a∗ i = (a i)∗ 
Arguments: {ι : Type u_3} {π : ι → Type u_4} [(i : ι) → KleeneAlgebra (π i)] (a : (i : ι) → π i) (i : ι)
Goal: a∗ i = (a i)∗
-- Polynomial.roots_def
theorem roots_def [DecidableEq R] (p : R[X]) [Decidable (p = 0)] :
    p.roots = if h : p = 0 then ∅ else Classical.choose (exists_multiset_roots h) 
Arguments: {R : Type u} [CommRing R] [IsDomain R] [DecidableEq R] (p : Polynomial R) [Decidable (p = 0)]
Goal: p.roots = if h : p = 0 then ∅ else Classical.choose ⋯
-- Polynomial.roots_zero
@[simp]
theorem roots_zero : (0 : R[X]).roots = 0 
Arguments: {R : Type u} [CommRing R] [IsDomain R]
Goal: Polynomial.roots 0 = 0
-- Polynomial.card_roots
theorem card_roots (hp0 : p ≠ 0) : (Multiset.card (roots p) : WithBot ℕ) ≤ degree p 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R} (hp0 : p ≠ 0)
Goal: ↑(Multiset.card p.roots) ≤ p.degree
-- Polynomial.card_roots'
theorem card_roots' (p : R[X]) : Multiset.card p.roots ≤ natDegree p 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (p : Polynomial R)
Goal: Multiset.card p.roots ≤ p.natDegree
-- Polynomial.card_roots_sub_C
theorem card_roots_sub_C {p : R[X]} {a : R} (hp0 : 0 < degree p) :
    (Multiset.card (p - C a).roots : WithBot ℕ) ≤ degree p 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R} {a : R} (hp0 : 0 < p.degree)
Goal: ↑(Multiset.card (p - Polynomial.C a).roots) ≤ p.degree
-- Polynomial.card_roots_sub_C'
theorem card_roots_sub_C' {p : R[X]} {a : R} (hp0 : 0 < degree p) :
    Multiset.card (p - C a).roots ≤ natDegree p 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R} {a : R} (hp0 : 0 < p.degree)
Goal: Multiset.card (p - Polynomial.C a).roots ≤ p.natDegree
-- Polynomial.count_roots
@[simp]
theorem count_roots [DecidableEq R] (p : R[X]) : p.roots.count a = rootMultiplicity a p 
Arguments: {R : Type u} {a : R} [CommRing R] [IsDomain R] [DecidableEq R] (p : Polynomial R)
Goal: Multiset.count a p.roots = Polynomial.rootMultiplicity a p
-- Polynomial.mem_roots'
@[simp]
theorem mem_roots' : a ∈ p.roots ↔ p ≠ 0 ∧ IsRoot p a 
Arguments: {R : Type u} {a : R} [CommRing R] [IsDomain R] {p : Polynomial R}
Goal: a ∈ p.roots ↔ p ≠ 0 ∧ p.IsRoot a
-- Polynomial.mem_roots
theorem mem_roots (hp : p ≠ 0) : a ∈ p.roots ↔ IsRoot p a 
Arguments: {R : Type u} {a : R} [CommRing R] [IsDomain R] {p : Polynomial R} (hp : p ≠ 0)
Goal: a ∈ p.roots ↔ p.IsRoot a
-- Polynomial.ne_zero_of_mem_roots
theorem ne_zero_of_mem_roots (h : a ∈ p.roots) : p ≠ 0 
Arguments: {R : Type u} {a : R} [CommRing R] [IsDomain R] {p : Polynomial R} (h : a ∈ p.roots)
Goal: p ≠ 0
-- Polynomial.isRoot_of_mem_roots
theorem isRoot_of_mem_roots (h : a ∈ p.roots) : IsRoot p a 
Arguments: {R : Type u} {a : R} [CommRing R] [IsDomain R] {p : Polynomial R} (h : a ∈ p.roots)
Goal: p.IsRoot a
-- Polynomial.mem_roots_iff_aeval_eq_zero
lemma mem_roots_iff_aeval_eq_zero {x : R} (w : p ≠ 0) : x ∈ roots p ↔ aeval x p = 0 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R} {x : R} (w : p ≠ 0)
Goal: x ∈ p.roots ↔ (Polynomial.aeval x) p = 0
-- Polynomial.card_le_degree_of_subset_roots
theorem card_le_degree_of_subset_roots {p : R[X]} {Z : Finset R} (h : Z.val ⊆ p.roots) :
    Z.card ≤ p.natDegree 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R} {Z : Finset R} (h : Z.val ⊆ p.roots)
Goal: Z.card ≤ p.natDegree
-- Polynomial.finite_setOf_isRoot
theorem finite_setOf_isRoot {p : R[X]} (hp : p ≠ 0) : Set.Finite { x | IsRoot p x } 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R} (hp : p ≠ 0)
Goal: {x | p.IsRoot x}.Finite
-- Polynomial.eq_zero_of_infinite_isRoot
theorem eq_zero_of_infinite_isRoot (p : R[X]) (h : Set.Infinite { x | IsRoot p x }) : p = 0 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (p : Polynomial R) (h : {x | p.IsRoot x}.Infinite)
Goal: p = 0
-- Polynomial.exists_max_root
theorem exists_max_root [LinearOrder R] (p : R[X]) (hp : p ≠ 0) : ∃ x₀, ∀ x, p.IsRoot x → x ≤ x₀ 
Arguments: {R : Type u} [CommRing R] [IsDomain R] [LinearOrder R] (p : Polynomial R) (hp : p ≠ 0)
Goal: ∃ x₀, ∀ (x : R), p.IsRoot x → x ≤ x₀
-- Polynomial.exists_min_root
theorem exists_min_root [LinearOrder R] (p : R[X]) (hp : p ≠ 0) : ∃ x₀, ∀ x, p.IsRoot x → x₀ ≤ x 
Arguments: {R : Type u} [CommRing R] [IsDomain R] [LinearOrder R] (p : Polynomial R) (hp : p ≠ 0)
Goal: ∃ x₀, ∀ (x : R), p.IsRoot x → x₀ ≤ x
-- Polynomial.eq_of_infinite_eval_eq
theorem eq_of_infinite_eval_eq (p q : R[X]) (h : Set.Infinite { x | eval x p = eval x q }) :
    p = q 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (p q : Polynomial R) (h : {x | Polynomial.eval x p = Polynomial.eval x q}.Infinite)
Goal: p = q
-- Polynomial.roots_mul
theorem roots_mul {p q : R[X]} (hpq : p * q ≠ 0) : (p * q).roots = p.roots + q.roots 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p q : Polynomial R} (hpq : p * q ≠ 0)
Goal: (p * q).roots = p.roots + q.roots
-- Polynomial.roots.le_of_dvd
theorem roots.le_of_dvd (h : q ≠ 0) : p ∣ q → roots p ≤ roots q 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p q : Polynomial R} (h : q ≠ 0)
Goal: p ∣ q → p.roots ≤ q.roots
-- Polynomial.mem_roots_sub_C'
theorem mem_roots_sub_C' {p : R[X]} {a x : R} : x ∈ (p - C a).roots ↔ p ≠ C a ∧ p.eval x = a 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R} {a x : R}
Goal: x ∈ (p - Polynomial.C a).roots ↔ p ≠ Polynomial.C a ∧ Polynomial.eval x p = a
-- Polynomial.mem_roots_sub_C
theorem mem_roots_sub_C {p : R[X]} {a x : R} (hp0 : 0 < degree p) :
    x ∈ (p - C a).roots ↔ p.eval x = a 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {p : Polynomial R} {a x : R} (hp0 : 0 < p.degree)
Goal: x ∈ (p - Polynomial.C a).roots ↔ Polynomial.eval x p = a
-- Polynomial.roots_X_sub_C
@[simp]
theorem roots_X_sub_C (r : R) : roots (X - C r) = {r} 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (r : R)
Goal: (Polynomial.X - Polynomial.C r).roots = {r}
-- Polynomial.roots_X
@[simp]
theorem roots_X : roots (X : R[X]) = {0} 
Arguments: {R : Type u} [CommRing R] [IsDomain R]
Goal: Polynomial.X.roots = {0}
-- Polynomial.roots_C
@[simp]
theorem roots_C (x : R) : (C x).roots = 0 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (x : R)
Goal: (Polynomial.C x).roots = 0
-- Polynomial.roots_one
@[simp]
theorem roots_one : (1 : R[X]).roots = ∅ 
Arguments: {R : Type u} [CommRing R] [IsDomain R]
Goal: Polynomial.roots 1 = ∅
-- Polynomial.roots_C_mul
@[simp]
theorem roots_C_mul (p : R[X]) (ha : a ≠ 0) : (C a * p).roots = p.roots 
Arguments: {R : Type u} {a : R} [CommRing R] [IsDomain R] (p : Polynomial R) (ha : a ≠ 0)
Goal: (Polynomial.C a * p).roots = p.roots
-- Polynomial.roots_smul_nonzero
@[simp]
theorem roots_smul_nonzero (p : R[X]) (ha : a ≠ 0) : (a • p).roots = p.roots 
Arguments: {R : Type u} {a : R} [CommRing R] [IsDomain R] (p : Polynomial R) (ha : a ≠ 0)
Goal: (a • p).roots = p.roots
-- Polynomial.roots_neg
@[simp]
lemma roots_neg (p : R[X]) : (-p).roots = p.roots 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (p : Polynomial R)
Goal: (-p).roots = p.roots
-- Polynomial.roots_list_prod
theorem roots_list_prod (L : List R[X]) :
    (0 : R[X]) ∉ L → L.prod.roots = (L : Multiset R[X]).bind roots 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (L : List (Polynomial R))
Goal: 0 ∉ L → L.prod.roots = (↑L).bind Polynomial.roots
-- Polynomial.roots_multiset_prod
theorem roots_multiset_prod (m : Multiset R[X]) : (0 : R[X]) ∉ m → m.prod.roots = m.bind roots 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (m : Multiset (Polynomial R))
Goal: 0 ∉ m → m.prod.roots = m.bind Polynomial.roots
-- Polynomial.roots_prod
theorem roots_prod {ι : Type*} (f : ι → R[X]) (s : Finset ι) :
    s.prod f ≠ 0 → (s.prod f).roots = s.val.bind fun i => roots (f i) 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {ι : Type u_1} (f : ι → Polynomial R) (s : Finset ι)
Goal: s.prod f ≠ 0 → (s.prod f).roots = s.val.bind fun i => (f i).roots
-- Polynomial.roots_pow
@[simp]
theorem roots_pow (p : R[X]) (n : ℕ) : (p ^ n).roots = n • p.roots 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (p : Polynomial R) (n : ℕ)
Goal: (p ^ n).roots = n • p.roots
-- Polynomial.roots_X_pow
theorem roots_X_pow (n : ℕ) : (X ^ n : R[X]).roots = n • ({0} : Multiset R) 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (n : ℕ)
Goal: (Polynomial.X ^ n).roots = n • {0}
-- Polynomial.roots_C_mul_X_pow
theorem roots_C_mul_X_pow (ha : a ≠ 0) (n : ℕ) :
    Polynomial.roots (C a * X ^ n) = n • ({0} : Multiset R) 
Arguments: {R : Type u} {a : R} [CommRing R] [IsDomain R] (ha : a ≠ 0) (n : ℕ)
Goal: (Polynomial.C a * Polynomial.X ^ n).roots = n • {0}
-- Polynomial.roots_monomial
@[simp]
theorem roots_monomial (ha : a ≠ 0) (n : ℕ) : (monomial n a).roots = n • ({0} : Multiset R) 
Arguments: {R : Type u} {a : R} [CommRing R] [IsDomain R] (ha : a ≠ 0) (n : ℕ)
Goal: ((Polynomial.monomial n) a).roots = n • {0}
-- Polynomial.roots_prod_X_sub_C
theorem roots_prod_X_sub_C (s : Finset R) : (s.prod fun a => X - C a).roots = s.val 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (s : Finset R)
Goal: (∏ a ∈ s, (Polynomial.X - Polynomial.C a)).roots = s.val
-- Polynomial.roots_multiset_prod_X_sub_C
@[simp]
theorem roots_multiset_prod_X_sub_C (s : Multiset R) : (s.map fun a => X - C a).prod.roots = s 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (s : Multiset R)
Goal: (Multiset.map (fun a => Polynomial.X - Polynomial.C a) s).prod.roots = s
-- Polynomial.card_roots_X_pow_sub_C
theorem card_roots_X_pow_sub_C {n : ℕ} (hn : 0 < n) (a : R) :
    Multiset.card (roots ((X : R[X]) ^ n - C a)) ≤ n 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {n : ℕ} (hn : 0 < n) (a : R)
Goal: Multiset.card (Polynomial.X ^ n - Polynomial.C a).roots ≤ n
-- Polynomial.mem_nthRoots
@[simp]
theorem mem_nthRoots {n : ℕ} (hn : 0 < n) {a x : R} : x ∈ nthRoots n a ↔ x ^ n = a 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {n : ℕ} (hn : 0 < n) {a x : R}
Goal: x ∈ Polynomial.nthRoots n a ↔ x ^ n = a
-- Polynomial.nthRoots_zero
@[simp]
theorem nthRoots_zero (r : R) : nthRoots 0 r = 0 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (r : R)
Goal: Polynomial.nthRoots 0 r = 0
-- Polynomial.nthRoots_zero_right
@[simp]
theorem nthRoots_zero_right {R} [CommRing R] [IsDomain R] (n : ℕ) :
    nthRoots n (0 : R) = Multiset.replicate n 0 
Arguments: {R : Type u_1} [CommRing R] [IsDomain R] (n : ℕ)
Goal: Polynomial.nthRoots n 0 = Multiset.replicate n 0
-- Polynomial.card_nthRoots
theorem card_nthRoots (n : ℕ) (a : R) : Multiset.card (nthRoots n a) ≤ n 
Arguments: {R : Type u} [CommRing R] [IsDomain R] (n : ℕ) (a : R)
Goal: Multiset.card (Polynomial.nthRoots n a) ≤ n
-- Polynomial.nthRoots_two_eq_zero_iff
@[simp]
theorem nthRoots_two_eq_zero_iff {r : R} : nthRoots 2 r = 0 ↔ ¬IsSquare r 
Arguments: {R : Type u} [CommRing R] [IsDomain R] {r : R}
Goal: Polynomial.nthRoots 2 r = 0 ↔ ¬IsSquare r