# ZeroCheck Polynomial Interactive Oracle Proof The ZeroCheck PIOP (Polynomial Interactive Oracle Protocol) is a subprotocol used in zero-knowledge proof systems to verify that a polynomial evaluates to zero over a specific domain. It is a critical building block in many zero-knowledge proof systems, particularly in protocols like Plonk, to check consistency or enforce certain constraints. ### Purpose of ZeroCheck PIOP In a zero-knowledge proof, the prover often needs to demonstrate that a polynomial $f(X)$: • Either evaluates to zero on certain inputs, such as all elements in a domain $D$, • Or satisfies specific conditions implying that some computation is correct. For instance: 1. $f(X) = 0$ might encode the correctness of a relation. 2. $f(X) = 0$ over all $X \in D$ might verify consistency with a pre-specified structure. This ensures that the prover’s claims about the polynomial are consistent with the protocol’s constraints. ### How ZeroCheck PIOP Works The protocol is structured in several rounds of interaction between the prover and verifier. Here’s the general approach: 1. Input: The prover holds a polynomial $f(X)$ and claims it satisfies $f(X) = 0$ over a domain $D$. 2. Polynomial Reduction: • The prover reduces $f(X)$ modulo a vanishing polynomial $Z_D(X)$, which vanishes (evaluates to zero) at all points in $D$: $$ Z_D(X) = \prod_{x \in D} (X - x) $$ • The prover expresses $f(X)$ as: $f(X) = Z_D(X) \cdot q(X) + r(X)$, where: - $q(X)$ is the quotient polynomial. - $r(X)$ is the remainder polynomial with degree $\text{deg}(r) < \text{deg}(Z_D)$. 3. Verifier Query: • The verifier checks whether $r(X) = 0$. This involves: • Sampling random challenge points $\alpha$ from the field. • Asking the prover for evaluations of $f(X)$, $Z_D(X)$, and $q(X)$ at $\alpha$. 4. Verification: • Using the prover’s responses, the verifier confirms: $f(\alpha) = Z_D(\alpha) \cdot q(\alpha) + r(\alpha)$. • If $r(X) = 0$, then $f(X)$ is divisible by $Z_D(X)$, and the claim $f(X) = 0$ over $D$ holds. _This relation works fine here and the polynomial is a Univariate polynomial, would like to establish such relationship but over a multilinear polynomial this time. How can we achieve this?_ --- ## ZeroCheck: Multilinear polynomials _This finds application in HyperPlonk (a multi-linear expression of the plonk protocol)_ Given a polynomial $w(x_1, x_2, x_3)$, prove $w$ is a zero polynomial (a poly that evaluates to `zero` for every input variables). Making use of the `Schwartz-Zipple lemma`. prover can prove sufficently that $w$ is a zero polynomial if $w(r_1,r_2,r_3)$ = 0, where $\{r_1,r_2,r_3\}$ are random field elements. Prover builds a polynomial $f$ and proves $f$'s is $0$ via `SumCheck` $f(x_1,x_2,x_3) = w(r_1,r_2,r_3) \cdot eq((x_1,x_2,x_3), (r_1,r_2,r_3))$ where; $eq(\vec{x},\vec{y}) = \prod_{i=1}^{3} (x_iy_i + (1 - x_i)(1 - y_i))$ $eq(\vec{x},\vec{y})$ is $1$ if $\vec{x}= \vec{y}$; else $0$; Next: [Permutation Check Polynomial IOP](https://hackmd.io/@0xdeveloperuche/BkCdZ1tGJg) reference: Zhenfei Zhang: https://www.youtube.com/watch?v=kAD5aBnZHvU