Disclaimer: This write up introduces some basic tricks and definitions that one will bump into while trying to learn Plonk. This article is neither precise nor exhaustive. Its objective is to provide some intuition for those jumping onto Plonk and some fun for those who love math.
Is it an ELI5 article?
Lagrange interpolation
The idea of Lagrange interpolation is that, taking a number of points, one can reconstruct the polynomial passing through all of these points. In particular, first we construct a polynomial for each point that (i) passes through that point and (ii) equals zero in all other points. We then sum up all of the polynomials.
To describe what exactly we are talking about… Let be a field and be a subgroup of of order . Lagrange polynomial is a polynomial of degree that vanishes (equals zero) in all points of except for and at point , . As this polynomial vanishes in all points except for , it has a very sparse representation: where is some constant. This sparsity allows Verifier to compute Lagrange polynomials on its own (i.e. it’s not too heavy).
Permutation check
Cosets
Quotient polynomial
To explain what a quotient polynomial is, let’s represent as . Then we say that is the quotient polynomial of and , while is the reminder. Using quotient polynomials, one can check in a simple way if is a root of a specific polynomial. Following the notations we introduced above, if is really a root of , then can be divided by and as a result we will get another polynomial .
n-th roots of unity
An -th root of unity is a complex number such that when raised to some positive integer power equals one: . -th roots of unity is defined as a set of all such numbers: where is the set of complex numbers. A complex number is defined as such that , where refers to the real number part and to the imaginary part. can be represented as a unit circuit:
A set of complex numbers includes all numbers of such form: .
Roots of unity are often used to construct cosets because they are conveniently decomposable into cosets.
Polynomial commitment
Polynomial commitment allows a committer to commit to a polynomial with a short string that can be used by a verifier to confirm claimed evaluations of the committed polynomial.
There are different types of polynomial commitments, but in the context of Plonk-ish arithmetization, we are especially interested in the KZG commitment (pairing-based). A nice property of KZG is that it is additively homomorphic. That is, if is the commitment of and is the commitment of , then if the commitment of .
Circuit
where stands for “wire” and stands for “selector.” The depth of the table equals the number of gates .
For those feeling like ready to go one level deeper – check the book “Programmable Cryptography” by 0xPARC. Chapters on snark (Plonk) are absolutely awesome.