common.title
Cloud support

Nobisuke

Dekisugi

RAG


autoQAOA
RAG for dev
Fortune telling app
Annealing
DEEPSCORE
Translation

Overview
Service overview
Terms of service

Privacy policy

Contact
Research

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