本文展示了如何将零检验、有理约束、集合相等、置换与查表等多类约束统一规约到 Multivariate Sumcheck Protocol,实现高效验证。该方法已广泛应用于 Plonkish 与 STARK 系统中的范围检查、布线与查表约束。
本文系统阐述了如何将多类常见约束规约到 Multivariate Sumcheck Protocol。核心思想是通过随机线性组合与对数导数技巧,将“逐点验证”的全称断言转化为“全局求和”形式,再调用 sumcheck 高效验证。主要方法包括:ZeroCheck:利用等值核函数,把“在布尔超立方体上恒等为零”的断言规约为单一求和断言。Rational Sumcheck:通过辅助函数与零检验,将有理函数求和转化为多项式求和。Multiset Equality Check:基于对数导数恒等式,把集合相等性检验规约为有理函数求和。Permutation Check:在元素附加索引后,转化为多重集相等性检查,再由 Rational Sumcheck 处理。LogUp Lookup Argument:通过有理函数形式验证查表约束,避免高开销的乘积表达。这些方法在 Plonk/HyperPlonk/Halo2 等现代零知识证明系统中得到广泛应用,用于范围检查、布线检验、置换约束和查表验证。
证明在布尔超立方体 ${0,1}^n$ 上,某个多项式/函数 $f(\vec{x})$ 对所有点都为零,即$\forall \vec{x}\in{0,1}^n,\quad f(\vec{x})=0.$把“逐点为零”的全称断言,转化为一个“单一求和为零”的等式检查,从而用 Multivariate Sumcheck 做交互/非交互验证:
把 $f$ 在立方体上的点值看成“权重”,再用 $\mathrm{eq}(\vec{x},\vec{r})$ 作为“插值核”在随机点 $\vec{r}$ 上做一次“抽样评估”(其实就是 $f$ 的多线性扩展 $\tilde f$ 在 $\vec{r}$ 的取值)。若 $f$ 非零,则 $\tilde f$ 是非零多项式,在大域上随机取 $\vec{r}$ 几乎不会恰好使其为 0。
验证 $f(\vec{x}) = 0$ 使得任意 $\vec{x} \in {0,1}^n$均成立
Batch Proof:验证 $f(\vec{x}) = 0 \land g(\vec{x}) = 0$
单一求和断言:把“全称为零”化为
$$ S\;:=\;\sum_{\vec{x}\in{0,1}^n}\hat f(\vec{x})\stackrel{?}{=}0. $$
复杂度:若 $f$ 是多线性,则 $\hat f$ 在每个变量上的次数 $\le 2$(或保持低度),sumcheck 的往返通信/验证时间是 $O(n)$ 轮、每轮处理 $O(1)$-度的多项式,整体高效。
在许多证明系统里,需要验证涉及有理函数的全局求和关系,例如: $\sum_{\vec{x}\in{0,1}^n}\frac{p(\vec{x})}{q(\vec{x})} = v.$ 这类约束经常出现在 除法约束(denominator)、lookup argument、压缩多项式 等场景中。 由于 Sumcheck 协议本身只适用于多项式求和,而有理函数包含分母,因此需要一个规约策略,将“分式求和”化为多项式求和与 零检验 的组合:
这样就把“有理求和”安全地降解为“纯多项式求和 + 零检验”。
目标断言: $$ \sum_{\vec{x}\in{0,1}^n}\frac{p(\vec{x})}{q(\vec{x})} \stackrel{?}{=} v . $$
规约步骤:
引入辅助函数 证明者声明存在一个函数 $f(\vec{x})$,使得
$$ f(\vec{x}) = \frac{1}{q(\vec{x})},\qquad \forall \vec{x}\in{0,1}^n. $$
核心求和 检查
$$ \sum_{\vec{x}\in{0,1}^n} p(\vec{x}) \cdot f(\vec{x}) \stackrel{?}{=} v , $$
通过 Multivariate Sumcheck Protocol 实现。
一致性验证 通过 ZeroCheck 验证以下恒等式:
$$ f(\vec{x})\cdot q(\vec{x}) - 1 \equiv 0 ,\qquad \forall \vec{x}\in{0,1}^n. $$
若成立,则 $f(\vec{x})$ 必然是 $q(\vec{x})$ 的倒数。
验证两个函数集合在布尔超立方体 ${0,1}^n$ 上的取值是否相等:${f_0(\vec{x}),\dots,f_k(\vec{x})}\;=\;{g_0(\vec{x}),\dots,g_k(\vec{x})}.$ 这类约束在证明系统里很常见,例如 Plonk wiring check。经典做法是用 ProdCheck(乘积校验)验证两边生成多项式是否相同,但 ProdCheck 在分布式场景下需要额外辅助多项式和交互,不够高效。 解决思路 通过 对数导数恒等式: $$ \prod_i (a_i+X)=\prod_i(b_i+X)\quad\Longleftrightarrow\quad \sum_i\frac{1}{a_i+X}=\sum_i\frac{1}{b_i+X}, $$ 可以把乘积等式规约为一个有理函数求和等式。这样一来,就能利用 Rational Sumcheck Protocol 处理,而无需构造额外的 helper polynomial。
关键技巧
原理如下:验证 ${f_0(\vec{x}), ..., f_k(\vec{x})} = {g_0(\vec{x}), ..., gk(\vec{x})}$,其中$\vec{x} \in {0,1}^n$。选择随机 $\beta,\gamma$,构造线性组合: $$ F(\vec{x}) = \sum{j} \gamma^j \cdot{f_j(\vec{x})} , \quad G(\vec{x}) = \sum_j \gamma^j \cdot{g_j(\vec{x})} $$
因为ProdCheck在分布式场景下不友好,需要通过多个参与方之间交互来生成额外的helper polynomial来进行运算,从而将其转换为rational sumcheck,并依赖于以下定理:
定理(对数导数推导):假设两个集合${a_i},{b_i}$的大小为n,那么有以下等式成立:
$$ \prod (a_i + X) = \prod (b_i + X) \Leftrightarrow \sum \frac{1}{a_i + X} = \sum \frac{1}{b_i + X} $$
将问题转换为Rational Sumcheck Protocol(即协议2),具体推导过程如下所示:
令$X=\beta$,作为一个random challenge, 随后令 $v1=\sum{\vec{x}\in{{0,1}^n}} \frac{1}{\beta + F(\vec{x})}$
$$ v1=\sum{\vec{x}\in{{0,1}^n}} \frac{1}{\beta + F(\vec{x})},\ v2=\sum{\vec{x}\in{{0,1}^n}} \frac{1}{\beta + G(\vec{x})} $$
接下来有$v_1=v_2$,即以下等式成立
$$ \sum_{\vec{x}\in{{0,1}^n}} \left( \frac{1}{\beta + F(\vec{x})} - \frac{1}{\beta + G(\vec{x})} \right) = 0 $$
随后将其合并同类项,则有
$$ \sum_{\vec{x}\in{{0,1}^n}}\frac{F(\vec{x})-G(\vec{x})}{(\beta+F(\vec{x}))\cdot{(\beta+G(\vec{x}))}}=0 $$
则令 $p(\vec{x})=F(\vec{x})-G(\vec{x}), q(\vec{x})=(\beta+F(\vec{x}))\cdot{(\beta+G(\vec{x}))}$,并利用Rational Sumcheck Protocol检查$\sum_{\vec{x}\in{{0,1}^n}} \frac{p(\vec{x})}{q(\vec{x})}=0$。
Permutation Check via Multiset Equality 的核心目标是验证两个列表 $f(\vec{x})$ 与 $g(\vec{x})$ 是否仅仅是相互的一个排列(即它们的元素相同但顺序可能不同)。 直接比较难以高效实现,因此通过 多重集相等性 (Multiset Equality) 来完成验证。
基本思路是:给每个元素附加一个 索引标签,保证不同位置的元素可以区分。构造两个集合:一个由 $f(\vec{x})$ 与其在 恒等排列 下的位置索引 $s{\text{id}}(\vec{x})$ 组成;另一个由 $g(\vec{x})$ 与其在某一排列 $\sigma$ 下的位置索引 $s\sigma(\vec{x})$ 组成。如果这两个多重集完全一致,则说明 $g$ 确实是 $f$ 的一个排列。原理如下:
设输入空间为 ${0,1}^n$。定义: $$ \mathcal{F} = {(s{\text{id}}(\vec{x}), f(\vec{x})) \mid \vec{x} \in {0,1}^n}, $$ $$ \mathcal{G} = {(s\sigma(\vec{x}), g(\vec{x})) \mid \vec{x} \in {0,1}^n}. $$
其中:$s{\text{id}}(\vec{x})$ 表示 $\vec{x}$ 在恒等排列下的索引;$s\sigma(\vec{x})$ 表示 $\vec{x}$ 在置换 $\sigma$ 下的索引。
Permutation Check 的条件为:
$$ \mathcal{F} = \mathcal{G}. $$
即这两个带索引的多重集完全一致。
为了高效检查多重集相等,常用 Random Linear Combination (RLC) 技巧:随机选取 $\beta \in \mathbb{F}$,构造单变量映射: $$ p(\vec{x}) = s{\text{id}}(\vec{x}) + \beta \cdot f(\vec{x}), $$ $$ q(\vec{x}) = s\sigma(\vec{x}) + \beta \cdot g(\vec{x}). $$ 检查 ${p(\vec{x})} = {q(\vec{x})}$。由于 $\beta$ 的随机性,除非 $\mathcal{F}=\mathcal{G}$,否则相等的概率可以忽略。
Permutation Check via Multiset Equality 在零知识证明与多项式交互协议中非常常见,主要应用包括:
LogUp (Logarithmic-Derivative based) Lookup Argument 的目标是验证一个集合(或多重集)$S \subseteq T$,即证明“所有被查表的元素 $S$ 确实来自于查找表 $T$”。 与基于多项式承诺的直接对比不同,LogUp 的思路是利用 有理函数恒等式: $$ \sum_{i \in [P]} \frac{1}{X + Si} = \sum{j \in [N]} \frac{m_j}{X + T_j}, $$
其中 $m_j$ 是表示元素 $T_j$ 出现次数的非负整数。这相当于比较两个多项式分式的对数导数,从而避免了直接构造庞大的乘积约束。原理如下:
给定查表输入集 $S = (S_1, \ldots, S_P) \in \mathbb{F}^P$, 查找表 $T = (T_1, \ldots, TN) \in \mathbb{F}^N$。 若 $S \subseteq T$,则存在一个向量 $m \in \mathbb{F}^N$,使得: $$ \sum{i \in [P]} \frac{1}{X + Si} = \sum{j \in [N]} \frac{m_j}{X + T_j}. $$ 为了压缩多维查表场景,引入随机线性组合参数 $\alpha \in \mathbb{F}$,把多个查表关系合并成一个: $$ X + \alpha \cdot Y \subseteq T_x + \alpha \cdot T_y. $$ 并定义: $$ Ai := \prod{j=1}^{t} \frac{1}{\beta + S_j(i)}, \qquad Bj := \prod{j=1}^{t} \frac{1}{\beta + Tj(i)}, $$ 其中 $\beta \in \mathbb{F}$ 是一个随机挑战。最终要验证的核心约束为: $$ \sum{i \in [P]} Ai = \sum{j \in [N]} m_j \cdot B_j. \tag{1} $$ 同时,还需要确保分母构造的正确性: $$ A(i) \cdot (\text{SC}(i) + \beta) = 1, \tag{2} $$ $$ B(j) \cdot (\text{CT}(j) + \beta) = 1. \tag{3} $$
LogUp Lookup Argument 已成为现代零知识证明系统中 查表约束 的主流技术,典型应用包括:
与HyperPlonk类似,HyperPianist对以下的relation规约为Multivariate Sumcheck Protocol,但为了实现非交互式的分布式证明,采用了不同的规约方式将其转换为Sumcheck Protocol
编号 | Relation 类型 | 数学形式或目标描述 | 归约方式 | 用途说明 |
---|---|---|---|---|
① | ZeroCheck | 验证 $f(\vec{x})=0$ 使得任意 $\vec{x} \in {0,1}^n$均成立 | $\sum_{\vec{x} \in {0,1}^n} \hat{f}(\vec{x}) = 0$ | 约束消失性校验,如 vanishing 或 rational 检查 |
② | Multiset Equality Check | ${f_0(\vec{x}), ..., f_k(\vec{x})} = {g_0(\vec{x}), ..., g_k(\vec{x})}$ | 转换为乘积等式 + sumcheck | 验证集合相等,例如 Plonk wiring |
③ | Rational Relation | $\sum_{\vec{x}} \frac{p(\vec{x})}{q(\vec{x})} = v$ | 1. ZeroCheck on ( $q=0 \Rightarrow g=0$ ) <br> 2. sumcheck on ( $f q = g$ ) | 统一建模除法、压缩、多项式关系 |
④ | Permutation Check | $(s{\text{id}}(\vec{x}), f(\vec{x})),(s\sigma(\vec{x}), g(\vec{x}))$ | 转换为乘积表达式 + rational + sumcheck | Plonk permutation argument |
⑤ | Lookup Check | $f(\vec{x}) \in \text{table} \subseteq \mathbb{F}$ | 转换为 multiset check 或 rational equality | Lookup argument 验证 |
Multivariate Sumcheck Protocol 作为一种统一的归约框架,能够承载 零检验、分式约束、集合一致性、置换与查表 等多种关系验证。其优势在于: 表达力强: 涵盖从单点约束到复杂有理关系的多种场景。 高效性: 避免指数级点值枚举,验证复杂度仅为多项式度与变量数的线性函数。 模块化: 不同约束均可转化为 sumcheck 的标准形式,方便组合与扩展。 实用性: 在 Plonkish 系统、STARK 系统以及 zkVM 框架中均已成为核心构件。 总体而言,Multivariate Sumcheck Protocol 已成为现代零知识证明中最具普适性的规约工具,为设计高效、安全的证明系统提供了坚实的基础。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!