Grand Product Argument
The grand product argument handles claims about the product of a polynomial's values over the boolean hypercube. These claims take the form
where is -variate and is a value known to the verifier. The argument reduces these grand product claims to evaluation claims on .
Binius implements the grand product argument using a idea from Thaler [Tha13], which is based on the [GKR15] protocol. GKR is a very useful general technique for verifying the output of highly structured, low-depth arithmetic circuits. In this case, we want to verify the output of a circuit that is a binary tree of multiplication gates, as a means of checking the product of all the circuit's inputs. The GKR protocol requires no additional commitments, making it remarkably efficient for the prover while remaining succinct for the verifier. Under the hood, the GKR protocol progresses layer by layer through the circuit, invoking the sumcheck protocol once per layer.
Background
We have already seen how the sumcheck can transform claims about the sum over the cube of some multivariate polynomial to a claim about the evaluation of that multivariate polynomial. The GKR protocol is a special way of exploiting the sumcheck in a "layered" fashion. That is, we set up a sort of layered circuit or tree. Each layer of that tree is defined elementwise as a sum over the layer below it. Thus to go from one layer to the one beneath it, we need to run a sumcheck, to "peel off" that layer. We end up running as many sumchecks as there are layers in the entire tree.
This technique is very powerful, since many computations of interest can be expressed as layered circuits or trees. As it turns out, multiplication is one of them—and gives us one of our simplest (and most important) applications of GKR.
The Setup
Let's again write for our -variate multilinear of interest (itself perhaps virtual). Again, the public data is ; our claim is that .
The idea is very simple: both the prover and verifier will imagine a height-, perfectly balanced binary tree. In the leaves, we will inscribe the values for varying (i.e., the leaf layer will be just itself). For each internal layer , we will have exactly node values to fill in; we will call these , where here varies. In fact, for each , we will recursively write in the node value . In other words, each internal node will be the product of its two children.
Following this idea to its root (pardon the pun), we see easily that the root of this tree will be , or itself if the prover is honest. Technically, we should have ( is a "-variate multilinear", or in other words a constant).
Unwinding GKR Layers
Now this hasn't gotten us much so far. The key point, though, is that the verifier can use the sumcheck to reduce a claim about one layer to a claim about the layer below it. The master claim that the verifier wants to check is a claim about the very top, 0th layer (namely, that ). If the verifier has the ability to repeatedly unwind claims like this, then it may proceed straight down to the leaf layer, at which point it will arrive upon an evaluation claim about itself, which is what we wanted.
The fact that saves us is that the relationship between each layer and the one below it is algebraic. Thus, for each , since, for each , holds by fiat, 's multilinear extension equals:
Each evaluation claim of the form , say, thus amounts to a sum claim on the -variate, degree-3 multivariate polynomial:
This is exactly the kind of thing we can sumcheck; upon doing so, the verifier will reduce the initial claim to a further claim of the form
for some point sampled during the sumcheck. The verifier may evaluate itself. As for the others, up to nondeterministically receiving claimed evaluations and from the prover, the verifier can sample a further random challenge , and output the reduced evaluation claim .
Thus we've gotten what we wanted: our new evaluation claim is that . Here, the parties mutually set and , just as the verifier did above.
The End
By proceeding this way throughout rounds, the verifier may thus reduce its initial claim to the evaluation claim . Since is virtual, we agreed already that the verifier will have a way of evaluating it.
Evaluating a virtual polynomial can be complicated, though: a fact which brings us to our next page, evalcheck.