猫でもわかる Surface Code 量子計算

Posted on December 24, 2017 by Shota Nagayama
Tags: 量子計算, Surface Code

前書き

この記事は量子コンピュータ Advent Calendar 2017 の24日目、及び、SFC-RG Advent Calendar 2017 の20日目です。

最近の量子計算ブームで、量子コンピュータに興味のある方も増えてきたと思います。Surface code 量子計算はトポロジカル量子符号の1種であり、ゲート型万能量子コンピュータに搭載する量子エラー訂正符号として現在大本命です。ただ、ちょっと、surface code は確かに小難しいです。分かってしまえばそうでもないんですけどね。そこで本稿では、古典計算のエンジニアリングをバックグラウンドに持つ筆者が、理論的説明でイメージが湧かない方に平易に理解してもらえる事を目指します。

というわけで、本稿では、符号距離2 のsurface code を例に挙げて、力技で説明します。Surface code は正確には「surface code 類」とでも言うべき物であり、defect-based surface code やplanar surface code、deformation-based surface code などなどの小分類が存在します。現状重要なのは前の2つです。(ポジショントーク的には3つ目も推したいんですけど。他にもgauge-operator surface code とかrandom network surface code とか色々あります。)本稿ではplanar code を採用し、Xゲート、Zゲート、Hadamard ゲート、2 量子ビットゲートとして lattice surgery によるCNOT ゲートを説明します。T ゲートはまた後日追記します。ブラケット記法や基本ゲートを理解していることを前提にします。ぶっちゃけた話、ニールセン&チャンの1巻は分かるものの3巻には馴染みのない学生がsurface code を説明して欲しいと言うので、彼のレベルがターゲットです。

量子情報理論として順を追って展開する説明であれば、京大の藤井先生の集中講義資料が大変分かりやすいのでreferしておきます。Defect-based surface code とbraiding によるCNOT ゲートが説明されています。


Surface code が好ましい理由

量子計算では、エラー確率の高さが問題となります。このため、ゲート型万能量子コンピュータでは、エラー訂正符号に符号したまま計算するフォルトトレラント量子計算が必要とされています。 Surface code 量子計算は、フォルトトレラント量子計算を実現する量子エラー訂正符号であり、現在(2017年12月)最も有望視されています。 特に以下の点において他の量子エラー訂正符号より優れています


前提:エラーのモデル化の話

量子ビットに発生するエラーのモデルは複数ありますが、本稿では簡単のためパウリエラーを採用します。パウリエラーはその名の通りパウリ行列で表されるエラーです。 \[\begin{eqnarray} X = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}, Y = \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix}, Z = \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix} \end{eqnarray}\]

\(Y\)はグローバル位相を取り除いて \[Y = \begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix}\] と扱われます。


符号距離2 のSurface Code

まず符号距離2のsurface code の外観を見た後に、量子計算のパリティチェックについて説明し、surface codeの構造の説明に入ります。符号距離2ではエラーの検出のみが可能です。後ほど符号距離を拡張し、エラー訂正を考えます。

というわけで、下図は符号距離2 のsurface code の図です。黒点はデータ量子ビットであり、0から4の番号が振られています。また、2つの\(Z\) stabilizer と2つの\(X\) stabilizer があります。Stabilizer は、量子情報におけるパリティチェック手法です。

Stabilizer はしばしば下表のように表現されます。\(s_0 := X_0X_1X_2\)です。

\(q_0\) \(q_1\) \(q_2\) \(q_3\) \(q_4\)
\(s_0\) \(X\) \(X\) \(X\)
\(s_1\) \(X\) \(X\) \(X\)
\(s_2\) \(Z\) \(Z\) \(Z\)
\(s_3\) \(Z\) \(Z\) \(Z\)

量子計算のパリティチェック(Stabilizer)

まず古典計算でパリティチェックを使ったエラー訂正の話をします。

古典情報(現在のコンピューティング)におけるパリティチェックと符号距離

