Varun Thakore

Circle STARKs: Arithmetizing Circles

This is Part IV of a four-part series on Circle STARKs. The original appeared on the ZK Security blog.


Recap#

  • In Part I, we motivated Mersenne prime fields for fast modular arithmetic and detailed why the non-smooth multiplicative group prevents STARK instantiations.
  • In Part II, we described the circle curve and the domains: twin-coset and standard position cosets. We also described polynomials over the circle curve and constructed vanishing polynomials over the two domains.
  • In Part III, we described the Circle FFT algorithm as a Cooley–Tukey style algorithm that lets us move between evaluation and coefficient representations of bivariate polynomials over the circle curve. We also defined the basis induced by the Circle FFT algorithm and the dimension gap between the space of bivariate polynomials over the circle curve and the space of polynomials interpolated by Circle FFT.

Introduction#

This final post stitches everything together we built in Parts I–III. Our goal is to show how those ingredients combine into a complete Circle STARK.

We begin by describing the arithmetization over the circle curve. From there we introduce Circle FRI, the low-degree test to ensure polynomials satisfy a degree bound. Finally, we walk through the Circle STARK construction.

Arithmetization#

The execution trace is simply the record of the computation: each row captures a step or a clock cycle, each column records the evolution of a register and every entry lives in the Mersenne prime field Fp\mathbb{F}_p. If the computation has NN cycles and operates on ww registers then the trace table is of size N×wN \times w. Arithmetization is encoding the local transition rules of this table as polynomial identities that hold over the entire domain, so that reasoning about the computation reduces to checking evaluations of polynomials.

We define our computation in terms of a trace table with N=2nN = 2^n rows and ww columns. Each cell in this table is an element from Fp\mathbb{F}_p. We can define the entire trace using ww column vectors:

t1,…,tw∈FpNt_1,\ldots,t_w \in \mathbb{F}_p^N

Suppose HH is a standard position coset of size N=2nN = 2^n. We will interpolate each trace column tit_i over the trace domain HH using Circle FFT to obtain bivariate polynomials pip_i over the circle curve. The polynomials pip_i belong to the space of bivariate polynomials over the circle curve i.e.

pi∈LN(Fp),i=1,…,wp_i \in L_N(\mathbb{F}_p), \qquad i = 1,\ldots,w

The prover commits to the column polynomials pip_i by committing to their evaluations over an evaluation domain DD which is a factor 2B2^B larger in size than the trace domain HH i.e.

∣D∣∣H∣=2B,∣D∣=2B+n \frac{|D|}{|H|} = 2^B, \qquad |D| = 2^{B+n}

where B≥1B \geq 1. The evaluations of pip_i over the evaluation domain DD are committed using a Merkle tree.

Now we want to add constraints over the trace table. Suppose we add a total of CC constraints. For simplicity, we only describe constraints over the neighboring rows as follows:

Pj(sj,p1,…,pw,p1∘TG,…,pw∘TG)=0,j=1,…,C P_j \big(s_j, p_1,\ldots,p_w, p_1 \circ T_G,\ldots,p_w \circ T_G \big) = 0, \qquad j = 1,\ldots,C

Here, pi∘TGp_i \circ T_G denotes translation by the generator GG on the column polynomial pip_i, where TG(P)=G⋅PT_G(P) = G \cdot P. The trace domain is a coset H=Q⋅GnH = Q\cdot G_n, where GnG_n is a subgroup of size N=2nN=2^n and QQ is an offset. Each column pip_i is interpolated over the trace domain HH represented as:

H=Q⋅Gn={Q,Q⋅G,Q⋅G2,…,Q⋅G2n−1} H = Q\cdot G_n = \{Q, Q \cdot G, Q \cdot G^2, \ldots, Q \cdot G^{2^n-1}\}

Thus pi∘TGp_i \circ T_G pulls in the “next row” of the trace. The constraints PjP_j are polynomials defined in terms of the column polynomials pip_i and a predefined selector polynomial sjs_j which determines the rows on which the constraint PjP_j should apply.

Note

What do these selector polynomials sjs_j look like?

Which polynomial space do they belong to?

Suppose we want to apply the constraint PjP_j on the subdomain Hj⊂HH_j \subset H. Then the selector polynomial sjs_j should evaluate to some non-zero value for points in HjH_j and zero value for points in H∖HjH \setminus H_j. Another way to describe sjs_j is that it should vanish outside HjH_j. They are defined as follows:

