表面符号ゲーム

Dec. 31, 2023, 2:36 a.m. edited Jan. 9, 2024, 2:15 p.m.

#量子情報  #量子力学 

$$ \def\bra#1{\mathinner{\left\langle{#1}\right|}} \def\ket#1{\mathinner{\left|{#1}\right\rangle}} \def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}} $$

先日紹介した表面符号と戯れる【量子コンピューター Advent Calendar 2023 23 日目】の発展した話として、A Game of Surface Codes: Large-Scale Quantum Computing with Lattice Surgeryという論文があります。Game、そう、ゲームなのです!時々、表面符号って The Witness っぽいなぁと思うことも多いので、早速プレイしていきます。以下、プレイ記録。

なお、ネタバレも何もないので、いつものネタバレ防止クイズはありません。

231230

実は前に冒頭は読んでいたので早速 1 章から。最初にあったパネル動かしゲー感が少なくなってきたが大丈夫か?このゲーム?

回転ゲートで色々なゲートを表せるらしい。

$$S=\begin{bmatrix}1 & 0\\ 0 & i\end{bmatrix},T=\begin{bmatrix}1 & 0\\ 0 & e^{i\pi/4}\end{bmatrix}$$

を回転ゲート \(P_\varphi=e^{-iP\varphi}\) で表せる:

$$Z_{\pi/4}=e^{-iZ\frac{\pi}{4}}=\exp\begin{bmatrix}-i\frac{\pi}{4} & 0\\ 0 & i\frac{\pi}{4}\end{bmatrix}=\begin{bmatrix}e^{-i\frac{\pi}{4}} & 0 \\ 0 & e^{i\frac{\pi}{4}}\end{bmatrix}=e^{-i\frac{\pi}{4}}\begin{bmatrix}1 & 0 \\ 0 & e^{i\frac{\pi}{2}}\end{bmatrix}=e^{-i\frac{\pi}{4}}S$$

本当だ。グローバル位相を除いて \(S\) になるわ。じゃあ \(T\) も同じ。

待って、 \(X_{\pi/4}\) はどうなるの? \(Z\) は対角行列だから簡単に指数関数計算できたけど、 \(X\) は非対角だから簡単じゃないじゃん。仕方ないので攻略(e^Aの計算方法)見たところ、こういうのは対角化したら計算できるらしいのでやってみた:

\(X\) の固有値は \(\mathrm{det}(X-\lambda I)=0\) を解いて \(\lambda=1,-1\) とわかるので、固有ベクトルは \([1,1]^\top\), \([1,-1]^\top\) となる。すると、対角化に使う行列は

$$P=\begin{bmatrix}1 & 1\\1 & -1\end{bmatrix},P^{-1}=-\frac{1}{2}\begin{bmatrix}1 & 1\\1 & -1\end{bmatrix}$$

(逆行列計算方法忘れてたのは内緒)これ、アダマールじゃん!!ということで \(P=P^{-1}=H\) で再定義すると、確かにスタビライザー演算子 \(X\) にクリフォードゲート \(H\) が作用して \(Z\) になるいつもの話になる(以前プレイしたゲーム:スタビライザー状態とクリフォードゲートって何?【量子計算】参照)

よって、

$$X_{\pi/4}=e^{-iX\frac{\pi}{4}}=He^{-iZ\frac{\pi}{4}}H=e^{-i\frac{\pi}{4}}HSH$$

となる。すると、アダマール \(H\) は

$$Z_{\pi/4}X_{\pi/4}Z_{\pi/4}=e^{-i\frac{3}{4}\pi}SHSHS=-iH$$

より、確かにグローバル位相を除いて \(H\) になる。

さて、 CNOT はどうするの?!というところでゲート周りについては今日は終わり。

一方、量子回路の変形方法としては、 non-clifford ゲートを手前に、 clifford ゲートは後ろに持っていったうえで測定に吸収させるとわかった。魔法状態をリソース消費して \(\pi/8\) 回転するところと合わせて式変形で確認したいところ。

231231

$$\mathrm{CNOT}=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&0&1\\0&0&1&0\end{bmatrix}$$

