@yuichirominato 2019.01.26更新 298views

【焼き直し】量子テレポーテーション


はじめに

以前Blueqatでの量子テレポーテーション回路を紹介しましたがより効率的にプログラミングしてみます。

https://blog.mdrft.com/post/326

量子テレポーテーション

量子テレポーテーションは量子もつれにある2つの粒子の片方を観測することで、もう片方の状態が決まります。これにより状態がテレポートしたように見えるためこのような名前が付いています。

量子もつれを生成し、それを測定し、測定結果を持って、最終的な転送先の量子ビットの操作をすることで量子状態を写すことができます。

回路を見る

最初にq0の状態を決めます。ここでは?にしています。次に、最初に量子もつれを作るのはq1とq2です。q1にHゲート、q1,q2にCXをかけることで、EPRペアと呼ばれる量子もつれ状態を実現できます。そして、ベル測定という部分ですが、q0,q1にもつれを発生させ、q0にHゲートをかけてから測定をします。今回は測定の代わりにCX/CZ回路で代替します。本来はCX/CZの代わりに測定をして、Xゲート、Zゲートを適用させます。

q0 -?-----*-H---*-------
q1 ---H-*-X---*-|-------
q2 -----X-----X-Z-------

コードはとてもシンプルですので、実行して結果を見ます。

from blueqat import Circuit

#量子テレポーテーション回路
a = Circuit().h[1].cx[1,2].cx[0,1].h[0].cx[1,2].cz[0,2].m[:]
a.run(shots=100)

Counter({'010': 21, '000': 30, '100': 28, '110': 21})

これを見ると、初期のq0はq2の値を見ればいいので0がテレポートしたことがわかります。q0とq1の測定結果によらずq2にq0の元の状態の0が移っています。次に1を写して見ます。

(Circuit().x[0] + a).run(shots=100)
                                                              
Counter({'001': 25, '111': 23, '101': 24, '011': 28})

最初にq0をXゲートを使って1にして見ると、同様にq0とq1の測定結果によらず、q0の状態の1が移ってます。最後にHゲートをq0にかけてみると、

(Circuit().h[0] + a).run(shots=100)
  
Counter({'100': 15,
         '000': 20,
         '111': 16,
         '011': 8,
         '001': 14,
         '101': 8,
         '110': 10,
         '010': 9})

約半々でq2に0と1が約半々ででるようになって重ね合わせ状態が移っています。このように簡単にBlueqatで量子テレポーテーションが実装できました。ちょっと工夫することで複雑なコードがどんどん簡単になります。みんなで頑張りましょう。

Recommended


CONTACT

info@mdrft.com

ブログトップへ Wikiへ移動

量子コンピュータ一般

量子ゲートアルゴリズム

量子アニーリング一般

量子アニーリングアルゴリズム

BlueqatSDKの使い方