译自 halo2 book:concepts/arithmetization.md
PLONKish 算术化
Halo 2 所使用的算术化(arithmetization)来自 PLONK,更确切地说是它的扩展 UltraPLONK,后者支持自定义门(custom gates)和查找论证(lookup arguments)。我们称之为 PLONKish。
PLONKish 电路是以一个值的矩形矩阵来定义的。我们用通常的含义来指代该矩阵的行(rows)、列(columns)和单元格(cells)。
一个 PLONKish 电路依赖于一个配置(configuration):
-
一个有限域(finite field) ,其中单元格的值(对于给定的陈述和见证)将是 中的元素。
-
矩阵中列的数量,以及对每一列的规约——它是固定(fixed)、***建议(advice)还是实例(instance)***列。固定列由电路固定;建议列对应见证值;实例列通常用于公开输入(从技术上讲,它们可用于证明者与验证者之间共享的任何元素)。
-
可以参与相等约束(equality constraints)的列的一个子集。
-
一个最大约束次数(maximum constraint degree)。
-
一系列多项式约束(polynomial constraints)。这些是 上的多元多项式(multivariate polynomials),它们对每一行都必须求值为零。多项式约束中的变量可以指代当前行某给定列中的一个单元格,或相对于当前行的另一行某给定列中的单元格(带回绕(wrap-around),即对 取模)。每个多项式的最大次数由最大约束次数给出。
-
一系列查找论证(lookup arguments),它们定义在输入表达式(input expressions)(如上所述的多元多项式)和***表列(table columns)***的元组之上。
一个 PLONKish 电路还定义:
-
矩阵中的行数 。 必须对应于 的某个乘法子群(multiplicative subgroup)的大小;通常是 2 的幂。
-
一系列相等约束(equality constraints),它们指定两个给定的单元格必须具有相等的值。
-
各行处固定列的值。
根据一个电路描述,我们可以生成一个证明密钥(proving key)和一个验证密钥(verification key),它们是对该电路进行证明和验证操作所需要的。
注意,我们指定了列、多项式约束、查找论证和相等约束的顺序,尽管这些顺序并不影响电路的含义。这样做使得我们更容易将证明密钥和验证密钥的生成定义为一个确定性的过程。
通常,一个配置会定义一些多项式约束,这些约束由定义在固定列中的选择子(selectors)来开启和关闭。例如,约束 可以通过令 来对某个特定的行 关闭。在这种情况下,我们有时会把一组由若干选择子列控制、被设计为一起使用的约束称为一个门(gate)。通常会有一个标准门(standard gate),它支持诸如域乘法和域除法之类的通用操作,可能还会有支持更专门化操作的自定义门(custom gates)。