●従来の古典ビットのエラー訂正(パリティチェック)
まず、古典ビットのエラー訂正の簡単だが有効な方法を復習する。例えば、1ビット情報(0 or 1)を送信する場合、それらの複製を作って合計3ビットを送る。つまり、000か111が送られる。エラーの発生は稀であり、発生したとしても3ビットのうち高々1ビットだけと仮定する。これは現実的な想定である。そうすると、受信側で受け取った3ビットb0b1b2が、例えば、101の場合は111に、001の場合は000に訂正されることになる。一般的には以下のようにすればよい。
b0⊕b1とb0⊕b2が、
00ならば、訂正なし。
01ならば、b2を反転させる。
10ならば、b1を反転させる。
11ならば、b0を反転させる。
●量子ビットのエラー訂正(パリティチェックの拡張)
ここで扱うエラーは、量子ビットの誤反転である。すなわち、量子の本来の状態 a|0⟩+b|1⟩が何らかの理由でa|1⟩+b|0⟩に変化したエラーを検出し、それを訂正したい。そのために、上記の考え方を量子ビットに拡張するのだが課題がある。第一に、量子ビット(qubit)の複製は一般に不可能(量子複製不可能定理)である。第二に、量子の測定(情報の確認)を行えばその時点で量子状態は失われてしまう。しかし、それらを回避して量子テレポーテーションを利用する(qubitを載せる量子を実際には送信せずにその状態を瞬時に転送する)素晴らしい解法がある!
まず図1に示すように、Aliceは送信したいqubit a|0⟩+b|1⟩とそのコピー2個に相当するものを作成する。実際には、複写するのではなく、2個のancilla用のqubitを用意し、それらにCNOTを作用させる。その結果として、3qubitsの量子もつれ状態a|000⟩+b|111⟩が作られる。実質的に送信したいqubitのfan-outを作ったことになる。ここでは、送信するqubitの状態を、一例として、量子ゲートRY[π/3]を用いて設定した。
次に、受信するBob側の量子回路である。詳細は図2をご覧いただきたいが、新たに2個のqubitsを下部に追加した。送信されてきた3個のqubitsの1番目と2番目のパリティと、1番目と3番目のパリティを計算するためである。これらの結果を見れば、前節「古典ビットのエラー訂正」の説明通りに、どのqubitにエラーがあるか、そしてどう訂正すれば良いかが分かるのである。ここで注目すべきは、これらの2個のパリティ用qubitはいずれも、本来の3個の量子ビットとは「もつれた状態にはない」ことである。つまり、これらのパリティ用qubitsを測定して結果を見ても、上部の3個の量子ビットのもつれ状態には何ら影響を与えない。
●量子シミュレータによる現象の確認
以上のエラー訂正の動作を完全に実現することは難しいが、本質的な動きは量子回路シミュレータQni[2]で確認できる。送信された3個のqubitsにエラーが無かった場合を図3(1)に、3番目のqubitにエラーを発生させた場合と、それを検知して訂正した様子をそれぞれ、図3(2)と図3(3)に示した。「古典ビットのエラー訂正」のところで述べたとおり、ここでのパリティ計算結果の01は、上から3番目のqubitにエラーがあることを示している。従って、そのqubitの置かれているwireにPauli Xゲートを作用させればその状態が反転して、エラーが訂正できたことを示している。
●感想
参考文献[1]の著者Prof. Chris Bernhardtは、その第7章の最後で、"We have seen some surprising things we can do with just a few quantum gates."と述べている。まさにその通りであった。古典ビットの世界にはない驚異の発想の存在を知り、それを理解することができ、実際に量子回路シミュレータで(そしてQuantum Computer実機でも)確かめることができたのである。まだまだ氷山の一角というものしか学んでいないが、今後さらにその奥深さを知ることになるだろう。
References
[1] Chris Bernhardt, “Quantum Computing for Everyone”, MIT Press, 2020
https://www.chrisbernhardt.info/
[2] Qni; https://github.com/qniapp/qni
0 件のコメント:
コメントを投稿