Polynomial and representations
Polynomial
In this article, I will show two common ways to program polynomial
coefficient and point-value representation
对于 degree = n-1 多项式 A(x),
- Coefficient representation: 所有项的系数组成的系数向量 \((a_0, a_1,a_2,...,a_{n-1})\) 唯一确定多项式:\(A(x) = \sum_{i=0}^{n-1}a_ix^i\)
| 1 | # f(x) = x*4 + 3*x**2 + 4*x + 9 | 
Evalute polynomial at \(x=2\)
| 1 | coeff = [1, 0, 3, 4, 9] | 
Note:
- the order of the coefficient should be checked carefully. - For example, - numpy.polyexpresses the sequence of the coefficient from highest to lowest degree,- [a4, a3, a2, a1, a0].- But Ethereum research repository is from lowest to highest degree, - [a0, a1, a2, a3, a4], which we will use.
- When evaluating the coefficient form polynomial at x under Prime field, the Python built-in function - pow(base, exp, mod=None)is very useful.
- Point-value representation: 一组互不相同的 \((x_0, x_1,x_2, \cdots,x_{n})\) 代入 \(A(x)\), 得到 n 个取值 \((y_0,y_1, \cdots, y_n)\), 其中 \(y_i = \sum_{j=0}^{n}a_j x_i\),可以通过拉格朗日插值方法唯一确定多项式。 
Schwartz-Zippel lemma
Schwartz-Zippel lemma 是关于有限域中的多变量多项式零点个数的紧致上界,具体表述如下:
对于域 \(\mathbb{F}\) 上的每个阶最多为 d 的 n 变元非零多项式,对于任意有限集合 \(S \in \mathbb{F}\),
\[ \begin{equation} Pr_{r_1,\cdots,r_n \leftarrow S}[f(r_1, \cdots, r_n) = 0] \le \frac{d}{|S|} \end{equation} \]
等价地, f 在 \(S^n\) 中最多有 \(d|S|^{n-1}\) 个根, (\(Z(f)\) 是 f 的零点集):\(|Z(f) \cap S^n| \le d*|S|^{n-1}\)
symbolic representation
In math scenarios, the symbolic representation is used for
polynomials by utilizing Matlab or the sympy
library of Python. Although I prefer the Python library, it turns out
the sympy library is truly not as good as
Matlab in practice. So prefer Matlab.
Note: The interpolation method for polynomials in the finite field is
not fully implemented in sympy. Therefore,
it is not recommended to use it for polynomials in the finite field.
Example code in Jupyter Notebook:
| 1 | from IPython.display import Math | 
\[f(x) = \sum_{i=0}^{n-1} a_i x^i\]
将信息编码成 coefficient form 多项式的系数,还是编码成多项式的 point-value representation 的值
