読者です 読者をやめる 読者になる 読者になる

量子テレポーテーションを実際にやってみた話

IBM量子コンピュータで遊んでみて量子テレポーテーションを実装してみました. 今回はその量子テレポーテーションについてとどのように実装したか,そして実際の動作結果についてまとめてみました.

量子テレポーテーションとは

量子テレポーテーションとは古典の情報の送信と量子もつれの効果を用いて量子状態を離れた場所へ転送させる現象のことです. 実際に量子がテレポートしているわけではありませんが,離れた場所へ量子状態をまるでテレポートしたかのように移すことができるのでこの名前がついています.

どのような原理でこの現象が起きているのでしょうか.

量子テレポーテーション - Wikipedia

Wikipediaのページではありますが結構しっかりと書いてあるのでわからなかったらWikipediaを参照してください.

量子テレポーテーションを行う際にはベル測定という特殊な測定を行う必要があります. 通常の測定は1つのqubitに対して, \{ \left|0\right\rangle,\left|1\right\rangle\}の基底への射影測定となっています. ベル測定は2つのqubitに対して,  \{\left|\Phi^+\right\rangle= \frac{\left|00\right\rangle+\left|11\right\rangle}{\sqrt{2}}, \left|\Phi^-\right\rangle=\frac{\left|00\right\rangle-\left|11\right\rangle}{\sqrt{2}}, \left|\Psi^+\right\rangle=\frac{\left|01\right\rangle+\left|10\right\rangle}{\sqrt{2}}, \left|\Psi^-\right\rangle=\frac{\left|01\right\rangle-\left|10\right\rangle}{\sqrt{2}}\}の基底への射影測定となります. 量子テレポーテーションでは用意した量子状態をこのベル測定を用いて測定します.

実際に量子テレポーテーションに利用する量子状態を用意します. まず,テレポーテーションさせたいqubitを \left|\psi\right\rangle=\alpha\left|0\right\rangle+\beta\left|1\right\rangleとします.これ以外に,もつれさせた2qubit, \left|\Phi^+\right\rangle=\frac{\left|00\right\rangle+\left|11\right\rangle}{\sqrt{2}}を用意します.準備するのはこの3qubitです.

量子テレポーテーションの手順について説明します.qubit \left|\psi\right\rangle=\alpha\left|0\right\rangle+\beta\left|1\right\rangleを送る方をAlice,受け取る方をBobとします.送る方なので当然最初 \left|\psi\right\rangleはAliceが持っています.残ったもつれている2qubitをAliceとBobで1qubitずつ保持します.初期の3qubitの状態は (\alpha\left|0\right\rangle+\beta\left|1\right\rangle)\otimes\frac{1}{\sqrt{2}}(\left|00\right\rangle+\left|11\right\rangle)となります. ここで2qubitの状態に関してベル基底と通常の基底の関係を考えると,

 \left|00\right\rangle = \frac{1}{\sqrt{2}}(\left|\Phi^+\right\rangle + \left|\Phi^-\right\rangle)

 \left|01\right\rangle = \frac{1}{\sqrt{2}}(\left|\Psi^+\right\rangle + \left|\Psi^-\right\rangle)

 \left|10\right\rangle = \frac{1}{\sqrt{2}}(\left|\Psi^+\right\rangle - \left|\Psi^-\right\rangle)

 \left|11\right\rangle = \frac{1}{\sqrt{2}}(\left|\Phi^+\right\rangle - \left|\Phi^-\right\rangle)

の関係が成り立ちます.これを3qubitのうち,Aliceの持つ2qubitをベル基底に置き換えると次のようになります.

 \frac{1}{2}[\left|\Phi^+\right\rangle\otimes(\alpha\left|0\right\rangle+\beta\left|1\right\rangle)+\left|\Phi^-\right\rangle\otimes(\alpha\left|0\right\rangle-\beta\left|1\right\rangle)

 +\left|\Psi^+\right\rangle\otimes(\beta\left|0\right\rangle+\alpha\left|1\right\rangle)+\left|\Psi^-\right\rangle\otimes(-\beta\left|0\right\rangle+\alpha\left|1\right\rangle)]

そうすると,Aliceの持つ2qubitをベル測定することで,ベル測定の結果とBobの持つ残りの1qubitの状態が次のような対応関係になります.

 \left|\Phi^+\right\rangle:\alpha\left|0\right\rangle+\beta\left|1\right\rangle

 \left|\Phi^-\right\rangle:\alpha\left|0\right\rangle-\beta\left|1\right\rangle

 \left|\Psi^+\right\rangle:\beta\left|0\right\rangle+\alpha\left|1\right\rangle

 \left|\Psi^-\right\rangle:-\beta\left|0\right\rangle+\alpha\left|1\right\rangle

よってBobはアリスの測定結果に応じて, \left|\Phi^+\right\rangleの時は何もせず, \left|\Phi^-\right\rangleの時はZゲート, \left|\Psi^+\right\rangleの時はXゲート, \left|\Psi^-\right\rangleの時はXゲートの後にZゲートを適用させることで自分の持っているqubitを \alpha\left|0\right\rangle+\beta\left|1\right\rangleの状態にすることができ,あたかもAliceの持っていたqubitがBobの元へテレポーテーションしたかのような状態になります.

実装

実際にこのテレポーテーションをIBMの量子コンピュータで行ってみます.ただし,現時点では測定の結果に応じて適用させるゲートを変えるという操作は出来ないので,全ての場合で実験をし,最終的に確率を計算するという方法をとります.

ベル測定の実装

