Documentation

HexMvPoly.Structural

def Hex.MvPoly.reorder {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] (cmp' : Mono nMono nOrdering) [Std.TransCmp cmp'] [Std.LawfulEqCmp cmp'] [Lean.Grind.Semiring R] [DecidableEq R] (p : MvPoly n R cmp) :
MvPoly n R cmp'

Rebuild a polynomial under a different monomial comparator.

Equations
Instances For
    def Hex.MvPoly.rename {n k : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] (cmp' : Mono kMono kOrdering) [Std.TransCmp cmp'] [Std.LawfulEqCmp cmp'] [Lean.Grind.Semiring R] [DecidableEq R] (f : Fin nFin k) (p : MvPoly n R cmp) :
    MvPoly k R cmp'

    Rename variables, adding exponents in fibres and combining all resulting term collisions.

    Equations
    Instances For
      def Hex.MvPoly.predAt {n : Nat} (i : Fin n) (m : Mono n) :

      Decrease the exponent at i by one, leaving every other exponent unchanged.

      Equations
      Instances For
        @[simp]
        theorem Hex.MvPoly.degreeOf_succAt {n : Nat} (i : Fin n) (m : Mono n) :

        Incrementing a monomial raises the selected variable degree by one.

        @[simp]
        theorem Hex.MvPoly.predAt_succAt {n : Nat} (i : Fin n) (m : Mono n) :
        predAt i (Mono.succAt i m) = m

        Decrementing the selected exponent reverses succAt.

        theorem Hex.MvPoly.predAt_eq_iff {n : Nat} (i : Fin n) (m t : Mono n) (ht : Mono.degreeOf i t 0) :
        predAt i t = m t = Mono.succAt i m

        predAt yields a monomial exactly when the source is its successor at the selected variable.

        def Hex.MvPoly.derivative {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Zero R] [NatCast R] [Add R] [Mul R] [DecidableEq R] (i : Fin n) (p : MvPoly n R cmp) :
        MvPoly n R cmp

        Formal derivative with respect to variable i.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          def Hex.MvPoly.homogeneousComponent {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Lean.Grind.Semiring R] [DecidableEq R] (d : Nat) (p : MvPoly n R cmp) :
          MvPoly n R cmp

          Homogeneous component of total degree d.

          Equations
          Instances For
            def Hex.MvPoly.bind {n k : Nat} {R : Type u} {S : Type v} {cmp : Mono nMono nOrdering} {targetCmp : Mono kMono kOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Std.TransCmp targetCmp] [Std.LawfulEqCmp targetCmp] [Zero R] [Lean.Grind.Semiring S] [DecidableEq S] (f : RS) (g : Fin nMvPoly k S targetCmp) (p : MvPoly n R cmp) :
            MvPoly k S targetCmp

            General substitution, mapping coefficients through f and variables through g.

            Equations
            Instances For
              theorem Hex.MvPoly.bind_eq {n k : Nat} {R : Type u} {S : Type v} {cmp : Mono nMono nOrdering} {targetCmp : Mono kMono kOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Std.TransCmp targetCmp] [Std.LawfulEqCmp targetCmp] [Zero R] [Lean.Grind.Semiring S] [DecidableEq S] (f : RS) (g : Fin nMvPoly k S targetCmp) (p : MvPoly n R cmp) :
              bind f g p = List.foldl (fun (acc : MvPoly k S targetCmp) (term : Mono n × R) => acc + C (f term.snd) * Mono.prod g term.fst) 0 p.termsList

              General substitution is the ordered sum of mapped coefficient-monomial terms.

              def Hex.MvPoly.subst {n k : Nat} {R : Type u} {cmp : Mono nMono nOrdering} {targetCmp : Mono kMono kOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Std.TransCmp targetCmp] [Std.LawfulEqCmp targetCmp] [Lean.Grind.Semiring R] [DecidableEq R] (f : Fin nMvPoly k R targetCmp) (p : MvPoly n R cmp) :
              MvPoly k R targetCmp

              Substitute polynomials for variables without changing the coefficient type.

              Equations
              Instances For
                def Hex.MvPoly.bind₁ {n k : Nat} {R : Type u} {cmp : Mono nMono nOrdering} {targetCmp : Mono kMono kOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Std.TransCmp targetCmp] [Std.LawfulEqCmp targetCmp] [Lean.Grind.Semiring R] [DecidableEq R] (f : Fin nMvPoly k R targetCmp) (p : MvPoly n R cmp) :
                MvPoly k R targetCmp

                Compatibility spelling for same-coefficient substitution.

                Equations
                Instances For
                  def Hex.MvPoly.sumToIter {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Lean.Grind.Semiring R] [DecidableEq R] (p : MvPoly n R cmp) :
                  MvPoly n R cmp

                  Reconstruct a polynomial by summing its ordered term iteration.

                  Equations
                  Instances For
                    @[simp]
                    theorem Hex.MvPoly.sumToIter_eq {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Lean.Grind.Semiring R] [DecidableEq R] (p : MvPoly n R cmp) :

                    Reconstructing from the ordered term iterator recovers the polynomial.

                    theorem Hex.MvPoly.coeff_reorder {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Lean.Grind.Semiring R] [DecidableEq R] (cmp' : Mono nMono nOrdering) [Std.TransCmp cmp'] [Std.LawfulEqCmp cmp'] (m : Mono n) (p : MvPoly n R cmp) :
                    coeff m (reorder cmp' p) = coeff m p

                    Reordering a polynomial preserves every coefficient.

                    theorem Hex.MvPoly.coeff_rename {n k : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Lean.Grind.Semiring R] [DecidableEq R] (cmp' : Mono kMono kOrdering) [Std.TransCmp cmp'] [Std.LawfulEqCmp cmp'] (f : Fin nFin k) (m : Mono k) (p : MvPoly n R cmp) :
                    coeff m (rename cmp' f p) = List.foldl (fun (acc : R) (term : Mono n × R) => if Mono.rename f term.fst = m then acc + term.snd else acc) 0 p.termsList

                    Renaming variables sums coefficients whose target monomials coincide.

                    theorem Hex.MvPoly.coeff_derivative {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Lean.Grind.Semiring R] [DecidableEq R] (i : Fin n) (m : Mono n) (p : MvPoly n R cmp) :
                    coeff m (derivative i p) = ↑(Mono.degreeOf i m + 1) * coeff (Mono.succAt i m) p

                    A derivative coefficient is the successor coefficient scaled by its corresponding exponent.

                    theorem Hex.MvPoly.coeff_homogeneousComponent {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Lean.Grind.Semiring R] [DecidableEq R] (d : Nat) (m : Mono n) (p : MvPoly n R cmp) :

                    A homogeneous component keeps exactly the terms of the requested total degree.

                    theorem Hex.MvPoly.subst_eq {n k : Nat} {R : Type u} {cmp : Mono nMono nOrdering} {targetCmp : Mono kMono kOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Std.TransCmp targetCmp] [Std.LawfulEqCmp targetCmp] [Lean.Grind.Semiring R] [DecidableEq R] (f : Fin nMvPoly k R targetCmp) (p : MvPoly n R cmp) :
                    subst f p = List.foldl (fun (acc : MvPoly k R targetCmp) (term : Mono n × R) => acc + C term.snd * Mono.prod f term.fst) 0 p.termsList

                    Substitution evaluates each source monomial at the replacement polynomials and sums the results.

                    theorem Hex.MvPoly.rename_eq_subst {n k : Nat} {R : Type u} {cmp : Mono nMono nOrdering} {targetCmp : Mono kMono kOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Std.TransCmp targetCmp] [Std.LawfulEqCmp targetCmp] [Lean.Grind.Semiring R] [DecidableEq R] (f : Fin nFin k) (p : MvPoly n R cmp) :
                    rename targetCmp f p = subst (fun (i : Fin n) => X (f i)) p

                    Renaming is substitution by the target variables.

                    theorem Hex.MvPoly.partialEval_eq_subst {n : Nat} {R : Type u} {cmp : Mono nMono nOrdering} [Std.TransCmp cmp] [Std.LawfulEqCmp cmp] [Lean.Grind.Semiring R] [DecidableEq R] (s : Fin nOption R) (p : MvPoly n R cmp) :
                    partialEval s p = subst (fun (i : Fin n) => match s i with | some x => C x | none => X i) p

                    Partial evaluation is substitution by constants at assigned variables and variables at unassigned ones.