パリティチェックはエラー管理における基本的な考え方です。隣り合う2つのビットのパリティが偶である下図のような符号を考えます。\(0_L\)は000に符号され、\(1_L\)は111に符号されます。\(0_L\)\(1_L\)をフリップさせるには3つのビットを全てフリップさせます。これは符号距離3と呼ばれます。
というわけで、エラー管理において参照すべき情報は以下の通りパリティだけです。
ここで、とあるエラーが起こったと仮定します。すると、以下のようにパリティが変化します。
この時、奇パリティとビット列の際を端点として発生し得る複数の「エラー鎖」(赤点線)を考えます。
上図では①の方がエラー鎖が短く、エラー鎖の発生確率が高いので、①のエラー鎖が発生したと考えます。エラー訂正として、ビット(左)をフリップさせます。

もし①の通りにエラーが発生して居た場合、エラーは訂正されます。もし②が発生していた場合、元々発生していたエラー(真ん中、右)と、エラー訂正によるフリップ(左)によって、3つのビット全てがフリップする事になり、\(0_L\)\(1_L\)がフリップし、訂正失敗となります。

というわけで、3ビットを用いる符号では2つエラーが発生するとエラー訂正に失敗します。もっと多くのビットを用いると、もっと多くのエラーに耐えられるようになります。
上図は7ビットを用いる符号です。このパリティで考えられるエラー鎖は以下の2つです。
④の方が発生確率が高いので、④が発生したと想定してエラー訂正を実行します。

当然、もし③が発生していた場合、エラー訂正に失敗します。

ここまで読むと、「符号距離2のsurface code ではエラーの検出のみが可能で、訂正は不可能」と言った理由が分かったのではないでしょうか。符号距離2のエラー訂正符号では、1つのエラーによって長さ(=発生確率)が等しい複数のエラー鎖候補が発生します。このエラー鎖のうちどれかはエラー訂正の成功につながり、他は失敗につながります。しかし、エラー鎖の発生確率が等しいため、成功につながるものを選択する事ができません。

実はSurface Codeは、シンプルに考えると、このパリティチェックによるエラー訂正の考え方を二次元に拡張したものです。二次元になっている理由は、量子力学由来のとある制約を満たさなければならない事です。この制約は、量子計算では\(X\)\(Z\)の2種類のエラーによるパリティをチェックしなければならない事に関係します。次の小節では2種類のエラーのパリティチェックについて説明します。

\(X\)エラーを検出する\(Z\) stabilizer

Stabilizer は量子計算のパリティチェックに用いられますが、原義は特定の状態\(\vert \psi \rangle\)に対し \[ \vert \psi \rangle = U \vert \psi \rangle \] となる\(U\)です。状態\(\vert \psi_0 \rangle = \alpha \vert 00 \rangle + \beta \vert 11 \rangle\)を考えます。この\(\vert \psi_0 \rangle\)のstabilizer は\(ZZ = \begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix} \otimes \begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}\)です。 \[ \begin{eqnarray} ZZ (\alpha \vert 00 \rangle + \beta \vert 11 \rangle ) &=& \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \alpha \\ 0\\ 0\\ \beta \end{pmatrix}\\ &=& \alpha \vert 00 \rangle + \beta \vert 11 \rangle \end{eqnarray} \] このstabilizer を下図の量子回路に適用すると、量子ビット群のパリティを測定できます。オペレータ\(M_0M_1\) を測定する回路です。
\(\vert q_0 q_1 \rangle = \vert \psi_0 \rangle\)とし、\(M\)\(Z\)を代入すると\(Z_0Z_1\)になります。

q2は 2つのControlled-Z が掛けられる時には\(\vert 0_2 \rangle + \vert 1_2 \rangle\)となっています。つまり、\(\vert 0_2 \rangle\)の場合に対応して\(I_0I_1\) がかかり\(\vert \psi_0 \rangle\)はそのまま出てきます。また、\(\vert 1_2 \rangle\)の場合に対応して\(Z_0Z_1\)がかかり、\(Z_0Z_1 \vert \psi _0\rangle\)となりますが、\(\vert \psi_0 \rangle = Z_0Z_1\vert \psi_0 \rangle\)なので、そのまま\(\vert \psi_0 \rangle\)が出てきます。つまり、いずれにせよ\(\vert \psi_0 \rangle\)がそのまま出てきます。

