# Documentation

Mathlib.Data.MvPolynomial.Division

# Division of MvPolynomial by monomials #

## Main definitions #

• MvPolynomial.divMonomial x s: divides x by the monomial MvPolynomial.monomial 1 s
• MvPolynomial.modMonomial x s: the remainder upon dividing x by the monomial MvPolynomial.monomial 1 s.

## Main results #

• MvPolynomial.divMonomial_add_modMonomial, MvPolynomial.modMonomial_add_divMonomial: divMonomial and modMonomial are well-behaved as quotient and remainder operators.

## Implementation notes #

Where possible, the results in this file should be first proved in the generality of AddMonoidAlgebra, and then the versions specialized to MvPolynomial proved in terms of these.

Please ensure the declarations in this section are direct translations of AddMonoidAlgebra results.

noncomputable def MvPolynomial.divMonomial {σ : Type u_1} {R : Type u_2} [] (p : ) (s : σ →₀ ) :

Divide by monomial 1 s, discarding terms not divisible by this.

Instances For
@[simp]
theorem MvPolynomial.coeff_divMonomial {σ : Type u_1} {R : Type u_2} [] (s : σ →₀ ) (x : ) (s' : σ →₀ ) :
@[simp]
theorem MvPolynomial.support_divMonomial {σ : Type u_1} {R : Type u_2} [] (s : σ →₀ ) (x : ) :
= Finset.preimage () ((fun x x_1 => x + x_1) s) (_ : Set.InjOn ((fun x x_1 => x + x_1) s) ((fun x x_1 => x + x_1) s ⁻¹' ↑()))
@[simp]
theorem MvPolynomial.zero_divMonomial {σ : Type u_1} {R : Type u_2} [] (s : σ →₀ ) :
theorem MvPolynomial.divMonomial_zero {σ : Type u_1} {R : Type u_2} [] (x : ) :
theorem MvPolynomial.add_divMonomial {σ : Type u_1} {R : Type u_2} [] (x : ) (y : ) (s : σ →₀ ) :
theorem MvPolynomial.divMonomial_add {σ : Type u_1} {R : Type u_2} [] (a : σ →₀ ) (b : σ →₀ ) (x : ) :
@[simp]
theorem MvPolynomial.divMonomial_monomial_mul {σ : Type u_1} {R : Type u_2} [] (a : σ →₀ ) (x : ) :
MvPolynomial.divMonomial (↑() 1 * x) a = x
@[simp]
theorem MvPolynomial.divMonomial_mul_monomial {σ : Type u_1} {R : Type u_2} [] (a : σ →₀ ) (x : ) :
MvPolynomial.divMonomial (x * ↑() 1) a = x
@[simp]
theorem MvPolynomial.divMonomial_monomial {σ : Type u_1} {R : Type u_2} [] (a : σ →₀ ) :
= 1
noncomputable def MvPolynomial.modMonomial {σ : Type u_1} {R : Type u_2} [] (x : ) (s : σ →₀ ) :

The remainder upon division by monomial 1 s.

Instances For
@[simp]
theorem MvPolynomial.coeff_modMonomial_of_not_le {σ : Type u_1} {R : Type u_2} [] {s' : σ →₀ } {s : σ →₀ } (x : ) (h : ¬s s') :
@[simp]
theorem MvPolynomial.coeff_modMonomial_of_le {σ : Type u_1} {R : Type u_2} [] {s' : σ →₀ } {s : σ →₀ } (x : ) (h : s s') :
= 0
@[simp]
theorem MvPolynomial.monomial_mul_modMonomial {σ : Type u_1} {R : Type u_2} [] (s : σ →₀ ) (x : ) :
MvPolynomial.modMonomial (↑() 1 * x) s = 0
@[simp]
theorem MvPolynomial.mul_monomial_modMonomial {σ : Type u_1} {R : Type u_2} [] (s : σ →₀ ) (x : ) :
MvPolynomial.modMonomial (x * ↑() 1) s = 0
@[simp]
theorem MvPolynomial.monomial_modMonomial {σ : Type u_1} {R : Type u_2} [] (s : σ →₀ ) :
= 0
theorem MvPolynomial.divMonomial_add_modMonomial {σ : Type u_1} {R : Type u_2} [] (x : ) (s : σ →₀ ) :
= x
theorem MvPolynomial.modMonomial_add_divMonomial {σ : Type u_1} {R : Type u_2} [] (x : ) (s : σ →₀ ) :
= x
theorem MvPolynomial.monomial_one_dvd_iff_modMonomial_eq_zero {σ : Type u_1} {R : Type u_2} [] {i : σ →₀ } {x : } :
↑() 1 x
@[simp]
theorem MvPolynomial.X_mul_divMonomial {σ : Type u_1} {R : Type u_2} [] (i : σ) (x : ) :
(MvPolynomial.divMonomial () fun₀ | i => 1) = x
@[simp]
theorem MvPolynomial.X_divMonomial {σ : Type u_1} {R : Type u_2} [] (i : σ) :
(MvPolynomial.divMonomial () fun₀ | i => 1) = 1
@[simp]
theorem MvPolynomial.mul_X_divMonomial {σ : Type u_1} {R : Type u_2} [] (x : ) (i : σ) :
(MvPolynomial.divMonomial () fun₀ | i => 1) = x
@[simp]
theorem MvPolynomial.X_mul_modMonomial {σ : Type u_1} {R : Type u_2} [] (i : σ) (x : ) :
(MvPolynomial.modMonomial () fun₀ | i => 1) = 0
@[simp]
theorem MvPolynomial.mul_X_modMonomial {σ : Type u_1} {R : Type u_2} [] (x : ) (i : σ) :
(MvPolynomial.modMonomial () fun₀ | i => 1) = 0
@[simp]
theorem MvPolynomial.modMonomial_X {σ : Type u_1} {R : Type u_2} [] (i : σ) :
(MvPolynomial.modMonomial () fun₀ | i => 1) = 0
theorem MvPolynomial.divMonomial_add_modMonomial_single {σ : Type u_1} {R : Type u_2} [] (x : ) (i : σ) :
(( * MvPolynomial.divMonomial x fun₀ | i => 1) + MvPolynomial.modMonomial x fun₀ | i => 1) = x
theorem MvPolynomial.modMonomial_add_divMonomial_single {σ : Type u_1} {R : Type u_2} [] (x : ) (i : σ) :
((MvPolynomial.modMonomial x fun₀ | i => 1) + * MvPolynomial.divMonomial x fun₀ | i => 1) = x
theorem MvPolynomial.X_dvd_iff_modMonomial_eq_zero {σ : Type u_1} {R : Type u_2} [] {i : σ} {x : } :
(MvPolynomial.modMonomial x fun₀ | i => 1) = 0

### Some results about dvd (∣) on monomial and X#

theorem MvPolynomial.monomial_dvd_monomial {σ : Type u_1} {R : Type u_2} [] {r : R} {s : R} {i : σ →₀ } {j : σ →₀ } :
↑() r ↑() s (s = 0 i j) r s
@[simp]
theorem MvPolynomial.monomial_one_dvd_monomial_one {σ : Type u_1} {R : Type u_2} [] [] {i : σ →₀ } {j : σ →₀ } :
↑() 1 ↑() 1 i j
@[simp]
theorem MvPolynomial.X_dvd_X {σ : Type u_1} {R : Type u_2} [] [] {i : σ} {j : σ} :
i = j
@[simp]
theorem MvPolynomial.X_dvd_monomial {σ : Type u_1} {R : Type u_2} [] {i : σ} {j : σ →₀ } {r : R} :
↑() r r = 0 j i 0