Documentation

HexMvPoly.Operations

theorem Hex.MvPoly.negCoeff_ne_zero {R : Type u} [Lean.Grind.Ring R] (c : R) (hc : c 0) :
-c 0

Negation preserves nonzero coefficients in a ring.

def Hex.MvPoly.add {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Add R] [Zero R] [BEq R] [LawfulBEq R] (p q : MvPoly n R cmp) :
MvPoly n R cmp

Polynomial addition, combining equal monomials and deleting cancellations.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    @[instance_reducible]
    instance Hex.MvPoly.instAddOfLawfulBEq {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Add R] [Zero R] [BEq R] [LawfulBEq R] :
    Add (MvPoly n R cmp)
    Equations
    def Hex.MvPoly.neg {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Neg R] [Zero R] [BEq R] [LawfulBEq R] (p : MvPoly n R cmp) :
    MvPoly n R cmp

    Coefficientwise negation, filtering any zero result in one tree pass.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      @[instance_reducible]
      instance Hex.MvPoly.instNegOfLawfulBEq {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Neg R] [Zero R] [BEq R] [LawfulBEq R] :
      Neg (MvPoly n R cmp)
      Equations
      def Hex.MvPoly.sub {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Add R] [Neg R] [Zero R] [BEq R] [LawfulBEq R] (p q : MvPoly n R cmp) :
      MvPoly n R cmp

      Polynomial subtraction.

      Equations
      Instances For
        @[instance_reducible]
        instance Hex.MvPoly.instSubOfAddOfNegOfLawfulBEq {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Add R] [Neg R] [Zero R] [BEq R] [LawfulBEq R] :
        Sub (MvPoly n R cmp)
        Equations
        def Hex.MvPoly.mul {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Add R] [Mul R] [Zero R] [BEq R] [LawfulBEq R] (p q : MvPoly n R cmp) :
        MvPoly n R cmp

        Polynomial multiplication. Every translated product term is accumulated directly into one output map, so collisions and cancellations are normalized as they arise.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[instance_reducible]
          instance Hex.MvPoly.instMulOfAddOfLawfulBEq {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Add R] [Mul R] [Zero R] [BEq R] [LawfulBEq R] :
          Mul (MvPoly n R cmp)
          Equations
          def Hex.MvPoly.one {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Zero R] [One R] [BEq R] [LawfulBEq R] :
          MvPoly n R cmp

          Multiplicative identity.

          Equations
          Instances For
            @[instance_reducible]
            instance Hex.MvPoly.instOneOfLawfulBEq {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Zero R] [One R] [BEq R] [LawfulBEq R] :
            One (MvPoly n R cmp)
            Equations
            @[irreducible]
            def Hex.MvPoly.npowBySq {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Add R] [Mul R] [Zero R] [One R] [BEq R] [LawfulBEq R] (p : MvPoly n R cmp) :
            NatMvPoly n R cmp

            Exponentiation by repeated squaring.

            Equations
            Instances For
              @[instance_reducible]
              instance Hex.MvPoly.instPowNatOfAddOfMulOfOneOfLawfulBEq {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Add R] [Mul R] [Zero R] [One R] [BEq R] [LawfulBEq R] :
              Pow (MvPoly n R cmp) Nat
              Equations
              @[simp]
              theorem Hex.MvPoly.coeff_one {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (m : Mono n) :

              The coefficient of one is one at the zero monomial and zero elsewhere.

              theorem Hex.MvPoly.coeff_add {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (m : Mono n) (p q : MvPoly n R cmp) :
              coeff m (p + q) = coeff m p + coeff m q

              Coefficients distribute over polynomial addition.

              theorem Hex.MvPoly.add_zero {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p : MvPoly n R cmp) :
              p + 0 = p

              Zero is a right identity for polynomial addition.

              theorem Hex.MvPoly.zero_add {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p : MvPoly n R cmp) :
              0 + p = p

              Zero is a left identity for polynomial addition.

              theorem Hex.MvPoly.add_comm {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p q : MvPoly n R cmp) :
              p + q = q + p

              Polynomial addition is commutative.

              theorem Hex.MvPoly.add_assoc {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p q r : MvPoly n R cmp) :
              p + q + r = p + (q + r)

              Polynomial addition is associative.

              theorem Hex.MvPoly.addMonomial_eq {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p : MvPoly n R cmp) (m : Mono n) (c : R) :
              p.addMonomial m c = p + monomial m c

              Adding a monomial is ordinary addition by a monomial polynomial.

              theorem Hex.MvPoly.coeff_neg {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Ring R] [DecidableEq R] (m : Mono n) (p : MvPoly n R cmp) :
              coeff m (-p) = -coeff m p

              Coefficients commute with polynomial negation.

              theorem Hex.MvPoly.coeff_sub {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Ring R] [DecidableEq R] (m : Mono n) (p q : MvPoly n R cmp) :
              coeff m (p - q) = coeff m p - coeff m q

              Coefficients distribute over polynomial subtraction.

              theorem Hex.MvPoly.coeff_mul {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (m : Mono n) (p q : MvPoly n R cmp) :
              coeff m (p * q) = List.foldl (fun (acc : R) (ab : Mono n × Mono n) => acc + coeff ab.fst p * coeff ab.snd q) 0 m.splits

              A product coefficient is the convolution over monomial splittings.

              theorem Hex.MvPoly.mul_zero {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p : MvPoly n R cmp) :
              p * 0 = 0

              Zero is absorbing on the right for polynomial multiplication.

              theorem Hex.MvPoly.zero_mul {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p : MvPoly n R cmp) :
              0 * p = 0

              Zero is absorbing on the left for polynomial multiplication.

              theorem Hex.MvPoly.mul_add {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p q r : MvPoly n R cmp) :
              p * (q + r) = p * q + p * r

              Polynomial multiplication distributes over addition on the right.

              theorem Hex.MvPoly.add_mul {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p q r : MvPoly n R cmp) :
              (p + q) * r = p * r + q * r

              Polynomial multiplication distributes over addition on the left.

              theorem Hex.MvPoly.monomial_mul_monomial {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (a b : Mono n) (ca cb : R) :
              monomial a ca * monomial b cb = monomial (a.mul b) (ca * cb)

              Multiplying monomial polynomials multiplies their coefficients and monomials.

              theorem Hex.MvPoly.powBySq_monomial {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (m : Mono n) (c : R) (k : Nat) :

              Binary powering of a monomial polynomial scales its exponent vector.

              theorem Hex.MvPoly.mul_one {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p : MvPoly n R cmp) :
              p * 1 = p

              One is a right identity for polynomial multiplication.

              theorem Hex.MvPoly.one_mul {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p : MvPoly n R cmp) :
              1 * p = p

              One is a left identity for polynomial multiplication.

              theorem Hex.MvPoly.mul_assoc {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p q r : MvPoly n R cmp) :
              p * q * r = p * (q * r)

              Polynomial multiplication is associative.

              theorem Hex.MvPoly.mul_comm {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.CommSemiring R] [DecidableEq R] (p q : MvPoly n R cmp) :
              p * q = q * p

              Polynomial multiplication is commutative over a commutative coefficient semiring.

              theorem Hex.MvPoly.pow_succ {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p : MvPoly n R cmp) (k : Nat) :
              p ^ (k + 1) = p ^ k * p

              Polynomial exponentiation satisfies the successor recurrence.

              theorem Hex.MvPoly.coeff_pow_succ {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (m : Mono n) (p : MvPoly n R cmp) (k : Nat) :
              coeff m (p ^ (k + 1)) = coeff m (p ^ k * p)

              Coefficients of a successor power are given by multiplication with the preceding power.

              theorem Hex.MvPoly.npowBySq_eq_pow {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [BEq R] [LawfulBEq R] [Lean.Grind.Semiring R] [DecidableEq R] (p : MvPoly n R cmp) (k : Nat) :
              p.npowBySq k = p ^ k

              Binary polynomial powering agrees with the public power operation.