$$
\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\fbra#1{\mathinner{\left({#1}\right|}}
\def\fket#1{\mathinner{\left|{#1}\right)}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}
$$
はじめに
前回の記事の「おわりに」で予告していた通り、今回の記事では、ZX-calculusの基本を勉強してから、線形符号化(linear encoding)がZX-diagramで表現できることを見ていきます。フェルミオン・量子ビット変換において、線形符号化はフォック空間の基底(固有状態)を量子ビット空間の基底(固有状態)に変換する際に登場しました。登場しましたというより、この線形符号化こそがフェルミオン・量子ビット変換を規定するための大本になる本質的なものでした。それが、ZX-diagramで表現できるというわけです。ん?でも、線形符号化ってバイナリ行列で表現できるんだからそれで十分じゃね?なんかよくわからんZX-diagramとかなくても良くない?てな声が聞こえてきそうです。が、ZX-diagram表現を採用することによって、後々面白いご利益があります。ということなので、しばらく辛抱してお付き合いいただければと思います。それでは、はじめます!
ZX-calculusとは
ZX-calculusは、量子力学や量子回路を直感的に理解・操作するための図形的な(グラフィカル)言語です。簡単な図形要素を組み合わせてグラフを構成することで線形演算子を表現できます。表現された図のことをZX-diagramと呼びます(参考文献2,3)。テンソル・ネットワークの一種とも言えるのですが、量子回路をよりよく表現できるように特別な図形要素をいくつか導入しており、その図形要素の組み合わせに関して成り立つ、基本的な書き換え規則が定義されています。この規則を適用することで量子回路を変形したり簡潔化するようなことも考えやすくなるため、量子回路最適化やコンパイル技術への応用が進められていたり、量子誤り訂正や測定型量子計算の研究にも活用されていたりします。
X-spiderとZ-spider
一番簡単な図形要素はX-spiderとZ-spiderです。下図の上がZ-spiderで下がX-spiderです。$\alpha,\beta$には実数値が入ります。中心の緑丸または赤丸1に向かって複数の線がつながっていますが、この線のことをwireと呼びます。各々左側に$m$本のwire、右側に$n$本のwireが見えます(点々で複数本のwireがあるということを表しています)。各wireは量子ビットを表しており、左側が入力側で右側が出力側ということになります。したがって、下図は$n$量子ビットの状態が入ってきて、$m$量子ビットの状態が出ていく図です。その変換は右辺の式で示した通りです。定義からわかるように$\alpha,\beta$は各々2つの項の位相差を表しているため、位相または回転角と今後呼ぶことにします。
図1: X-spiderとZ-spider
このspiderをつなげて以下のようにすると、図1で示した変換式を次々に施すような計算を表現することができます。2つのspiderをwireでつなげるというのは、行列同士の掛け算、すなわちテンソルの言葉でいうと縮約を意味しています。左方向にspiderがつながっていないwireが6本、右方向に4本見えると思いますが、ZX-diagramの全体を構成した場合、どのwireが入力でどのwireが出力側かが決められています。左側に伸びたwireを入力側、右側に伸びたwireを出力側としている文献が多いですが、下方向を入力、上方向を出力にする場合もそれなりにあるので、ご注意ください2。その他、spiderの位置は接続関係が保持されている限り、どこの場所に移動させてもかまいません。ということも要注意ポイントです。
図2: ZX-diagramの例
量子回路とZX-diagram
図1の定義から、下図のように量子ゲートをX-spiderまたはZ-spiderで表すことができます。基本的な1量子ビットゲートはブロッホ球上の回転操作ですが、回転軸がX軸なのかZ軸なのか、回転角が$\pi,\pi/2,\pi/4$のどれなのか、あるいはそれらの組み合わせなのかという違いによっ
て、X-spiderとZ-spiderで全部記述できてしまいます。$Z,X,T,T^{\dagger},S,S^{\dagger}...$という書き方だと何軸まわりの何度回転かということの対応が記号からはわからないですが、X-spider,Z-spiderで表すと、一目瞭然でとても合理的な表現だと思います。
図3: 代表的な1量子ビット・ゲート
上の図3ではX-spider,Z-spiderには常に位相を表す実数値が入っていました。これを空欄にすると位相が0、つまり位相差がない変換(恒等演算子)を表します。以下の図4の最初の2つは空欄なので、これは恒等演算子$I$です。図4の下半分はwireが出力方向にしか伸びていません。この場合はケットであるとみなされます(逆に入力方向に伸びている場合はブラとみなされます)。各々定数倍を除いて$\ket{+},\ket{-},\ket{0},\ket{1}$となります。なぜこうなるかはX-spider,Z-spiderの定義から直ちにわかると思います。
図4: 恒等演算子と量子状態
1量子ビットゲートについては以上です。では、2量子ビットゲート(例えば、CNOTゲート)はどんな表現になるのでしょうか。実は以下の図5に示したものがCNOTゲートのZX-diagramです。なぜこれがCNOTゲートかというと、青点線で示した直線でAとBの2つの部分に分けて考えればわかります。Aは1入力2出力のZ-spiderと1本のwire(恒等演算子)とのテンソル積で、Bは1本のwire(恒等演算子)と2入力1出力のX-spiderとのテンソル積です。右半分で示したように、各々を行列表現にしてテンソル積を実行した後、BとAの行列積を計算すると、確かにCNOTゲートの行列表現になります。
図5: CNOTゲート
X-spiderとZ-spiderの位置は接続関係を維持したままどのようにも変えられます。図5の青点線で示した分け方は一例です。Z-spiderを右に移動して、X-spiderを左に移動させて、図6の右のようにしても同じ演算を表します。この状態で青点線で分けると別の分け方になりますが、行列計算すると図5と同じCNOTの行列表現が得られます(はずです)。
図6: CNOTゲートのZX-diagram
これで、一通り基本的な量子ゲートのZX-diagram表現がわかったので、任意の量子回路をZX-diagramで表現することができるようになりました。以下の図7の上半分が量子回路で下半分がそれに対応したZX-diagramです3。単純にひとつずつ量子ゲートをX-spiderまたはZ-spiderまたは黄色い四角のアダマールゲートに置き換えれば良いだけです。
図7: 量子回路とZX-diagramの例
ZX-diagramの書き換え規則
それでは次に、グラフィカル言語としてのZX-calculusの真髄である「書き換え規則(rewrite rules)」について説明します。量子回路においては、同じ演算を実行する量子回路表現は一通りではなく、例えば、$-H-Z-H-$が$-X-$に書き換えられたり、$-T-S-T-$が$-Z-$に書き換えられたりします。これ以外にも非常に多くの書き換え規則4がありこれらのルールを駆使することによって、量子回路の最適化が実現されていたりします。が、ZX-calculusにおいては、以下の図8に示した書き換え規則があるのみです5。この規則を繰り返し適用することで等価なdiagramに変形できます。
図8: ZX-diagramの書き換え規則
この書き換え規則のご利益を感じられるような例を以下の図9に示します(参考文献4)。適用例①は、X-spiderとZ-spiderが2本のwireで接続されている場合、両者の間に接続がないことに等しいということを意味しています。どうでしょう。これ、わかりますでしょうか。1番目の等号は単にwireをひねっているだけです。2番目の等号はidentity ruleを使っています。3番目の等号はfusion ruleですね(それを逆に適用しています)。4番目の等号はbialgebra ruleを使っています。5番目の等号はcopy ruleを使っています6。最後の等号は前段の上の孤立したdiagramが単なるスカラー値であるため無視しています。
適用例②は、CNOTゲートを上下逆向きに3個つないで構成したものが、どうしてswapになっているかを示した例になります。最初の等号では最後のCNOTの上下を反転させてwireをねじれさせています。2番目の等号ではbialgebra ruleを使っています。3番目の等号ではfusion ruleを使っています。4番目の等号では上の適用例①を使っています。最後の等号ではidentitiy ruleを使っています。結果として2本の入力wireの上下が入れ替わったものが出力wireになっています。これはまさにswapゲートの演算を端的に言い表した図になっています。
図9: 書き換え規則適用例
以上で、ZX-calculusおよびZX-diagramの基本説明は終わりなのですが、次節では、今後頻繁に使っていくことになるScalable ZX-diagramについて説明しておきます。
Scalable ZX-diagram
ZX-diagramの記述方法はわかりやすい反面、多数の量子ビットを一度に記述しようとすると、同じようなwireとspiderを繰り返し書かないといけないなどの不便が発生します。そのため、一気に複数のwireやspiderを表現する記法として「Scalable ZX-diagram」が編み出されました。図10にその記号の定義を示します。左上は$a+b$本のwireが$a$本と$b$本のwireに分かれることを表している記号です。複数本のwireは太線で表してその数を横に記載します(図の他の部分から明らかな場合は省略することもあります)。分岐点は三角記号で表します。右上はその逆で$a$本のwireと$b$本のwireが三角記号の地点で合流して$a+b$本の束になることを表しています。左下はよく見ないとわかりにくいかもしれません。2入力2出力のZ-spiderが沢山あって各々対応するwireが束になって2束入力2束出力を構成する図の定義です。Z-spiderの回転角は各々異なっていても良くて、それをベクトルで表します。右下は、それのX-spider版です。
図10: Scalable ZX-diagramの記号の定義(その1)
記号の定義はもう一つあります。図11は$n$入力$m$出力のZX-diagramなのですが、$m$個のZ-spiderと$n$個のX-spiderからなる2部グラフで表された演算を$A$としたときに、それを矢羽根の上に$A$を置いた記号で表しましょうという定義です。この演算$A$は、実はバイナリ・ベクトルをバイナリ・ベクトルに変換するバイナリ行列です。すなわち、線形符号化に対応した行列です。線形符号化が、なんでこんな2部グラフで表現できるのか、ちょっとわかりにくいかもしれません。
図11: Scalable ZX-diagramの記号の定義(その2)
ということで、図12の具体例を見てください。全体が3入力3出力のZX-diagramとなっており、入力側の3個のZ-spiderと出力側の3個のX-spiderがwireで接続されています。Z-spider同士、X-spider同士はwireでつながっていないので、これは2部グラフです。ここに、バイナリ・ベクトル$(x_1,x_2,x_3)$が入ってきたと思ってください。そうするとどんな出力ベクトルが得られるか考えてみましょう。じっと図を見るとわかると思うのですが、CNOTゲートが2個あることがわかります。1番目と2番目のwireにまたがるCNOTと2番目と3番目のwireにまたがるCNOTです。これを演算すると出力は$(x_1 \oplus x_2, x_2 \oplus x_3, x_3)$となります。この変換は図の右半分で示したような行列の積として書くことができます。このような演算を一般に図11で示したような矢羽根の上に$A$を置いた図で表すというわけです。
図12: 線形符号化とZX-diagram
記号の意味がわかったところで、これから使っていくことになる公式をいくつか紹介します。図13の1段目は、2つの連続した矢羽根は結合できることを表しています7。2段目は、scalableな位相ゼロのZ-spiderによって矢羽根が分岐されること、および、scalableな位相ゼロのX-spiderによって2つの矢羽根が合流されることを表しています。3段目は、scalableなX-spiderおよびZ-spiderと矢羽根が交換した場合の規則を表しています。最後の4段目は、逆行列に対する矢羽根は向きが反転した矢羽根になるということを表しています8。
図13: Scalable ZX-diagramの公式(その1)
次の図14の1段目は、行列$A,B$を縦に並べた行列を1個の矢羽根で表したとき、三角記号によって矢羽根$A$と矢羽根$B$に分岐できることを表しています。また、矢羽根$C$と矢羽根$D$を三角記号で合流させると、行列$C,D$を横に並べた行列演算になるということを表しています。2段目は、ちょっとわかりにくいかもしれませんが、1段目の公式を注意深く適用するとこのような公式になります。
なぜ、このような公式が成り立つのかについては、長くなるのでここでは省略しますが、ZX-diagramの書き換えルールを地道に適用して変形していけばわかると思います。
図14: Scalable ZX-diagramの公式(その2)
フェルミオン・量子ビット変換と線形符号化とZX-diagram
最後に、前回の記事で示した、「Jordan-Wigner変換」「Parity変換」「Bravyi-Kitaev変換」に対応した変換行列(線形符号化)が、どのようにZX-diagramで表現できるのかを見てみます。以下の図15の通りです。各々量子ビット数が4の場合の例になっていますが、4以外の場合も簡単にわかると思います。
図15: フェルミオン・量子ビット変換と線形符号化とZX-diagram
おわりに
今回の記事で、フェルミオン・量子ビット変換の変換行列(線形符号化)が、ZX-diagramで表現できることがわかりました。おそらく、これで何がうれしいの?という疑問符が、みなさまの頭の中にまだ残ったままになっていると思います。また、ScalableなZX-diagramを今後使っていくと言いつつ、まだ使っていません。
次回の記事では、フェルミオン・量子ビット変換後の生成消滅演算子やフェルミオン演算子(例えば、ハミルトニアン)が具体的にZX-diagramで記述できることを示します。今回の一連のブログ記事で説明しようとしている論文("From fermions to Qubits: A ZX-Calculus Perspective")の本論に、いよいよ入っていきます。それでは、次回をお楽しみに。
以上
参考文献
関連記事
ZX-calculusを用いたフェルミオン・量子ビット変換(1)
ZX-calculusを用いたフェルミオン・量子ビット変換(3)
ZX-calculusを用いたフェルミオン・量子ビット変換(4)
-
Z-spiderが緑丸、X-spiderは赤丸ということになっているのですが、文献によってはZ-spiderを白丸、X-spiderをグレー丸にしている場合もあります。 ↩
-
左を入力、右を出力にするのは量子回路のイメージと一致させるためですが、下を入力、上を出力にするのは多分物理学(特に相対論)ででてくる世界線を描くときの時間軸と合わせているのだと思います。 ↩
-
ちなみに、これはトフォリゲートを1量子ビットゲートと2量子ビットゲートで展開した回路です。 ↩
-
これ、どのくらい多くのルールがあるのでしょうか。すくなく見積もっても数十パターン(おそらくもっと?)はあると思うのですが、よくわかりません。単純にA=Bのようにルール化できないものもあったりしますし。 ↩
-
X-spider,Z-spiderの定義からこの規則が成り立つことは簡単に証明できます。ここではいちいち証明しませんので、各自確認してみてください。宿題ですw ↩
-
ここで、色反転したfusion ruleとcopy ruleも使っています。図8で示したfusion ruleとcopy ruleにhadamard ruleを適用することで色反転のルールを導くことができます。 ↩
-
言わずもがなですが、$A$の出力wireと$B$の入力wireの本数は一致している必要があります。 ↩
-
Z-spiderとX-spiderからなる2部グラフのすべてが逆を持つとは限りません。逆向き矢羽根が逆行列になるのは$A$が正則な場合だけです。 ↩