# $2^n$-bit arithmetic in ZK without range checks <style> .ui-infobar, #doc.markdown-body { max-width: 1050px; } </style> *Dmitry Khovratovich* **Problem**: whenever we implement an algorithm that works over $Z_{N}$, with $N=2^{16}$ or $N=2^{32}$, we need to reduce all computations modulo $N$ and range-check all variables against $N$. These operations are expensive. We suggest a new scheme that implements the mod-$N$ arithmetic without range checks. ## 1. State of the art: Simplified Plonk Notation: $N =2^n$. First recall (and simplify) how Plonk arranges its witness. | Index | Witness poly $f_1$ | $f_2$ | $f_3$ | | ------------ | ------------------ | -------- | -------- | | $\omega$ | | | | $\omega^2$ | | | | | | | | | | $x$ | $f_1(x)$ | $f_2(x)$ | $f_3(x)$ | | | | | | | $\omega^N=1$ | | | | ### Identities * Addition gate: $$ f_3(x) = f_1(x)+f_2(x) $$ * Multiplication gate: $$ f_3(x) = f_1(x)\cdot f_2(x) $$ ## 2. New scheme ### Idea * **Make all witness values to be roots of unity $V_N$.** * **Represent $i<N$ as $\omega^i$.** * **For each witness value $f(x)= \omega^j$ store $\omega^{\frac{j(j+1)}{2}}$ in a cell nearby as value of $f^{exp}(x)$.** * **Ensure that the same permutation $\sigma$ maps $\{\omega,\omega^2,\ldots, \omega^N\}$ to $\{f(x)\}$ and $\{\omega,\omega^3,\omega^6,\ldots, \omega^{\frac{N(N+1)}{2}}\}$ to $\{f^{exp}(x)\}$** ### Witness table | Index | Witness poly $f_1$ | $f_1^{exp}$ | $f_2$ | $f_2^{exp}$ | $f_3$ | $f_3^{exp}$ | $f_4$ | Value poly $g_1$ | $g_2$ | | ------------ | --------------------- | -------------------------------------------- | -------- | -------------- | -------- | -------------- | -------- | ---------------- | --------------------------- | | | | | | | | | | | | | $\omega$ | | | | | | | | $\omega$ | $\omega$ | | $\omega^2$ | | | | | | | | $\omega^2$ | $\omega^3$ | | $\omega^3$ | | | | | | | | $\omega^3$ | $\omega^6$ | | | | | | | | | | | | | $x=\omega^i$ | $f_1(x)=\omega^{j_i}$ | $f_1^{exp}(x)=\omega^{\frac{j_i(j_i+1)}{2}}$ | $f_2(x)$ | $f_2^{exp}(x)$ | $f_3(x)$ | $f_3^{exp}(x)$ | $f_4(x)$ | $\omega^{i}$ | $\omega^{\frac{i(i+1)}{2}}$ | | | | | | | | | | | | | $\omega^N=1$ | | | | | | | | $\omega^N=1$ | $\omega^{\frac{N(N+1)}{2}}$ | ### Identities * Consistency equations: \begin{align} \sigma_1:&\quad \{g_1(x)\}\rightarrow \{f_1(x)\}\\ \sigma_1:&\quad \{g_2(x)\}\rightarrow \{f_1^{exp}(x)\}\\ \sigma_2:&\quad \{g_1(x)\}\rightarrow \{f_2(x)\}\\ \sigma_2:&\quad \{g_2(x)\}\rightarrow \{f_2^{exp}(x)\}\\ \sigma_3:&\quad \{g_1(x)\}\rightarrow \{f_3(x)\}\\ \sigma_3:&\quad \{g_2(x)\}\rightarrow \{f_3^{exp}(x)\} \end{align} * Addition gate $(\omega^i,\omega^j)\rightarrow \omega^{i+j}$ or $f_3 = f_1 + f_2 \pmod{N}$ (in the exponent): $$ f_3(x) = f_1(x)\cdot f_2(x) $$ * Multiplication gate $(\omega^i,\omega^j)\rightarrow \omega^{ij}$ or $f_4 = f_1 \cdot f_2 \pmod{N}$ (in the exponent): $$ \begin{cases} f_3(x) = f_1(x)\cdot f_2(x);\quad \text{auxiliary variable $\omega^{i+j}$}\\ f_3^{exp}(x) = f_1^{exp}(x)\cdot f_2^{exp}(x)\cdot f_4 (x) ;\quad \text{exploit equation } \omega^{\frac{(i+j)(i+j+1)}{2}} = \omega^{\frac{i(i+1)}{2}}\cdot \omega^{\frac{j(j+1)}{2}}\cdot \omega^{ij} \end{cases} $$ The gates can be combined as mult gate computes addition along the way. #### How to prove consistency equations ##### Via a lookup prover Let $T$ be the $N$-size table consisting of $(g_1(\omega^i),g_2(\omega^i))$ pairs. Then we prove: $$ (f_i(X), f_i^{exp}(X))\in T\text{ for }X\in V_N. $$ with Baloo or Caulk(+). ##### Directly 1. Commit to $f_i, f_i^{exp}$ 2. Generate challenge $\alpha$. 3. Compute and prove aggregated polynomial $$ h(X)=\prod_{1\leq i \leq N}(X-f_1(\omega^i)-\alpha f_1^{exp}(\omega^i))(X-f_2(\omega^i)-\alpha f_2^{exp}(\omega^i))(X-f_3(\omega^i)-\alpha f_3^{exp}(\omega^i)) $$ 4. Compute and prove reduced poly $$ \widehat{h}(X) = \frac{h(X)}{GCD(h(X),h'(X))} $$ 5. Prove that $\widehat{h}(X)$ divides $\psi(X)$ where $$ \psi(X) =\prod_{1\leq i \leq N}(X-g_1(\omega^i)-\alpha g_2(\omega^i)) $$