# ProductCheck Polynomial Interactive Oracle Proof ProductCheck PIOP (Polynomial Interactive Oracle Proof) is a subprotocol commonly used in zero-knowledge proofs to verify the product relation of polynomials or polynomial evaluations efficiently. This verification is performed without revealing sensitive information about the underlying data. ProductCheck ensures that a claimed product relation holds between given polynomials or their evaluations. For example, suppose you have three polynomials $f(X)$, $g(X)$, and $h(X)$, and the prover claims: $$h(X) = f(X) \cdot g(X)$$ The ProductCheck PIOP is used to verify this claim interactively with the verifier without revealing the explicit form of these polynomials. ### Definition of ProductCheck Relation The relation $R_{\text{Prod}}$ in a `ProductCheck PIOP` is defined as follows: $$R_{\text{Prod}} = \{ (h, f, g) \mid h(X) = f(X) \cdot g(X) \}$$ This means $h(X)$ is the pointwise product of $f(X)$ and $g(X)$. ### Key Steps in ProductCheck PIOP The protocol typically involves the following steps: 1. **Claim Commitment**: The prover commits to polynomials $f(X)$, $g(X)$, and $h(X)$, or their evaluations over a specific domain. These commitments may be polynomial oracles or cryptographic polynomial commitments (e.g., KZG commitments). 2. **Verifier Challenges**: The verifier sends a random challenge $\alpha$ to the prover. 3. **Pointwise Check**: The prover evaluates $f(\alpha)$, $g(\alpha)$, and $h(\alpha)$ and sends these values back to the verifier. The verifier checks whether: $h(\alpha) = f(\alpha) \cdot g(\alpha)$ 4.**Consistency Check (Optional)**: If commitments were used, the verifier ensures that the evaluations $f(\alpha), g(\alpha), h(\alpha)$ are consistent with the committed polynomials. _As was explored in ZeroCheck, this sub-protocol works fine for Univariate Polynomials and we would also want to establish such relationship for the multilinear polynomial also_ --- ## ProductCheck: Multilinear Polynomial This is to an extent similar to the multilinear sumcheck, but in this case we've got two multilinear polynomials $f$ and $g$ and we want to prove that the product of eash of these polynomials over the boolean hypercube is equal. This can be expressed mathemeatically; $$ \prod_{x_1, x_2, x_3 \in \{0,1\}^3} f(x_1,x_2,x_3) = \prod_{x_1, x_2, x_3 \in \{0,1\}^3} g(x_1,x_2,x_3) $$ **Step One**: A new polynomial $p(x_0, x_1, x_2, x_3)$ with 4 variable; - Define $p(0, x_1, x_2, x_3) = f(x_1,x_2,x_3) / g(x_1,x_2,x_3)$ - Define $p(1,\vec{x}) = p(\vec{x}, 0) \times p(\vec{x}, 1)$ - if $f$ and $g$ have the same product, $p(1,1,1,0) == 1$ Now, knowing this, how can we prove it? this is where the concept of random linear combination comes into play! **Step Two**: Another new polynomial $q(x_1,x_2,x_3)$ with $3$ variables - Define $q(x_1,x_2,x_3) = p(1,x_1,x_2,x_3) - p(x_1,x_2,x_3,0) \times p(x_1,_x2,x_3,1) + r \cdot (f(x_1,x_2,x_3) - p(0,x_1,x_2,x_3) \times g(x_1,x_2,x_3))$ - Invoke Zero Check on $q$, and addtionally prove $q(1,1,1,0) = 1, then we have been able to achieve proving that; - $p(1, \vec{x}) - p(\vec{x}, 0) \times p(\vec{x}, 1) = 0$ - $f(\vec{x}) - p(0, \vec{x}) \times g(\vec{x}) = 0$ Next: [SumCheck Polynomial IOP](https://hackmd.io/@0xdeveloperuche/BJqcjSHz1g) reference: Zhenfei Zhang: https://www.youtube.com/watch?v=kAD5aBnZHvU