なのは常識だとして、 Fig.5 で何食わぬ顔して出てきてる 「Z」-「X」 の意味がわからない。これなに? Wikipedia 見ると、 Pauli basis 使って CNOT を表現してる式があるけど、そのことを言いたいのだろうか?わからん。まあ結局、実際やるのは 3 つのパウリ \(\pi/4\) 回転への分解なのでそっちが追えれば良いことにする。

ということでさっそく \(\mathrm{CNOT}=(Z\otimes X)_{\pi/4}\cdot(I\otimes X)_{-\pi/4}\cdot(Z\otimes I)_{-\pi/4}\) が本当に CNOT になるのかを確認する。手計算辛いので、 SymPy にやらせる:

>>> import sympy
>>> from sympy.physics.quantum import TensorProduct
>>> sympy.var('pi')
>>>
>>> I = sympy.Matrix([[1,0],[0,1]])
>>> Z = sympy.Matrix([[1,0],[0,-1]])
>>> X = sympy.Matrix([[0,1],[1,0]])
>>>
>>> sympy.simplify(((-1j*pi/4)*TensorProduct(Z, X)).exp() @ ((1j*pi/4)*TensorProduct(I, X)).exp() @ ((1j*pi/4)*TensorProduct(Z, I)).exp())
Matrix([
[1.0*exp(0.25*I*pi),                  0,                                         0,                                         0],
[                 0, 1.0*exp(0.25*I*pi),                                         0,                                         0],
[                 0,                  0,   0.5*(exp(1.0*I*pi) + 1)*exp(-0.75*I*pi), (0.5*exp(1.0*I*pi) - 0.5)*exp(-0.75*I*pi)],
[                 0,                  0, (0.5*exp(1.0*I*pi) - 0.5)*exp(-0.75*I*pi),   0.5*(exp(1.0*I*pi) + 1)*exp(-0.75*I*pi)]])

最後の I はわかりづらいが虚数 \(i\) のことである(これがわからず数時間潰した。えぇ…)。これは

$$ \begin{bmatrix} e^{i\frac{\pi}{4}}&0&0&0\\ 0&e^{i\frac{\pi}{4}}&0&0\\ 0&0&\frac{1}{2}(e^{i\pi}+1)e^{-i\frac{3}{4}\pi}&\frac{1}{2}(e^{i\pi}-1)e^{-i\frac{3}{4}\pi}\\ 0&0&\frac{1}{2}(e^{i\pi}-1)e^{-i\frac{3}{4}\pi}&\frac{1}{2}(e^{i\pi}+1)e^{-i\frac{3}{4}\pi} \end{bmatrix}=e^{i\frac{\pi}{4}}\mathrm{CNOT} $$

と確かにグローバル位相を除いて CNOT になる。

