多点打开证明
假设 分别是多项式 的多项式承诺值。比如说,我们要打开多项式 在点的取值,与此同时,打开 在两个点 的取值。(此处的 是乘法子群的本原单位根)。
比较容易想到的方法是,为每一个点构造一个多项式(每一个打开点就会对应电路中的一个相对转动(rotation))。但这不是一个有效的方法;比如, 会出现在多个多项式中。
相反地,我们按打开点的集合,将多项式承诺值组织在一起:
对于每一个组,我们将这些多项式合并成一个多项式集合,然后构造一个多项式, 并在该点打开所有相对偏移。
优化步骤
多点打开的优化算法的输入为:
- 验证者采样出一个随机点,我们将计算多项式在该点的值;
- 证明者计算出那些我们想要的多项式点值:。
这些数据是 vanishing证明 的输出。
多点打开优化算法的步骤如下:
-
采样一个随机点,用来让 线性无关;
-
对于每一个点集,将对应的多项式集合聚合成一个多项式,得到新的多项式集合
q_polys
。同理对于每一个点集,也计算出新的多项式点值集合
q_eval_sets
。
[
[a(x) + x_1 b(x)],
[
c(x) + x_1 d(x),
c(\omega x) + x_1 d(\omega x)
]
]
-
根据
q_eval_sets
,构造插值多项式集合r_polys
: -
构造
f_polys
来检查q_polys
的正确性:如果 ,则 应当是一个多项式; 如果 并且 ,则 应当是一个多项式。
-
采样一个随机数 ,用来让
f_polys
线性无关。 -
构造 。
-
采样一个随机数,并计算在该点的取值:
-
采样一个随机数,用来让 和
q_polys
线性无关。 -
构造
final_poly
多项式 \textrm{final_poly}(X) = f(X) + x_4 q_1(X) +x_4^2 q_2(X)final_poly
多项式就是传入内积证明的多项式。