最初からベル測定があったら楽だったんですが無いので自分で実装します.どのように実装すれば良いのでしょう.測定として用意されているのは通常の測定のみです.通常の測定で2qubitを測定すると, \{ \left|00\right\rangle,\left|01\right\rangle,\left|10\right\rangle,\left|11\right\rangle\}の4つの基底での測定となります.したがってベル測定を通常の測定で実現するにはベル基底をそれぞれ対応する通常の基底へ変換するようなゲートを適用させてから通常の基底で測定することで,得られた通常の基底がそれぞれ対応するベル基底を表すことになるので,ベル測定が実現できます.この変換を実現するゲートの組は次のものになります.

f:id:kadora:20160924102410p:plain

このゲートにより,次のような対応を持つ変換が行われます.

 \left|\Phi^+\right\rangle\to\left|00\right\rangle

 \left|\Phi^-\right\rangle\to\left|11\right\rangle

 \left|\Psi^+\right\rangle\to\left|01\right\rangle

 \left|\Psi^-\right\rangle\to\left|10\right\rangle

これでベル測定を行うことが可能となりました.

送る量子状態の準備

qubitの初期状態は \left|0\right\rangleとなっているので移して面白そうな量子状態を用意します.前回にもやったように次のゲートを適用させて \cos(\frac{\pi}{8})\left|0\right\rangle - i\sin(\frac{\pi}{8})\left|1\right\rangleの量子状態を作ります.

f:id:kadora:20160924102814j:plain

もつれの準備

もつれさせた2qubit \frac{\left|00\right\rangle+\left|11\right\rangle}{\sqrt{2}}を準備します.この状態を作成するには一方にHゲートを適用させ,Hゲートを適用させた方をコントロールビットとしてCNOTゲートを適用させます.

f:id:kadora:20160924102851j:plain

回路全体

これまで用意したゲートを量子テレポーテーションを実現させるために順番に適用させると次の図の様になります.

f:id:kadora:20160924102206p:plain

最初の2つのqubitがAliceの持つqubitで最後の1つのqubitがBobの持つqubitです.実際に量子テレポーテーションさせるにはAliceの持つ2つのqubitのベル測定の結果に応じてBobの持つqubitに適切にゲートを適用させる必要がありますが,この量子コンピュータではその部分を実装することが出来ないので,適用させるゲートのパターンを全て別に実行し,最終的に確率を計算することで結果を見ます.

結果

Aliceの持つ2つのqubitの測定結果毎に結果を見ていきます.まず,Aliceの持つqubitの測定結果は次のようになります.

f:id:kadora:20160924104818j:plain

次に適用させるゲートのパターン毎に見ていきます.

 \left|\Phi^+\right\rangleの時

この時はBobの持つqubitには何もゲートを適用させる必要はありません.測定結果は次のようになります.

f:id:kadora:20160924103130j:plain

 \left|\Phi^-\right\rangleの時

この時はBobの持つqubitにZゲートを適用させます.測定結果は次のようになります.

f:id:kadora:20160924103408j:plain

 \left|\Psi^+\right\rangleの時

この時はBobの持つqubitにXゲートを適用させます.測定結果は次のようになります.

f:id:kadora:20160924103509j:plain

 \left|\Psi^-\right\rangleの時

この時はBobの持つqubitにXゲートを適用させた後Zゲートを適用させます.測定結果は次のようになります.

f:id:kadora:20160924103604j:plain

最終的な結果

Aliceの持つ2つのqubitの測定結果とBobの持つqubitにそれぞれのゲートを適用させた結果から最終的な量子テレポーテーションを実行した後のBobのqubitの測定結果は次のように計算できます.

 P(\left|0\right\rangle)

 =\sum_{ベル測定の結果}(各ベル測定結果の確率)

 \ \times (各測定結果でBobのqubitが\left|0\right\rangleである確率)

 = 0.781

量子テレポーテーションが成功していればBobの持つqubitは \cos(\frac{\pi}{8})\left|0\right\rangle - i\sin(\frac{\pi}{8})\left|1\right\rangleの状態になっているはずなので \left|0\right\rangleが測定される確率は0.852ほどになるはずですがそこそこずれていますね.ちなみに同じ回路をIdealQuantumProccessorで実行した結果は次のようになります.上からAliceの持つ2つのqubitの測定結果, \left|\Phi^+\right\rangleの時, \left|\Phi^-\right\rangleの時, \left|\Psi^+\right\rangleの時, \left|\Psi^-\right\rangleの時の結果です.

f:id:kadora:20160924105744j:plain

f:id:kadora:20160924105706j:plain

f:id:kadora:20160924105713j:plain

f:id:kadora:20160924105729j:plain

f:id:kadora:20160924105736j:plain

この結果を元に計算すると \left|0\right\rangleが測定される確率は0.852となり,正しく量子テレポーテーションにより量子状態が移されていることが確認できます.

まとめ

量子テレポーテーションという結構量子っぽい雰囲気を感じられることを実際に量子コンピュータでやってみましたがどうだったでしょうか.実際の物理デバイスで実行した結果はやはりそれなりに誤差があり,量子コンピュータを実用化することの難しさも同時に感じられたような気がします.今回コントロール付きのゲートがCNOTゲートしか無く,更に測定結果をコントロールbitとすることができなかったのでこんな面倒な方法でしか最終的な確率を出すことが出来ませんでしたがその2つが使えたら1つの回路で量子テレポーテーションを実現できたのでもう少し最終的な結果が分かりやすかったかもしれませんね.CNOT以外のコントロール付きゲートをこの量子コンピュータで実装する方法が分かる人がいましたらコメント等で教えていただけるとありがたいです.