さて、次は測定周り。ていうかそもそも \(Z\) 測定以外ってなんなんだ。 \(X\) 測定も知らんわって思ったが、にわか知識で \(H\) 作用させて \(Z\) 測定すると、それ即ち \(X\) 測定になるということから、つまりクリフォード関係か。また。となると、 \(Y\) 測定したいなら \(H\) に加えてさらに \(S^\dagger\) ゲートを作用させてから \(Z\) 測定ということか。(攻略サイト:How to measure in another basis

240102

Fig.4 (a) にて \(PP'=P'P\) なら \(P_{\pi/4}P'_\varphi=P'_\varphi P_{\pi/4}\) は、それぞれテイラー展開すれば簡単にわかる。同様に、

240107

まさか前回、文を書いてる途中で終わってるのはなんかもう。反交換関係の場合はどうするか攻略見ても難しいとしか書いてなくて悩んでいたが、そもそも \(P\) はパウリ行列のテンソル積から成り立っているという前提を忘れてた。それなら適当にテイラー展開した項同士を掛け算とかすれば確かにそうなりそう。同じく、測定も \(Z\) をいくら掛けても \(Z\) 測定に影響しないなどを利用すれば導ける雰囲気がしたのでok。

Fig.6 は何をもって同一レイヤーとしてまとめているのかは数日悩んだがわからず。ので、もうスキップ。(可換ならまとめられるとかかとも思ったが、交換しない \(X\) と \(Y\) がまとめられてることからそうでもなさそうだし。わからん)

それより問題なのは \(P_{\pi/8}\) (Fig.7) および \(P_{\pi/4}\) (Fig.11 (b)) の展開である。例えば簡単そうな後者にて \(P=Z\) とすれば \(Z_{\pi/4}=S\) ゲートとなるはずだが、最初に \(Z\otimes Z\) 測定を \(\ket{\psi}\ket{Y}\) にすると、 \(\ket{\psi_0}\ket{0}\) もしくは \(i\ket{\psi_0}\ket{1}\) となる(ただし、 \(\ket{\psi_0}\) は \(Z\) 測定によって射影された何かの状態である)。その後、 \(X\) 測定を後ろのレジスタにのみ行い、とかやるが、結局のところ確率的な何かが生成され、それはどうやっても \(S\ket{\psi}\) とは似ても似つかないように見える。どういうことなの????

と思ったら、 \(Z\otimes Z\) 測定は自分の思ってたものと違ったらしい。詳細はZ⊗Z測定とは【量子計算】に書いた。

すると、 \(\ket{\psi}\ket{Y}\) (\(\ket{\psi}=\alpha\ket{0}+\beta\ket{1}\)) に \(Z\otimes Z\) 測定をすると固有値 \(+1\) で \(\alpha\ket{00}+i\beta{11}\)、固有値 \(-1\) で \(i\alpha\ket{01}+\beta\ket{10}\) が得られる。あとは普通に \(X\) 測定を後ろのビットに実施して、この 2 つの測定結果が異なる場合に \(Z_{\pi/2}=Z\) を作用させれば、確かに \(S\) ゲートになった!!これで満足。同じことを \(T\) ゲートでもやればできるのだろうからこちらはもういい。

240108

ところ変わって今日は Appendix。実は Z boundary と X boundary がわかってなかったという話。普通の格子でも回転表面符号でも、論理測定の項目に書いたように、縦か横に沿ってそれぞれのスタビライザー演算子と交換する方向に論理演算子が住んでいる。しかし、どうにもその X, Z が逆に見えて仕方なかった。それでずっと悩んでたら、それ (Fig.37 など) は boundary の方を表してるんだとわかった。つまり、 Fig.37 左上の格子でいえば、一番上の辺と一番下の辺を結ぶように論理 \(Z\) 演算子が住んでいる。つまり、論理 \(Z\) 演算子自体は縦の形だが、 Z boundary 自体は一番上の辺と一番下の辺ということになる。

それから、昨日書いた \(Z\otimes Z\) 測定の話の関連で、最後の論理測定で \(Z_L=Z_0 Z_1 Z_2\) とかを測定するが、それも \(Z_0\otimes I_1\otimes I_2\) 測定 → \(I_0\otimes Z_1\otimes I_2\) 測定 → \(I_0\otimes I_1\otimes Z_2\) 測定ではダメなんじゃないのかと思った(実際、もそれぞれ測定した固有値の積でいいと書いた)。だが、おそらく、交換する演算子については分解しても問題ないんじゃないかと思う。 \(\ket{01}+\ket{10}\) を \(Z\otimes Z\) 測定すると固有値 \(-1\) が手に入るが、一方、 \(Z\otimes I\) 測定してから \(I\otimes Z\) 測定したときのそれぞれの固有値の積(ないしは排他的論理和)も \(-1\) になるので。ただし、測定後状態はもう違うので、最後に論理測定する際にしか使えないテクニックなのだろう。

それから state injection は Ref. 13] とは書いてあるもののそれは color code 論文へのリファレンスなのでおそらく正しくは Ref. [14] の方だろう。とはいえ、おそらくやることは \(\ket{m}\) の物理ビットの左上に \(X\) 補助ビットを置いて \(X\) スタビライザー測定、次は右上に…とやれば作れる、のかな?なんか[当該論文だと左上スタートだから状況も違うしよくわからないんだよねぇ。

240109

Fig.6 わかりました。会社の同僚に聞こうかと思って自分の中で考えをまとめてたらわかっちゃった。レイヤーごとに可換なんだ。つまり、 Fig.6 左図 layer 2 なら、確かに上から 3 番目の \(Z\) は \(Y\) と交換するときにマイナスが出てしまうけど、さらに 4 番目の \(Y\) が \(Z\) と交換するときに再びマイナスが出るので全体としては打ち消しあって、可換になるということ。なるほどね。