The Sumchecks
As we've explained, our goal now is to assess the validity of evaluation claims of the form
where is an oblong-multilinearized constraint array. The values , and are known to both the prover and the verifier. In each case, the evaluation points and will be identical across all claims, whereas the claimed evaluations of course won't be.
In this page, we explain how to reduce a plurality of evaluation claims of this form to a single evaluation claim on the multilinearization of the witness. For expository reasons, we explain the case in which there is just one claim. The case in which there are more than one is similar, and we explain inline where it needs to be accommodated. This choice lets us abstract away how many claims there are (there will be 3 at the end of the AND reduction and 4 at the end of the MUL reduction).
Unwinding the description of that we constructed in the last page, and inserting and , we obtain the claim:
As usual, is the multilinearized constraint matrix associated to the constraint array .
A Factorization
At this point, it would be correct to just tell the prover to "run the sumcheck algorithm". The problem is that this sum is enormous: it is over variables. Its raw table of values would thus be something like times as large as the witness, which is absurd and unacceptable.
The essential point for us is that not all variables appear in all functions. If they did, we'd have no choice but to run the standard algorithm. As it happens, though, each function has only some of the variables , , , and . Moreover, the way that these variables are "distributed" allows some very interesting things to happen.
First, note that in each of the three sum expressions above, for each , and , among the four resulting inner polynomials, the and contain but not , while and contain but not . Because of this, we can factor the innermost nested sums over and into a product of two sums, for each , and . In this way, we factorize the above claim as follows:
This wouldn't do us much good, if it weren't for the following further observation. In each of the three expressions above, both bracketed quantities are multilinear in both and .
Indeed, in the left-hand bracketed sum, each summand is multilinear in and , since those variables appear only in and not in ; thus, the entire sum is also multilinear in and . Similarly, in the right-hand bracketed sum, each summand is again multilinear in and , since depends on but not on , while depends on but not on . Thus each summand, and hence the entire sum, is again multilinear in and . We conclude that both bracketed sums are themselves multilinear in and , and we can treat the entire expression above as a sum, over the cube , of a multivariate polynomial in and expressible as the sum of just three products of multilinears (i.e., over varying ).
If this weren't true, then the above multivariate in and would not be expressible as a composition of multilinears in and with reasonable composition functions. Rather, the composition function would be enormous—with , , or even summands—as opposed to just .
The First Phase
The above remarks suggest the following first step. Purely for notation, we introduce some abbreviations. For each , we define two 12-variate multilinears in and :
and
Indeed, both multivariates above in and are above multilinear (we just argued this). By definition, our claim now amounts to:
Thus, the prover can begin by tabulating the tables of values of all six functions and , i.e. for all three . The total resulting data here is of size field elements, or 384 KiB total. In the next page, we talk about how the prover can prepare these tables of values efficiently, exploiting the sparsity of the constraint system.
Pending that problem, we can tell the parties to run the sumcheck above. In the case in which there are multiple constraint arrays at play, there will be one for each array; at this point, the verifier will sample batching scalars for these.
The sumcheck is 12-dimensional, over a sum of three products of multilinears (i.e., taken over ). After 12 rounds, the parties will have reduced the prover's claim to a further claim, say:
for 6-dimensional random scalars and sampled during the sumcheck.
The Second Phase
Rearranging the claim we left off with above, by unwinding what the evaluations mean, we get the identical claim:
We can now view the above expression as a further sumcheckable claim, now over the single -dimensional variable . The entire bracketed expression can be viewed as a single multilinear in ; the partial specialization is of course also multilinear in . Again in the next page, we go into how the prover can tabulate the necessary values efficiently.
For now, we instruct the parties to run an -round sumcheck on the above. After doing that, they wind up with a final claim of the form:
where is a further value sampled during the sumcheck.
The End
We work under the assumption that the verifier can evaluate the entire bracketed quantity himself. We have already talked at great length about how the verifier can efficiently, locally, compute the evaluations himself. Our case is a bit different than what we previously covered, since the verifier will need to evaluate for each , as opposed to just at a single point. But the idea is similar. The verifier can carry out this computation in a way whose cost grows linearly in the size of , and with small constants. The concrete cost is very low.
It remains for the verifier to evaluate for each . At this point, we punt, and use a non-succinct approach. Indeed, there is a straightforward way for the verifier to do this that takes work (we cover this technique in the next page). We plan to support fully succinct verification soon, possibly using the Spark compiler [Set20].
It remains for the verifier to output the single evaluation claim on . This is exactly the kind of thing that our PCS is designed to treat, so this completes our treatment of the shift reduction, at least from the verifier's point of view.