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

Posted mutourend

tags:

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

1. 引言

由于Halo2 circuit中的gate是operate “locally”(on cells in the current row or defined relative rows),因此,通常需要从 任意cell中复制a value 到 gate所在当前行中。通常以equality argument的方式来实现,用于约束source cell和destination cell中的值相同。

Halo2中通过构建a permutation来实现equality constraints,并在proof中使用a permutation argument来完成相应约束。

所谓permutation:
为a one-to-one and onto mapping of a set onto itself。

可将a permutation唯一分解为cycles组合(up to ordering of cycles, and rotation of each cycle)。

有时,也会用cycle notation来表示permutation。令 ( a   b   c ) (a\\ b\\ c) (a b c)表示a cycle,其中 a a a maps to b b b b b b maps to c c c c c c maps to a a a,可将此扩展为任意size的cycle。
将两个或多个cycles写在一起,表示相应的permutation组合。如 ( a   b )   ( c   d ) (a\\ b)\\ (c\\ d) (a b) (c d)表示a permutation:
a a a maps to b b b b b b maps to a a a c c c maps to d d d,以及 d d d maps to c c c

2. 构建permutation

2.1 目标

想要构建a permutation,其中,a equality-constraint set中的每个subset of variables可形成a cycle。
如,假设具有定义了如下equality constraints的circuit:

  • a ≡ b a \\equiv b ab
  • a ≡ c a \\equiv c ac
  • d ≡ e d \\equiv e de

从而具有equality-constraint sets { a , b , c } \\{a,b,c\\} {a,b,c} { d , e } \\{d,e\\} {d,e}。即想构建permutation:
( a   b   c )   ( d   e ) (a\\ b\\ c)\\ (d\\ e) (a b c) (d e)
其中定义了mapping of [ a , b , c , d , e ] [a,b,c,d,e] [a,b,c,d,e] to [ b , c , a , e , d ] [b,c,a,e,d] [b,c,a,e,d]

2.2 算法

为了跟踪the set of cycles,需使用 disjoint set data structure,这种方式比较简单也易于实现,尽管不是最优的方案。

将current state 表示为:

  • 1)一个数组 m a p p i n g \\mathsf{mapping} mapping 来表示permutation 本身。
  • 2)一个辅助数组 a u x \\mathsf{aux} aux 来跟踪每个cycle的distinguished element。
  • 3)另一个数组 s i z e s \\mathsf{sizes} sizes 来跟踪每个cycle的size。

对于cycle C C C中的每个元素 c c c,有 a u x ( x ) \\mathsf{aux}(x) aux(x)指向该元素 c ∈ C c\\in C cC。这可支持快速判断2个element x , y x,y x,y是否在同一cycle——check a u x ( x ) = a u x ( y ) \\mathsf{aux}(x)=\\mathsf{aux}(y) aux(x)=aux(y)是否成立。
同理, s i z e s ( a u x ( x ) ) \\mathsf{sizes}(\\mathsf{aux}(x)) sizes(aux(x)) 为包含 x x x的cycle size。(仅适于 s i z e s ( a u x ( x ) ) \\mathsf{sizes}(\\mathsf{aux}(x)) sizes(aux(x)),而不是 s i z e s ( x ) \\mathsf{sizes}(x) sizes(x)。)

以identity permutation为例:
对于所有的 x x x,有 m a p p i n g ( x ) = x , a u x ( x ) = x , s i z e s ( x ) = 1 \\mathsf{mapping}(x)=x,\\mathsf{aux}(x)=x,\\mathsf{sizes}(x)=1 mapping(x)=x,aux(x)=x,sizes(x)=1

