Documentation

Mathlib.Algebra.MvPolynomial.Degrees

Degrees of polynomials #

This file establishes many results about the degree of a multivariate polynomial.

The degree set of a polynomial $P \in R[X]$ is a Multiset containing, for each $x$ in the variable set, $n$ copies of $x$, where $n$ is the maximum number of copies of $x$ appearing in a monomial of $P$.

Main declarations #

Notation #

As in other polynomial files, we typically use the notation:

degrees #

def MvPolynomial.degrees {R : Type u} {σ : Type u_1} [CommSemiring R] (p : MvPolynomial σ R) :

The maximal degrees of each variable in a multi-variable polynomial, expressed as a multiset.

(For example, degrees (x^2 * y + y^3) would be {x, x, y, y, y}.)

Equations
    Instances For
      theorem MvPolynomial.degrees_def {R : Type u} {σ : Type u_1} [CommSemiring R] [DecidableEq σ] (p : MvPolynomial σ R) :
      theorem MvPolynomial.degrees_monomial {R : Type u} {σ : Type u_1} [CommSemiring R] (s : σ →₀ ) (a : R) :
      theorem MvPolynomial.degrees_monomial_eq {R : Type u} {σ : Type u_1} [CommSemiring R] (s : σ →₀ ) (a : R) (ha : a 0) :
      theorem MvPolynomial.degrees_C {R : Type u} {σ : Type u_1} [CommSemiring R] (a : R) :
      (C a).degrees = 0
      theorem MvPolynomial.degrees_X' {R : Type u} {σ : Type u_1} [CommSemiring R] (n : σ) :
      @[simp]
      theorem MvPolynomial.degrees_X {R : Type u} {σ : Type u_1} [CommSemiring R] [Nontrivial R] (n : σ) :
      (X n).degrees = {n}
      @[simp]
      theorem MvPolynomial.degrees_zero {R : Type u} {σ : Type u_1} [CommSemiring R] :
      @[simp]
      theorem MvPolynomial.degrees_one {R : Type u} {σ : Type u_1} [CommSemiring R] :
      theorem MvPolynomial.degrees_add_le {R : Type u} {σ : Type u_1} [CommSemiring R] [DecidableEq σ] {p q : MvPolynomial σ R} :
      (p + q).degrees p.degreesq.degrees
      theorem MvPolynomial.degrees_sum_le {R : Type u} {σ : Type u_1} [CommSemiring R] {ι : Type u_3} [DecidableEq σ] (s : Finset ι) (f : ιMvPolynomial σ R) :
      (∑ is, f i).degrees s.sup fun (i : ι) => (f i).degrees
      theorem MvPolynomial.degrees_mul_le {R : Type u} {σ : Type u_1} [CommSemiring R] {p q : MvPolynomial σ R} :
      theorem MvPolynomial.degrees_prod_le {R : Type u} {σ : Type u_1} [CommSemiring R] {ι : Type u_3} {s : Finset ι} {f : ιMvPolynomial σ R} :
      (∏ is, f i).degrees is, (f i).degrees
      theorem MvPolynomial.degrees_pow_le {R : Type u} {σ : Type u_1} [CommSemiring R] {p : MvPolynomial σ R} {n : } :
      (p ^ n).degrees n p.degrees
      theorem MvPolynomial.mem_degrees {R : Type u} {σ : Type u_1} [CommSemiring R] {p : MvPolynomial σ R} {i : σ} :
      i p.degrees ∃ (d : σ →₀ ), coeff d p 0 i d.support
      theorem MvPolynomial.le_degrees_add_left {R : Type u} {σ : Type u_1} [CommSemiring R] {p q : MvPolynomial σ R} (h : Disjoint p.degrees q.degrees) :
      theorem MvPolynomial.le_degrees_add_right {R : Type u} {σ : Type u_1} [CommSemiring R] {p q : MvPolynomial σ R} (h : Disjoint p.degrees q.degrees) :
      theorem MvPolynomial.degrees_map_le {R : Type u} {S : Type v} {σ : Type u_1} [CommSemiring R] {p : MvPolynomial σ R} [CommSemiring S] {f : R →+* S} :
      theorem MvPolynomial.degrees_rename {R : Type u} {σ : Type u_1} {τ : Type u_2} [CommSemiring R] (f : στ) (φ : MvPolynomial σ R) :
      theorem MvPolynomial.degrees_map_of_injective {R : Type u} {S : Type v} {σ : Type u_1} [CommSemiring R] [CommSemiring S] (p : MvPolynomial σ R) {f : R →+* S} (hf : Function.Injective f) :
      ((map f) p).degrees = p.degrees
      theorem MvPolynomial.degrees_rename_of_injective {R : Type u} {σ : Type u_1} {τ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} {f : στ} (h : Function.Injective f) :

      degreeOf #

      def MvPolynomial.degreeOf {R : Type u} {σ : Type u_1} [CommSemiring R] (n : σ) (p : MvPolynomial σ R) :

      degreeOf n p gives the highest power of X_n that appears in p

      Equations
        Instances For
          theorem MvPolynomial.degreeOf_def {R : Type u} {σ : Type u_1} [CommSemiring R] [DecidableEq σ] (n : σ) (p : MvPolynomial σ R) :
          theorem MvPolynomial.degreeOf_eq_sup {R : Type u} {σ : Type u_1} [CommSemiring R] (n : σ) (f : MvPolynomial σ R) :
          degreeOf n f = f.support.sup fun (m : σ →₀ ) => m n
          theorem MvPolynomial.degreeOf_lt_iff {R : Type u} {σ : Type u_1} [CommSemiring R] {n : σ} {f : MvPolynomial σ R} {d : } (h : 0 < d) :
          degreeOf n f < d mf.support, m n < d
          theorem MvPolynomial.degreeOf_le_iff {R : Type u} {σ : Type u_1} [CommSemiring R] {n : σ} {f : MvPolynomial σ R} {d : } :
          degreeOf n f d mf.support, m n d
          @[simp]
          theorem MvPolynomial.degreeOf_zero {R : Type u} {σ : Type u_1} [CommSemiring R] (n : σ) :
          degreeOf n 0 = 0
          @[simp]
          theorem MvPolynomial.degreeOf_C {R : Type u} {σ : Type u_1} [CommSemiring R] (a : R) (x : σ) :
          degreeOf x (C a) = 0
          theorem MvPolynomial.degreeOf_X {R : Type u} {σ : Type u_1} [CommSemiring R] [DecidableEq σ] (i j : σ) [Nontrivial R] :
          degreeOf i (X j) = if i = j then 1 else 0
          theorem MvPolynomial.degreeOf_add_le {R : Type u} {σ : Type u_1} [CommSemiring R] (n : σ) (f g : MvPolynomial σ R) :
          degreeOf n (f + g) max (degreeOf n f) (degreeOf n g)
          theorem MvPolynomial.monomial_le_degreeOf {R : Type u} {σ : Type u_1} [CommSemiring R] (i : σ) {f : MvPolynomial σ R} {m : σ →₀ } (h_m : m f.support) :
          m i degreeOf i f
          theorem MvPolynomial.degreeOf_monomial_eq {R : Type u} {σ : Type u_1} [CommSemiring R] (s : σ →₀ ) (i : σ) {a : R} (ha : a 0) :
          degreeOf i ((monomial s) a) = s i
          theorem MvPolynomial.degreeOf_mul_le {R : Type u} {σ : Type u_1} [CommSemiring R] (i : σ) (f g : MvPolynomial σ R) :
          degreeOf i (f * g) degreeOf i f + degreeOf i g
          theorem MvPolynomial.degreeOf_sum_le {R : Type u} {σ : Type u_1} [CommSemiring R] {ι : Type u_3} (i : σ) (s : Finset ι) (f : ιMvPolynomial σ R) :
          degreeOf i (∑ js, f j) s.sup fun (j : ι) => degreeOf i (f j)
          theorem MvPolynomial.degreeOf_prod_le {R : Type u} {σ : Type u_1} [CommSemiring R] {ι : Type u_3} (i : σ) (s : Finset ι) (f : ιMvPolynomial σ R) :
          degreeOf i (∏ js, f j) js, degreeOf i (f j)
          theorem MvPolynomial.degreeOf_pow_le {R : Type u} {σ : Type u_1} [CommSemiring R] (i : σ) (p : MvPolynomial σ R) (n : ) :
          degreeOf i (p ^ n) n * degreeOf i p
          theorem MvPolynomial.degreeOf_mul_X_of_ne {R : Type u} {σ : Type u_1} [CommSemiring R] {i j : σ} (f : MvPolynomial σ R) (h : i j) :
          degreeOf i (f * X j) = degreeOf i f
          theorem MvPolynomial.degreeOf_mul_X_self {R : Type u} {σ : Type u_1} [CommSemiring R] (j : σ) (f : MvPolynomial σ R) :
          degreeOf j (f * X j) degreeOf j f + 1
          theorem MvPolynomial.degreeOf_mul_X_eq_degreeOf_add_one_iff {R : Type u} {σ : Type u_1} [CommSemiring R] (j : σ) (f : MvPolynomial σ R) :
          degreeOf j (f * X j) = degreeOf j f + 1 f 0
          theorem MvPolynomial.degreeOf_C_mul_le {R : Type u} {σ : Type u_1} [CommSemiring R] (p : MvPolynomial σ R) (i : σ) (c : R) :
          degreeOf i (C c * p) degreeOf i p
          theorem MvPolynomial.degreeOf_mul_C_le {R : Type u} {σ : Type u_1} [CommSemiring R] (p : MvPolynomial σ R) (i : σ) (c : R) :
          degreeOf i (p * C c) degreeOf i p
          theorem MvPolynomial.degreeOf_rename_of_injective {R : Type u} {σ : Type u_1} {τ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} {f : στ} (h : Function.Injective f) (i : σ) :
          degreeOf (f i) ((rename f) p) = degreeOf i p

          totalDegree #

          def MvPolynomial.totalDegree {R : Type u} {σ : Type u_1} [CommSemiring R] (p : MvPolynomial σ R) :

          totalDegree p gives the maximum |s| over the monomials X^s in p

          Equations
            Instances For
              theorem MvPolynomial.totalDegree_eq {R : Type u} {σ : Type u_1} [CommSemiring R] (p : MvPolynomial σ R) :
              theorem MvPolynomial.le_totalDegree {R : Type u} {σ : Type u_1} [CommSemiring R] {p : MvPolynomial σ R} {s : σ →₀ } (h : s p.support) :
              (s.sum fun (x : σ) (e : ) => e) p.totalDegree
              @[simp]
              theorem MvPolynomial.totalDegree_C {R : Type u} {σ : Type u_1} [CommSemiring R] (a : R) :
              @[simp]
              theorem MvPolynomial.totalDegree_zero {R : Type u} {σ : Type u_1} [CommSemiring R] :
              @[simp]
              theorem MvPolynomial.totalDegree_one {R : Type u} {σ : Type u_1} [CommSemiring R] :
              @[simp]
              theorem MvPolynomial.totalDegree_X {σ : Type u_1} {R : Type u_3} [CommSemiring R] [Nontrivial R] (s : σ) :
              theorem MvPolynomial.totalDegree_smul_le {R : Type u} {S : Type v} {σ : Type u_1} [CommSemiring R] [CommSemiring S] [DistribMulAction R S] (a : R) (f : MvPolynomial σ S) :
              theorem MvPolynomial.totalDegree_pow {R : Type u} {σ : Type u_1} [CommSemiring R] (a : MvPolynomial σ R) (n : ) :
              @[simp]
              theorem MvPolynomial.totalDegree_monomial {R : Type u} {σ : Type u_1} [CommSemiring R] (s : σ →₀ ) {c : R} (hc : c 0) :
              ((monomial s) c).totalDegree = s.sum fun (x : σ) (e : ) => e
              theorem MvPolynomial.totalDegree_monomial_le {R : Type u} {σ : Type u_1} [CommSemiring R] (s : σ →₀ ) (c : R) :
              ((monomial s) c).totalDegree s.sum fun (x : σ) => id
              @[simp]
              theorem MvPolynomial.totalDegree_X_pow {R : Type u} {σ : Type u_1} [CommSemiring R] [Nontrivial R] (s : σ) (n : ) :
              (X s ^ n).totalDegree = n
              theorem MvPolynomial.totalDegree_finset_prod {R : Type u} {σ : Type u_1} [CommSemiring R] {ι : Type u_3} (s : Finset ι) (f : ιMvPolynomial σ R) :
              (s.prod f).totalDegree is, (f i).totalDegree
              theorem MvPolynomial.totalDegree_finset_sum {R : Type u} {σ : Type u_1} [CommSemiring R] {ι : Type u_3} (s : Finset ι) (f : ιMvPolynomial σ R) :
              (s.sum f).totalDegree s.sup fun (i : ι) => (f i).totalDegree
              theorem MvPolynomial.totalDegree_finsetSum_le {R : Type u} {σ : Type u_1} [CommSemiring R] {ι : Type u_3} {s : Finset ι} {f : ιMvPolynomial σ R} {d : } (hf : is, (f i).totalDegree d) :
              theorem MvPolynomial.degreeOf_le_totalDegree {R : Type u} {σ : Type u_1} [CommSemiring R] (f : MvPolynomial σ R) (i : σ) :
              theorem MvPolynomial.exists_degree_lt {R : Type u} {σ : Type u_1} [CommSemiring R] [Fintype σ] (f : MvPolynomial σ R) (n : ) (h : f.totalDegree < n * Fintype.card σ) {d : σ →₀ } (hd : d f.support) :
              ∃ (i : σ), d i < n
              theorem MvPolynomial.coeff_eq_zero_of_totalDegree_lt {R : Type u} {σ : Type u_1} [CommSemiring R] {f : MvPolynomial σ R} {d : σ →₀ } (h : f.totalDegree < id.support, d i) :
              coeff d f = 0
              theorem MvPolynomial.totalDegree_rename_le {R : Type u} {σ : Type u_1} {τ : Type u_2} [CommSemiring R] (f : στ) (p : MvPolynomial σ R) :
              theorem MvPolynomial.totalDegree_renameEquiv {R : Type u} {σ : Type u_1} {τ : Type u_2} [CommSemiring R] (f : σ τ) (p : MvPolynomial σ R) :
              def MvPolynomial.degreesLE (R : Type u) (σ : Type u_1) [CommSemiring R] (s : Multiset σ) :

              The submodule of multivariate polynomials of degrees bounded by a monomial s.

              Equations
                Instances For
                  @[simp]
                  theorem MvPolynomial.mem_degreesLE {R : Type u} {σ : Type u_1} [CommSemiring R] {p : MvPolynomial σ R} {s : Multiset σ} :
                  p degreesLE R σ s p.degrees s
                  theorem MvPolynomial.degreesLE_add {R : Type u} {σ : Type u_1} [CommSemiring R] (s t : Multiset σ) :
                  degreesLE R σ (s + t) = degreesLE R σ s * degreesLE R σ t
                  @[simp]
                  theorem MvPolynomial.degreesLE_zero {R : Type u} {σ : Type u_1} [CommSemiring R] :
                  degreesLE R σ 0 = 1
                  theorem MvPolynomial.degreesLE_nsmul {R : Type u} {σ : Type u_1} [CommSemiring R] (s : Multiset σ) (n : ) :
                  degreesLE R σ (n s) = degreesLE R σ s ^ n