Skip to content

算法Algorithm

多项式恒等式测试

Polynomial identity testing · PIT

对形式多项式电路逐门随机求值,以次数预算给出单边漏检界,保留非零见证并处理小域与位成本。

形式陈述 ​

输入是表示多项式的电路,不是已经展开的系数表 ​

给定固定域F上的无除法算术电路C,叶子是域常数或变量,内部门执行加、减、乘,指定一个输出门。问题是输出的形式多项式 PC 是否恒等于零。比较C和D时,增加一个减法门,测试 PC−PD 即可。

若输入已经是合并同类项的显式稀疏系数表,检查所有系数是否为零便能解决问题。这里的困难是同一个小电路可以隐含很多单项式,展开会失去紧凑表示。

先给每个门一个形式次数上界:常数为0、变量为1,加减取两个前驱上界的最大值,乘法取其和。输出上界记为D;实际次数可能因抵消而更小,零多项式也可有很大的上界。

随机测试的两个出口 ​

选非空有限 S⊆F,重复t≥1轮。每轮独立均匀抽 r∈Sn,按拓扑顺序计算每个门在r处的值。

  • 一旦输出非零,返回NONZERO以及代入点和输出值。重算这一点即可验证 PC≠0
  • 若全部输出为零,返回NOT_DETECTED。若P实际非零,发生这个出口的概率至多 min(1,D/|S|)t

第二条使用Schwartz–Zippel引理,条件是整个电路在抽随机点之前已经固定。它是对非零输入的漏检概率界,不是看到零值之后“输入为零的后验概率”。若D=0,输出与变量无关,计算一次就能确定ZERO或NONZERO。

直觉

每个门只做它在这个点上的运算 ​

设两个前驱门分别代表f和g。若已保存f(r)、g(r),当前加法门只需相加,乘法门只需相乘,无须知道它们各有多少项。拓扑遍历的不变量是:处理过的每个门,保存值恰等于该门形式多项式在r处的值。

变量和常数门满足不变量。对加、减、乘门,代入与这些运算相容,所以前驱值正确就推出当前值正确。共享子电路只计算一次;用递归反复展开共享节点会把DAG误当成树。

零点是可以碰到的,非零见证不能伪装 ​

若 PC=0,所有点值必为零;算法不会返回错误的NONZERO。如果P非零,只有碰巧落在其零点集合里才漏检。因而多轮测试取“是否至少一次非零”,无需多数投票。

例如真实P=x时,代入x=0没有发现差异,代入x=3就给出确定见证。返回3并不说明算法猜得更准,而是提供了可独立验证的反例点。

例子与边界

一个逐门复算的恒等式 ​

在 F17 上比较

A=(x+y)2,B=x2+2xy+y2.

取(x,y)=(3,5)。左边先得x+y=8,再得64≡13;右边的三项为9、30≡13、25≡8,相加30≡13,差为0。把B改成B+x,同一个点的差变成−3≡14,立刻返回NONZERO。

电路中x、y可被多条边引用,输出差的形式次数上界D=2。取 S={0,…,15},每个坐标恰用4个公平随机位;四轮一般漏检界为 (2/16)4=1/4096。对于刚才改动后的特定差−x,真实单轮漏检率只有1/16,但程序无需先化简到−x才有保证。

小特征需要保留,取模不能随意替换 ​

在 F2 上,P=x²−x不是形式零多项式,却在0和1上都为零。重复一千轮仍检测不到。沿用有限域的扩域构造,令 F4=F2[α]/(α2+α+1);于是 P(α)=α2+α=1。底域到扩域的嵌入保持非零系数,问题没有改变。

反过来,把整数电路直接模p化简只能测试它在特征p下的像。例如整数常数p本来非零,却被该取模变成零。要由模素数测试推出有理数或整数上的一般PIT,还需控制分母、系数大小和坏素数;本页的域内算法没有免费解决这一转换。

分母、浮点和自适应电路不在当前保证里 ​

除法门可能在代入点分母为零,即使表达式在别处有定义。要纳入除法,须另行处理分母和定义域,不能把异常值当成输出零。参考实现只接受const、var、add、sub、mul五种门。

浮点小数中的“等于零”会受舍入与消去误差影响;这里用精确有限域运算。参考程序的常数是整数对指定素数取余,素数限于明列并已验证的六个值,不把一般素性判定或任意扩域构造藏进一次函数调用。

若对手在看见本轮随机点后才提交电路,可以提交在该点恰为零的非零多项式。此时应改变交互协议,而非继续引用固定输入的漏检界。

推论与应用

时间、随机位和存储分别计数 ​

设电路有s个门、n个变量。验证拓扑前驱并计算次数上界需要O(s)个整数操作;即使连续平方使D达到指数大小,次数整数的位长仍为O(s)。每轮求值需要O(s+n)个域操作及O(s+n)个域元素空间,t轮总计O(t(s+n))域操作;程序一次只保留当前轮全部门值,日志另保留t个点及输出值,占O(t(n+1))个域元素。

对b位素数域,约化后每个门值占O(b)位。朴素整数乘法和取模可按O(b²)位操作收费,加法更便宜;于是求值部分为O(t(s+n)b²),另加读取常数、处理索引、次数大整数与生成随机位的成本。固定机器字模型下b受字长限制,才可把域运算近似看作常数。

为得到有界随机位接口,可以选择 |S|=2ℓ≤|F|,并提供从ℓ位串到S的一一编码。素数域中可取S={0,…,2^ℓ−1}。每轮恰需nℓ位;若还满足 2ℓ≥2D,每轮漏检至多1/2。对于小域,应提供足够大的同特征扩域及其运算。域构造与编码的位成本必须另计,不能只靠“抽一个域元素”声称全流程多项式时间。

单边误差方向取决于问的是零还是非零 ​

若把问题写成“是否非零”,零输入永不被接受,非零输入以至少1/2概率被接受,这对应RP的单边接受方向。若问“是否恒等于零”,把全部零值当成接受,则方向反过来,是coRP。这里的复杂度归类以域表示、抽样和次数预算都能在相应输入长度的多项式资源内实现为前提。

Tutte矩阵给出具体的代数判定接口:无需把行列式展开成指数多个项,先代入边变量,再用精确消元计算数值行列式。电路PIT与该矩阵例子共享零点界,但它们的求值器可以不同。

终点迁移:给出见证,而非只打印布尔值 ​

代数随机化证书终点要求提交电路、底域、D、S、每轮代入点与输出值。把最后一个−x改成−(x−y),重新检查实际零点率与统一D/|S|界;再说明为何把两个坐标强制取相同值会完全遮住这个改动。

参考资料
  1. Gregory Valiant、Mary Wootters,CS265 Lecture 1,2022,§§2、3–3.1,PDF pp.1–3、5–7:随机计算模型与随机代入PIT。本文的DAG接口、见证日志和明确位成本为实现展开。
  2. Virginia Vassilevska Williams,6.890 Lecture 16: Perfect Matching,2021,§1.1,PDF p.3:先代入Tutte矩阵再求行列式的应用。
关系图谱11 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系