[WIP] UltraPLONK arithmetisation

We call the field over which the circuit is defined .

Let , and assume that is a primitive root of unity of order in , so that has a multiplicative subgroup . This forms a Lagrange basis corresponding to the points in the subgroup.

Polynomial rules

A polynomial rule defines a constraint that must hold between its specified columns at every row (i.e. at every point in the multiplicative subgroup).

e.g.

a * sa + b * sb + a * b * sm + c * sc + PI = 0 

Columns

  • fixed (i.e. "selector") columns: fixed for all instances of a particular circuit. These columns toggle parts of a polynomial rule "on" or "off" to form a "custom gate".
  • advice columns: variable values assigned in each instance of the circuit. Corresponds to the prover's secret witness.
  • public input: like advice columns, but publicly known values.

Each column is a vector of values, e.g. . We can think of the vector as the evaluation form of the column polynomial To recover the coefficient form, we can use Lagrange interpolation, such that

Copy constraints

  • Define permutation between a set of columns, e.g.
  • Copy specific cells between these columns, e.g.
  • Construct permuted columns which should evaluate to same value as original columns

Permutation grand product

where indexes over the size of the multiplicative subgroup, and indexes over the advice columns involved in the permutation. This is a running product, where each term includes the cumulative product of the terms before it.

TODO: what is ? keep columns linearly independent

Check the constraints:

  1. First term is equal to one

  2. Running product is well-constructed. For each row, we check that this holds: Rearranging gives which is how we defined the grand product polynomial in the first place.

Lookup

Reference: Generic Lookups with PLONK (DRAFT)

Vanishing argument

We want to check that the expressions defined by the gate constraints, permutation constraints and loookup constraints evaluate to zero at all points in the multiplicative subgroup. To do this, the prover collapses all the expressions into one polynomial where is the number of expressions and is a random challenge used to keep the constraints linearly independent. The prover then divides this by the vanishing polynomial (see section: Vanishing polynomial) and commits to the resulting quotient

The verifier responds with a random evaluation point to which the prover replies with the claimed evaluations Now, all that remains for the verifier to check is that the evaluations satisfy

Notice that we have yet to check that the committed polynomials indeed evaluate to the claimed values at This check is handled by the polynomial commitment scheme (described in the next section).