本記事は量子もつれ編、量子振幅増幅編の続きとなります。引き続きこちらを教科書としています。Jupyter notebookを https://github.com/sin-gee/ImageOfQuantumBit/ImageOfTeleportation.ipynb に置いておきますのでよろしければ試してみてください。
初めに、この記事を読まれる方に、量子テレポテーション自体の説明するのは「釈迦に説法」でしょう。とはいえ、量子複製不可能定理は押さえておいた方が、この面白さが伝わるのではないか、と思います。
では始めましょう。今回の(量子)回路は次のとおり(例によって左から右に流れます)。
(量子である)$q_2$と、(単に$0or1$となる)$q_0$と$q_1$の測定結果を相手に送ることで、($q_0$を直接送らずに)$q_0$をリモートで再現させるものです。$q_2$に$q_0$が複製されたような気になってしまいますが、(元の)$q_0$は測定により破壊されるため、量子複製不可能定理には違反しない訳です。
1.$q_0$を生成します。
といっても$\lvert0\rangle$では面白みに欠けるので、$\lvert0\rangle$と$\lvert1\rangle$で振幅と位相に差をもたせてあげます。
#量子bit0
Q1 = Qbit(math.pi*0.2,math.pi*0.5)
#q0の生成
qzero,qone = createBy1bit(Q1)
2.$q_1$と$q_2$を生成して、量子もつれ状態にします。
#量子bit1
Q2 = Qbit(math.pi*0,math.pi*0)
#量子bit2
Q3 = Qbit(math.pi*0,math.pi*0)
#cx(Highをコントロールビット、lowを標的ビットとした場合)
def cx_high_control(q00,q01,q10,q11):
q10_,q11_ = x_gate(q10,q11)
return q00,q01,q10_,q11_
#q1にアダマールゲートを作用後、q2をターゲットビットとしてcxゲートを作用させる(Bell状態にする)
q00,q10 = h_gate(q00,q10)
q01,q11 = h_gate(q01,q11)
q00,q01,q10,q11 = cx_high_control(q00,q01,q10,q11)
3.$q_0$をコントロール、$q_1$をターゲットとして、CNOTを働かせます。
def merge1to2(q0,q1,q00,q01,q10,q11):
# 初期の各量子bit列の波の軸
q000 = np.roll(q0*max(q00),phase(q00))
q001 = np.roll(q0*max(q01),phase(q01))
q010 = np.roll(q0*max(q10),phase(q10))
q011 = np.roll(q0*max(q11),phase(q11))
q100 = np.roll(q1*max(q00),phase(q00))
q101 = np.roll(q1*max(q01),phase(q01))
q110 = np.roll(q1*max(q10),phase(q10))
q111 = np.roll(q1*max(q11),phase(q11))
return q000,q001,q010,q011,q100,q101,q110,q111
#q0をコントロールビット、q1をターゲットビットとしてCXゲートを作用させる
q000,q001,q010,q011,q100,q101,q110,q111 = merge1to2(q0,q1,q00,q01,q10,q11)
q000,q010,q100,q110 = cx_high_control(q000,q010,q100,q110)
q001,q011,q101,q111 = cx_high_control(q001,q011,q101,q111)
#q0にアダマールゲートを作用させる
q000,q100 = h_gate(q000,q100)
q001,q101 = h_gate(q001,q101)
q010,q110 = h_gate(q010,q110)
q011,q111 = h_gate(q011,q111)
最後(測定直前)の波の状態を見てみると、こんな感じになっています。
では、先ほど見た$q_0$の状態と見比べてみます。
まず、$q_0$の測定結果が$0$、$q_1$の測定結果が$0$であった場合、
$q_2$はそのままで元の$q_0$の状態を再現できることがわかります。
次に、$q_0$の測定結果が$0$、$q_1$の測定結果が$1$であった場合、
$q_2$の$\lvert0\rangle$と$\lvert1\rangle$を入れ替える($X$ゲートを作用させる)ことで元の$q_0$の状態を再現できることがわかります。
そして、$q_0$の測定結果が$1$、$q_1$の測定結果が$0$であった場合、
$q_2$の$\lvert1\rangle$を反転させる($Z$ゲートを作用させる)ことで元の$q_0$の状態を再現できることがわかります。
最後に、$q_0$の測定結果が$1$、$q_1$の測定結果も$1$であった場合、
$q_2$の$\lvert0\rangle$と$\lvert1\rangle$を入れ替え($X$ゲートを作用させ)た後に、$\lvert1\rangle$を反転させる($Z$ゲートを作用させる)ことで元の$q_0$の状態を再現できることがわかります。
量子テレポテーションの回路を見てきましたが、どうだったでしょうか?
「量子テレポテーション」のタイトルだけでここにいらした方にとっては、”拍子抜け”、”コレじゃない”だったことでしょう。ごめんちゃい。