sj=vHvHj s_j = \frac{v_H}{v_{H_j}}

where vHv_H and vHjv_{H_j} are the vanishing polynomials for HH and HjH_j, respectively.

Even though sjs_j is defined as a rational function, on the circle curve it is a polynomial. The reason is that the global vanishing polynomial vHv_H vanishes on the smaller domain vHjv_{H_j}, so vHv_H is divisible by vHjv_{H_j}. As a result, the ratio vH/vHjv_H/v_{H_j} has no poles. For more details refer Lemma 10, Circle STARKs.

We know that deg⁡(vH)=2n−1=N/2\deg{(v_H)} = 2^{n-1} = N/2 and vH∈LN(Fp)v_H \in L_N(\mathbb{F}_p) (refer to Dimension Gap, Part III). Thus sjs_j also belongs to the polynomial space LN(Fp)L_N(\mathbb{F}_p).

Now rather than proving all the CC constraints separately, we batch them into a single one. The verifier chooses a random β\beta from the extension field F\mathbb{F} of Fp\mathbb{F}_p. The prover computes the following:

∑j=1Cβi−1Pj(sj,p1,…,pw,p1∘TG,…,pw∘TG)=0 \sum_{j=1}^{C} \beta^{i-1} P_j\big(s_j,p_1,\ldots,p_w,p_1 \circ T_G,\ldots,p_w \circ T_G\big) = 0

In order to prove validity of the above identity over the entire trace domain HH, the prover computes the quotient polynomial qq as follows:

∑j=1Cβi−1Pj(sj,p1,…,pw,p1∘TG,…,pw∘TG)=q⋅vH \sum_{j=1}^{C} \beta^{i-1} P_j\big(s_j,p_1,\ldots,p_w,p_1 \circ T_G,\ldots,p_w \circ T_G\big) = q \cdot v_H

Such a quotient qq must exist because if all constraints are satisfied throughout HH, the left-hand side vanishes on HH and is therefore divisible by vHv_H.

Note

What is the degree of the quotient polynomial qq?

Which polynomials space does it belong to?

Let the degree of each PjP_j be atmost dd. The polynomials

sj,pi,…,pw,pi∘T,…,pw∘Ts_j, p_i, \ldots, p_w, p_i \circ T, \ldots, p_w \circ T

are in the space LN(Fp)L_N(\mathbb{F}_p) with maximum degree N/2N/2. Thus the maximum degree of the left-hand side of the following expression is dN/2dN/2.

∑j=1Cβi−1Pj(sj,p1,…,pw,p1∘TG,…,pw∘TG)=q⋅vH\sum_{j=1}^{C} \beta^{i-1} P_j\big(s_j,p_1,\ldots,p_w,p_1 \circ T_G,\ldots,p_w \circ T_G\big) = q \cdot v_H

Now the degree of vHv_H is N/2N/2. Thus the degree of qq is (d−1)N/2(d-1)N/2 and qq is in the polynomial space q∈L(d−1)N(F)q \in L_{(d-1)N}(\mathbb{F}). Note that qq is over the extension field F\mathbb{F}, since β\beta is sampled from F\mathbb{F}.

Now the prover will have to prove that the columns polynomials pip_i are of degree ≤N/2\leq N/2 and the quotient polynomial qq is of degree ≤(d−1)N/2\leq (d-1)N/2. To make the degree bound uniform (i.e. ≤N/2\leq N/2) across all the polynomials, the quotient polynomial q∈L(d−1)N(F)q \in L_{(d-1)N}(\mathbb{F}) is split into polynomials q1,…,qd−1∈LN(F)q_1, \ldots, q_{d-1} \in L_N(\mathbb{F}) as follows:

q=λ⋅vHˉ+∑k=1d−1vHˉvHk⋅qk q = \lambda \cdot v_{\bar{H}} + \sum_{k=1}^{d-1} \frac{v_{\bar{H}}}{v_{H_k}} \cdot q_k

where Hˉ=⋃k=1d−1Hk\bar{H} = \bigcup_{k=1}^{d-1} H_k is a disjoint union of twin-cosets of size ∣Hk∣=N|H_k| = N.

Note

Intuition on the decomposition of the quotient polynomial qq

The quotient polynomial qq belongs to the space L(d−1)N(F)L_{(d-1)N}(\mathbb{F}) which has dimension (d−1)N+1(d-1)N + 1. The decomposition of qq follows from the decomposition of polynomial space L(d−1)N(F)L_{(d-1)N}(\mathbb{F}) which can be decomposed as follows:

