---
# System prepended metadata

title: Sumcheck（求和检验）协议：基础
tags: [Sumcheck]

---

# Sumcheck（求和检验）协议：基础

> 适用对象：已学习有限域、基础多项式、概率论与复杂性基础（可选：交互式证明/PCP/IOP 基础）
>
> 本讲目标：掌握标准 Sumcheck 协议、完备性与健全性证明框架，并理解其在现代证明系统（如 GKR、SNARK/IOP）中的接口方式。

---

## 目录

1. [学习目标与背景](#学习目标与背景)
2. [问题定义：要验证什么？](#问题定义：要验证什么？)
3. [直觉：逐维“折叠”指数求和](#直觉：逐维“折叠”指数求和)
4. [标准 Sumcheck 协议（形式化流程）](#标准Sumcheck协议形式化流程)
5. [正确性：完备性与健全性（核心证明）](#正确性完备性与健全性核心证明)
6. [例子：2 变量多线性多项式跑一遍协议](#例子2-变量多线性多项式跑一遍协议)
7. [为何多线性扩展（MLE）几乎总出现？](#为何多线性扩展mle几乎总出现)
8. [与多项式承诺/IOP 的接口](#与多项式承诺iop-的接口)
9. [常见变体与工程技巧](#常见变体与工程技巧)
10. [复杂度与参数选择](#复杂度与参数选择)
11. [课后练习与思考题](#课后练习与思考题)
12. [一页速记（Cheat Sheet）](#一页速记cheat-sheet)

---

## 学习目标与背景

### 为什么要学 Sumcheck？

Sumcheck（求和检验）是交互式证明（IP）与 IOP/SNARK 体系中的**核心子协议**，用于验证如下类型的声明：

$$S \stackrel{?}{=} \sum_{x\in\{0,1\}^n} g(x).$$

它的重要性体现在：

- 将对 $2^n$ 个点的求和验证，压缩成 **$n$ 轮交互**；
- 通信量与多项式次数线性相关，常见情形（多线性）每轮只需常数个域元素；
- 可作为“胶水协议”把复杂全局约束归约为少量随机点的多项式求值一致性。

### 本讲你应当掌握

- 能写出标准 Sumcheck 协议并解释每一步含义；
- 能用“逐轮归纳 + 一元多项式根数界”给出健全性证明；
- 了解多线性扩展（MLE）为何使协议更干净（$d=1$）；
- 了解它与多项式承诺/低度测试组合后的用法。

---

## 问题定义：要验证什么？

### 输入

- 有限域 $\mathbb{F}$（通常取大素域或扩域）；
- 多项式 $g(X_1,\dots,X_n)\in\mathbb{F}[X_1,\dots,X_n]$；
- 声称的求和值 $S\in\mathbb{F}$。

### 目标声明

验证者希望验证：

$$S = \sum_{x\in\{0,1\}^n} g(x).$$

### 关键假设：度数上界

Sumcheck 的健全性依赖一个低度假设。常见的度界形式：

- **按变量度界**：对每个 $i$，$\deg_{X_i}(g)\le d$。

在现代证明系统中，$g$ 常常是**多线性**（每变量度 $\le 1$），此时 $d=1$。

---

## 直觉：逐维“折叠”指数求和

将声明写成嵌套求和：

$$S = \sum_{x_1\in\{0,1\}} \sum_{x_2\in\{0,1\}} \cdots \sum_{x_n\in\{0,1\}} g(x_1,\dots,x_n).$$

先把最外层提出：

$$S = \sum_{x_1\in\{0,1\}} G_1(x_1),\quad \text{其中 }G_1(X_1)=\sum_{x_2,\dots,x_n\in\{0,1\}} g(X_1,x_2,\dots,x_n).$$

注意：$G_1$ 是一元多项式，次数 $\le d$。如果证明者给出 $G_1$，验证者可检查：

1. **边界一致性**：$G_1(0)+G_1(1)=S$；
2. 随机抽取 $r_1\in\mathbb{F}$，把问题降维为验证

$$G_1(r_1) \stackrel{?}{=} \sum_{x_2,\dots,x_n\in\{0,1\}} g(r_1,x_2,\dots,x_n).$$

这将 $n$ 维求和归约为 $n-1$ 维求和。重复 $n$ 次即可。

---

## 标准 Sumcheck 协议（形式化流程）

### 记号

- 初始声明值：$S_0 := S$
- 验证者随机挑战：$r_1,\dots,r_n \in \mathbb{F}$
- 第 $i$ 轮证明者发送的一元多项式：$p_i(X)$
- 更新：$S_i := p_i(r_i)$

### 协议

令 $S_0=S$。对 $i=1,2,\dots,n$：

1. **Prover → Verifier：** 发送一元多项式 $p_i(X)$，并声称：

   $$p_i(X) \stackrel{claim}{=} \sum_{x_{i+1},\dots,x_n\in\{0,1\}} g(r_1,\dots,r_{i-1},X,x_{i+1},\dots,x_n).$$

2. **Verifier 检查：**

   $$p_i(0)+p_i(1) \stackrel{?}{=} S_{i-1}.$$

   若不等则拒绝。

3. **Verifier → Prover：** 采样随机 $r_i\xleftarrow{\$}\mathbb{F}$ 并发送。

4. **更新：** $S_i := p_i(r_i)$。

最后，验证者检查：

$$S_n \stackrel{?}{=} g(r_1,\dots,r_n).$$

> **备注**：在很多应用中，验证者无法直接计算 $g(r)$。这时需要多项式承诺/IOP 来提供 $g(r)$ 的可信求值（见后文）。

---

## 正确性：完备性与健全性（核心证明）

### 完备性（Completeness）

若证明者诚实发送真实的部分求和多项式，则第 $i$ 轮：

$$S_{i-1} = \sum_{x_i\in\{0,1\}} \sum_{x_{i+1..n}\in\{0,1\}} g(r_{<i},x_i,x_{>i})
= p_i(0)+p_i(1).$$

且更新 $S_i=p_i(r_i)$ 保持与真实降维目标一致，最终 $S_n=g(r_1,\dots,r_n)$ 成立。因此诚实证明者总能被接受。

### 可靠性（Soundness）——核心直觉

若声明为假：

$$S \ne \sum_{x\in\{0,1\}^n} g(x),$$

任何作弊证明者想通过，必须在某一轮伪造 $p_i$。验证者每轮随机选择 $r_i$，迫使 $p_i$ 在随机点上与真实多项式一致。由于都是低度一元多项式，伪造在随机点“碰巧”一致的概率很小。

#### 一元多项式根数界

若 $q(X)$ 是非零一元多项式且 $\deg(q)\le d$，则它在 $\mathbb{F}$ 上最多有 $d$ 个根。

#### 逐轮归纳的健全性界（常用版本）

设 $\deg_{X_i}(g)\le d$ 对所有 $i$。则对任意证明者，在声明错误时通过协议的概率：

$$\Pr[\text{Verifier accepts}] \le \frac{n\cdot d}{|\mathbb{F}|}.$$

**证明框架：**

- 定义真实的第 $i$ 轮多项式：

  $$G_i(X) := \sum_{x_{i+1..n}\in\{0,1\}} g(r_1,\dots,r_{i-1},X,x_{i+1},\dots,x_n).$$

- 若作弊发送 $p_i\neq G_i$，令差多项式 $\Delta_i(X)=p_i(X)-G_i(X)$，则 $\Delta_i$ 是次数 $\le d$ 的非零一元多项式。
- 想继续欺骗，必须满足 $p_i(r_i)=G_i(r_i)$，即 $\Delta_i(r_i)=0$。随机 $r_i$ 落在根上的概率 $\le d/|\mathbb{F}|$。
- 用并集界/逐轮归纳汇总得到 $\le nd/|\mathbb{F}|$。

我们可以展开证明过程：
- 每一步成功猜中多项式随机点的概率 $\le d/|\mathbb{F}|$，如果没有猜中，攻击者仍然可以构造多项式，满足中间的检查。
- 考虑攻击轮次， 攻击者在第 $i$ 轮攻击成功（猜中多项式随机交叉点）的概率是 $\le (1-d/|\mathbb{F}|)^{i-1}d/|\mathbb{F}|$。
- 因此攻击者总的攻击成功的概率可以用并集界/逐轮归纳汇总得到 $\le nd/|\mathbb{F}|$。

> **参数含义**：域越大、次数越低，作弊成功概率越小。多线性情形 $d=1$ 通常非常理想。

---

## 例子：2 变量多线性多项式跑一遍协议

取 $n=2$，$g(x_1,x_2)=3x_1x_2+2x_1+5$。验证：

$$S \stackrel{?}{=} \sum_{(x_1,x_2)\in\{0,1\}^2} g(x_1,x_2).$$

### 真实求和值（可课堂练习）

- $g(0,0)=5$
- $g(0,1)=5$
- $g(1,0)=7$
- $g(1,1)=10$

总和 $S=27$。

#### 尝试攻击（可以作为反例来演示为什么攻击会失败）

恶意证明者伪造 $S' = 25$。

### 第 1 轮

$$p_1(X_1)=\sum_{x_2\in\{0,1\}} g(X_1,x_2).$$

计算：

- $g(X_1,0)=2X_1+5$
- $g(X_1,1)=3X_1+2X_1+5=5X_1+5$

相加：$p_1(X_1)=7X_1+10$。



Verifier 检查：$p_1(0)+p_1(1)=10+(17)=27$ 通过。
抽样 $r_1$，更新：$S_1=p_1(r_1)=7r_1+10$。
$r_1 = 3$, $S_1=p_1(r_1)=7r_1+10 = 7*3+10 = 31$。

#### 尝试攻击
恶意证明者伪造 $p_1(X_1) = 7X_1 + 9$，通过第1轮中的 Verifier 检查：$p_1(0)+p_1(1)=9+(16)=25$。

此时 Verifier 计算的 $S_1 = 7r_1+9=30$。

### 第 2 轮

$$p_2(X_2)=g(r_1,X_2)=3r_1X_2+2r_1+5.$$

$$p_2(X_2)=g(r_1,X_2)=3r_1X_2+2r_1+5 = 9X_2 + 11.$$

Verifier 检查：

$$p_2(0)+p_2(1)=(2r_1+5)+(3r_1+2r_1+5)=7r_1+10=S_1.$$

$$p_2(0)+p_2(1)=(2r_1+5)+(3r_1+2r_1+5)=7r_1+10=31.$$

抽样 $r_2$，更新：$S_2=p_2(r_2)=g(r_1,r_2)$。

最终检查自然通过：

$$r_2 = 7, g(r_1,r_2)= 3*3*7 + 2*3 +5 = 74$$

$$p_2(r_2) = p_2(7) = 9*7 + 11 = 74$$

#### 尝试攻击
为了使得 $p_2(0)+p_2(1)= 30 $, 恶意证明者伪造 $$p_2(X_2) = 10X_2 + 10$$

此时，Verifier 计算 $$p_2(r_2) = 10*7+10=80 $$

但是，Verifier 计算出的原始多项式在 $(r_1, r_2)$ 处的取值是 
$$g(r_1,r_2)= 3*3*7 + 2*3 +5 = 74$$

明显与恶意证明者提供的多项式的计算结果不符合，所以 Verifier 拒绝证明者的伪造，攻击失败。

---

## 为何多线性扩展（MLE）几乎总出现？

很多时候我们从布尔超立方体上的函数出发：

$$f:\{0,1\}^n\to\mathbb{F}.$$

为了用 Sumcheck，我们希望有一个多项式 $\tilde f$ 满足：

- $\tilde f(x)=f(x)$ 对所有 $x\in\{0,1\}^n$；
- $\deg_{X_i}(\tilde f)\le 1$（多线性），使得 $d=1$。

**多线性扩展**保证上述两点并且是唯一的：任意布尔函数都存在唯一的多线性多项式与其在布尔点上一致。

> 直觉：布尔点上做拉格朗日插值，但限制每变量次数 $\le 1$，得到唯一扩展。

---

## 与多项式承诺/IOP 的接口

标准 Sumcheck 的最后一步需要验证者得到 $g(r_1,\dots,r_n)$ 的可信值。但在许多应用中：

- $g$ 是由证明者持有的大表（例如电路每层的值），验证者无法直接计算；
- 或 $g$ 很大，计算代价过高。

典型解决办法：

1. **多项式承诺（PC）**：证明者先对 $g$（或相关多项式）做承诺；最后提供对点 $r$ 的开证明，验证 $g(r)$ 与承诺一致。
2. **IOP/PCP**：将 $g$ 作为 oracle，并用低度测试保证其确为低度多项式；Sumcheck 的终检点查询结合 oracle 访问完成。

因此 Sumcheck 常被视为一个**中间层**：把“指数规模求和”归约为“少量随机点求值一致性”。

---

## 常见变体与工程技巧

### 1) 批量（Batched）Sumcheck

要同时验证多个求和：$S^{(j)}=\sum_x g_j(x)$。可用随机线性组合压缩：

$$\sum_j \alpha_j S^{(j)} \stackrel{?}{=} \sum_x \left(\sum_j \alpha_j g_j(x)\right),$$

只跑一次 sumcheck，通信与轮数不变。

### 2) 低通信实现：只发系数

每轮发送一元多项式 $p_i$ 的系数即可：次数 $\le d$ 需 $d+1$ 个域元素。多线性（$d=1$）时每轮只需 2 个域元素。

### 3) 非交互化：Fiat–Shamir（ROM）

将每轮随机挑战 $r_i$ 用哈希生成：

$$r_i := H(\text{transcript up to round }i).$$

这在 SNARK/IOP 中非常常见，但要注意：

- hash-to-field 方式；
- transcript 绑定与域分离（domain separation）；
- 与多项式承诺的组合顺序。

---

## 复杂度与参数选择

### 轮数

- 轮数固定为 $n$（变量数）。

### 通信量

- 每轮发送一个次数 $\le d$ 的一元多项式：$d+1$ 个域元素；
- 总通信 $\approx n(d+1)$ 个域元素（不含最终开证明/承诺等）。

### 验证开销

- 每轮做常数次多项式求值（对 0、1 与随机点），加一次随机采样；
- 终检需要得到 $g(r)$（直接算或由承诺/IOP 提供）。

### 健全性误差

- $\le nd/|\mathbb{F}|$。

> 使用中上选取 64-bit 或 128-bit 大域，使误差可忽略。

---

## 练习与思考题

1. **手算 3 变量**：给一个 3 变量多线性 $g$，写出每轮 $p_i$ 并验证一致性条件。
2. **误差估算**：若 $|\mathbb{F}|=2^{64}$、$n=30$、$d=2$，给出最大作弊成功概率上界。
3. **度界讨论**：比较“按变量度界”和“总度界”的差异，为何分析更常用前者？
4. **接口题**：若验证者无法计算 $g(r)$，描述用多项式承诺完成终检的一般流程。
5. **FS 直觉**：在随机预言机模型下，用哈希生成挑战为何合理？它替代了什么假设？

---

## 一页速记（Cheat Sheet）

- **目标**：验证 $S=\sum_{x\in\{0,1\}^n} g(x)$
- **第 i 轮**：Prover 发 $p_i(X)\approx\sum_{x_{i+1..n}} g(r_{<i},X,x_{>i})$
- **检查**：$p_i(0)+p_i(1)=S_{i-1}$
- **挑战**：随机 $r_i\in\mathbb{F}$，更新 $S_i=p_i(r_i)$
- **终检**：$S_n=g(r_1,\dots,r_n)$
- **健全性误差**：$\le nd/|\mathbb{F}|$；多线性时 $d=1$

---
