Documentation

Complexitylib.Algebraic.LowerBound.Fusion.Arithmetic.MultiplicativeShadow.Polynomial

Root-multiplicity shadows for polynomial circuits #

For finitely many points, record the root multiplicity of a polynomial at each point and cast those natural numbers into the coefficient field. Away from the zero polynomial, root multiplicities add under multiplication. We send the zero polynomial to the zero vector; if a product is zero, the multiplicative-shadow rule instead uses zero coefficients. This gives a total feature suitable for circuits that may contain zero intermediate values.

As a concrete application, one circuit producing the distinct nonzero shifts X - a_i from X needs one addition per shift. Multiplications, arbitrary field constants, cancellation, and sharing between outputs remain entirely unrestricted.

noncomputable def Algebraic.Fusion.Arithmetic.MultiplicativeShadow.RootMultiplicity.rootMultiplicityFeature {K : Type u} {m : ℕ} [Field K] (points : Fin m → K) (polynomial : Polynomial K) :
Fin m → K

Vector of root multiplicities at the selected points, cast into K.

Equations
Instances For
    theorem Algebraic.Fusion.Arithmetic.MultiplicativeShadow.RootMultiplicity.rootMultiplicityFeature_mul_of_ne_zero {K : Type u} {m : ℕ} [Field K] (points : Fin m → K) {left right : Polynomial K} (product_ne_zero : left * right ≠ 0) :
    rootMultiplicityFeature points (left * right) = rootMultiplicityFeature points left + rootMultiplicityFeature points right

    Root-multiplicity vectors add under a nonzero polynomial product.

    theorem Algebraic.Fusion.Arithmetic.MultiplicativeShadow.RootMultiplicity.rootMultiplicityFeature_mul_span {K : Type u} {m : ℕ} [Field K] (points : Fin m → K) (left right : Polynomial K) :
    ∃ (leftScalar : K) (rightScalar : K), rootMultiplicityFeature points (left * right) = leftScalar • rootMultiplicityFeature points left + rightScalar • rootMultiplicityFeature points right

    Total span propagation, including products that vanish.

    noncomputable def Algebraic.Fusion.Arithmetic.MultiplicativeShadow.RootMultiplicity.certificate {K : Type u} {C : Type v} {m : ℕ} [Field K] (constant : C → K) (problem : Problem (Polynomial K)) (points : Fin m → K) (input_zero : ∀ (input : Fin problem.inputCount) (point : Fin m), Polynomial.rootMultiplicity (points point) (problem.inputs input) = 0) :
    Certificate (fun (scalar : C) => Polynomial.C (constant scalar)) problem

    Root-multiplicity certificate for any polynomial construction problem whose free inputs do not vanish at the selected points.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      @[simp]
      theorem Algebraic.Fusion.Arithmetic.MultiplicativeShadow.RootMultiplicity.certificate_feature {K : Type u} {C : Type v} {m : ℕ} [Field K] (constant : C → K) (problem : Problem (Polynomial K)) (points : Fin m → K) (input_zero : ∀ (input : Fin problem.inputCount) (point : Fin m), Polynomial.rootMultiplicity (points point) (problem.inputs input) = 0) (polynomial : Polynomial K) :
      (certificate constant problem points input_zero).feature polynomial = rootMultiplicityFeature points polynomial
      theorem Algebraic.Fusion.Arithmetic.MultiplicativeShadow.RootMultiplicity.rootMultiplicityFeatureSpan_finrank_le_additionCost {K : Type u} {C : Type v} {r m : ℕ} [Field K] (constant : C → K) (problem : Problem (Polynomial K)) (points : Fin r → K) (input_zero : ∀ (input : Fin problem.inputCount) (point : Fin r), Polynomial.rootMultiplicity (points point) (problem.inputs input) = 0) (targets : Fin m → Polynomial K) (circuit : Circuit (Arithmetic.signature C) problem.inputCount m) (constructs : Interaction.Multiple.Constructs problem targets circuit) :

      The span rank of any requested root-multiplicity vectors is bounded by the addition cost of a circuit constructing those polynomials.

      theorem Algebraic.Fusion.Arithmetic.MultiplicativeShadow.RootMultiplicity.circuit_addition_lowerBound_of_rootMultiplicityFeature {K : Type u} {C : Type v} {r m : ℕ} [Field K] (constant : C → K) (problem : Problem (Polynomial K)) (points : Fin r → K) (input_zero : ∀ (input : Fin problem.inputCount) (point : Fin r), Polynomial.rootMultiplicity (points point) (problem.inputs input) = 0) (targets : Fin m → Polynomial K) (independent : LinearIndependent K (rootMultiplicityFeature points ∘ targets)) (circuit : Circuit (Arithmetic.signature C) problem.inputCount m) (constructs : Interaction.Multiple.Constructs problem targets circuit) :

      Independent root-multiplicity vectors force one addition per requested output.

      The one-input construction problem used for the shift family. Its single-output target is irrelevant to the multi-output theorem.

      Equations
      Instances For

        Distinct affine shifts requested as simultaneous outputs.

        Equations
        Instances For

          A nonzero point is not a root of the free input X.

          At distinct points, the shift targets have the standard-basis root-multiplicity vectors.

          Root-multiplicity shadows of distinct shifts are linearly independent.

          theorem Algebraic.Fusion.Arithmetic.MultiplicativeShadow.RootMultiplicity.shiftTargets_addition_lowerBound {K : Type u} {C : Type v} {m : ℕ} [Field K] (constant : C → K) (points : Fin m → K) (injective : Function.Injective points) (nonzero : ∀ (point : Fin m), points point ≠ 0) (circuit : Circuit (Arithmetic.signature C) 1 m) (constructs : circuit.eval (Arithmetic.interpretation fun (scalar : C) => Polynomial.C (constant scalar)) shiftProblem.inputs = shiftTargets points) :

          One circuit producing m distinct nonzero affine shifts of its free input needs at least m addition gates.