L(d−1)N(F)=⟨vHˉ⟩+L(d−1)N′(F) L_{(d-1)N}(\mathbb{F}) = \langle v_{\bar{H}} \rangle + L'_{(d-1)N}(\mathbb{F})

where the space L(d−1)N′(F)L'_{(d-1)N}(\mathbb{F}) is of dimension (d−1)N(d-1)N.

The above decomposition is very similar to the decomposition of LN(F)L_N(\mathbb{F}) in Dimension Gap, Part III.

LN(F)=⟨vn⟩+LN′(F) L_{N}(\mathbb{F}) = \langle v_{n} \rangle + L'_{N}(\mathbb{F})

Now we can further decompose polynomials from space L(d−1)N′(F)L'_{(d-1)N}(\mathbb{F}) as (d−1)(d-1) polynomials from the space LN′(F)L'_{N}(\mathbb{F}) combined with some basis of L(d−1)N′(F)L'_{(d-1)N}(\mathbb{F}) over LN′(F)L'_{N}(\mathbb{F}) i.e. qkq_k are the (d−1)(d-1) polynomials from the space LN′(F)L'_{N}(\mathbb{F}) and vHˉvHk\frac{v_{\bar{H}}}{v_{H_k}} are the basis of L(d−1)N′(F)L'_{(d-1)N}(\mathbb{F}) over LN′(F)L'_{N}(\mathbb{F}).

This gives an intuition on the decomposition of the quotient polynomial qq. For complete proof, please refer Lemma 12, Circle STARKs.

Thus the prover has to prove the validity of the following equation:

∑j=1Cβi−1Pj(sj,p1,…,pw,p1∘TG,…,pw∘TG)=?(λ⋅vHˉ+∑k=1d−1vHˉvHk⋅qk)⋅vH(1) \sum_{j=1}^{C} \beta^{i-1} P_j\big(s_j,p_1,\ldots,p_w,p_1 \circ T_G,\ldots,p_w \circ T_G\big) \stackrel{?}{=} \bigg(\lambda \cdot v_{\bar{H}} + \sum_{k=1}^{d-1} \frac{v_{\bar{H}}}{v_{H_k}} \cdot q_k\bigg) \cdot v_H \tag{1}

and prove that the polynomials pip_i, qkq_k are of degree ≤N/2\leq N/2. We will now describe Circle FRI to prove the latter.

Circle FRI#

Circle FRI tests the proximity of a function f∈FDf \in \mathbb{F}^D over the evaluation domain DD of size ∣D∣=2n+B|D|=2^{n + B} to some polynomial p(x,y)p(x, y) from the polynomial space LN(F)L_N(\mathbb{F}). The function f∈FDf \in \mathbb{F}^D is represented as a vector of evaluations over the domain DD.

Here:

  • F\mathbb{F} is a field extension of Fp\mathbb{F}_p
  • BB is the log of blowup factor 2B2^B
  • LN(F)L_N(\mathbb{F}) is the space of bivariate polynomials over the circle curve, which can be decomposed as follows (as described in Dimension Gap, Part III): LN(F)=LN′(F)+⟨vn⟩ L_N(\mathbb{F}) = L'_N(\mathbb{F}) + \langle v_n \rangle

Note

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.

Circle FRI follows a similar divide-and-conquer strategy as the Circle FFT algorithm. The prover recursively decomposes the function 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.

The following figure shows the sequence of domains for the circle FRI algorithm with rr folding rounds using a chain of 22-to-11 maps. Circle FRI Domains

As shown in the above diagram, we use two different maps, as in the circle FFT algorithm: the projection map πx\pi_x and the squaring map π\pi. The protocol starts with a standard position coset DmD_m of size 2m2^m where m=B+nm = B+n and then takes projection onto the xx-axis using map πx\pi_x to compute the quotient Dm/JD_m/J. Then subsequently apply the map π\pi for (r−1)(r-1) rounds to get the quotient Dm−r+1/JD_{m-r+1}/J with 2m−r2^{m-r} elements. To know more about these maps, please refer Sequence of Domains for Circle FFT, Part III. For notational convenience, we have defined the domain and map for the jjth round as SjS_j and πj\pi_j, respectively.

At each step of Circle FRI, the prover will decompose and fold functions over the sequence of domains as described above. But before folding, the prover decomposes f∈LN(F)f \in L_N(\mathbb{F}) as:

