---
# System prepended metadata

title: Sumcheck protocol and another protocol based on Sumcheck.

---

# Sumcheck protocol and another protocol based on Sumcheck. 
This is my note about sumcheck protocol and another protocol based on sumcheck. 

## I. Sumcheck protocol (LFKN92)
### 1.1 What is the problem sumcheck protocol solve? 

Fix a finite filed $F$ and a subset $H \subseteq F$. The 2 party prover $P$ and verifier $V$ and $m$-variable polynomial $f: F^{m} \rightarrow F$ have degree $\leq d$ and ($d \lt\lt |F|$).

Prover want to convince verifier: 

$$ 
    \sum_{z_1 \in H, z_2 \in H,..z_n \in H}^{} g(z_1,z_2,...,z_n) = s \  (*)
$$

with constant $s \in F$. Verifier $V$ have limit computation power. Prover $P$ have unbound computation power.

We denote protocol by $(P(f), V^f(s))$

### 1.2 Protocol
How we prover can prove $(*)$ it to verifier? They use very clever protocol call sumcheck protocol. Protocol work follow schema below: 

1. Prover $P$ send function $f_1(x) = g(x, z_2,...,z_n)$ to verifier $V$
2. Verifier $V$ check $\sum_{v \in H} f_1(v) = s$.
3. Verifier $V$ sample a random number $r1$ on $F$ and send it to prover $P$. 
4. Prover $P$ repleace $x_1$ with number $r_1$ and free $z_2$ by variable $x$ we function $f_2(x) = g(r_1, x, z_3,...,z_n)$. 
5. Repeat step 1 to 4 with the new $s = f_i(r_i)$. 
6. And the last round when $i = n$ we check $f(r_1,r_2..., r_n) = f_n(r_n)$. 


The protocol success if any check this mean $(*)$ is true, vice versa $(*)$ is not true.

### 1.3 Complexity 

Let $deg(f)$ denote degree of polynomial $f$. 

Because prover have unbound compution power, so we don't create about it in this case.
For verifier we have runtime complexity = $O_V(\sum_{i=1}^{n}deg(f_i))$ and 1 evaluate $g$. 
And communicate complexity = $O(\sum_{i}^n deg(f_i))$.

### 1.4 Completeness and Soundness
* **Completeness**: if   $\sum_{z_1 \in H, z_2 \in H,..z_n \in H}^{} g(z_1,z_2,...,z_n) = s$ then
$$
Pr[(P(f), V^f(s)) = 1] = 1
$$

* **Soundness**: if   $\sum_{z_1 \in H, z_2 \in H,..z_n \in H}^{} g(z_1,z_2,...,z_n) \neq s$ then 
$$
Pr[(P(f), V^f(s)) = 1] \leq \frac{dn}{|F|}
$$

**Proof**:



## II.  GKR protocol (GKR15) 

### 1.1 Problem 

Let circuit C be a $d$ depth layer citcuit composed by 2 fan-in gate: addition and multiplication. Layer $d$ is input and layer 0 is output. 

Example, the circuit below is have $d = 3$: 

![](https://i.imgur.com/c2qs1aS.png)

We also have 2 party prover and verifier and prover wants to prove to the verifier the that their computation on C is valid.

For easy to compute we assume the size of each layer is equal each other and echo $n$.
### 1.2 Protocol

We index the circuit by binary representation for each layer from left to right. 

We assume:
- $V_i(p): \{0, 1\}^n \rightarrow F$ is function compute value at gate $p$ from 2 gates at lower layer.
- $mul(p, u, v)$ return 1 if u, v is in gates p and p is multiplication gate, 0 if not. 
- $add(p, u, v)$ return 1 if u, v is in gates of p and p is addition gate, 0 if not. 
- $\beta(p, q)$ equal 1 if $p = q$ and equal 0 if $p \neq q$.
We can easy to see: 

$$
V_i(p) = \sum_{q, u, v \in \{0, 1\}^{log_2n}}\beta(p, q) * (V_{i+1}(u) + V_{i+ 1}(v)) * add(p, u, v) + V_{i+1}(u) * V_{i+1}(v) * mul(p, u, v)
$$

Let call $f_i(p, u, v) = (V_{i+1}(u) + V_{i+1}(v)) * add(p, u, v) + V_{i+1}(u) * V_{i+1}(v) * mul(p, u, v)$

So we have:

$$
V_i(p) = \sum_{u, v, q \in \{0, 1\}^{log_2n}} \beta(p, q)* f(p, u, v) \space \space(**)
$$

Note u,v, p, q is binary representation

We want to verify the computation on $V_i$ is true for each gate. But verifier don't want to eval $(**)$ because this is heavy computation.

Wait... we can use sumcheck protocol to verify the correctness of this computation. However the last verify of sumcheck protocol(check step 6) is compute $\beta(p, r_3) * f(p, r_1, r_2)$ which $r_1, r_2, r_3$ is random number choose by verifier. Verifier need to evaluate $V_{i+1}(r_1)$ and  $V_{i+1}(r_2)$. This computation actually recompute the circuit, this mean verifier can't do that. Instead of prover will send $s_1, s_2$ is result of $V_{i +1}(r_1)$ and  $V_{i+1}(r_2)$. We will do sumcheck again on the layer i + 1 over $V_{i +1}(r_1) = s_1$ and  $V_{i+1}(r_2) = s_2$. 

Everything look good right now, but we have a new problem. After we do sumcheck for one layer the number of fomula we do sumcheck will be double. Example: The first layer do 1 sumcheck, the second layer will do 2 sum check, the third layer will do 4 sumcheck, ... The n-th layer will do $2^n$ sumcheck. We want to improve the complexity. Let find the way to **reduce 2 sumcheck to 1 sumcheck**. 

Let fixed $t_1, t_2$ we have function $\gamma: F \rightarrow F^m$ be a unique line such that $\gamma(t_1) = r_1$ and $\gamma(t_2) = r_2$. Example we can fix $t_1 = 0, t_2 = 1$, then $\gamma(t) = (1 - t) *r_1 + t * r_2$.

Call $f = V_i \circ \gamma$, Prover send $f$ to verifier. Verifier will will check $f(t_1) = s_1$ and $f(t_2) = s_2$. If sumcheck pass, verifier will sample a random number $t$ and sent it to prover. We continue protocol with proof $p = \gamma(t), s = f(t)$ on the next layer. 

### 1.3 Complexity

### 1.4 Completeness and Soundness 


## Improvements
 
### Gir++ protocol


 