-
Notifications
You must be signed in to change notification settings - Fork 895
Computation models for polynomials and finitely supported functions
Eric Wieser edited this page Aug 3, 2023
·
22 revisions
Today, MvPolynomial and Polynomial are both implemented in terms of Finsupp. As a result, all of:
FinsuppPolynomialMvPolynomial
are largely noncomputable.
Possible designs include:
- De-classicalized
Finsupp: promote anyClassical.decEqterms to typeclass parameters. As a reminder, this stores the exactFinsetof non-zero values. -
DFinsupp: we already have a working model here. This stores aMultisetthat is a superset of all the non-zero values. - Quotient of generators: an approach similar to
FreeAlgebra. This could represent1 + 3x^2asadd (monomial 0 1) (monomial 2 3)and quotient by algebraic rules.
The following outlines the computational behavior that ι →₀ R could have under these strategies
| Operation | De-classicalized Finsupp
|
DFinsupp |
Quotient of inductive type |
|---|---|---|---|
f i (aka p.coeff i) |
✓ | ✓ | DecidableEq ι |
single i r (aka X) |
DecidableEq ι DecidableEq R
|
DecidableEq ι |
✓ |
support |
✓ | DecidableEq R |
DecidableEq ι DecidableEq R
|
+ |
DecidableEq ι DecidableEq R
|
✓ | ✓ |
DFinsupp has the nice property of matching the computation model of Pi (via Pi.single, Function.support, and the usual arithmetic).
Algorithmically though it is inefficient as the preSupport set grows with each operation.