f=g+λ⋅vn, f = g + \lambda \cdot v_n,

where gg is from the FFT space LN′(F)L'_N(\mathbb{F}), λ∈F\lambda \in \mathbb{F}, and vnv_n is the vanishing polynomial of the standard position coset of size N=2nN = 2^n. This reduces the proximity claim of ff to LN(F)L_N(\mathbb{F}) to that of gg to the FFT space LN′(F)L'_N(\mathbb{F}), which is checked through repeated folding of gg.

We start with the proximity claim of g=g0∈FS0g = g_0 \in \mathbb{F}^{S_0} to the FFT space L(0)=LN′(F)L^{(0)} = L'_N(\mathbb{F}). In each round j=1,…,rj = 1, \ldots, r, we reduce the previous proximity claim of gj−1∈FSj−1g_{j-1} \in \mathbb{F}^{S_{j-1}} to L(j−1)L^{(j-1)} to a new proximity claim of gj∈FSjg_{j} \in \mathbb{F}^{S_{j}} to the FFT space L(j)L^{(j)} where

L(j)=F[X]<N/2j L^{(j)} = \mathbb{F}[X]^{< N/2^j}

We will now explain the complete protocol and the above reduction in detail. The prover has a function f∈FDf \in \mathbb{F}^D and the verifier is given an oracle to ff. The protocol consists of a commit phase and a query phase.

