この記事に関して
ここではpythonライブラリのblueqatを用いて量子プログラミングを行っていこうと思います。
内容は公式のチュートリアルを元に作成しています。
今回は量子の重ね合わせを実装します。
回路の作成
今回はHゲート(hadamard gate)を用います。
Hゲートを施すと量子ビットは以下のように変換されます。
\left|0\right> → \frac{1}{\sqrt2}\left|0\right>+\frac{1}{\sqrt2}\left|1\right>,
\left|1\right> → \frac{1}{\sqrt2}\left|0\right>-\frac{1}{\sqrt2}\left|1\right>
この $\left|0\right>$ と $\left|1\right>$ が混ざっている状態を重ね合わせ状態と言います。
上の状態では計算上 0, 1 がそれぞれ50%の確率で観測されることがわかります。
$H\left|0\right>$ のことを +状態ともいい、$\left|+\right>$ と表します。
また $H\left|1\right>$ のことを -状態ともいい、$\left|-\right>$ と言います。
実装 1
上の状態を実際に実装してみます。$H\left|0\right>=\left|+\right>$ を測定して見ます。
Hゲートは回路に.h[a]
をつけるとできます。(a
はHゲートを施すビットの位置)
普通に値を観測する場合
from blueqat import Circuit
c = Circuit().h[0]
c.m[:].run(shots=1000)
結果
Counter({'0': 517, '1': 483})
完璧ではないですが 0 と 1 がそれぞれ約50%の確率で取れていることがわかります。
ベクトルを観測する場合
from blueqat import Circuit
c = Circuit().h[0]
c.run()
結果
array([0.70710678+0.j, 0.70710678+0.j])
値がそれぞれ $\frac{1}{\sqrt2}$ よりきちんと取れました。
実装 2
次に $H\left|1\right>=\left|-\right>$ を測定してみます。
計算上では観測する確率は同じはずです。
普通に値を観測する場合
from blueqat import Circuit
c = Circuit().x[0].h[0]
c.m[:].run(shots=1000)
結果
Counter({'0': 527, '1': 473})
$\left|+\right>$ と同じく、約50%の確率で取れていることがわかります。
ベクトルを観測する場合
from blueqat import Circuit
c = Circuit().x[0].h[0]
c.run()
結果
array([ 0.70710678+0.j, -0.70710678+0.j])
$\left|1\right>$ の係数が - できちんと取れました。
まとめ
今回はblueqatを用いて量子の重ね合わせを実装しました。
次回は量子もつれ(entanglement)を実装してみます。