HyperNova
HyperNovaはNovaを拡張した、CCS(Customizable Constraint System)フォーマットのインスタンスを畳み込むスキームです。
この解説は、こちらの[SuperSpartan by Hand](https://anoma.net/research/superspartan-by-hand)と、[HyperNova by Hand](https://anoma.net/research/hypernova-by-hand)を参考にしています。
概要
HyperNovaは、CCSのMLEをSum-Check Protocolで証明する際に、内側の重いsum-checkをランダム線形結合して一番最後に一気に証明することで、各ステップの証明を減らすようなfolding-schemeです。
まずMLE (Multilinear extensions)とは、 のような多変数多項式 (-variate polynomial)が、 のような多重線形多項式 (multilinear polynomial)となることを指します。また、MLEの多項式内の全ての項の次数は一次以下となるのが特徴です。
をboolean-hypercube上のどの点()で評価しても全てになることを確認するのがzero-check、全ての合計がになることを確認するのがsum-checkになります。
検証者がこの多項式 を、boolean-hypercube上の全ての点で多項式を評価するのは、回の評価が必要ですが、sum-check protocolでは、回まで減らすことができます。
この記事の前半では、CCSをMLEへ拡張したsum-checkを証明する所まで解説し、後半ではsum-checkを畳み込む方法を解説します。
MLE (Multilinear extensions)
多変数多項式 (multivariate polynomial) をMLEにするには、次のを使います。これは、 のときはを、それ以外はとなる多重線形多項式(multilinear polynomial)です。

には次数が1次以上の項が含まれているので、をで評価してしまった値をで選ぶことで、全ての項の次数が1次以下になるようにします。次の式を見ると、の中にある変数はによって既に評価され展開されています。

CCSをMLEへ拡張
CCSの定義
CCSでは、次の式を満たす, , , が必要となります。は、R1CSでの,,の行列に対応し、はアダマール積を行う行列のグループ、は定数項、はinputやwitnessなどです。

R1CSからCCSへ
この記事では、次のような、R1CSをCCSへ変換した形を扱っていきますので、は、となります。また、,,は、R1CSの,,に対応しますが、MLEにするには行と列が2の倍数である必要があるので、4行目がゼロベクトルでパディングされています。

CCSからsum-checkへ
次の行列の演算を含む式をmultilinear polynomialにするには、まずとを多項式として表現する必要があります。

はなので、を: の多項式として考えます。を指定すれば、それに対応するが返ってきます。
これをMLEにするので、次のようにを使ってを定義します。HyperNovaでは、です。

したがって、のmultivariate polynomialは、次のようになります。このとき、は全てので展開しておきます。

は3つありますので、それらを合わせると、次のような多項式を定義できます。

ここで注意すべきは、の内部で多項式を掛けてしまっているので、multilinear polynomialではないということです。そこで、を使ってMLEにしていきます。

Schwartz-Zippel lemmaでΣを減らす
全てのでとなることを確かめられれば、CCSの制約が成り立っていることを確認できます。Schwartz-Zippel lemmaにより、 となる確率が高いと分かります。
次の式では、と一致する項がによって残され、それがであることが確かめられます。

これを利用すると、を減らすことができます。このをsum-check protocolで証明していきます。

Sum-check protocol
上のを使って、sum-check protocolでを証明していくのだが、ProverとVerifierは次の2種類のsum-checkを行うことになる。
Outer sum-check: for all
Inner sum-check:
Outer sum-checkを行うときに、の中にもsum-checkの形が現れるので、これもinner sum-checkとして別に行う。
sum-check protocolでは、多重線形多項式のそれぞれの変数に対して一変数多項式を作り、再帰的に証明と検証をしています。
Outer sum-check
Round 1
ProverはVerifierに次のを主張する一変数多項式を送信します。
を受け取ったVerifierは、 となることを確認します。
内では、のを既にで評価されているはずなので、をで評価して合計がであること確認することは、. を確認したことと同じになります。
Round 2
次に、Verifierにであつことを主張するために、次のを主張するをVerifierに渡します。
を受け取ったVerifierは、 であることを確かめます。
内ではがで既に評価され展開されているので、で既にが評価されているを、で評価した合計は、と同じになるはずです。
ここまでで、Verifierはとが確かにから生成されたことが確認できたので、によってを二つのランダムな点で評価することができます。であることは、高確率で となります。

内部に含まれるsum-checkは別で証明する
Verifierがを評価するとき、内部にはの形が複数現れ、これはVerifierが直接計算しなければなりません。この計算も同じくsum-check protocolでVerifierの計算量を減らすことができます。
Inner sum-check
の内部で行われるsum-checkは複数あるので、複数のsum-checkを避けるため、sum-checkを束ねたbatch inner sum-checkを行います。
Proverは次のように、それぞれのsum-checkをVerifierから渡されたでランダム線形結合し、この多項式をsum-checkで証明することで三つのsum-checkを証明します。

Round 1
batch inner sum-checkもouter sum-checkと同様に、それぞれの変数に対しての一変数多項式をVerifierに送信し、再帰的に証明していきます。Round1では、Proverは以外の変数を全てのについて評価し展開したを主張するをVerifierに渡します。

を受け取ったVerifierは、 をすることで、Proverが主張するランダム線形結合された値 を導けることを確認します。
Round 2
次に、Verifierから受け取ったでを評価し、をで評価した次の一変数多項式を主張するをVerifierに送信します。

を受け取ったVerifierは、 であることを確かめます。
内ではがで既に評価され展開されているので、で既にが評価されているを、で評価した合計は、と同じになるはずです。
Round 3
についての一変数多項式を作り、Verifierに送信します。

Verifierはを確かめます。最終的にVerifierは次のことを確かめられます。

Final check
Reference
Last updated