Commit Phase#

  • Decomposition: The prover decomposes f=g+λ⋅vnf = g + \lambda \cdot v_n and send λ\lambda to the verifier.
  • Folding: The prover holds the function g=g0∈FS0g = g_0 \in \mathbb{F}^{S_0} which it wants to prove proximity to L(0)=LN′(F)L^{(0)} = L'_N(\mathbb{F}).
    • For the first round of folding i.e. j=1j=1,
      • The verifier sends a random challenge λ1∈F\lambda_1 \in \mathbb{F}.
      • The prover decomposes the function g0g_0 using the map π1=πx\pi_1 = \pi_x as follows: g0(X,Y)=g0,0(π1(X,Y))+Y⋅g0,1(π1(X,Y)) g_0(X, Y) = g_{0,0}(\pi_1(X, Y)) + Y \cdot g_{0,1}(\pi_1(X, Y)) g0(X,Y)=g0,0(X)+Y⋅g0,1(X) g_0(X, Y) = g_{0,0}(X) + Y \cdot g_{0,1}(X) where g0,0,g0,1∈FS1g_{0,0}, g_{0,1} \in \mathbb{F}^{S_1} are as follows: g0,0(X)=g0(X,Y)+g0(X,−Y)2,g0,1(X)=g0(X,Y)−g0(X,−Y)2⋅Y g_{0,0}(X) = \frac{g_0(X, Y) + g_0(X, -Y)}{2}, \quad g_{0,1}(X) = \frac{g_0(X, Y) - g_0(X, -Y)}{2 \cdot Y} As we have seen in Dimension Gap, Part III, we can also decompose the space of polynomials interpolated by Circle FFT LN′(F)L'_N(\mathbb{F}) as: LN′(F)=F[X]<N/2+Y⋅F[X]<N/2 L'_N(\mathbb{F}) = \mathbb{F}[X]^{< N/2} + Y \cdot \mathbb{F}[X]^{< N/2} Thus we have reduced the task of checking proximity of g0g_0 to L(0)=LN′(F)L^{(0)} = L'_N(\mathbb{F}) to checking proximity of g0,0g_{0,0} and g0,1g_{0,1} to L(1)=F[X]<N/2L^{(1)} = \mathbb{F}[X]^{< N/2}. But rather than checking two proximity claims, we fold them into a single proximity claim using the random challenge λ1\lambda_1 from the verifier. g1(X)=g0,0(X)+λ1⋅g0,1(X)(2) g_1(X) = g_{0,0}(X) + \lambda_1 \cdot g_{0,1}(X) \tag{2} Thus after first round, we have reduced the proximity claim of g0∈FS0g_0 \in \mathbb{F}^{S_0} to L(0)=LN′(F)L^{(0)} = L'_N(\mathbb{F}) to that of g1∈FS1g_1 \in \mathbb{F}^{S_1} to L(1)=F[X]<N/2L^{(1)} = \mathbb{F}[X]^{< N/2}.
    • For subsequent rounds i.e. j=2,…,rj=2, \ldots, r we use the same procedure. The only difference is that we use the squaring map π\pi in each round i.e. πj=π\pi_j = \pi. For the jjth round,
      • The verifier sends a random challenge λj∈F\lambda_j \in \mathbb{F}.
      • The prover decomposes the function gj−1∈FSj−1g_{j-1} \in \mathbb{F}^{S_{j-1}} from the previous round as: gj−1(X)=gj−1,0(πj(X))+X⋅gj−1,1(πj(X)) g_{j-1}(X) = g_{j-1,0}(\pi_j(X)) + X \cdot g_{j-1,1}(\pi_j(X)) gj−1(X)=gj−1,0(2X2−1)+X⋅gj−1,1(2X2−1) g_{j-1}(X) = g_{j-1,0}(2X^2 - 1) + X \cdot g_{j-1,1}(2X^2 - 1) where gj−1,0,gj−1,1∈FSj−1g_{j-1,0}, g_{j-1,1} \in \mathbb{F}^{S_{j-1}} are as follows: gj−1,0(2X2−1)=gj−1(X)+gj−1(−X)2,gj−1,1(2X2−1)=gj−1(X)−gj−1(−X)2⋅X g_{j-1,0}(2X^2 - 1) = \frac{g_{j-1}(X) + g_{j-1}(-X)}{2}, \quad g_{j-1,1}(2X^2 - 1) = \frac{g_{j-1}(X) - g_{j-1}(-X)}{2 \cdot X} The prover folds the functions gj−1,0,gj−1,1∈FSjg_{j-1,0}, g_{j-1,1} \in \mathbb{F}^{S_j} as follows: gj(X)=gj−1,0(X)+λj⋅gj−1,1(X)(3) g_j(X) = g_{j-1,0}(X) + \lambda_j \cdot g_{j-1,1}(X) \tag{3} Thus after jjth round, we have reduced the proximity claim of gj−1∈FSj−1g_{j-1} \in \mathbb{F}^{S_{j-1}} to L(j−1)=F[X]<N/2j−1L^{(j-1)} = \mathbb{F}[X]^{< N/2^{j-1}} to that of gj∈FSjg_j \in \mathbb{F}^{S_j} to L(j)=F[X]<N/2jL^{(j)} = \mathbb{F}[X]^{< N/2^j}.
    • For each round, the prover sends an oracle for gjg_j to the verifier. In the final round, the prover sends gr∈FSrg_{r} \in \mathbb{F}^{S_{r}} in plain which the verifier can directly check the proximity claim of grg_{r} to the polynomial space L(r)L^{(r)}.

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≥1s \geq 1 rounds. In each round:

  • The verifier samples (x0,y0)∈D(x_0, y_0) \in D and applies each map to the element (x0,y0)(x_0, y_0) to get an element of each domain along the projection trace, shown as follows: xj=πj(xj−1),for j∈{1,…,r} x_j = \pi_j(x_{j-1}), \qquad \text{for } j \in \{1, \ldots, r\} Then the verifier queries the oracles for values of ff and gjg_j on the points along the above projection trace.
  • The verifier checks the first folding round i.e. equation (2)(2) at (x0,y0)(x_0, y_0) as follows. Note that here X1=π1(x0)=x0X_1 = \pi_1(x_0) = x_0, since π1\pi_1 is the projection map πx\pi_x. g1(x0)=?(g0(x0,y0)+g0(x0,−y0)2)+λ1⋅(g0(x0,y0)−g0(x0,−y0)2⋅y0) g_1(x_0) \stackrel{?}{=} \Bigg( \frac{g_0(x_0, y_0) + g_0(x_0, -y_0)}{2} \Bigg) + \lambda_1 \cdot \Bigg( \frac{g_0(x_0, y_0) - g_0(x_0, -y_0)}{2 \cdot y_0} \Bigg)
  • The verifier checks equation (3)(3) for subsequent folding rounds i.e. for all j={2,…,r}j = \{2, \ldots, r\} check: gj(xj)=?(gj−1(xj−1)+gj−1(−xj−1)2)+λj⋅(gj−1(xj−1)−gj−1(−xj−1)2⋅xj−1) g_j(x_j) \stackrel{?}{=} \Bigg( \frac{g_{j-1}(x_{j-1}) + g_{j-1}(-x_{j-1})}{2} \Bigg) + \lambda_j \cdot \Bigg( \frac{g_{j-1}(x_{j-1}) - g_{j-1}(-x_{j-1})}{2 \cdot x_{j-1}} \Bigg)

