File: Mathlib/RingTheory/Polynomial/ScaleRoots.lean

full_name: Polynomial.scaleRoots
code: /-- `scaleRoots p s` is a polynomial with root `r * s` for each root `r` of `p`. -/
noncomputable def scaleRoots (p : R[X]) (s : R) : R[X] 
goal: Polynomial R

full_name: Polynomial.coeff_scaleRoots
code: @[simp]
theorem coeff_scaleRoots (p : R[X]) (s : R) (i : ℕ) :
    (scaleRoots p s).coeff i = coeff p i * s ^ (p.natDegree - i) 
goal: (p.scaleRoots s).coeff i = p.coeff i * s ^ (p.natDegree - i)

full_name: Polynomial.coeff_scaleRoots_natDegree
code: theorem coeff_scaleRoots_natDegree (p : R[X]) (s : R) :
    (scaleRoots p s).coeff p.natDegree = p.leadingCoeff 
goal: (p.scaleRoots s).coeff p.natDegree = p.leadingCoeff

full_name: Polynomial.zero_scaleRoots
code: @[simp]
theorem zero_scaleRoots (s : R) : scaleRoots 0 s = 0 
goal: Polynomial.scaleRoots 0 s = 0

full_name: Polynomial.scaleRoots_ne_zero
code: theorem scaleRoots_ne_zero {p : R[X]} (hp : p ≠ 0) (s : R) : scaleRoots p s ≠ 0 
goal: p.scaleRoots s ≠ 0

full_name: Polynomial.support_scaleRoots_le
code: theorem support_scaleRoots_le (p : R[X]) (s : R) : (scaleRoots p s).support ≤ p.support 
goal: (p.scaleRoots s).support ≤ p.support

full_name: Polynomial.support_scaleRoots_eq
code: theorem support_scaleRoots_eq (p : R[X]) {s : R} (hs : s ∈ nonZeroDivisors R) :
    (scaleRoots p s).support = p.support 
goal: (p.scaleRoots s).support = p.support

full_name: Polynomial.degree_scaleRoots
code: @[simp]
theorem degree_scaleRoots (p : R[X]) {s : R} : degree (scaleRoots p s) = degree p 
goal: (p.scaleRoots s).degree = p.degree

full_name: Polynomial.natDegree_scaleRoots
code: @[simp]
theorem natDegree_scaleRoots (p : R[X]) (s : R) : natDegree (scaleRoots p s) = natDegree p 
goal: (p.scaleRoots s).natDegree = p.natDegree

full_name: Polynomial.monic_scaleRoots_iff
code: theorem monic_scaleRoots_iff {p : R[X]} (s : R) : Monic (scaleRoots p s) ↔ Monic p 
goal: (p.scaleRoots s).Monic ↔ p.Monic

full_name: Polynomial.map_scaleRoots
code: theorem map_scaleRoots (p : R[X]) (x : R) (f : R →+* S) (h : f p.leadingCoeff ≠ 0) :
    (p.scaleRoots x).map f = (p.map f).scaleRoots (f x) 
goal: Polynomial.map f (p.scaleRoots x) = (Polynomial.map f p).scaleRoots (f x)

full_name: Polynomial.scaleRoots_C
code: @[simp]
lemma scaleRoots_C (r c : R) : (C c).scaleRoots r = C c 
goal: (Polynomial.C c).scaleRoots r = Polynomial.C c

full_name: Polynomial.scaleRoots_one
code: @[simp]
lemma scaleRoots_one (p : R[X]) :
    p.scaleRoots 1 = p 
goal: p.scaleRoots 1 = p

full_name: Polynomial.scaleRoots_zero
code: @[simp]
lemma scaleRoots_zero (p : R[X]) :
    p.scaleRoots 0 = p.leadingCoeff • X ^ p.natDegree 
goal: p.scaleRoots 0 = p.leadingCoeff • Polynomial.X ^ p.natDegree

full_name: Polynomial.one_scaleRoots
code: @[simp]
lemma one_scaleRoots (r : R) :
    (1 : R[X]).scaleRoots r = 1 
goal: Polynomial.scaleRoots 1 r = 1

full_name: Polynomial.scaleRoots_eval₂_mul_of_commute
code: theorem scaleRoots_eval₂_mul_of_commute {p : S[X]} (f : S →+* A) (a : A) (s : S)
    (hsa : Commute (f s) a) (hf : ∀ s₁ s₂, Commute (f s₁) (f s₂)) :
    eval₂ f (f s * a) (scaleRoots p s) = f s ^ p.natDegree * eval₂ f a p 
goal: Polynomial.eval₂ f (f s * a) (p.scaleRoots s) = f s ^ p.natDegree * Polynomial.eval₂ f a p

full_name: Polynomial.scaleRoots_eval₂_mul
code: theorem scaleRoots_eval₂_mul {p : S[X]} (f : S →+* R) (r : R) (s : S) :
    eval₂ f (f s * r) (scaleRoots p s) = f s ^ p.natDegree * eval₂ f r p 
goal: Polynomial.eval₂ f (f s * r) (p.scaleRoots s) = f s ^ p.natDegree * Polynomial.eval₂ f r p

full_name: Polynomial.scaleRoots_eval₂_eq_zero
code: theorem scaleRoots_eval₂_eq_zero {p : S[X]} (f : S →+* R) {r : R} {s : S} (hr : eval₂ f r p = 0) :
    eval₂ f (f s * r) (scaleRoots p s) = 0 
