Path: blob/main/translations/ja/ch-algorithms/superdense-coding.ipynb
3855 views
超密度符号化(Superdense Coding)
この notebook では量子コンピューティングにおける超密度符号化(Superdense Coding: SDC)を紹介します。まず初めに作成した量子回路を Qiskit のシミュレーターを使ってテストし、実際の量子コンピューターで動かしてみます。
目次
1. 超密度符号化と量子テレポーテーションの違い
量子テレポーテーションと超密度符号化は密接に関係しているので、適切に説明・区別なしには混乱を引き起こすでしょう。
量子テレポーテーションとは、2ビットの古典通信と Bell pair を利用して、量子ビット () の状態をある場所から他の場所へ送信するプロトコルの事です。言い換えれば、共有されたエンタングルメントを利用してある場所に存在する量子ビットの量子状態を破壊し、離れた場所に作り直すプロトコルとも言えます。対して超密度符号化とは、1つの量子ビット通信を使用して、2つの古典ビットを誰かが別のグループに送信できるようにする手続きの事です。
| 量子テレポーテーション | 超密度符号化 |
|---|---|
| 2つの古典ビットを使って 1つの量子ビットを転送 | 1つの量子ビットを使って 2つの古典ビットを転送 |
つまり、テレポーテーション・プロトコルは超密度符号化の反転バージョンであり、アリスとボブが最初の持ち物を交換しただけ、ともみなせます。
2. 処理手順

2.1 Step 1
手順はある第三者、チャーリーから始まります。チャーリーはエンタングルした状態にある2量子ビットを用意します。まず彼は、基底状態 の2量子ビットから始めます。そして1つ目の量子ビットにアダマールゲート( )を作用させて重ね合わせ状態を作ります。その後、1つ目の量子ビットをコントロール・ビット、2つめをターゲット・ビットとして CNOT ゲート( )を作用させます。このエンタングルした状態が、以前私たちが触れた Bell pair です。
出力結果
チャーリーは初めにアダマールゲートを作用させます。
ゲートが1つ目の量子ビットに作用すると重ね合わせ状態に遷移し、次の状態が得られることになります:
その後、チャーリーは CNOT ゲートを作用させます。CNOT ゲートは2つの量子ビットをエンタングルさせるので、もしコントロール・ビットが ならばターゲット・ビットが反転します。 ケットの右側の量子ビットがコントロール・ビットである事に注意しましょう。
2.2 Step 2
チャーリーは1つ目の量子ビットをアリスに、2つ目をボブに送ります。この手順の目標は、アリスが彼女の持っている量子ビットを使って、2つの古典ビット情報をボブに送信することです。しかしその前にアリスは、彼女が送信したい2ビットの情報に応じて、彼女の持つ量子ビットにいくつかのゲートの組を作用させる必要があります。
超密度符号化の変換規則(アリスの手順)

従って、もしアリスが 00 を送りたいならば、彼女は自分の量子ビットには何も作用させません(恒等ゲート( )を作用させます)し、10 ならば、 ゲートを作用させます。何を送りたいかによって、それに応じたゲートを作用させればよいのです。それが完了したら、アリスは彼女の量子ビットをボブに送り、手順の最終ステップに進みます。
2.3 Step 3
ボブは(右側の量子ビットである)アリスの量子ビットを受け取り、彼の量子ビットを使ってアリスのメッセージを復号します。復号の際、ボブは何の情報も必要としない事に注意してください。彼に必要なのは、つぎに示す復号手順の知識だけです。
ボブは、右側の量子ビットをコントロール・ビット、左側をターゲット・ビットとして CNOT ゲートを作用させます。そしてアダマールゲートを作用させ、最後に両方の量子ビットを観測する事で、アリスのメッセージを取り出すことが出来ます。

ボブが観測を行うと、彼はアリスが彼に送ったメッセージを確実に受け取ります。この最後の結果は実際には ですが と書かれていることに注意してください。グローバル位相は観測に影響しないからです。
3. 超密度符号化プロトコルのシミュレーション
量子エンタングルのペアを作るには、 ゲートの後に CNOT ゲートが必要である事はわかっています。なので、QuantumCircuit を引数にもち、インデックス a , b で表される2つの量子ビットをエンタングルさせる関数を作りましょう。
次に、メッセージを符号化しましょう。次の4つのメッセージ(00, 10, 01, 11)が送信できる事はわかっています。なので、このメッセージを引数に取り、対応するゲートを作用させるような関数を作りましょう。
最後に、メッセージを復号します。CNOT ゲートの後に ゲートを作用させれば復号できる事はわかっているので、これについても関数を作りましょう。
これらを使って最終的な手順を完成させましょう。
シミュレーターでは完全な量子コンピューターがシミュレートされます。正しいメッセージが、エラーなしに 100% の確率で測定できる事がわかります。
このように実際の量子コンピューターで実行すると、他の3つの状態も観測結果として現れます。量子ゲートのエラーと量子ビットのデコヒーレンスによるエラーが原因で起こるものです。これらのエラーについては後の章で詳しく学習することになるでしょう。