GCD structures on polynomials #
Definitions and basic results about polynomials over GCD domains, particularly their contents and primitive polynomials.
Main Definitions #
Let p : R[X]
.
p.content
is thegcd
of the coefficients ofp
.p.is_primitive
indicates thatp.content = 1
.
Main Results #
polynomial.content_mul
: Ifp q : R[X]
, then(p * q).content = p.content * q.content
.polynomial.normalized_gcd_monoid
: The polynomial ring of a GCD domain is itself a GCD domain.
A polynomial is primitive when the only constant polynomials dividing it are units
Equations
- p.is_primitive = ∀ (r : R), ⇑polynomial.C r ∣ p → is_unit r
theorem
polynomial.is_primitive_iff_is_unit_of_C_dvd
{R : Type u_1}
[comm_semiring R]
{p : R[X]} :
p.is_primitive ↔ ∀ (r : R), ⇑polynomial.C r ∣ p → is_unit r
@[simp]
theorem
polynomial.is_primitive.ne_zero
{R : Type u_1}
[comm_semiring R]
[nontrivial R]
{p : R[X]}
(hp : p.is_primitive) :
p ≠ 0
theorem
polynomial.content_dvd_coeff
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{p : R[X]}
(n : ℕ) :
@[simp]
theorem
polynomial.content_C
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{r : R} :
@[simp]
theorem
polynomial.content_zero
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R] :
@[simp]
theorem
polynomial.content_one
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R] :
theorem
polynomial.content_X_mul
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{p : R[X]} :
(polynomial.X * p).content = p.content
@[simp]
theorem
polynomial.content_X_pow
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{k : ℕ} :
(polynomial.X ^ k).content = 1
@[simp]
theorem
polynomial.content_C_mul
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
(r : R)
(p : R[X]) :
@[simp]
theorem
polynomial.content_monomial
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{r : R}
{k : ℕ} :
theorem
polynomial.content_eq_zero_iff
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{p : R[X]} :
theorem
polynomial.content_eq_gcd_range_of_lt
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
(p : R[X])
(n : ℕ)
(h : p.nat_degree < n) :
p.content = (finset.range n).gcd p.coeff
theorem
polynomial.content_eq_gcd_range_succ
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
(p : R[X]) :
p.content = (finset.range p.nat_degree.succ).gcd p.coeff
theorem
polynomial.content_eq_gcd_leading_coeff_content_erase_lead
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
(p : R[X]) :
p.content = gcd p.leading_coeff p.erase_lead.content
theorem
polynomial.dvd_content_iff_C_dvd
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{p : R[X]}
{r : R} :
theorem
polynomial.C_content_dvd
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
(p : R[X]) :
⇑polynomial.C p.content ∣ p
theorem
polynomial.is_primitive_iff_content_eq_one
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{p : R[X]} :
p.is_primitive ↔ p.content = 1
theorem
polynomial.is_primitive.content_eq_one
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{p : R[X]}
(hp : p.is_primitive) :
noncomputable
def
polynomial.prim_part
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
(p : R[X]) :
R[X]
The primitive part of a polynomial p
is the primitive polynomial gained by dividing p
by
p.content
. If p = 0
, then p.prim_part = 1
.
Equations
- p.prim_part = ite (p = 0) 1 (classical.some _)
theorem
polynomial.eq_C_content_mul_prim_part
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
(p : R[X]) :
@[simp]
theorem
polynomial.prim_part_zero
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R] :
theorem
polynomial.is_primitive_prim_part
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
(p : R[X]) :
theorem
polynomial.content_prim_part
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
(p : R[X]) :
theorem
polynomial.prim_part_ne_zero
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
(p : R[X]) :
theorem
polynomial.nat_degree_prim_part
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
(p : R[X]) :
@[simp]
theorem
polynomial.is_primitive.prim_part_eq
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{p : R[X]}
(hp : p.is_primitive) :
theorem
polynomial.is_unit_prim_part_C
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
(r : R) :
theorem
polynomial.prim_part_dvd
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
(p : R[X]) :
theorem
polynomial.gcd_content_eq_of_dvd_sub
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{a : R}
{p q : R[X]}
(h : ⇑polynomial.C a ∣ p - q) :
theorem
polynomial.content_mul_aux
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{p q : R[X]} :
gcd (p * q).erase_lead.content p.leading_coeff = gcd ((p.erase_lead) * q).content p.leading_coeff
theorem
polynomial.is_primitive.mul
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{p q : R[X]}
(hp : p.is_primitive)
(hq : q.is_primitive) :
(p * q).is_primitive
theorem
polynomial.is_primitive.is_primitive_of_dvd
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{p q : R[X]}
(hp : p.is_primitive)
(hdvd : q ∣ p) :
theorem
polynomial.is_primitive.dvd_prim_part_iff_dvd
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{p q : R[X]}
(hp : p.is_primitive)
(hq : q ≠ 0) :
theorem
polynomial.exists_primitive_lcm_of_is_primitive
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R]
{p q : R[X]}
(hp : p.is_primitive)
(hq : q.is_primitive) :
@[protected, instance]
noncomputable
def
polynomial.normalized_gcd_monoid
{R : Type u_1}
[comm_ring R]
[is_domain R]
[normalized_gcd_monoid R] :
Equations
- polynomial.normalized_gcd_monoid = normalized_gcd_monoid_of_exists_lcm polynomial.normalized_gcd_monoid._proof_3