Documentation

CharacteristicSet.Basic

Characteristic Set Basics #

This file defines the fundamental concepts required for the Characteristic Set Method (Wu's Method), including the Class, Degree, Rank, and Reduction of multivariate polynomials.

Main Definitions #

Implementation Notes #

We assume a linear order on the variable type σ. The main variable mainVariable p is of type WithBot σ to handle the zero polynomial conveniently (where mainVariable 0 = ⊥).

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    def MvPolynomial.mainVariable {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] (p : MvPolynomial σ R) :

    The main variable of a multivariate polynomial p is the largest variable index appearing in p. If p = 0, its main variable is .

    Equations
    Instances For
      theorem MvPolynomial.mainVariable_def {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] (p : MvPolynomial σ R) :
      p.mainVariable = p.support.sup fun (s : σ →₀ ) => s.support.max
      @[simp]
      @[simp]
      theorem MvPolynomial.mainVariable_monomial {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {r : R} (s : σ →₀ ) (hr : r 0) :
      @[simp]
      theorem MvPolynomial.mainVariable_C {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] (r : R) :
      @[simp]
      theorem MvPolynomial.mainVariable_X_pow {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] [Nontrivial R] (i : σ) {k : } (hk : k 0) :
      (X i ^ k).mainVariable = i
      @[simp]
      theorem MvPolynomial.mainVariable_X {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] [Nontrivial R] (i : σ) :
      (X i).mainVariable = i
      theorem MvPolynomial.mainVariable_eq_bot_iff_eq_C {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} [LinearOrder σ] :
      p.mainVariable = ∃ (r : R), p = C r
      theorem MvPolynomial.mainVariable_sum_le {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {α : Type u_3} (s : Finset α) (f : αMvPolynomial σ R) :
      (∑ as, f a).mainVariable s.sup fun (a : α) => (f a).mainVariable
      theorem MvPolynomial.mainVariable_prod_le {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {α : Type u_3} (s : Finset α) (f : αMvPolynomial σ R) :
      (∏ as, f a).mainVariable s.sup fun (a : α) => (f a).mainVariable
      theorem MvPolynomial.degreeOf_eq_zero_of_mainVariable_lt {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} [LinearOrder σ] {i : σ} :
      p.mainVariable < idegreeOf i p = 0
      theorem MvPolynomial.degreeOf_of_mainVariable_eq_bot {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} [LinearOrder σ] (i : σ) :
      theorem MvPolynomial.ne_zero_of_degreeOf_ne_zero {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} {i : σ} :
      degreeOf i p 0p 0
      theorem MvPolynomial.le_degreeOf_of_mem_support {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} (i : σ) {s : σ →₀ } :
      s p.supports i degreeOf i p
      theorem MvPolynomial.notMem_support_of_degreeOf_lt {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} (i : σ) {s : σ →₀ } :
      degreeOf i p < s isp.support
      @[simp]
      theorem MvPolynomial.degreeOf_X_self_pow {R : Type u_1} {σ : Type u_2} [CommSemiring R] [Nontrivial R] (i : σ) (k : ) :
      degreeOf i (X i ^ k) = k
      theorem MvPolynomial.degreeOf_X_pow_of_ne {R : Type u_1} {σ : Type u_2} [CommSemiring R] {i j : σ} (k : ) (h : i j) :
      degreeOf i (X j ^ k) = 0
      @[simp]
      theorem MvPolynomial.degreeOf_X_self {R : Type u_1} {σ : Type u_2} [CommSemiring R] [Nontrivial R] (i : σ) :
      degreeOf i (X i) = 1
      theorem MvPolynomial.degreeOf_X_of_ne {R : Type u_1} {σ : Type u_2} [CommSemiring R] {i j : σ} (h : i j) :
      degreeOf i (X j) = 0
      theorem MvPolynomial.degreeOf_mul_X_self_pow_eq_add_of_ne_zero {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} (i : σ) (k : ) (h : p 0) :
      degreeOf i (p * X i ^ k) = degreeOf i p + k
      theorem MvPolynomial.degreeOf_mul_X_pow_of_ne {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} {i j : σ} (k : ) (h : i j) :
      degreeOf i (p * X j ^ k) = degreeOf i p
      theorem MvPolynomial.degreeOf_add_eq_of_degreeOf_lt {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p q : MvPolynomial σ R} {i : σ} (h : degreeOf i q < degreeOf i p) :
      degreeOf i (p + q) = degreeOf i p
      theorem MvPolynomial.degreeOf_eq_of_degreeOf_add_lt {R : Type u_1} {σ : Type u_2} [CommSemiring R] {i : σ} {p q : MvPolynomial σ R} (h : degreeOf i (p + q) < degreeOf i p) :
      noncomputable def MvPolynomial.mainDegree {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] (p : MvPolynomial σ R) :

      The "main degree" of p: the degree of p with respect to its main variable. If mainVariable p = ⊥ (i.e., p is a constant or zero), the degree is 0.

      Equations
      Instances For
        theorem MvPolynomial.mainDegree_of_mainVariable_isSome {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} [LinearOrder σ] {c : σ} :
        theorem MvPolynomial.mainDegree_of_mainVariable_isSome' {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} [LinearOrder σ] {c : σ} :
        p.mainVariable = cp.mainDegree = p.support.sup fun (s : σ →₀ ) => s c
        theorem MvPolynomial.mainDegree_eq_zero_iff' {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} [LinearOrder σ] :
        p.mainDegree = 0 ∃ (r : R), p = C r
        theorem MvPolynomial.degreeOf_mainVariable_ne_zero {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} [LinearOrder σ] {c : σ} :
        p.mainVariable = cdegreeOf c p 0
        theorem MvPolynomial.mainVariable_mem_degrees {R : Type u_1} {σ : Type u_2} [CommSemiring R] {p : MvPolynomial σ R} [LinearOrder σ] {c : σ} :
        p.mainVariable = cc p.degrees
        @[simp]
        theorem MvPolynomial.mainDegree_zero {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] :
        @[simp]
        theorem MvPolynomial.mainDegree_monomial {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {c : σ} {s : σ →₀ } {r : R} (hr : r 0) (hs : s.support.max = c) :
        ((monomial s) r).mainDegree = s c
        @[simp]
        theorem MvPolynomial.mainDegree_C {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] (r : R) :
        (C r).mainDegree = 0
        @[simp]
        theorem MvPolynomial.mainDegree_X_pow {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] [Nontrivial R] (i : σ) (k : ) :
        (X i ^ k).mainDegree = k
        @[simp]
        theorem MvPolynomial.mainDegree_X {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] [Nontrivial R] (i : σ) :
        (X i).mainDegree = 1
        noncomputable def MvPolynomial.rank {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] (p : MvPolynomial σ R) :

        The rank of a polynomial p is the pair (mainVariable p, degree p). Ranks are ordered lexicographically.

        Equations
        Instances For
          instance MvPolynomial.instPreorder {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] :
          Equations
          theorem MvPolynomial.le_def' {R : Type u_1} {σ : Type u_2} [CommSemiring R] {q : MvPolynomial σ R} [LinearOrder σ] {p : MvPolynomial σ R} :
          p q p.rank q.rank
          noncomputable instance MvPolynomial.instDecidableLE {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] :
          Equations
          theorem MvPolynomial.lt_def' {R : Type u_1} {σ : Type u_2} [CommSemiring R] {q : MvPolynomial σ R} [LinearOrder σ] {p : MvPolynomial σ R} :
          p < q p.rank < q.rank
          theorem MvPolynomial.lt_of_mainVariable_lt {R : Type u_1} {σ : Type u_2} [CommSemiring R] {q : MvPolynomial σ R} [LinearOrder σ] {p : MvPolynomial σ R} :
          @[simp]
          theorem MvPolynomial.not_lt_iff_ge {R : Type u_1} {σ : Type u_2} [CommSemiring R] {q : MvPolynomial σ R} [LinearOrder σ] {p : MvPolynomial σ R} :
          ¬p < q q p
          @[simp]
          theorem MvPolynomial.not_le_iff_gt {R : Type u_1} {σ : Type u_2} [CommSemiring R] {q : MvPolynomial σ R} [LinearOrder σ] {p : MvPolynomial σ R} :
          ¬p q q < p
          theorem MvPolynomial.X_lt_of_lt {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] [Nontrivial R] {i j : σ} :
          i < jX i < X j
          instance MvPolynomial.instSetoid {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] :
          Equations
          noncomputable instance MvPolynomial.instDecidableRelEquiv {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] :
          DecidableRel fun (x1 x2 : MvPolynomial σ R) => x1 x2
          Equations
          theorem MvPolynomial.equiv_def'' {R : Type u_1} {σ : Type u_2} [CommSemiring R] {q : MvPolynomial σ R} [LinearOrder σ] {p : MvPolynomial σ R} :
          p q p q q p
          theorem MvPolynomial.equiv_def' {R : Type u_1} {σ : Type u_2} [CommSemiring R] {q : MvPolynomial σ R} [LinearOrder σ] {p : MvPolynomial σ R} :
          p q p.rank = q.rank
          theorem MvPolynomial.equiv_def {R : Type u_1} {σ : Type u_2} [CommSemiring R] {q : MvPolynomial σ R} [LinearOrder σ] {p : MvPolynomial σ R} :
          p q ¬p < q ¬q < p
          theorem MvPolynomial.le_iff_lt_or_equiv {R : Type u_1} {σ : Type u_2} [CommSemiring R] {q : MvPolynomial σ R} [LinearOrder σ] {p : MvPolynomial σ R} :
          p q p < q p q
          theorem MvPolynomial.lt_of_equiv_of_lt {R : Type u_1} {σ : Type u_2} [CommSemiring R] {q : MvPolynomial σ R} [LinearOrder σ] {p r : MvPolynomial σ R} :
          p qq < rp < r
          theorem MvPolynomial.lt_of_lt_of_equiv {R : Type u_1} {σ : Type u_2} [CommSemiring R] {q : MvPolynomial σ R} [LinearOrder σ] {p r : MvPolynomial σ R} :
          p < qq rp < r
          theorem MvPolynomial.equiv_of_le_of_ge {R : Type u_1} {σ : Type u_2} [CommSemiring R] {q : MvPolynomial σ R} [LinearOrder σ] {p : MvPolynomial σ R} :
          p qq pp q
          theorem MvPolynomial.zero_le {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p : MvPolynomial σ R} :
          0 p
          theorem MvPolynomial.Set.has_min {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] [WellFoundedLT (MvPolynomial σ R)] (PS : Set (MvPolynomial σ R)) (h : PS.Nonempty) :
          pPS, qPS, ¬q < p
          noncomputable def MvPolynomial.Set.min {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] [WellFoundedLT (MvPolynomial σ R)] (PS : Set (MvPolynomial σ R)) (h : PS.Nonempty) :
          Equations
          Instances For
            theorem MvPolynomial.Set.min_mem {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] [WellFoundedLT (MvPolynomial σ R)] (PS : Set (MvPolynomial σ R)) (h : PS.Nonempty) :
            min PS h PS
            def MvPolynomial.reducedTo {R : Type u_1} {σ : Type u_2} [CommSemiring R] [DecidableEq R] [LinearOrder σ] (q p : MvPolynomial σ R) :

            q is reduced with respect to pif q = 0 or if the degree of q in the main variable of p is strictly less than the degree of p.

            Note: if p is a constant, then no non-zero q is reduced with respect to p.

            Equations
            Instances For
              theorem MvPolynomial.zero_reducedTo {R : Type u_1} {σ : Type u_2} [CommSemiring R] [DecidableEq R] [LinearOrder σ] (p : MvPolynomial σ R) :
              theorem MvPolynomial.reducedTo_iff {R : Type u_1} {σ : Type u_2} [CommSemiring R] [DecidableEq R] [LinearOrder σ] {p q : MvPolynomial σ R} {c : σ} (hp : p.mainVariable = c) (hq : q 0) :
              Equations
              • One or more equations did not get rendered due to their size.
              theorem MvPolynomial.reducedTo_congr_right {R : Type u_1} {σ : Type u_2} [CommSemiring R] [DecidableEq R] [LinearOrder σ] {p q r : MvPolynomial σ R} :
              p q → (r.reducedTo p r.reducedTo q)
              theorem MvPolynomial.not_reduceTo_self {R : Type u_1} {σ : Type u_2} [CommSemiring R] [DecidableEq R] [LinearOrder σ] {p : MvPolynomial σ R} (h : p 0) :
              theorem MvPolynomial.mainVariable_lt_of_reducedTo_of_le {R : Type u_1} {σ : Type u_2} [CommSemiring R] [DecidableEq R] [LinearOrder σ] {p q : MvPolynomial σ R} (h1 : q 0) (h2 : p q) (h3 : q.reducedTo p) :
              theorem MvPolynomial.lt_of_reducedTo_of_le {R : Type u_1} {σ : Type u_2} [CommSemiring R] [DecidableEq R] [LinearOrder σ] {p q : MvPolynomial σ R} (h1 : q 0) (h2 : p q) (h3 : q.reducedTo p) :
              p < q
              def MvPolynomial.reducedToSet {R : Type u_1} {σ : Type u_2} [CommSemiring R] [DecidableEq R] [LinearOrder σ] {α : Type u_3} [Membership (MvPolynomial σ R) α] (q : MvPolynomial σ R) (a : α) :

              q is reduced with respect to a set a if it is reduced with respect to all elements of a.

              Equations
              Instances For
                theorem MvPolynomial.reducedToSet_def {R : Type u_1} {σ : Type u_2} [CommSemiring R] [DecidableEq R] [LinearOrder σ] {α : Type u_3} [Membership (MvPolynomial σ R) α] {q : MvPolynomial σ R} {a : α} :
                q.reducedToSet a pa, q.reducedTo p
                theorem MvPolynomial.zero_reducedToSet {R : Type u_1} {σ : Type u_2} [CommSemiring R] [DecidableEq R] [LinearOrder σ] {α : Type u_3} [Membership (MvPolynomial σ R) α] {a : α} :