In this section, we describe a multi-table variant of the circle FRI low degree test. This variant supports domains of different sizes, thereby avoiding excessive padding overhead.This section does not provide a detailed analysis of how FRI works, but instead focuses on the protocol as implemented in S-two. Analyzing soundness and explaining why FRI works is out of scope. Interested readers are advised to consult “A summary on the FRI low degree test”.
Circle FRI tests the proximity of a function f∈FD over a canonical cosetD of size ∣D∣=2n+β to some polynomial p(x,y) from the polynomial spaceLn′(F). The function f∈FD is represented as a vector of evaluations over the domain D.Here:
F is a field extension of M31
β is the log of blowup B=2β
Ln′(F) is the space of polynomials interpolated by circle FFT, defined as follows:
Ln′(F)=F[x]<2n−1+y⋅F[x]<2n−1Let Ln−1(F)=F[x]<2n−1, then we can represent Ln′(F) as:Ln′(F)=Ln−1(F)+y⋅Ln−1(F)
Why check proximity to a polynomial?The prover sends evaluations of a function to the verifier. However, the verifier does not know if this function is a polynomial, or if it satisfies a pre-specified degree bound. FRI allows the verifier to check that the evaluations sent by the prover are indeed “close” to some polynomial of bounded degree. Here, the verifier only checks for proximity; that is, the verifier accepts even if the evaluations sent by the prover are “close enough” to those of a polynomial of bounded degree. Thus, the evaluations sent by the prover need not be exactly equal to evaluations of some polynomial of bounded degree.
In S-two, we can represent the trace over multiple tables, with each trace table defined for a domain of different size. Thus, we are interested in circle FRI for the multi-table setting. We will now see an adaptation of circle FRI for the multi-table setting using an example. Consider three functions: h0 defined over the domain H0, h1 defined over the domain H1, and h2 defined over the domain H2:h0∈FH0,h1∈FH1,h2∈FH2The domains H0,H1, and H2 are canonical cosets which form a chain using the squaring map π:H0πH1πH2Suppose for the sake of our example, for i in {0,1,2} the domain Hi=D3−i+β, where D3−i+β is a canonical coset of size 23−i+β. For each i in {0,1,2}, we need to check that the functions hi∈FHi are “close” to the polynomial space L3−i′(F). For example, for i=0, we need to check that the function h0 defined over H0=D3+β is close to the polynomial space L3′(F).Circle FRI follows a similar divide-and-conquer strategy as the Circle FFT algorithm. The prover recursively decomposes the functions and folds the odd and even parts using randomness sent by the verifier. This reduction continues until the proximity test of the folded function to the polynomial space is small enough for the verifier to check directly; in this case, the prover sends the folded function directly to the verifier.We reduce the functions up to folded functions evaluated over a domain Hr. For the sake of our example, consider r=2. Then the sequence of domains for circle FRI in the multi-domain setting is as follows:
Figure 1: Sequence of domains for Circle FRI
As shown in the above diagram, we use two different maps, as in the circle FFT algorithm: the projection map πx and the squaring map π. Here, Ii is the “line” domain; for every i in {0,1,2}, Ii=S3−i, where S3−i is the “line” domain of size ∣S3−i∣=∣D3−i∣/2=22−i+β.Using circle FRI, the prover will prove proximity of functions h0 to polynomial space L3′(F), h1 to space L2′(F), and h2 to space L1′(F) by reducing these three checks into a single check i.e. checking proximity of function g2 to the polynomial space L0(F). The verifier will have oracle access to the evaluations h0∈FH0, h1∈FH1, h2∈FH2. The protocol proceeds as follows.
Round 0: The prover will decompose the function h0 over the domain H0 into two functions h0,0,h0,1 over the domain I0 as follows
h0(x,y)=h0,0(x)+y⋅h0,1(x)The prover will find the evaluations of functions h0,0,h0,1 over the domain I0 using the evaluations of h0 over domain H0 as follows:h0,0(x)=2h0(x,y)+h0(x,−y),h0,1(x)=2yh0(x,y)−h0(x,−y).Note that this decomposition and the process of finding evaluations of the decomposed functions is very similar to the circle FFT algorithm. Now the prover will fold the evaluations of h0,0 and h0,1 over the domain I0 using the randomness \lambda_0 \xleftarrow{\} F$ from the verifier as follows:g0(x)=λ02⋅(h0,0(x)+λ0⋅h0,1(x))The prover commits and gives the verifier oracle access to the evaluations g0∈FI0.
Round 1: The prover will decompose the function h1 over the domain H1 into two functions h1,0,h1,1 over the domain I1, same as the decomposition of h0 in Round 0. The prover will also decompose the function g0 over domain I0 into two functions g0,0 and g0,1 over the domain I1 as follows:
g0(x)=g0,0(2x2−1)+x⋅g0,1(2x2−1)The prover will find the evaluations of functions g0,0 and g0,1 over the domain I1 using the evaluations of g0 over domain I0 as follows:g0,0(2x2−1)=2g0(x)+g0(−x),g0,1(2x2−1)=2xg0(x)−g0(−x).Now the prover will fold the evaluations of h1,0, h1,1, g0,0, and g0,1 over the domain I1 using the randomness \lambda_1 \xleftarrow{\} F$ from the verifier as follows:g1(x)=g0,0(x)+λ1⋅g0,1(x)+λ12⋅(h1,0(x)+λ1⋅h1,1(x))The prover commits and gives the verifier oracle access to the evaluations g1∈FI1.
Round 2: This round is very similar to Round 1. The prover will decompose h2 into h2,0 and h2,1, then decompose the function g1 into g1,0 and g1,1. Then fold all their evaluations as follows:
g2(x)=g1,0(x)+λ2⋅g1,1(x)+λ22⋅(h2,0(x)+λ2⋅h2,1(x))This is the final round, so the prover will send g2(x)∈FI2 to the verifier in plain.Let us describe the protocol for the general case. In each round i={0,…,r}, the prover has previous evaluations gi−1∈FIi−1 (for round i=0 we take g−1=0). The verifier sends \lambda_i \xleftarrow{\} Fandtheprovercommitstog_i \in F^$, defined as follows:gi=gi−1,0+λi⋅gi−1,1+λi2⋅(hi,0+λi⋅hi,1)where gi−1,0,gi−1,1∈FIi are the decomposition of gi−1∈FIi−1 and hi,0,hi,1∈FIi are the decompositions of hi∈FHi. The prover gives the verifier oracle access to gi, and in the final round gr is sent in plain.
Query Phase: In the query phase, the verifier checks that the prover computed the folding correctly using the oracles sent by the prover. It consists of s≥1 rounds. In each round, the verifier samples P0=(x0,y0)∈H0, and queries the oracles for their values to spot-check the folding identities along the projection trace Pi=(xi,yi)=πi(x0,y0). That is, for all i={0,1,2} the verifier checks that:gi(xi)=2gi−1(xi−1)+gi−1(−xi−1)+λi⋅2⋅xi−1gi−1(xi−1)−gi−1(−xi−1)+λi2⋅(2hi(xi,yi)+hi(xi,−yi)+λi⋅2⋅yihi(xi,yi)−hi(xi,−yi))If in each of the query rounds all spot-checks hold, and if g2∈FI2 is “close” to the polynomial space L0, then the verifier accepts. Otherwise, it rejects.
In this section, we analyze the security of the FRI protocol at a high level. There are roughly two ways a prover can cheat:
The functions hi∈FHi are “far” from the polynomial space L3−i′(F) but somehow the prover gets lucky and ends up with g2∈L0. The proximity gaps paper analyzes that this happens with negligible probability. That is, if even one of the functions hi∈FHi is “far” from the polynomial space L3−i′(F), then the function g2 will be “far” from L0 with high probability.
Now suppose hi∈FHi are “far” from the polynomial space L3−i′(F), then the function g2 will be “far” from L0, but to cheat the verifier, the prover cheats in the folding rounds and sends some valid g2∈L0. Now the verifier must ensure that the prover has performed the folding correctly in each round using the oracles sent by the prover. This is exactly what the verifier checks in the query phase. From the “Toy Problem Conjecture” (ethSTARK, Section 5.9), each query done by the verifier gives β (i.e. log of blowup B) bits of security. Thus, for s queries, the security is s⋅β bits.