为了增加an equality constraint l e f t ≡ r i g h t \\mathit{left} \\equiv \\mathit{right} leftright

  • 1)check l e f t \\mathit{left} left r i g h t \\mathit{right} right 是否在同一cycle,即判断 a u x ( l e f t ) = a u x ( r i g h t ) \\mathsf{aux}(left)=\\mathsf{aux}(right) aux(left)=aux(right)是否成立,若成立,则直接返回。
  • 2)若不成立,则 l e f t \\mathit{left} left r i g h t \\mathit{right} right分属不同的cycle。将 l e f t \\mathit{left} left 标记为larger cycle, r i g h t \\mathit{right} right 标记为smaller cycle。若 s i z e s ( a u x ( l e f t ) ) < s i z e s ( a u x ( r i g h t ) ) \\mathsf{sizes}(\\mathsf{aux}(\\mathit{left})) < \\mathsf{sizes}(\\mathsf{aux}(\\mathit{right})) sizes(aux(left))<sizes(aux(right)),则将 l e f t \\mathit{left} left r i g h t \\mathit{right} right 两者交换。
  • 3)设置 s i z e s ( a u x ( l e f t ) ) = s i z e s ( a u x ( l e f t ) ) + s i z e s ( a u x ( r i g h t ) ) \\mathsf{sizes}(\\mathsf{aux}(\\mathit{left})) = \\mathsf{sizes}(\\mathsf{aux}(\\mathit{left})) + \\mathsf{sizes}(\\mathsf{aux}(\\mathit{right})) sizes(aux(left))=sizes(aux(left))+sizes(aux(right))
  • 4)跟随 r i g h t \\mathit{right} right (smaller)cycle的mapping around步骤,对于每一个元素 x x x,设置 a u x ( x ) = a u x ( l e f t ) \\mathsf{aux}(x)=\\mathsf{aux}(\\mathit{left}) aux(x)=aux(left)
  • 5)通过交换 m a p p i n g ( l e f t ) \\mathsf{mapping}(\\mathit{left}) mapping(left) m a p p i n g ( r i g h t ) \\mathsf{mapping}(\\mathit{right}) mapping(right),将smaller cycle 拼接成 larger cycle。

比如,已知2个disjoint cycles ( A   B   C   D ) (A\\ B\\ C\\ D) (A B C D) ( E   F   G   H ) (E\\ F\\ G\\ H) (E F G H)

A +---> B
^       +
|       |
+       v
D <---+ C       E +---> F
                ^       +
                |       |
                +       v
                H <---+ G

在增加constraint B ≡ E B \\equiv E BE 后,以上算法生成的cycle为:

A +---> B +-------------+
^                       |
|                       |
+                       v
D <---+ C <---+ E       F
                ^       +
                |       |
                +       v
                H <---+ G

若不在第1)步中验证 l e f t \\mathit{left} left r i g h t \\mathit{right} right是否在同一cycle,则将end up undoing an equality constraint。以如下constraints为例:

  • a ≡ b a \\equiv b ab
  • b ≡ c b \\equiv c bc
  • c ≡ d c \\equiv d cd
  • b ≡ d b \\equiv d bd

若只使用上述算法中的步骤5)来add an equality constraint,则最终构造的cycle为 ( a   b )   ( c   d ) (a\\ b)\\ (c\\ d) (a b) (c d),而不是正确的cycle ( a   b   c   d ) (a\\ b\\ c\\ d) (a b c d)

3. Argument specification

如需check a permutation of cells in m m m columns,可使用Lagrange basis polynomial v 0 , … , v m − 1 v_0, \\ldots, v_{m-1} v0,,vm1 来表示。

可将 m m m columns中的每个cell 以a unique element of F × \\mathbb{F}^{\\times} F×来标记。

假设有permutation:
以上是关于Halo2 学习笔记——设计之Proving system之Permutation argument的主要内容,如果未能解决你的问题,请参考以下文章

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

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

Halo2 学习笔记——设计之Proving system之Circuit commitments

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

Halo2 学习笔记——设计之Proving system之Multipoint opening argument

Halo2学习笔记——设计之Protocol Description