GKR Background
This section describes the basics of GKR, including necessary notation, mathematical concepts, and arithmetization, as well as a high-level description of how proving and verification works in theory.
Notation Glossary
Note that each of these definitions will be described in further detail in the sections to come, but are aggregated here for convenience.
| Symbol | Description |
|---|---|
| A finite field. | |
| Layered arithmetic circuit. | |
| Depth of the circuit . | |
| Layer of the circuit, such that any node on is the result of a computation from nodes in layers and , such that . (Note that the GKR literature conventionally labels its circuit layers backward, from for the input layer to for the output layer for a -layered circuit. We follow this convention in our documentation.) | |
| The value of at node , such that is a label for a node in . We say that has bits. | |
| A function . This is the unique multilinear extension encoding the function | |
| A function: which indicates whether | |
| A function: which indicates whether |
High-level Description
GKR is an interactive protocol which was first introduced by Goldwasser, Kalai, and Rothblum [2008]. It proves the statement that , where is a layered arithmetic circuit, and is the input to the circuit.
At a high-level, it works by reducing the validity of the output of the circuit (typically denoted as layer , , for a circuit with depth ), to the previous layer of computation in the circuit, Eventually, these statements reduce to a claim an evaluation of the input as a polynomial. If the input is encoded as the coefficients of a polynomial , we are left to prove that .
The later sections unpack these reductions, showing how we can reduce the claim that to a polynomial evaluation at a random point.
Why GKR?
GKR has several key advantages when compared with other proof systems:
- Not having to cryptographically commit to the entire "circuit trace":
- In general, proof systems which use e.g. PlonK-ish or R1CS/GR1CS arithmetization require a polynomial commitment to all circuit values.
- The size of this commitment often determines the memory/runtime/proof size/verification time of such systems, as the PCS (rather than the IOP) tends to be the bottleneck re: the aforementioned metrics.
- GKR, on the other hand, does not require a commitment to any "intermediate" values within the circuit, i.e. those which can be computed using addition/multiplication from other values present within the circuit.
- For certain layered circuits (e.g. neural network circuits, where the intermediate activation values "flow" through the model and can be fully computed from the weights and model input), this substantially reduces the number of circuit values which require cryptographic operations (e.g. circuit-friendly hash function, MSM, FFT), reducing the bottleneck which the PCS step normally imposes.
- Natively multilinear IOP which depends almost wholly on sumcheck and other linear, embarrassingly parallel operations -- sumcheck is an extremely fast, field-only primitive which is extremely parallelizable and lends itself to various small field + extension field optimizations, resulting in an extremely fast prover.
- Easy lookup integration with both LogUp and Lasso. The former, in particular, is expressible via a very lovely structured circuit, and is time-optimal within GKR with respect to the number of lookups (linear # of field operations in number of witnesses to be looked up + lookup table size).