We consider
For a given integer
We explicitly define the multiplicative subgroup
We denote by
For a polynomial
The Lagrange polynomial
Thus, the zero polynomial
Common Preprocessed Input
Prover Input: A vector
Round 1:
Generate random blinding scalars
Compute the query polynomial
Let
Compute the polynomials
Compute
The first output of the prover is
Open question: can the proof size in Round 1 be improved?
Round 2:
Compute the permutation challenges
Compute the permutation polynomial
Compute
The second output of the prover is
Round 3:
Compute the quotient challenge
Compute the quotient polynomial
TODO: Add zero-knowledge to
Split
Compute
The third output of the prover is
Round 4:
Compute the evaluation challenge
Compute the opening evaluations:
The fourth output of the prover is
Round 5:
Compute the opening challenge
Compute the linearisation polynomial
Compute the opening proof polynomials
Compute
The fifth output of the prover is
The complete proof is:
Compute multipoint evaluation challenge
Verifier preprocessed input: The curve element
Validate that
Validate that
Validate that
Compute the challenges
Compute the zero polynomial evaluation
Compute the Lagrange polynomial evaluation
Compute the lookup commitment
The previous computation be avoided by forcing the prover to send it.
To save a verifier scalar multiplication, we split
and let
Compute the first part of the batched polynomial commitment
Compute the full batched polynomial commitment
Compute the group-encoded batch evaluation
Finally, batch validate all evaluations:
Plookup