Scaling the roots of a polynomial #
This file defines scaleRoots p s
for a polynomial p
in one variable and a ring element s
to
be the polynomial with root r * s
for each root r
of p
and proves some basic results about it.
scaleRoots p s
is a polynomial with root r * s
for each root r
of p
.
Equations
- p.scaleRoots s = ∑ i ∈ p.support, (Polynomial.monomial i) (p.coeff i * s ^ (p.natDegree - i))
Instances For
@[simp]
theorem
Polynomial.coeff_scaleRoots
{R : Type u_1}
[Semiring R]
(p : Polynomial R)
(s : R)
(i : ℕ)
:
theorem
Polynomial.coeff_scaleRoots_natDegree
{R : Type u_1}
[Semiring R]
(p : Polynomial R)
(s : R)
:
(p.scaleRoots s).coeff p.natDegree = p.leadingCoeff
@[simp]
theorem
Polynomial.zero_scaleRoots
{R : Type u_1}
[Semiring R]
(s : R)
:
Polynomial.scaleRoots 0 s = 0
theorem
Polynomial.scaleRoots_ne_zero
{R : Type u_1}
[Semiring R]
{p : Polynomial R}
(hp : p ≠ 0)
(s : R)
:
p.scaleRoots s ≠ 0
theorem
Polynomial.support_scaleRoots_le
{R : Type u_1}
[Semiring R]
(p : Polynomial R)
(s : R)
:
(p.scaleRoots s).support ≤ p.support
theorem
Polynomial.support_scaleRoots_eq
{R : Type u_1}
[Semiring R]
(p : Polynomial R)
{s : R}
(hs : s ∈ nonZeroDivisors R)
:
(p.scaleRoots s).support = p.support
@[simp]
theorem
Polynomial.degree_scaleRoots
{R : Type u_1}
[Semiring R]
(p : Polynomial R)
{s : R}
:
(p.scaleRoots s).degree = p.degree
@[simp]
theorem
Polynomial.natDegree_scaleRoots
{R : Type u_1}
[Semiring R]
(p : Polynomial R)
(s : R)
:
(p.scaleRoots s).natDegree = p.natDegree
theorem
Polynomial.monic_scaleRoots_iff
{R : Type u_1}
[Semiring R]
{p : Polynomial R}
(s : R)
:
(p.scaleRoots s).Monic ↔ p.Monic
theorem
Polynomial.map_scaleRoots
{R : Type u_1}
{S : Type u_2}
[Semiring R]
[Semiring S]
(p : Polynomial R)
(x : R)
(f : R →+* S)
(h : f p.leadingCoeff ≠ 0)
:
Polynomial.map f (p.scaleRoots x) = (Polynomial.map f p).scaleRoots (f x)
@[simp]
theorem
Polynomial.scaleRoots_C
{R : Type u_1}
[Semiring R]
(r c : R)
:
(Polynomial.C c).scaleRoots r = Polynomial.C c
@[simp]
theorem
Polynomial.scaleRoots_one
{R : Type u_1}
[Semiring R]
(p : Polynomial R)
:
p.scaleRoots 1 = p
@[simp]
@[simp]
theorem
Polynomial.one_scaleRoots
{R : Type u_1}
[Semiring R]
(r : R)
:
Polynomial.scaleRoots 1 r = 1
theorem
Polynomial.scaleRoots_eval₂_mul_of_commute
{S : Type u_2}
{A : Type u_3}
[Semiring S]
[Semiring A]
{p : Polynomial S}
(f : S →+* A)
(a : A)
(s : S)
(hsa : Commute (f s) a)
(hf : ∀ (s₁ s₂ : S), Commute (f s₁) (f s₂))
:
Polynomial.eval₂ f (f s * a) (p.scaleRoots s) = f s ^ p.natDegree * Polynomial.eval₂ f a p
theorem
Polynomial.scaleRoots_eval₂_mul
{R : Type u_1}
{S : Type u_2}
[Semiring S]
[CommSemiring R]
{p : Polynomial S}
(f : S →+* R)
(r : R)
(s : S)
:
Polynomial.eval₂ f (f s * r) (p.scaleRoots s) = f s ^ p.natDegree * Polynomial.eval₂ f r p
theorem
Polynomial.scaleRoots_eval₂_eq_zero
{R : Type u_1}
{S : Type u_2}
[Semiring S]
[CommSemiring R]
{p : Polynomial S}
(f : S →+* R)
{r : R}
{s : S}
(hr : Polynomial.eval₂ f r p = 0)
:
Polynomial.eval₂ f (f s * r) (p.scaleRoots s) = 0
theorem
Polynomial.scaleRoots_aeval_eq_zero
{R : Type u_1}
{A : Type u_3}
[CommSemiring R]
[Semiring A]
[Algebra R A]
{p : Polynomial R}
{a : A}
{r : R}
(ha : (Polynomial.aeval a) p = 0)
:
(Polynomial.aeval ((algebraMap R A) r * a)) (p.scaleRoots r) = 0
theorem
Polynomial.scaleRoots_eval₂_eq_zero_of_eval₂_div_eq_zero
{S : Type u_2}
{K : Type u_4}
[Semiring S]
[Field K]
{p : Polynomial S}
{f : S →+* K}
(hf : Function.Injective ⇑f)
{r s : S}
(hr : Polynomial.eval₂ f (f r / f s) p = 0)
(hs : s ∈ nonZeroDivisors S)
:
Polynomial.eval₂ f (f r) (p.scaleRoots s) = 0
theorem
Polynomial.scaleRoots_aeval_eq_zero_of_aeval_div_eq_zero
{R : Type u_1}
{K : Type u_4}
[CommSemiring R]
[Field K]
[Algebra R K]
(inj : Function.Injective ⇑(algebraMap R K))
{p : Polynomial R}
{r s : R}
(hr : (Polynomial.aeval ((algebraMap R K) r / (algebraMap R K) s)) p = 0)
(hs : s ∈ nonZeroDivisors R)
:
(Polynomial.aeval ((algebraMap R K) r)) (p.scaleRoots s) = 0
@[simp]
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'
.
theorem
Polynomial.mul_scaleRoots'
{R : Type u_1}
[CommSemiring R]
(p q : Polynomial R)
(r : R)
(h : p.leadingCoeff * q.leadingCoeff ≠ 0)
:
theorem
Polynomial.mul_scaleRoots_of_noZeroDivisors
{R : Type u_1}
[CommSemiring R]
(p q : Polynomial R)
(r : R)
[NoZeroDivisors R]
:
theorem
Polynomial.add_scaleRoots_of_natDegree_eq
{R : Type u_1}
[CommSemiring R]
(p q : Polynomial R)
(r : R)
(h : p.natDegree = q.natDegree)
:
theorem
Polynomial.scaleRoots_dvd'
{R : Type u_1}
[CommSemiring R]
(p q : Polynomial R)
{r : R}
(hr : IsUnit r)
(hpq : p ∣ q)
:
p.scaleRoots r ∣ q.scaleRoots r
theorem
Polynomial.scaleRoots_dvd
{R : Type u_1}
[CommSemiring R]
(p q : Polynomial R)
{r : R}
[NoZeroDivisors R]
(hpq : p ∣ q)
:
p.scaleRoots r ∣ q.scaleRoots r
theorem
Dvd.dvd.scaleRoots
{R : Type u_1}
[CommSemiring R]
(p q : Polynomial R)
{r : R}
[NoZeroDivisors R]
(hpq : p ∣ q)
:
p.scaleRoots r ∣ q.scaleRoots r
Alias of Polynomial.scaleRoots_dvd
.
theorem
Polynomial.scaleRoots_dvd_iff
{R : Type u_1}
[CommSemiring R]
(p q : Polynomial R)
{r : R}
(hr : IsUnit r)
:
theorem
IsUnit.scaleRoots_dvd_iff
{R : Type u_1}
[CommSemiring R]
(p q : Polynomial R)
{r : R}
(hr : IsUnit r)
:
Alias of Polynomial.scaleRoots_dvd_iff
.
theorem
Polynomial.isCoprime_scaleRoots
{R : Type u_1}
[CommSemiring R]
(p q : Polynomial R)
(r : R)
(hr : IsUnit r)
(h : IsCoprime p q)
:
IsCoprime (p.scaleRoots r) (q.scaleRoots r)
theorem
IsCoprime.scaleRoots
{R : Type u_1}
[CommSemiring R]
(p q : Polynomial R)
(r : R)
(hr : IsUnit r)
(h : IsCoprime p q)
:
IsCoprime (p.scaleRoots r) (q.scaleRoots r)
Alias of Polynomial.isCoprime_scaleRoots
.