さて、実は、この回路は実は下図に等しいです。

式に直すと以下のようになります。 \[ \begin{eqnarray} CNOT[0,2] \otimes CNOT[1,2] (\alpha \vert 0_00_1 \rangle + \beta \vert 1_01_1 \rangle)\vert 0_2 \rangle &= (\alpha \vert 0_00_1 \rangle + \beta \vert 1_01_1 \rangle)\vert 0_2 \rangle \\ \end{eqnarray} \] ここでq2を測定すると当然0が出てきます。

では、エラーが発生している場合について考えます。Q0に\(X\)エラー(bit 反転)が起こっている場合、\(\vert \psi_0 ' \rangle = \alpha \vert 1_00_1 \rangle + \beta \vert 0_01_1 \rangle\)となります。この\(\vert \psi_0'\rangle\)を上図の量子回路に入力すると \[ \begin{eqnarray} CNOT[0,2] \otimes CNOT[1,2] (\alpha \vert 1_00_1 \rangle + \beta \vert 0_01_1 \rangle)\vert 0_2 \rangle &= (\alpha \vert 1_00_1 \rangle + \beta \vert 0_01_1 \rangle)\vert 1_2 \rangle \\ \end{eqnarray} \] となり、q2 の測定で1が出てきます。\(Z\) stabilizer を用いたパリティチェックにより、\(X\)エラーを検出できました。

\(Z\)エラーを検出する\(X\) stabilizer

今度は\(Z\)エラーについて考えます。実は上の例は\(X\)エラーしか検出できないので、\(\vert \psi_1 \rangle = \alpha (\vert 00 \rangle + \vert 11 \rangle) + \beta (\vert 01 \rangle + \vert 10 \rangle)\)を考えましょう。\(\vert \psi_1 \rangle\)\(XX\)でstabilizeされます。 \[ \begin{eqnarray} \vert XX \rangle \bigl(\alpha (\vert 00 \rangle + \vert 11 \rangle) + \beta (\vert 01 \rangle + \vert 10 \rangle)\bigl) &=& \begin{pmatrix} 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \end{pmatrix} \begin{pmatrix} \alpha \\ \beta\\ \beta\\ \alpha \end{pmatrix}\\ &=&\alpha (\vert 00 \rangle + \vert 11 \rangle) + \beta (\vert 01 \rangle + \vert 10 \rangle) \end{eqnarray} \] この\(\vert \psi_1 \rangle\)\(XX\)を上記量子回路に適用すると以下のようになります。

\(Z\) stabilzierと同様に、一番下のq2は2つのControlled-X が掛けられる時には\(\vert 0_2 \rangle + \vert 1_2 \rangle\) です。\(\vert 0_2 \rangle\)の場合に対応して\(I_0I_1\) がかかり\(\vert \psi_1 \rangle\)はそのまま出てきます。\(\vert 1_2\rangle\)の場合にも、\(\vert 1_2 \rangle\)に対応して\(X_0X_1\)がかかり、\(\vert \psi_1 \rangle = X_0X_1\vert \psi_1 \rangle\)なので、そのまま\(\vert \psi_1 \rangle\)が出てきます。やはりいずれにせよ\(\vert \psi_1 \rangle\)がそのまま出てきます。

