This article lists a bunch of reductions of the form “in order to check property x on polynomial , one can check property on , instead”.
Notation
- are polynomials of degree at most .
- is a subset of , typically (for performance) a multiplicative subgroup of of the form for a primitive th root of unity .
- We assume that is exponentially large (prime order of elliptic curve group, roughly ), is very large (roughly the size of the circuit we want to prove stuff about), is also pretty big. .
Sanity check
What’s the typical size of in the callout above?
Polynomial equality test
To test polynomial equality , one can instead test that for some random challenge . See Schwartz-Zippel.
Zero test
To test that , one can test that for a random . See Schwartz-Zippel.
Batch zero test via factor test
To test that (i.e. ) for any subset , one can check that
Performance
Computing/evaluating the polynomial potentially takes a lot of time, which we often want to avoid. In those cases, it’s useful to choose for a primitive th root of unity , in which case , which is very efficient to compute and evaluate.
Evaluation test via factor test
To check that , one can instead test that (i.e. )
Idea
The idea here is .
Product check
To check that , for a primitive th root of unity , have the prover interpolate the partial product polynomial for . Note that , which is what we want to check is . The product check boils down to
- (which is what we want to check)
- for all (well-formed )
The second test can be done via Batch zero test via factor test on .
Batch zero test on
Note that evaluating at a random position can be done by simply evaluating at and , and at , so can be implicitly represented, no need for additional commitments on the prover side.