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

  1. (which is what we want to check)
  2. 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.

Sum check

Permutation check

Prescribed permutation check

Resources