この回路を式に直すと以下のようになります。 \[\begin{eqnarray} H_2 \otimes CNOT[2,0] &\otimes& CNOT[2,1] \otimes H_2 \bigl(\alpha (\vert 0_00_1 \rangle + \vert 1_01_1 \rangle) + \beta (\vert 0_01_1 \rangle + \vert 1_00_1 \rangle)\bigl) \vert 0_2 \rangle\\ &=& H_2 \otimes CNOT[2,0] \otimes CNOT[2,1] \bigl(\alpha (\vert 0_00_1 \rangle + \vert 1_01_1 \rangle)\frac{1}{\sqrt{2}}(\vert 0_2 \rangle + \vert 1_2 \rangle) + \beta (\vert 0_01_1 \rangle + \vert 1_00_1 \rangle)\frac{1}{\sqrt{2}}(\vert 0_2 \rangle + \vert 1_2 \rangle)\bigl)\\ &=& H_2 \bigl(\alpha (\vert 0_00_1 \rangle + \vert 1_01_1 \rangle)\frac{1}{\sqrt{2}}(\vert 0_2 \rangle + \vert 1_2 \rangle) + \beta (\vert 0_01_1 \rangle + \vert 1_00_1 \rangle)\frac{1}{\sqrt{2}}(\vert 0_2 \rangle + \vert 1_2 \rangle)\bigl)\\ &=& \bigl(\alpha (\vert 0_00_1 \rangle + \vert 1_01_1 \rangle) + \beta (\vert 0_01_1 \rangle + \vert 1_00_1 \rangle)\bigl) \vert 0_2 \rangle \end{eqnarray}\]

q2 を測定すると0が出てきて、元の\(\vert \psi_1 \rangle\)が残ります。

