多点打开证明

假设 分别是多项式 的多项式承诺值。比如说,我们要打开多项式 在点的取值,与此同时,打开 在两个点 的取值。(此处的 是乘法子群的本原单位根)。

比较容易想到的方法是,为每一个点构造一个多项式(每一个打开点就会对应电路中的一个相对转动(rotation))。但这不是一个有效的方法;比如, 会出现在多个多项式中。

相反地,我们按打开点的集合,将多项式承诺值组织在一起:

对于每一个组,我们将这些多项式合并成一个多项式集合,然后构造一个多项式, 并在该点打开所有相对偏移。

优化步骤

多点打开的优化算法的输入为:

  • 验证者采样出一个随机点,我们将计算多项式在该点的值;
  • 证明者计算出那些我们想要的多项式点值:

这些数据是 vanishing证明 的输出。

多点打开优化算法的步骤如下:

  1. 采样一个随机点,用来让 线性无关;

  2. 对于每一个点集,将对应的多项式集合聚合成一个多项式,得到新的多项式集合 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)
                ]
            ]
  1. 根据q_eval_sets,构造插值多项式集合 r_polys:

  2. 构造 f_polys 来检查 q_polys 的正确性:

    如果 ,则 应当是一个多项式; 如果 并且 ,则 应当是一个多项式。

  3. 采样一个随机数 ,用来让 f_polys 线性无关。

  4. 构造

  5. 采样一个随机数,并计算在该点的取值:

  6. 采样一个随机数,用来让 q_polys 线性无关。

  7. 构造 final_poly多项式 \textrm{final_poly}(X) = f(X) + x_4 q_1(X) +x_4^2 q_2(X) final_poly多项式就是传入内积证明的多项式。