Switch-board (Nebula)

Nebulaのswitch-boardは、1つの回路内に切り替えできる複数の回路を混在させることができるテクニックです。

Switch-boardは、HyperNovaやMovaなどのいくつかのfolding-schemeであれば、変更なしに導入できます。論文では、R1CSに沿って説明されていますが、CCSでも同様の手法を使って書くことができます。さらに、switch-boardを使うことで、使用していない回路にはコストがかからないpay-per-useをfolding-schemeの変更なしに行えます。

HyperNovaのようなすでにNon-uniformなIVCでは、このswitch-board回路をいくつかコピーして一つの回路にすることで、複数の回路を一つのfoldingで実行でき、foldingのオーバーヘッドを減らすことも期待できます。

なお、一つのswitch-board回路で一度に実行できる内部の回路の個数は1つだけです。

R1CSで書かれた\ell個の異なる回路、(ただし入力の長さは同じ)、があるとします。

AiziBizi=Ci,zi,i[1,]A_i \cdot z_i \circ B_i \cdot z_i = C_i, \cdot z_i, i \in [1, \ell]

AiA_iを全て結合したAA^*を考えますが、Bi,CiB_i, C_iも同様にuniversal-switchboard回路を作ることができます。

下の図で、AiA_iSwitch constrains以外の場所は全て0となります。また、この行列に対するzz^*は、図内の右側です。

この行列に対するzは z=(1,×,w)z^* = (1, \times, w^*)で定義されます。ww^*には、選択したい回路のフラグと、その回路に対する入力とwitnessが含まれますが、それ以外は全て0となります。

これを実現する制約をswitch constrainsに定義していきます。まず、AiA_iに対応するzをzi=(si,xi,wi)z_i ' = (s_i, x_i, w_i)とします。

w=(s1,x1,w1,s2,x2,w2,...,s1,x1,w1,s,x,w)w^* = (s_1, x_1, w_1, s_2, x_2, w_2,...,s_{\ell-1}, x_{\ell -1}, w_{\ell -1}, s_{\ell}, x_{\ell}, w_{\ell})

sis_iはセレクターで、次のSingle switch constraintBinary switch constraintを満たすように制約します。

  1. Single switch constraint: Enforce i=1si=1.\sum_{i = 1}^{\ell} s_i = 1.

  2. Binary switch constraint: For i[1,]i \in [1, \ell], enforce si(1si)=0s_i \cdot (1-s_i) = 0

次に、このセレクターsis_iを使って、使用したい回路以外の入力を0であることを強制したいので、次の制約を定義します。

  1. Input consistency constraint: For i[1,]i \in [1,\ell], enforce ×si=xi\times \cdot s_i = x_i

もし、sk=1s_k = 1の場合はxi=0,ikx_i = 0, i \neq kである必要があります。さらに、入力が0の回路はwitnessが0でも問題ないので、wi=0,ikw_i = 0, i \neq kとすることができます。

HyperNovaでは0へのコミットは無料なので、使わない回路にコストはかかりません。

Novaの場合は、もう少し工夫が必要ですが、同様の方法で実現できます。

参考

Last updated