この記事に関して
ここではpythonライブラリのblueqatを用いて量子プログラミングを行っていこうと思います。
内容は公式のチュートリアルを元に作成しています。
今回は量子もつれ(entanglement)を実装します。
量子もつれとは
前回は $\left|+\right>,\left|-\right>$ を考えました。今回は2量子ビットの以下の値を考えてみます。
\frac{1}{2}\left(\left|00\right>+\left|01\right>+\left|10\right>+\left|11\right>\right),
\frac{1}{\sqrt2}\left(\left|00\right>+\left|11\right>\right),(\left|00\right> = \left|0\right>\otimes\left|0\right>)
左の状態は純粋状態のテンソル積で $\left|+\right>\otimes \left|+\right>$ と表せます。
では右の状態はどうでしょう、手を動かせばわかりますがこれは純粋状態のテンソル積でかけません。
このように2つの状態が絡み合っている状態を量子もつれ(emtaglement)と言います。
量子もつれの利点は情報の絞りこみを行うことができる点にあります。
たくさんの組み合わせのビットをうまく絞りこむことで欲しい状態の確率を引き上げることができます。
回路の作成
今回は Hゲートと CXゲートを使います。
$\left|+\right>\otimes\left|0\right>$ にCXを施すことで作られます。
H\left|0\right>\otimes\left|0\right> = \frac{1}{\sqrt2}(\left|00\right>+\left|10\right>)\xrightarrow{CX}\frac{1}{\sqrt2}(\left|00\right>+\left|11\right>)
実装
上の状態を実装してみます。
from blueqat import Circuit
c = Circuit(2).h[0].cx[0,1]
c.m[:].run(shots=1000)
結果
Counter({'11': 474, '00': 526})
00 と 11 が約50%で取れていることがわかります。
GZH状態 (3量子ビットもつれ)
3量子ビットのもつれとしてGHZ状態というのがあります。
まずは値から
\frac{1}{\sqrt2}(\left|000\right>-\left|111\right>)
もつれてますね。
値の導出は言葉では難しいので以下に式を述べます。
\begin{array}{ll}
\left|0\right>\otimes\left|0\right>\otimes\left|0\right>&\xrightarrow{H\otimes H\otimes X}
&\left|+\right>\otimes\left|+\right>\otimes\left|1 \right>\\
&\xrightarrow{CX[1,2]}
&\left|+\right>\otimes\frac{1}{\sqrt2}(\left|01\right>+\left|10\right>) =
\frac{1}{2}(\left|001\right>+\left|010\right>+\left|101\right>+\left|110\right>)\\
&\xrightarrow{CX[0,2]}&\frac{1}{2}(\left|001\right>+\left|010\right>+\left|100\right>+\left|111\right>)
\\
&\xrightarrow{H\otimes H\otimes H}
&\frac{1}{\sqrt2}(\left|000\right>-\left|111\right>)
\end{array}
(最後の計算はかなり省略していますが成り立ちます。)
実装
上の状態を実装してみます。
[:2]
とは上から2つのビットにゲートを施し、
[:]
とは指定したビット全てにゲートを施すことを意味します。
from blueqat import Circuit
c = Circuit(3).h[:2].x[2].cx[1,2].cx[0,2].h[:]
c.m[:].run(shots=1000)
結果
Counter({'111': 496, '000': 504})
000 と 111 が約50%で取れていることがわかります。
まとめ
今回はblueqatを用いて量子もつれ(entanglement)を実装しました。
次回は様々な量子ゲートを実装してみます。