If all the above checks pass for all rounds ss then the verifier accepts, otherwise reject.

Security Analysis#

In this section, we give some intuition on the security of the FRI protocol. There are roughly two ways a prover can cheat:

  • The function f∈FDf \in \mathbb{F}^D is “far” from the polynomial space LN(F)L_N(\mathbb{F}) but somehow the prover gets lucky and ends up with grg_r which is “close” to L(r)L^{(r)}. The proximity gaps paper analyzes that this happens with negligible probability. That is, if even one of the functions ff is “far” from the polynomial space LN(F)L_N(\mathbb{F}), then the function grg_r will be “far” from L(r)L^{(r)} with high probability.
  • Now suppose f∈FDf \in \mathbb{F}^D is “far” from the polynomial space LN(F)L_N(\mathbb{F}), then the function grg_r will be “far” from L(r)L^{(r)}, but to cheat the verifier, the prover cheats in the folding rounds and sends some valid gr∈L(r)g_r \in L^{(r)}. 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 BB (i.e. log of blowup 2B2^B) bits of security. Thus, for ss queries, the security is s⋅Bs \cdot B bits.

Circle STARKs#

In this section, we will combine all the ideas we have covered so far in this series to construct the Circle STARK protocol. Given the trace table as ww columns of length N=2nN = 2^n i.e.

t1,…,tw∈FpNt_1,\ldots,t_w \in \mathbb{F}_p^N

The protocol proceeds as follows:

  1. Trace Commitment: The prover interpolates each trace column tit_i as a bivariate polynomial pip_i over the trace domain HH using circle FFT. Then evaluates the polynomials pip_i over the evaluation domain DD and commits to the evaluation vector using a Merkle tree. The prover sends the Merkle commitment to evaluations of each pip_i to the verifier.
  2. Arithmetization: The verifier sends the random β\beta to batch all the constraints. The prover computes qq and decomposes it to obtain λ\lambda and qkq_k polynomials. Each qkq_k is committed over DD like the trace polynomials. The prover sends the Merkle commitment to evaluations of each qkq_k and λ\lambda to the verifier. Now the prover has to prove validity of equation (1)(1) i.e. ∑j=1Cβi−1Pj(sj,p1,…,pw,p1∘TG,…,pw∘TG)=?(λ⋅vHˉ+∑k=1d−1vHˉvHk⋅qk)⋅vH \sum_{j=1}^{C} \beta^{i-1} P_j\big(s_j,p_1,\ldots,p_w,p_1 \circ T_G,\ldots,p_w \circ T_G\big) \stackrel{?}{=} \bigg(\lambda \cdot v_{\bar{H}} + \sum_{k=1}^{d-1} \frac{v_{\bar{H}}}{v_{H_k}} \cdot q_k\bigg) \cdot v_H
  3. Opening: The above identity is checked on an out-of-domain point on the circle over the extension field. The verifier samples γ∈C(F)∖(D∪H)\gamma \in C(\mathbb{F}) \setminus (D \cup H) and requests openings of pip_i and qkq_k from the prover. The prover responds with claimed values vi,0,vi,1v_{i,0}, v_{i,1} of pip_i at the points γ\gamma and TG(γ)T_G(\gamma), respectively, for each i=1,…,wi = 1, \dots, w, as well as the values v1,…,vd−1v_1, \dots, v_{d-1} of q1,…,qd−1q_1, \dots, q_{d-1} at γ\gamma. The verifier checks the identity using these claimed values. Note that other values like evaluations of the vanishing polynomials can be succinctly computed by the verifier.
  4. Low-Degree Test: The prover and verifier engage in a low-degree test on the following quotients using the Circle FRI protocol. pi−vi,0vγ,  pi−vi,1vTG(γ),  qk−vkvγ \frac{p_i - v_{i,0}}{v_\gamma},\; \frac{p_i - v_{i,1}}{v_{T_G(\gamma)}}, \; \frac{q_k - v_{k}}{v_\gamma} where vγv_\gamma and vTG(γ)v_{T_G(\gamma)} are the vanishing polynomials over γ\gamma and TG(γ)T_G(\gamma), respectively. All the above proximity tests can be batched into a single proximity test using randomness from the verifier. If the proximity test passes and if the claimed values satisfy the overall identity, the verifier accepts.

Conclusion#

This final post connected all the ideas from arithmetization, quotienting and Circle FRI low-degree test to describe the Circle STARK construction. This concludes the four part series on Circle STARKs.