common.title

Overview
Service overview
Terms of service

Privacy policy

Contact

Sign in
Sign up
common.title

量子もつれとベル状態

Yuichiro Minato

2021/01/16 05:55

#量子ゲート

はじめに

量子もつれを理解するためにベル状態を見てみたいと思います。あまり新しいことなはいです、、、wikipediaにあるような基本的なことです。

ベル状態を作るための回路

こちらは量子もつれ回路です、

|0> ---H---*---
           |
|0> -------X---

量子状態の変遷を見ると、

00\mid 00 \rangle

からスタートします。この時点ではもつれていません。アダマールゲートHを適用すると、上の量子ビットが重ね合わせ状態になります。

(120+121)0=1200+1210\left(\frac{1}{\sqrt{2}}\mid 0 \rangle + \frac{1}{\sqrt{2}}\mid 1 \rangle \right)\mid 0 \rangle = \frac{1}{\sqrt{2}}\mid 00 \rangle + \frac{1}{\sqrt{2}}\mid 10 \rangle

そして、これにCXゲートを適用すると、0番目の量子ビットが1のときに1番目の量子ビットが反転し、

1200+1211\frac{1}{\sqrt{2}}\mid 00 \rangle + \frac{1}{\sqrt{2}}\mid 11 \rangle

の状態が得られます。blueqatでやると、重ね合わせは、

from blueqat import Circuit Circuit(2).h[0].run() #array([0.70710678+0.j, 0.70710678+0.j, 0. +0.j, 0. +0.j])
array([0.70710678+0.j, 0.70710678+0.j, 0.        +0.j, 0.        +0.j])

は00と01の重ね合わせになります。

これにCXを適用すると、

Circuit().h[0].cx[0,1].run() #array([0.70710678+0.j, 0. +0.j, 0. +0.j, 0.70710678+0.j])
array([0.70710678+0.j, 0.        +0.j, 0.        +0.j, 0.70710678+0.j])

00と11のもつれに変化しました。量子ビットの値によって、

B(00)=1200+1211B(\mid 00 \rangle) = \frac{1}{\sqrt{2}}\mid 00 \rangle + \frac{1}{\sqrt{2}}\mid 11 \rangle

は今確認しました。B(01)B(\mid 01 \rangle)は、重ね合わせとCXを通じて、

01(120+121)1=1201+12111201+1210\mid 01 \rangle \rightarrow \left(\frac{1}{\sqrt{2}}\mid 0 \rangle + \frac{1}{\sqrt{2}}\mid 1 \rangle \right)\mid 1 \rangle = \frac{1}{\sqrt{2}}\mid 01 \rangle + \frac{1}{\sqrt{2}}\mid 11 \rangle \rightarrow \frac{1}{\sqrt{2}}\mid 01 \rangle + \frac{1}{\sqrt{2}}\mid 10 \rangle
B(01)=1201+1210B(\mid 01 \rangle) = \frac{1}{\sqrt{2}}\mid 01 \rangle + \frac{1}{\sqrt{2}}\mid 10 \rangle

blueqatでは、

Circuit(2).x[1].h[0].cx[0,1].run() #array([0. +0.j, 0.70710678+0.j, 0.70710678+0.j, 0. +0.j])
array([0.        +0.j, 0.70710678+0.j, 0.70710678+0.j, 0.        +0.j])

無事出ました。次にB(10)B(\mid 10 \rangle)は、

10(120121)0=1200121012001211\mid 10 \rangle \rightarrow \left(\frac{1}{\sqrt{2}}\mid 0 \rangle - \frac{1}{\sqrt{2}}\mid 1 \rangle \right)\mid 0 \rangle = \frac{1}{\sqrt{2}}\mid 00 \rangle - \frac{1}{\sqrt{2}}\mid 10 \rangle \rightarrow \frac{1}{\sqrt{2}}\mid 00 \rangle - \frac{1}{\sqrt{2}}\mid 11 \rangle
B(10)=12001211B(\mid 10 \rangle) = \frac{1}{\sqrt{2}}\mid 00 \rangle - \frac{1}{\sqrt{2}}\mid 11 \rangle

blueqatでは、

Circuit(2).x[0].h[0].cx[0,1].run() #array([ 0.70710678+0.j, 0. +0.j, 0. +0.j, -0.70710678+0.j])
array([ 0.70710678+0.j,  0.        +0.j,  0.        +0.j, -0.70710678+0.j])

最後に、B(11)B(\mid 11 \rangle)は、

11(120121)1=1201121112011210\mid 11 \rangle \rightarrow \left(\frac{1}{\sqrt{2}}\mid 0 \rangle - \frac{1}{\sqrt{2}}\mid 1 \rangle \right)\mid 1 \rangle = \frac{1}{\sqrt{2}}\mid 01 \rangle - \frac{1}{\sqrt{2}}\mid 11 \rangle \rightarrow \frac{1}{\sqrt{2}}\mid 01 \rangle - \frac{1}{\sqrt{2}}\mid 10 \rangle
B(11)=12011210B(\mid 11 \rangle) = \frac{1}{\sqrt{2}}\mid 01 \rangle - \frac{1}{\sqrt{2}}\mid 10 \rangle

blueqatでは、

Circuit(2).x[:].h[0].cx[0,1].run() #array([ 0. -0.j, 0.70710678+0.j, -0.70710678-0.j, 0. -0.j])
array([ 0.        +0.j, -0.70710678+0.j,  0.70710678+0.j,  0.        +0.j])

これら4つの状態は正規直交基底となり、「ベル基底」と呼ばれます。

可逆回路を確認

手計算は省きますが、blueqatで00,01,10,11に対応するベル基底から可逆回路で再度CXとHを適用することで元に戻ることを確認します。

|0> ---H--*--*--H--
          |  |
|0> ------X--X-----
#00 Circuit(2).h[0].cx[0,1].cx[0,1].h[0].m[:].run(shots=100) #Counter({'00': 100})
Counter({'00': 100})
#01 Circuit(2).x[1].h[0].cx[0,1].cx[0,1].h[0].m[:].run(shots=100) #Counter({'01': 100})
Counter({'01': 100})
#10 Circuit(2).x[0].h[0].cx[0,1].cx[0,1].h[0].m[:].run(shots=100) #Counter({'10': 100})
Counter({'10': 100})
#11 Circuit(2).x[:].h[0].cx[0,1].cx[0,1].h[0].m[:].run(shots=100) #Counter({'11': 100})
Counter({'11': 100})

© 2024, blueqat Inc. All rights reserved