Documentation

CompPoly.Multivariate.CMvMonomial

Computable monomials #

Monomials of the form X₀ᵃ * X₁ᵇ * ... * Xₖᶻ. These are represented as vectors of natural numbers, where each element corresponds to the exponent of a variable.

Main definitions #

@[implicit_reducible]

Monomial in n variables.

  • #v[e₀, e₁, e₂] denotes X₀^e₀ * X₁^e₁ * X₂^e₂
Instances For
    @[instance_reducible]
    @[instance_reducible]
    instance CPoly.instGetElemCMvMonomialNatLt {n : } :
    GetElem (CMvMonomial n) fun (x : CMvMonomial n) (idx : ) => idx < n
    @[instance_reducible]
    instance CPoly.instGetElem?CMvMonomialNatLt {n : } :
    GetElem? (CMvMonomial n) fun (x : CMvMonomial n) (idx : ) => idx < n
    @[instance_reducible]
    @[instance_reducible]
    theorem CPoly.CMvMonomial.ext {n : } {m₁ m₂ : CMvMonomial n} (h : ∀ (i : ) (x : i < n), m₁[i] = m₂[i]) :
    m₁ = m₂
    theorem CPoly.CMvMonomial.ext_iff {n : } {m₁ m₂ : CMvMonomial n} :
    m₁ = m₂ ∀ (i : ) (x : i < n), m₁[i] = m₂[i]
    def CPoly.CMvMonomial.extend {n : } (n' : ) (m : CMvMonomial n) :

    Extend a monomial to a larger number of variables by padding with zeros.

    Instances For

      The total degree of a monomial (sum of all exponents).

      Instances For
        def CPoly.CMvMonomial.degreeOf {n : } (m : CMvMonomial n) (i : Fin n) :

        The degree of the $i$-th variable in the monomial.

        Instances For

          The zero monomial (all exponents are zero).

          Instances For
            @[instance_reducible]

            Monomial multiplication (adds exponents element-wise).

            Instances For
              @[instance_reducible]
              @[simp]
              theorem CPoly.CMvMonomial.getElem_add {n : } {m₁ m₂ : CMvMonomial n} (i : ) (h : i < n) :
              (m₁ + m₂)[i] = m₁[i] + m₂[i]
              @[simp]
              theorem CPoly.CMvMonomial.add_zero {n : } {m : CMvMonomial n} :
              m + 0 = m
              def CPoly.CMvMonomial.divides {n : } (m₁ m₂ : CMvMonomial n) :

              Check if $m_1$ divides $m_2$ (true if all exponents of $m_1$ are $\le$ those of $m_2$).

              Instances For
                @[instance_reducible]
                @[instance_reducible]
                instance CPoly.CMvMonomial.instDecidableDvd {n : } {m₁ m₂ : CMvMonomial n} :
                Decidable (m₁ m₂)
                theorem CPoly.CMvMonomial.dvd_iff_divides {n : } {m₁ m₂ : CMvMonomial n} :
                m₁ m₂ m₁.divides m₂ = true
                theorem CPoly.CMvMonomial.dvd_iff {n : } {m₁ m₂ : CMvMonomial n} :
                m₁ m₂ ∀ (i : ) (h : i < n), m₁[i] m₂[i]

                m₁ ∣ m₂ holds exactly when every exponent of m₁ is at most the matching exponent of m₂.

                def CPoly.CMvMonomial.div {n : } (m₁ m₂ : CMvMonomial n) :

                The monomial division $m_1 / m_2$ (subtracts exponents element-wise).

                The result makes sense assuming m₂ | m₁.

                Instances For
                  @[instance_reducible]
                  @[simp]
                  theorem CPoly.CMvMonomial.getElem_div {n : } {m₁ m₂ : CMvMonomial n} (i : ) (h : i < n) :
                  (m₁ / m₂)[i] = m₁[i] - m₂[i]
                  theorem CPoly.CMvMonomial.add_div_of_dvd {n : } {m₁ m₂ : CMvMonomial n} (h : m₁ m₂) :
                  m₁ + m₂ / m₁ = m₂
                  theorem CPoly.CMvMonomial.dvd_iff_exists_add {n : } {m₁ m₂ : CMvMonomial n} :
                  m₁ m₂ ∃ (c : CMvMonomial n), m₂ = m₁ + c

                  Divisibility agrees with monomial multiplication, which adds exponents.

                  Convert a CMvMonomial to a Finsupp.

                  Instances For

                    Convert a Finsupp to a CMvMonomial.

                    Instances For
                      theorem CPoly.CMvMonomial.dvd_iff_toFinsupp_le {n : } {m₁ m₂ : CMvMonomial n} :
                      m₁ m₂ m₁.toFinsupp m₂.toFinsupp

                      Divisibility is the pointwise order on exponent vectors.

                      @[simp]
                      theorem CPoly.CMvMonomial.map_mul {n : } {m₁ m₂ : Multiplicative (Fin n →₀ )} :
                      ofFinsupp (m₁ * m₂) = ofFinsupp m₁ + ofFinsupp m₂
                      @[reducible, inline]
                      abbrev CPoly.MonoR (n : ) (R : Type u_1) :
                      Type u_1
                      Instances For
                        @[instance_reducible]
                        @[instance_reducible]
                        instance CPoly.MonoR.instRepr {n : } {R : Type u_1} [Repr R] :
                        Repr (MonoR n R)
                        def CPoly.MonoR.C {n : } {R : Type u_1} (c : R) :
                        MonoR n R
                        Instances For
                          def CPoly.MonoR.divides {n : } {R : Type u_1} [CommSemiring R] [HMod R R R] [BEq R] (t₁ t₂ : MonoR n R) :

                          Check if $t_1$ divides $t_2$: the monomial of $t_1$ divides that of $t_2$, and the coefficient of $t_2$ is zero modulo that of $t_1$.

                          Instances For
                            @[instance_reducible]
                            instance CPoly.MonoR.instDvd {n : } {R : Type u_1} [CommSemiring R] [HMod R R R] [BEq R] :
                            Dvd (MonoR n R)
                            @[instance_reducible]
                            instance CPoly.MonoR.instDecidableDvd {n : } {R : Type u_1} [CommSemiring R] [HMod R R R] [BEq R] {t₁ t₂ : MonoR n R} :
                            Decidable (t₁ t₂)
                            def CPoly.MonoR.evalMonomial {R : Type u_2} {n : } [CommSemiring R] :
                            (Fin nR)CMvMonomial nR
                            Instances For
                              @[reducible]

                              Alias of CPoly.CMvMonomial.toFinsupp.


                              Convert a CMvMonomial to a Finsupp.

                              Instances For
                                @[reducible]

                                Alias of CPoly.CMvMonomial.ofFinsupp.


                                Convert a Finsupp to a CMvMonomial.

                                Instances For