では、q0 にZエラー(phase flip)が起こった場合を考えます。 \(\vert \psi_1' \rangle = \alpha (\vert 0_00_1 \rangle - \vert 1_01_1 \rangle) + \beta (\vert 0_01_1 \rangle - \vert 1_00_1 \rangle)\)となり、 \(XX\)と共に上記量子回路に適用すると以下のようになります。 \[\begin{eqnarray} H_2 \otimes CNOT[2,0] &\otimes& CNOT[2,1] \otimes H_2 \bigl(\alpha (\vert 0_00_1 \rangle - \vert 1_01_1 \rangle) + \beta (\vert 0_01_1 \rangle - \vert 1_00_1 \rangle)\bigl) \vert 0_2 \rangle\\ &=& H_2 \otimes CNOT[2,0] \otimes CNOT[2,1] \bigl(\alpha (\vert 0_00_1 \rangle - \vert 1_01_1 \rangle)\frac{1}{\sqrt{2}}(\vert 0_2 \rangle + \vert 1_2 \rangle) + \beta (\vert 0_01_1 \rangle - \vert 1_00_1 \rangle)\frac{1}{\sqrt{2}}(\vert 0_2 \rangle + \vert 1_2 \rangle)\bigl)\\ &=& H_2 \bigl(\alpha (\vert 0_00_1 \rangle - \vert 1_01_1 \rangle)\frac{1}{\sqrt{2}}(\vert 0_2 \rangle - \vert 1_2 \rangle) + \beta (\vert 0_01_1 \rangle - \vert 1_00_1 \rangle)\frac{1}{\sqrt{2}}(\vert 0_2 \rangle - \vert 1_2 \rangle)\bigl)\\ &=& \bigl(\alpha (\vert 0_00_1 \rangle - \vert 1_01_1 \rangle) + \beta (\vert 0_01_1 \rangle - \vert 1_00_1 \rangle)\bigl) \vert 1_2 \rangle \end{eqnarray}\]

q2 を測定すると1が出てきます。\(X\) stabilizer を用いたパリティチェックによって、\(Z\)エラーを検出できました。


符号距離2のSurface code の符号語とstabilizer

さっきのsurface code の図とstabilzier の表をもう一回表示します。

\(q_0\) \(q_1\) \(q_2\) \(q_3\) \(q_4\)
\(s_0\) \(X\) \(X\) \(X\)
\(s_1\) \(X\) \(X\) \(X\)
\(s_2\) \(Z\) \(Z\) \(Z\)
\(s_3\) \(Z\) \(Z\) \(Z\)

符号距離2 のsurface code の符号語は下式のようになっています。量子ビットの順番は、上図の番号に準じます。煩雑になるので最初の項だけ添字を付けています。

\[\begin{eqnarray} \vert 0_L \rangle = \vert 0_0 0_1 0_2 0_3 0_4 \rangle + \vert 0 0 1 1 1 \rangle + \vert 1 1 0 1 1 \rangle + \vert 1 1 1 0 0 \rangle \\ \vert 1_L \rangle = \vert 0 1 0 0 1 \rangle + \vert 0 1 1 1 0 \rangle + \vert 1 0 0 1 0 \rangle + \vert 1 0 1 0 1 \rangle \end{eqnarray}\]

どのstabilizer \(s\)も、\(\vert 0_L \rangle = s \vert 0_L \rangle\)及び\(\vert 1_L \rangle = s \vert 1_L \rangle\)を満たしている事を確認して下さい。ひいては\(\alpha \vert 0_L \rangle + \beta \vert 1_L \rangle = s (\alpha \vert 0_L \rangle + \beta \vert 1_L \rangle)\)となるため、このsurface code に符号しているデータを変更せずにパリティチェックできる事が分かります。

Surface code のstabilizer のパリティは、エラーがなければ常に0です。例えば、もし\(X\)エラーがq2に発生した場合、下図のように、2つの\(Z\) stabilizer が反転してエラーを発見します。

\(Z\) stabilizer と\(X\) stabilizer が共有している量子ビットの数に注目して下さい。種類の異なるstabilizer は常に偶数個の量子ビットを共有している事が分かると思います。量子計算のパリティチェック(Stabilizer)で説明した通り、\(X\) stabilizer は対象量子ビットの\(X\) ゲートを伴うので、もし奇数個しか共有していなかったら、\(X\) stabilizer の後に\(Z\) stabilizer を測定すると、出て来る値が反転してしまいます。パリティの反転によってエラーを探すのがsurface code ですから、これではエラー訂正符号として成立しません。(量子情報理論として厳密には、奇数個の共有では適切な符号語の重ね合わせが存在せず、符号として成立し得ません。)よって、種類の異なるstabilizer が必ず偶数個の量子ビットを共有するのは、stabilizer を用いる量子エラー訂正符号を構築する上で必須条件となります。この条件を満たすため、surface code はパリティチェックユニットを二次元方向に展開していく符号となっています。


符号距離の拡張

というわけで、\(X\)エラーと\(Z\)エラーの両方を発見できるように\(Z\) stabilizer と\(X\) stabilzier を用い、かつ\(Z\) stabilizer と\(X\) stabilizer は常に偶数個の量子ビットを共有するようにエラー訂正符号を組み上げた結果が、二次元方向に広がっていくsurface code です。下図は符号距離7のsurface codeです。同じ構造を上下左右に繰り返す分だけ符号距離が伸びます。

上記の通り、複数の\(X\)エラー(オレンジ)が隣り合って起こりエラー鎖が発生した場合、離れた2つの\(Z\) stabilizer が反転します。また、同時に複数のエラー鎖が発生する事があります。この場合minimum weight perfect matchingやmaximally likelifood estimationを用いて、最も発生確率が高い「エラー鎖端の組み合わせ」を推定します。

しかし、1つ問題が残ります。Surface code は、構造上、「エラー鎖端の組み合わせ」だけではエラーの発生箇所を一意に特定できません。
上の図では、2つの\(X\)エラーによってパリティが2箇所で反転しています。しかし、同確率のエラー鎖候補が2本あり(緑)、最も確率が高いエラー鎖を一意に特定できません。結論から言うと、どちらのエラー鎖を選んでも問題ありません。たまたま正しいエラー鎖を選んだ場合、選んだエラー鎖を構成する量子ビットに\(X\)ゲートをかける事で、\(X X = I\)ですから、当然\(X\)エラーは訂正されます。
もし間違った場合のエラー鎖を選んで\(X\)ゲートをかけてしまった場合について考えます。間違ったエラー鎖に基いて\(X\)ゲートをかけると、よく見てみると、エラーによる\(X\)と訂正による\(X\)\(X\) stabilizer が構成されている事が分かります。緑と黄色の\(X\)の真ん中にある青い菱形は\(X\) stabilizer を表しています。

\(\vert \psi \rangle = U \vert \psi \rangle\)となる\(U\)がstabilizer の定義ですから、元の状態に戻り、エラーはなくなります。

論理オペレータと1 qubit ゲート

論理\(Z\)オペレータと論理\(X\)オペレータ

上にsurface code の符号語を書きましたが、0と1を見分けるのがちょっと面倒くさいです。簡単にsurface code の論理値を考える方法があります。実は、下図の赤い線\(Z_0Z_1\)がこの論理量子ビットの\(Z_L\)オペレータになっています。言い換えると、\(Z\)基底表現において、q0とq1のパリティが論理量子ビットの値となります。
符号語を確認すると、\(\vert 0_L \rangle\)ではq0とq1のパリティが0、\(\vert 1_L \rangle\)では1になっていることが分かります。 \[\begin{eqnarray} \vert 0_L \rangle = \vert 0_0 0_1 0_2 0_3 0_4 \rangle + \vert 0 0 1 1 1 \rangle + \vert 1 1 0 1 1 \rangle + \vert 1 1 1 0 0 \rangle \\ \vert 1_L \rangle = \vert 0 1 0 0 1 \rangle + \vert 0 1 1 1 0 \rangle + \vert 1 0 0 1 0 \rangle + \vert 1 0 1 0 1 \rangle \end{eqnarray}\] さて、\(Z\) stabilizer の値は常に0のはずです。となれば、\(Z_L\)オペレータである\(Z_0Z_1\)にstabilizer \(Z_0Z_2Z_3\)を掛けてやると、\(Z_L\)と同値の別の線が出て来るはずです。\(Z_1Z_2Z_4\)についても同様に考えた結果、符号距離2のsurface codeでは、下図のように、同値であるが異なる量子ビットから構成される4つの\(Z_L\)オペレータを考える事ができます。

ここで論理\(X\)ゲートを考えます。\(\vert 0_L\rangle\)\(\vert 1_L\rangle\)とし、\(\vert 1_L\rangle\)\(\vert 0_L\rangle\)とする変換が論理\(X\)ゲートです。また、\(Z\) stabilizer のパリティチェックにエラーとして検出されないためには、論理\(X\)ゲートは全ての\(Z\)stabilizer と偶数回だけ重なっている必要があります。上図の青い線は論理\(X\)ゲート\(X_L = X_0X_3\)です。q0とq3にそれぞれ\(X\)ゲートを掛けてやる事で、surface codeに符号されている論理量子ビットに対する\(X\)ゲートとして機能します。論理\(X\)ゲートは論理\(X\)オペレータでもあるので、q0とq3を\(X\)基底で測定してやると、論理量子ビットに対する\(X\)測定として機能します。論理\(X\)オペレータも論理\(Z\)オペレータと同様に、\(X\) stabilizerを掛けてやる事で、同値となる他の3本の線を導出できます。

下図は符号距離7のsurface code の論理\(X\)オペレータと論理\(X\)オペレータです。

エラー(とエラー訂正の失敗)によって発生する意図しない論理ゲート操作が論理エラーですから、符号距離7のsurface codeでは、最低4つのエラーで論理エラーが発生することになります。

論理Hadamard ゲート

Hadamard ゲートは\(Z\)軸と\(X\)軸を入れ替えるゲートです。となれば、全ての量子ビットにHadamard ゲートをかけ、論理\(Z\)オペレータと論理\(X\)オペレータ及び\(Z\) stabilizer と\(X\) stabilizer を入れ替えてやると、論理量子ビットの\(Z\)軸と\(X\)軸も入れ替えられます。


Lattice Surgery によるCNOT ゲート

Lattice surgery はHorsman et al. によって提案された、planar surface code 用のCNOT ゲートです。Braiding を用いるdefect-based surface code より必要物理量子ビット数が少ない長所があります。Nagayama et al. によってdeformation-based surface code にも応用できる事が示されました。(ポジショントーク)

Lattice surgery は「分離」「合体」です。ZZガンダムみたいですね。まずはCNOT ゲートを再考します。

CNOT ゲート再考

CNOT ゲートは一般的に、「コントロール量子ビットが1の時だけターゲット量子ビットに\(X\)ゲートをかける」変換、もしくは、「\(x, y \rightarrow x, x\oplus y\)」とする変換がCNOT ゲートです。実はこの時、ターゲット量子ビットの位相が逆にコントロール量子ビットの位相に\(\oplus\)されています。つまり、\(X\)基底で考えると、 \[a\vert ++ \rangle + b\vert +- \rangle + c\vert -+ \rangle +d\vert --\rangle \rightarrow a\vert ++ \rangle + d\vert +- \rangle + c\vert -+ \rangle +b\vert --\rangle\] です。「ターゲット量子ビットが\(-\)の時にコントロール量子ビットに\(Z\)をかける」変換です。この事は、以下の2つの量子回路が同値である事からも確認できます。

右図ではHadamardゲートによってX軸とZ軸が逆転しているので、q0の元々のビットをq1に足すためには、CNOTゲートにおいて位相がターゲット量子ビットからコントロール量子ビットに足されていなければなりません。つまり、CNOTゲートは、コントロール量子ビットのビットをターゲット量子ビットに足し、ターゲット量子ビットの位相をコントロール量子ビットに足す操作であると言えます。

足すと言っているものの、量子ビットはbinary なので、引いても同じ結果となります。

Lattice surgery

というわけで、

との2つの操作をsurface code の「分離」「合体」で実現するのがlattice surgery です。

さて、まずはコントロール量子ビットとターゲット量子ビットを用意します。符号距離は3です。元論文では、コントロール量子ビットはターゲット量子ビットと同じ大きさで、コントロール量子ビットを延長するのに使うインターミディエイト量子ビットを用意するところから始まりますが、ここでは簡単のため最初から大きなコントロール量子ビットを用意しています。伸縮自在なのはsurface code の良いところです。
さて、コントロール量子ビットを2つに「分離」します。切りたい点線上の物理量子ビットを測定します。ここでは\(X\)測定です。上図の\(Z_{LI}\)\(Z_{LC}\)は、同じ論理量子ビットの\(Z\)オペレータなので、同値です。
\(X\)測定することで、測定した量子ビットの所属していた\(X\) stabilizer が、4量子ビットのstabilizer から3量子ビットのstabilzier になります。この時、\(X\)オペレータの固有値-1に対応する-が観測されてしまうと、奇扱いなので、残った3量子ビットstabilizer も奇(1)で残ることになります。これを是正するには、測定前の\(Z\) stabilizer を考えて、下図のように\(Z\)ゲートを掛けます。
すると、下図のようになります。
全ての\(X\) stabilzier のパリティが偶(0)になりました。この\(ZZZ\) stabilizer は「分離」前の論理量子ビットにとってstabilizer なので、「分離」前の論理量子ビットの状態には作用しません。一方\(Z\) stabilizer は、構成員となっていた物理量子ビットが\(X\)で測定されてしまい、その物理量子ビットを\(Z\)基底的にどう扱って良いかわからないので、忘れる事にします。2つのstabilizer \(Z_0Z_1\)\(Z_1Z_2\)がある時、これらを合成すると、\(Z_1 \oplus Z_1 = 0\)により\(Z_0Z_1 \oplus Z_1Z_2 = Z_0Z_2\)となります。これを用いると、先ほどの\(X\)測定後に1つの大きな\(Z\) stabilizer が残ります。
この大きな\(Z\) stabilizer はstabilizer なので測定すると0です。このstabilizer はよく見ると\(Z_{LI} \oplus Z_{LC}\)であり、\(Z_{LI} \oplus Z_{LC} = 0\)となるので、分離後も\(Z_{LI} = Z_{LC}\)である事が分かります。では、コントロール量子ビットから切り離したインターミディエイト量子ビットをターゲット量子ビットと「合体」させます。
合体に際して、黄色の物理量子ビットを導入しました。黄色の物理量子ビットは\(\vert 0 \rangle\)に初期化されており、インターミディエイト量子ビットとターゲット量子ビットを跨ぐ\(X\) stabilizer の構成を手伝います。まず\(X\) stabilizer を測定してから\(Z\) stabilizer を測定します。これにより、\(Z_{LT}\)\(Z_{LI}\)が足し合わされ、下図のように新しいターゲット量子ビットの論理\(Z\)オペレータ\(Z_{LT}'\)が登場します。
CNOTゲートの「コントロール量子ビットのビットをターゲット量子ビットに足す」性質が達成されました。今度は論理\(X\)オペレータを考えます。
コントロール量子ビットの「分離」により、\(X_{LI}\oplus X_{LC}'=X_{LC}\)を満たす\(X_{LI}\)\(X_{LC}'\)が登場します。
現れたインターミディエイト量子ビットとターゲット量子ビットを「合体」させると下図のようになります。

ここで、黄色の物理量子ビットを用いて新しく出来た3つの\(X\) stabilizer について考えます。この3つのstabilizer を合成すると、黄色い量子ビットはそれぞれ2回登場する事によりキャンセルされて、\(X_{LI}\oplus X_{LT}\)が出てきます。\(X_{LI}\oplus X_{LT}\)の値は確率的に決定します。この3つのstabilizerは0に初期化されていなかったため、stabilzier の理論にも矛盾しません。

さて、\(X_{LI}\oplus X_{LT}\)が偶だった場合、\(X_{LI}= X_{LT}\)となります。この時、ターゲット量子ビット\(\vert \psi_T \rangle = \alpha \vert + \rangle + \beta \vert - \rangle\)を考えます。\(X_{LT}\)が偶(\(\vert +\rangle\))である場合に対応して、\(X_{LI}\)も偶(\(\vert +\rangle\))となります。この時、\(X_{LC}'=X_{LC} \ominus X_{LI}= X_{LC} \ominus 偶 = X_{LC}\)となります。 \(X_{LC}\)から偶が奪われる事になるので、\(X_{LC}'=X_{LC} \ominus X_{LI}=X_{LC} \ominus X_{LT}\)となります。ターゲット量子ビットの位相が偶の項ではコントール量子ビットを変更しない事になり、「ターゲット量子ビットの位相をコントロール量子ビットに足す(から奪う)」を満たしています。また、\(X_{LT}\)\(\vert -\rangle\)である場合に対応して、\(X_LI\)\(\vert -\rangle\)となります。この場合も、\(X_{LC}'=X_{LC} \ominus X_{LI}=X_{LC} \ominus X_{LT}\)となり、条件が成立します。

一方、\(X_{LI}\oplus X_{LT}\)が奇だった場合、\(X_{LI}\)\(X_{LT}\)は偶奇が逆ですから、細工が必要になります。\(X_{LC}'=X_{LC} \ominus X_{LI}=X_{LC} \ominus X_{LT} \ominus 奇\)です。この\(\ominus 奇\)はコントロール量子ビットに論理\(Z\)ゲートをかける事で達成します。また、新しいターゲット量子ビット内で\(X\) stabilizer のパリティが不正になっているのも合わせて補正するために、\(X_LI\)に論理\(Z\)ゲートをかけます。\(X_{LC}'\)\(X_{LI}\)の両方に\(Z\)をかけると、元々の\(X_{LC}\)にとっては、2回論理\(Z\)ゲートをかけた事と同じなので、 \(I_{X_{LC}}\)になっています。

というわけで、ターゲット量子ビットとインターミディエイト量子ビットの論理\(X\)オペレータのパリティが偶奇それぞれの場合において「ターゲット量子ビットの位相をコントロール量子ビットに足す(から奪う)」が達成されました。これにより、CNOTゲートの性質である

の両方が達成された事になり、lattice surgery はCNOTゲートになっている事が分かります。


あとがき

長文お疲れ様でした。ありがとうございました。と言ったところでアレなのですが、最後は時間の都合で駆け足になってしまい、気になる部分も多々あるので、これから時間をかけてもっと分かりやすく修正していきたいと思っています。Lattice surgeryの日本語の説明は初めてだと思うし、せっかくなのでもったいない。Tゲートも説明しないとユニバーサル量子ゲートセットにならないし。分かりにくい部分があればTwitter で指摘して頂けると喜びます。

「分離」より「分割」の方が適切な気も後からしてきましたが、間違ってはいないのでとりあえずそのままにしています。(「分離」の方がZZガンダムっぽいし)


To Do