Theory of monic polynomials #
We give several tools for proving that polynomials are monic, e.g.
Monic.mul, Monic.map, Monic.pow.
theorem
Polynomial.Monic.map
{R : Type u}
{S : Type v}
[Semiring R]
{p : Polynomial R}
[Semiring S]
(f : R โ+* S)
(hp : p.Monic)
:
(Polynomial.map f p).Monic
theorem
Polynomial.monic_C_mul_of_mul_leadingCoeff_eq_one
{R : Type u}
[Semiring R]
{p : Polynomial R}
{b : R}
(hp : b * p.leadingCoeff = 1)
:
theorem
Polynomial.monic_mul_C_of_leadingCoeff_mul_eq_one
{R : Type u}
[Semiring R]
{p : Polynomial R}
{b : R}
(hp : p.leadingCoeff * b = 1)
:
theorem
Polynomial.Monic.mul
{R : Type u}
[Semiring R]
{p q : Polynomial R}
(hp : p.Monic)
(hq : q.Monic)
:
theorem
Polynomial.Monic.pow
{R : Type u}
[Semiring R]
{p : Polynomial R}
(hp : p.Monic)
(n : โ)
:
theorem
Polynomial.Monic.add_of_left
{R : Type u}
[Semiring R]
{p q : Polynomial R}
(hp : p.Monic)
(hpq : q.degree < p.degree)
:
theorem
Polynomial.Monic.add_of_right
{R : Type u}
[Semiring R]
{p q : Polynomial R}
(hq : q.Monic)
(hpq : p.degree < q.degree)
:
theorem
Polynomial.Monic.of_mul_monic_left
{R : Type u}
[Semiring R]
{p q : Polynomial R}
(hp : p.Monic)
(hpq : (p * q).Monic)
:
q.Monic
theorem
Polynomial.Monic.of_mul_monic_right
{R : Type u}
[Semiring R]
{p q : Polynomial R}
(hq : q.Monic)
(hpq : (p * q).Monic)
:
p.Monic
theorem
Polynomial.Monic.comp
{R : Type u}
[Semiring R]
{p q : Polynomial R}
(hp : p.Monic)
(hq : q.Monic)
(h : q.natDegree โ 0)
:
theorem
Polynomial.Monic.comp_X_add_C
{R : Type u}
[Semiring R]
{p : Polynomial R}
(hp : p.Monic)
(r : R)
:
@[deprecated Polynomial.Monic.natDegree_eq_zero (since := "2025-10-26")]
theorem
Polynomial.Monic.natDegree_eq_zero_iff_eq_one
{R : Type u}
[Semiring R]
{p : Polynomial R}
(hf : p.Monic)
:
Alias of Polynomial.Monic.natDegree_eq_zero.
@[simp]
theorem
Polynomial.Monic.degree_le_zero_iff_eq_one
{R : Type u}
[Semiring R]
{p : Polynomial R}
(hp : p.Monic)
:
theorem
Polynomial.Monic.degree_mul_comm
{R : Type u}
[Semiring R]
{p : Polynomial R}
(hp : p.Monic)
(q : Polynomial R)
:
theorem
Polynomial.Monic.natDegree_mul_comm
{R : Type u}
[Semiring R]
{p : Polynomial R}
(hp : p.Monic)
(q : Polynomial R)
:
theorem
Polynomial.Monic.eq_one_of_map_eq_one
{R : Type u}
[Semiring R]
{p : Polynomial R}
{S : Type u_1}
[Semiring S]
[Nontrivial S]
(f : R โ+* S)
(hp : p.Monic)
(map_eq : Polynomial.map f p = 1)
:
@[simp]
theorem
Polynomial.Monic.eq_one_of_isUnit
{R : Type u}
[Semiring R]
{p : Polynomial R}
(hm : p.Monic)
(hpu : IsUnit p)
:
theorem
Polynomial.eq_of_monic_of_associated
{R : Type u}
[Semiring R]
{p q : Polynomial R}
(hp : p.Monic)
(hq : q.Monic)
(hpq : Associated p q)
:
@[reducible, inline]
The type of monic polynomials of degree n.
The implementation is slightly different because it is useful to still contain X ^ n when
R is trivial. See MonicDegreeEq.mk for the usual constructor.
Equations
Instances For
@[simp]
theorem
Polynomial.MonicDegreeEq.natDegree
{R : Type u}
{n : โ}
[Semiring R]
[Nontrivial R]
(p : MonicDegreeEq R n)
:
@[simp]
theorem
Polynomial.MonicDegreeEq.degree
{R : Type u}
{n : โ}
[Semiring R]
[Nontrivial R]
(p : MonicDegreeEq R n)
:
theorem
Polynomial.MonicDegreeEq.monic
{R : Type u}
{n : โ}
[Semiring R]
(p : MonicDegreeEq R n)
:
(โp).Monic
def
Polynomial.MonicDegreeEq.mk
{R : Type u}
{n : โ}
[Semiring R]
(p : Polynomial R)
(hp : p.Monic)
(hp' : p.natDegree = n)
:
MonicDegreeEq R n
The constructor for MonicDegreeEq given a monic polynomial of degree n.
Equations
Instances For
@[simp]
theorem
Polynomial.MonicDegreeEq.mk_coe
{R : Type u}
{n : โ}
[Semiring R]
(p : Polynomial R)
(hp : p.Monic)
(hp' : p.natDegree = n)
:
noncomputable def
Polynomial.MonicDegreeEq.map
{R : Type u}
{S : Type v}
{n : โ}
[Semiring R]
[Semiring S]
(p : MonicDegreeEq R n)
(f : R โ+* S)
:
MonicDegreeEq S n
The image of a monic polynomial of degree n under a ring homomorphism.
Equations
Instances For
@[simp]
theorem
Polynomial.MonicDegreeEq.map_coe
{R : Type u}
{S : Type v}
{n : โ}
[Semiring R]
[Semiring S]
(p : MonicDegreeEq R n)
(f : R โ+* S)
:
theorem
Polynomial.monic_multiset_prod_of_monic
{R : Type u}
{ฮน : Type y}
[CommSemiring R]
(t : Multiset ฮน)
(f : ฮน โ Polynomial R)
(ht : โ i โ t, (f i).Monic)
:
(Multiset.map f t).prod.Monic
theorem
Polynomial.monic_prod_of_monic
{R : Type u}
{ฮน : Type y}
[CommSemiring R]
(s : Finset ฮน)
(f : ฮน โ Polynomial R)
(hs : โ i โ s, (f i).Monic)
:
(โ i โ s, f i).Monic
theorem
Polynomial.monic_finprod_of_monic
{R : Type u}
[CommSemiring R]
(ฮฑ : Type u_1)
(f : ฮฑ โ Polynomial R)
(hf : โ i โ Function.mulSupport f, (f i).Monic)
:
theorem
Polynomial.Monic.nextCoeff_multiset_prod
{R : Type u}
{ฮน : Type y}
[CommSemiring R]
(t : Multiset ฮน)
(f : ฮน โ Polynomial R)
(h : โ i โ t, (f i).Monic)
:
theorem
Polynomial.Monic.nextCoeff_prod
{R : Type u}
{ฮน : Type y}
[CommSemiring R]
(s : Finset ฮน)
(f : ฮน โ Polynomial R)
(h : โ i โ s, (f i).Monic)
:
theorem
Polynomial.irreducible_of_monic
{R : Type u}
[CommSemiring R]
[NoZeroDivisors R]
{p : Polynomial R}
(hp : p.Monic)
(hp1 : p โ 1)
:
theorem
Polynomial.Monic.irreducible_iff_natDegree
{R : Type u}
[CommSemiring R]
[NoZeroDivisors R]
{p : Polynomial R}
(hp : p.Monic)
:
theorem
Polynomial.Monic.irreducible_iff_natDegree'
{R : Type u}
[CommSemiring R]
[NoZeroDivisors R]
{p : Polynomial R}
(hp : p.Monic)
:
Irreducible p โ p โ 1 โง โ (f g : Polynomial R), f.Monic โ g.Monic โ f * g = p โ g.natDegree โ Finset.Ioc 0 (p.natDegree / 2)
theorem
Polynomial.Monic.irreducible_iff_lt_natDegree_lt
{R : Type u}
[CommSemiring R]
[NoZeroDivisors R]
{p : Polynomial R}
(hp : p.Monic)
(hp1 : p โ 1)
:
Irreducible p โ โ (q : Polynomial R), q.Monic โ q.natDegree โ Finset.Ioc 0 (p.natDegree / 2) โ ยฌq โฃ p
Alternate phrasing of Polynomial.Monic.irreducible_iff_natDegree' where we only have to check
one divisor at a time.
theorem
Polynomial.Monic.not_irreducible_iff_exists_add_mul_eq_coeff
{R : Type u}
[CommSemiring R]
[NoZeroDivisors R]
{p : Polynomial R}
(hm : p.Monic)
(hnd : p.natDegree = 2)
:
@[simp]
theorem
Polynomial.Monic.natDegree_map
{R : Type u}
{S : Type v}
[Semiring R]
[Semiring S]
[Nontrivial S]
{P : Polynomial R}
(hmo : P.Monic)
(f : R โ+* S)
:
@[simp]
theorem
Polynomial.Monic.degree_map
{R : Type u}
{S : Type v}
[Semiring R]
[Semiring S]
[Nontrivial S]
{P : Polynomial R}
(hmo : P.Monic)
(f : R โ+* S)
:
@[deprecated Polynomial.leadingCoeff_map_of_injective (since := "2025-10-26")]
theorem
Polynomial.leadingCoeff_map'
{R : Type u}
{S : Type v}
[Semiring R]
[Semiring S]
{f : R โ+* S}
(hf : Function.Injective โf)
(p : Polynomial R)
:
Alias of Polynomial.leadingCoeff_map_of_injective.
@[deprecated Polynomial.leadingCoeff_map_of_injective (since := "2025-10-26")]
theorem
Polynomial.leadingCoeff_of_injective
{R : Type u}
{S : Type v}
[Semiring R]
[Semiring S]
{f : R โ+* S}
(hf : Function.Injective โf)
(p : Polynomial R)
:
Alias of Polynomial.leadingCoeff_map_of_injective.
theorem
Polynomial.monic_of_injective
{R : Type u}
{S : Type v}
[Semiring R]
[Semiring S]
{f : R โ+* S}
(hf : Function.Injective โf)
{p : Polynomial R}
(hp : (map f p).Monic)
:
p.Monic
theorem
Function.Injective.monic_map_iff
{R : Type u}
{S : Type v}
[Semiring R]
[Semiring S]
{f : R โ+* S}
(hf : Injective โf)
{p : Polynomial R}
:
theorem
Polynomial.Monic.comp_X_sub_C
{R : Type u}
[Ring R]
{p : Polynomial R}
(hp : p.Monic)
(r : R)
:
theorem
Polynomial.Monic.sub_of_left
{R : Type u}
[Ring R]
{p q : Polynomial R}
(hp : p.Monic)
(hpq : q.degree < p.degree)
:
theorem
Polynomial.Monic.sub_of_right
{R : Type u}
[Ring R]
{p q : Polynomial R}
(hq : q.leadingCoeff = -1)
(hpq : p.degree < q.degree)
:
@[simp]
theorem
Polynomial.Monic.mul_left_ne_zero
{R : Type u}
[Semiring R]
{p : Polynomial R}
(hp : p.Monic)
{q : Polynomial R}
(hq : q โ 0)
:
theorem
Polynomial.Monic.mul_right_ne_zero
{R : Type u}
[Semiring R]
{p : Polynomial R}
(hp : p.Monic)
{q : Polynomial R}
(hq : q โ 0)
:
theorem
Polynomial.Monic.mul_natDegree_lt_iff
{R : Type u}
[Semiring R]
{p : Polynomial R}
(h : p.Monic)
{q : Polynomial R}
:
theorem
Polynomial.Monic.mul_right_eq_zero_iff
{R : Type u}
[Semiring R]
{p : Polynomial R}
(h : p.Monic)
{q : Polynomial R}
:
theorem
Polynomial.Monic.mul_left_eq_zero_iff
{R : Type u}
[Semiring R]
{p : Polynomial R}
(h : p.Monic)
{q : Polynomial R}
:
theorem
Polynomial.degree_smul_of_smul_regular
{R : Type u}
[Semiring R]
{S : Type u_1}
[SMulZeroClass S R]
{k : S}
(p : Polynomial R)
(h : IsSMulRegular R k)
:
theorem
Polynomial.natDegree_smul_of_smul_regular
{R : Type u}
[Semiring R]
{S : Type u_1}
[SMulZeroClass S R]
{k : S}
(p : Polynomial R)
(h : IsSMulRegular R k)
:
theorem
Polynomial.leadingCoeff_smul_of_smul_regular
{R : Type u}
[Semiring R]
{S : Type u_1}
[SMulZeroClass S R]
{k : S}
(p : Polynomial R)
(h : IsSMulRegular R k)
:
theorem
Polynomial.monic_of_isUnit_leadingCoeff_inv_smul
{R : Type u}
[Semiring R]
{p : Polynomial R}
(h : IsUnit p.leadingCoeff)
:
theorem
Polynomial.isUnit_leadingCoeff_mul_right_eq_zero_iff
{R : Type u}
[Semiring R]
{p : Polynomial R}
(h : IsUnit p.leadingCoeff)
{q : Polynomial R}
:
theorem
Polynomial.isUnit_leadingCoeff_mul_left_eq_zero_iff
{R : Type u}
[Semiring R]
{p : Polynomial R}
(h : IsUnit p.leadingCoeff)
{q : Polynomial R}
: