Halo2 学习笔记——背景资料之Polynomials

Posted mutourend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Halo2 学习笔记——背景资料之Polynomials相关的知识,希望对你有一定的参考价值。

1. 引言

A ( X ) A(X) A(X)为基于 F p \\mathbb{F}_p Fp的degree-3多项式:
A ( X ) = a 0 + a 1 X + a 2 X 2 + a 3 X 3 A(X)=a_0+a_1X+a_2X^2+a_3X^3 A(X)=a0+a1X+a2X2+a3X3
其中 a 0 a_0 a0称为constant term。

degree n − 1 n-1 n1的多项式,其有 n n n个系数。

通常,将变量 X X X替换为具体的值 x x x,来计算相应的结果 A ( x ) A(x) A(x)——数学上称为“evaluating A ( X ) A(X) A(X) at a point x x x”。(注意,此处的point不要与椭圆曲线上的point混淆。)

多项式的主要属性有:

  • d e g ( A ( X ) B ( X ) ) = d e g ( A ( X ) ) + d e g ( B ( X ) ) , d e g ( A ( X ) / B ( X ) ) = d e g ( A ( X ) ) − d e g ( B ( X ) ) deg(A(X)B(X))=deg(A(X))+deg(B(X)), deg(A(X)/B(X))=deg(A(X))-deg(B(X)) deg(A(X)B(X))=deg(A(X))+deg(B(X)),deg(A(X)/B(X))=deg(A(X))deg(B(X))
  • A ( X ) A(X) A(X)的degree为 n − 1 n-1 n1,则对该多项式的 n n n个不同点进行evaluation,这些evaluation值可完全定义该多项式。换句话说,由这 n n n个不同点的evaluation值,通过多项式插值获得唯一的degree为 n − 1 n-1 n1的多项式 A ( X ) A(X) A(X)
  • 多项式 A ( X ) A(X) A(X)的系数表示法为: [ a 0 , a 1 , ⋯   , a n − 1 ] [a_0,a_1,\\cdots,a_{n-1}] [a0,a1,,an1],其点值表示法为:
    [ ( x 0 , A ( x 0 ) ) , ( x 1 , A ( x 1 ) ) , ⋯   , ( x n − 1 , A ( x n − 1 ) ) ] [(x_0,A(x_0)), (x_1,A(x_1)), \\cdots, (x_{n-1},A(x_{n-1}))] [(x0,A(x0)),(x1,A(x1)),,(xn1,A(xn1))]
    其中 x 0 , x 1 , ⋯   , x n − 1 x_0,x_1,\\cdots,x_{n-1} x0,x1,,xn1 n n n个不同的值。
    这两种方式都可唯一定义同一多项式。

2. Horner’s rule

可借助Horner’s rule来对一个 n − 1 n-1 n1 degree多项式进行高效evaluation,仅需 n − 1 n-1 n1个乘法运算 + n − 1 n-1 n1个加法运算:
a 0 + a 1 X + a 2 X 2 + ⋯ + a n − 1 X n − 1 = a 0 + X ( a 1 + X ( a 2 + ⋯ + X ( a n − 2 + X a n − 1 ) ) ) a_0+a_1X+a_2X^2+\\cdots+a_{n-1}X^{n-1}=a_0+X(a_1+X(a_2+\\cdots+X(a_{n-2}+Xa_{n-1}))) a0+a1X+a2X2++an1Xn1=a0+X(a1+X(a2++X(an2+Xan1)))

3. FFT

FFT可将多项式的系数表示法 和 点值表示法 之间高效相互转换。

点值表示法时,evaluate的point为 n n n-th roots of unity { w 0 , w 1 , ⋯   , w n − 1 } \\{w^0,w^1,\\cdots,w^{n-1}\\} {w0,w1,,wn1},其中 w w w为a primitive n n n-th root of unity。

根据roots of unity的对城乡,FFT每轮运算将reduce the evaluation into a problem only half the size。因此,通常使用的多项式长度为some power of two,即 n = 2 k n=2^k n=2k,从而可apply the halving reduction recursively。

3.1 将FFT用于快速多项式乘法

如需计算 A ( X ) ⋅ B ( X ) = C ( X ) A(X)\\cdot B(X)=C(X) A(X)B(X)=C(X),若采用系数表示法时,需要进行 O ( n 2 ) O(n^2) O(n2)次运算:
A ( X ) = a 0 + a 1 X + a 2 X 2 + ⋯ + a n − 1 X n − 1 A(X)=a_0+a_1X+a_2X^2+\\cdots+a_{n-1}X^{n-1} A(X)=a0+a1X+a2X2++an1Xn1
B ( X ) = b 0 + b 1 X + b 2 X 2 + ⋯ + b n − 1 X n − 1 B

以上是关于Halo2 学习笔记——背景资料之Polynomials的主要内容,如果未能解决你的问题,请参考以下文章

Halo2 学习笔记——背景资料之PLONKish arithmetization

Halo2 学习笔记——背景资料之Polynomials

Halo2学习笔记——背景资料之Elliptic curves

Halo2 学习笔记——背景资料

Halo2 学习笔记——设计之Proving system之Inner product argument

Halo2 学习笔记——Gadgets 之 SHA-256