Documentation

CharacteristicSet.Order

Orderings on polynomials and triangular sets #

This file defines order structures on multivariate polynomials and triangular sets, which are essential for the Characteristic Set Method (Wu's Method).

Main definitions #

Main results #

noncomputable def MvPolynomial.order {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] (p : MvPolynomial σ R) :

The order of a polynomial p is the pair (max_vars p, degree p), which is ordered lexicographically.

Equations
Instances For
    @[implicit_reducible]
    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] [LinearOrder σ] {p q : MvPolynomial σ R} :
    @[implicit_reducible]
    noncomputable instance MvPolynomial.instDecidableLE {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] :
    Equations
    @[implicit_reducible]
    noncomputable instance MvPolynomial.instDecidableLT {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] :
    Equations
    theorem MvPolynomial.le_def {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q : MvPolynomial σ R} :
    theorem MvPolynomial.max_vars_le_of_le {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q : MvPolynomial σ R} :
    p qp.vars.max q.vars.max
    theorem MvPolynomial.lt_def' {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q : MvPolynomial σ R} :
    p < q p.order < q.order
    theorem MvPolynomial.lt_def {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q : MvPolynomial σ R} :
    theorem MvPolynomial.lt_iff_not_imp {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q : MvPolynomial σ R} :
    theorem MvPolynomial.lt_of_max_vars_lt {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q : MvPolynomial σ R} :
    p.vars.max < q.vars.maxp < q
    @[simp]
    theorem MvPolynomial.not_lt_iff_ge {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q : MvPolynomial σ R} :
    ¬p < q q p
    @[simp]
    theorem MvPolynomial.not_le_iff_gt {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q : 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
    @[implicit_reducible]
    instance MvPolynomial.instSetoid {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] :
    Equations
    @[implicit_reducible]
    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] [LinearOrder σ] {p q : MvPolynomial σ R} :
    p q p q q p
    theorem MvPolynomial.equiv_def' {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q : MvPolynomial σ R} :
    p q p.order = q.order
    theorem MvPolynomial.equiv_def {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q : MvPolynomial σ R} :
    p q ¬p < q ¬q < p
    theorem MvPolynomial.equiv_iff {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q : MvPolynomial σ R} :
    theorem MvPolynomial.le_iff_lt_or_equiv {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q : MvPolynomial σ R} :
    p q p < q p q
    theorem MvPolynomial.lt_of_equiv_of_lt {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q r : MvPolynomial σ R} :
    p qq < rp < r
    theorem MvPolynomial.lt_of_lt_of_equiv {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q r : MvPolynomial σ R} :
    p < qq rp < r
    theorem MvPolynomial.equiv_of_le_of_ge {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p q : 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) :

    The minimal element of a nonempty set of multivariate polynomials.

    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
      theorem TriangularSet.apply_lt_of_index_lt {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S : TriangularSet σ R} {m n : } (h : n < S.length) :
      m < nS m < S n
      theorem TriangularSet.index_lt_of_apply_lt {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S : TriangularSet σ R} {m n : } (h : m < S.length) :
      S m < S nm < n
      theorem TriangularSet.le_of_index_le {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S : TriangularSet σ R} {m n : } :
      m nn < S.lengthS m S n

      Order and Ordering #

      noncomputable def TriangularSet.order {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] (S : TriangularSet σ R) :
      Lex (WithTop (Lex (WithBot σ × )))

      The order of a Triangular Set is a lexicographic sequence of orders of its polynomials. A more intuitive definition is order_lt_iff, S < T if one of the following two occurs:

      1. There exists some k < S.length such that S₀ ≈ T₀, S₁ ≈ T₁, ..., Sₖ₋₁ ≈ Tₖ₋₁ and Sₖ < Tₖ.
      2. S.length > T.length and ∀ i < T.length, Sᵢ ≈ Tᵢ
      Equations
      Instances For
        theorem TriangularSet.order_def {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S : TriangularSet σ R} :
        S.order = fun (i : ) => if i < S.length then (S i).order else
        theorem TriangularSet.order_apply {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S : TriangularSet σ R} {i : } (h : i < S.length) :
        S.order i = (S i).order
        theorem TriangularSet.order_apply' {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S : TriangularSet σ R} {i : } (h : S.length i) :
        S.order i =
        theorem TriangularSet.order_lt_iff {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S.order < T.order (∃ k < S.length, S k < T k i < k, S i T i) T.length < S.length i < T.length, S i T i
        theorem TriangularSet.order_eq_iff {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S.order = T.order S.length = T.length ∀ (k : ), S k T k
        theorem TriangularSet.order_le_iff {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S.order T.order (∃ k < S.length, S k < T k i < k, S i T i) T.length S.length k < T.length, S k T k
        @[implicit_reducible]
        instance TriangularSet.instPreorder {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] :
        Equations
        • One or more equations did not get rendered due to their size.
        theorem TriangularSet.le_def' {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        @[implicit_reducible]
        noncomputable instance TriangularSet.instDecidableLE {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] :
        Equations
        @[implicit_reducible]
        noncomputable instance TriangularSet.instDecidableLT {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] :
        Equations
        theorem TriangularSet.le_def {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S T (∃ k < S.length, S k < T k i < k, S i T i) T.length S.length k < T.length, S k T k
        theorem TriangularSet.lt_def' {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S < T S.order < T.order
        theorem TriangularSet.lt_def {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S < T (∃ k < S.length, S k < T k i < k, S i T i) T.length < S.length i < T.length, S i T i
        theorem TriangularSet.lt_empty {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S : TriangularSet σ R} :
        S S <
        theorem TriangularSet.le_empty {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] (S : TriangularSet σ R) :
        @[simp]
        theorem TriangularSet.not_lt_iff_ge {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        ¬S < T T S
        @[simp]
        theorem TriangularSet.not_le_iff_gt {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        ¬S T T < S
        theorem TriangularSet.ge_of_forall_equiv {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        (∀ n < S.length, i < T.length, T i S n)T S
        theorem TriangularSet.ge_of_subset {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S TT S
        @[implicit_reducible]
        instance TriangularSet.instSetoid {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] :
        Equations
        @[implicit_reducible]
        noncomputable instance TriangularSet.instDecidableRelEquiv {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] :
        DecidableRel fun (x1 x2 : TriangularSet σ R) => x1 x2
        Equations
        theorem TriangularSet.equiv_def'' {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S T S T T S
        theorem TriangularSet.equiv_def' {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S T S.order = T.order
        theorem TriangularSet.equiv_def {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S T ¬S < T ¬T < S
        theorem TriangularSet.equiv_iff {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S T S.length = T.length ∀ (k : ), S k T k
        theorem TriangularSet.equiv_iff' {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S T S.length = T.length k < S.length, S k T k
        theorem TriangularSet.le_iff_lt_or_equiv {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S T S < T S T
        theorem TriangularSet.lt_of_equiv_of_lt {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T U : TriangularSet σ R} :
        S TT < US < U
        theorem TriangularSet.lt_of_lt_of_equiv {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T U : TriangularSet σ R} :
        S < TT US < U
        theorem TriangularSet.equiv_of_le_of_ge {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S TT SS T
        theorem TriangularSet.gt_of_ssubset {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S T : TriangularSet σ R} :
        S TT < S
        theorem TriangularSet.lt_take {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S : TriangularSet σ R} {n : } :
        n < S.lengthS < S.take n
        theorem TriangularSet.lt_drop {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S : TriangularSet σ R} {n : } :
        S 0 < nS < S.drop n
        theorem TriangularSet.concat_lt {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S : TriangularSet σ R} {p : MvPolynomial σ R} (h : S.CanConcat p) :
        S.concat p h < S
        theorem TriangularSet.single_lt_empty {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p : MvPolynomial σ R} [DecidableEq R] :
        p 0single p <
        theorem TriangularSet.gt_single_of_first_gt {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {p : MvPolynomial σ R} {S : TriangularSet σ R} [DecidableEq R] :
        p 0p < S 0single p < S

        Well-Foundedness #

        theorem TriangularSet.length_le {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] {S : TriangularSet σ R} [Fintype σ] :
        instance TriangularSet.instIsWellFoundedOrderLT {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] [Finite σ] :
        IsWellFounded (TriangularSet σ R) (InvImage (fun (x1 x2 : Lex (WithTop (Lex (WithBot σ × )))) => x1 < x2) order)

        The set of Triangular Sets is well-founded under the lexicographic order ordering. This is a crucial result that guarantees the termination of the Characteristic Set Algorithm.

        @[implicit_reducible]
        Equations
        theorem TriangularSet.Set.has_min {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] [Finite σ] (S' : Set (TriangularSet σ R)) (h : S'.Nonempty) :
        SS', TS', S T
        noncomputable def TriangularSet.Set.min {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] [Finite σ] (S' : Set (TriangularSet σ R)) (h : S'.Nonempty) :

        The minimal element of a nonempty set of triangular sets.

        Equations
        Instances For
          theorem TriangularSet.Set.min_mem {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] [Finite σ] (S' : Set (TriangularSet σ R)) (h : S'.Nonempty) :
          min S' h S'
          theorem TriangularSet.Set.min_le {R : Type u_1} {σ : Type u_2} [CommSemiring R] [LinearOrder σ] [Finite σ] (S' : Set (TriangularSet σ R)) (h : S'.Nonempty) (T : TriangularSet σ R) :
          T S'min S' h T