goal: Polynomial.eval₂ f (f s * r) (p.scaleRoots s) = 0

full_name: Polynomial.scaleRoots_aeval_eq_zero
code: theorem scaleRoots_aeval_eq_zero [Algebra R A] {p : R[X]} {a : A} {r : R} (ha : aeval a p = 0) :
    aeval (algebraMap R A r * a) (scaleRoots p r) = 0 
goal: (Polynomial.aeval ((algebraMap R A) r * a)) (p.scaleRoots r) = 0

full_name: Polynomial.scaleRoots_eval₂_eq_zero_of_eval₂_div_eq_zero
code: theorem scaleRoots_eval₂_eq_zero_of_eval₂_div_eq_zero {p : S[X]} {f : S →+* K}
    (hf : Function.Injective f) {r s : S} (hr : eval₂ f (f r / f s) p = 0)
    (hs : s ∈ nonZeroDivisors S) : eval₂ f (f r) (scaleRoots p s) = 0 
goal: Polynomial.eval₂ f (f r) (p.scaleRoots s) = 0

full_name: Polynomial.scaleRoots_aeval_eq_zero_of_aeval_div_eq_zero
code: theorem scaleRoots_aeval_eq_zero_of_aeval_div_eq_zero [Algebra R K]
    (inj : Function.Injective (algebraMap R K)) {p : R[X]} {r s : R}
    (hr : aeval (algebraMap R K r / algebraMap R K s) p = 0) (hs : s ∈ nonZeroDivisors R) :
    aeval (algebraMap R K r) (scaleRoots p s) = 0 
goal: (Polynomial.aeval ((algebraMap R K) r)) (p.scaleRoots s) = 0

full_name: Polynomial.scaleRoots_mul
code: @[simp]
lemma scaleRoots_mul (p : R[X]) (r s) :
    p.scaleRoots (r * s) = (p.scaleRoots r).scaleRoots s 
goal: p.scaleRoots (r * s) = (p.scaleRoots r).scaleRoots s

full_name: Polynomial.mul_scaleRoots
code: /-- Multiplication and `scaleRoots` commute up to a power of `r`. The factor disappears if we
assume that the product of the leading coeffs does not vanish. See `Polynomial.mul_scaleRoots'`. -/
lemma mul_scaleRoots (p q : R[X]) (r : R) :
    r ^ (natDegree p + natDegree q - natDegree (p * q)) • (p * q).scaleRoots r =
      p.scaleRoots r * q.scaleRoots r 
goal: r ^ (p.natDegree + q.natDegree - (p * q).natDegree) • (p * q).scaleRoots r = p.scaleRoots r * q.scaleRoots r

full_name: Polynomial.mul_scaleRoots'
code: lemma mul_scaleRoots' (p q : R[X]) (r : R) (h : leadingCoeff p * leadingCoeff q ≠ 0) :
    (p * q).scaleRoots r = p.scaleRoots r * q.scaleRoots r 
goal: (p * q).scaleRoots r = p.scaleRoots r * q.scaleRoots r

full_name: Polynomial.mul_scaleRoots_of_noZeroDivisors
code: lemma mul_scaleRoots_of_noZeroDivisors (p q : R[X]) (r : R) [NoZeroDivisors R] :
    (p * q).scaleRoots r = p.scaleRoots r * q.scaleRoots r 
goal: (p * q).scaleRoots r = p.scaleRoots r * q.scaleRoots r

full_name: Polynomial.add_scaleRoots_of_natDegree_eq
code: lemma add_scaleRoots_of_natDegree_eq (p q : R[X]) (r : R) (h : natDegree p = natDegree q) :
    r ^ (natDegree p - natDegree (p + q)) • (p + q).scaleRoots r =
      p.scaleRoots r + q.scaleRoots r 
goal: r ^ (p.natDegree - (p + q).natDegree) • (p + q).scaleRoots r = p.scaleRoots r + q.scaleRoots r

full_name: Polynomial.scaleRoots_dvd'
code: lemma scaleRoots_dvd' (p q : R[X]) {r : R} (hr : IsUnit r)
    (hpq : p ∣ q) : p.scaleRoots r ∣ q.scaleRoots r 
goal: p.scaleRoots r ∣ q.scaleRoots r

full_name: Polynomial.scaleRoots_dvd
code: lemma scaleRoots_dvd (p q : R[X]) {r : R} [NoZeroDivisors R] (hpq : p ∣ q) :
    p.scaleRoots r ∣ q.scaleRoots r 
goal: p.scaleRoots r ∣ q.scaleRoots r

full_name: Polynomial.scaleRoots_dvd_iff
code: lemma scaleRoots_dvd_iff (p q : R[X]) {r : R} (hr : IsUnit r) :
    p.scaleRoots r ∣ q.scaleRoots r ↔ p ∣ q 
goal: p.scaleRoots r ∣ q.scaleRoots r ↔ p ∣ q

full_name: Polynomial.isCoprime_scaleRoots
code: lemma isCoprime_scaleRoots (p q : R[X]) (r : R) (hr : IsUnit r) (h : IsCoprime p q) :
    IsCoprime (p.scaleRoots r) (q.scaleRoots r) 
goal: IsCoprime (p.scaleRoots r) (q.scaleRoots r)