Polynomial interpretations and their formal wire values #
An interpretation is polynomial when each gate operation agrees everywhere with a multivariate polynomial in its argument slots. The signature may contain arbitrarily many operations and constants, with no degree bound. Formal substitution assigns a polynomial to every original circuit wire. Its degree-one coefficient vector will provide a local linear realization without changing the program graph.
Every operation is represented by a polynomial in its argument slots.
Equations
- Algebraic.Cutwidth.MultiOutput.Polynomial.IsPolynomial I = ∀ (op : σ.Op), ∃ (q : MvPolynomial (Fin (σ.Arity op)) F), ∀ (x : Fin (σ.Arity op) → F), I op x = (MvPolynomial.eval x) q
Instances For
The signature containing every finite-arity polynomial over the coefficient field.
Equations
- Algebraic.Cutwidth.MultiOutput.Polynomial.signature F = { Op := (arity : ℕ) × MvPolynomial (Fin arity) F, Arity := Sigma.fst }
Instances For
A polynomial operation evaluates its displayed polynomial.
Equations
Instances For
The full polynomial signature has a polynomial interpretation.
A chosen polynomial representing one operation.
Equations
- hI.gatePolynomial op = ⋯.choose
Instances For
Formal substitution of wire polynomials into each gate polynomial.
Equations
- hI.formalInterpretation n op args = (MvPolynomial.aeval args) (hI.gatePolynomial op)
Instances For
The polynomial carried by each original input or gate wire.
Equations
- hI.wirePolynomial p = p.trace (hI.formalInterpretation n) MvPolynomial.X
Instances For
The linear coefficient vector, computed by formal differentiation at zero.
Equations
- Algebraic.Cutwidth.MultiOutput.Polynomial.linearPart q i = (MvPolynomial.eval fun (x : Fin n) => 0) ((MvPolynomial.pderiv i) q)
Instances For
The formal linear polynomial with the given coefficient row.
Equations
- Algebraic.Cutwidth.MultiOutput.Polynomial.linearPolynomial row = ∑ i : Fin n, MvPolynomial.C (row i) * MvPolynomial.X i