量子もつれは2つの結果が結ばれる
量子もつれは、2つの量子ビットの結果が、切り離せないほど結びついた状態です。一方を測ると、他方の結果の見込みが決まります。
代表がベル状態です。H ゲートと CNOT ゲートの2つだけで作れます。このレッスンでは、作り方と、なぜ分けられないかを学びます。
このレッスンのゴール
メモ
ベル状態を作り、結果が結びつく理由を説明できる。
キーワード
| ことば | いみ |
|---|---|
| 2量子ビットの状態 | 00、01、10、11の4つの振幅の並び |
| テンソル積 | 2つの状態を並べて、1つの状態にすること |
| CNOT | 1つ目が1のとき、2つ目を反転するゲート |
| ベル状態 | 00と11だけに振幅がある、もつれた状態 |
| 量子もつれ | 2つの量子ビットを、別々に書けない状態 |
学生が入力するセルは、このプレビューでは空白です。
2つの量子ビットは4つの振幅を持つ
2つの量子ビットの結果は、00、01、10、11の4通りです。状態は、この順に並べた4つの振幅で書きます。左の数字が、量子ビット0です。
別々の2つの状態を並べるには、テンソル積を使います。それぞれの振幅を、すべての組でかけます。
例: テンソル積の計算
| 0番 | 1番 | 結果の並び | 意味 |
|---|---|---|---|
| [1, 0] | [0, 1] | [0, 1, 0, 0] | 必ず01 |
| [1, 0] | [1, 0] | [1, 0, 0, 0] | 必ず00 |
| [0.707, 0.707] | [1, 0] | [0.707, 0, 0.707, 0] | 00と10が半々 |
学生が入力するセルは、このプレビューでは空白です。
テンソル積を関数にする
# 2つの量子ビットを並べて、4つの振幅にします。
def tensor(a, b):
return [a[0] * b[0], a[0] * b[1], a[1] * b[0], a[1] * b[1]]
zero = [1, 0]
one = [0, 1]
print(tensor(zero, one))
# one と zero を入れ替えて、もう一度実行してください。
# 1が立つ場所は、どこに動きますか。
CNOT は1つ目を見て2つ目を反転する
CNOT は、2つの量子ビットに当てるゲートです。1つ目が0なら何もしません。1つ目が1なら、2つ目を反転します。
振幅の並びでは、10と11の場所を入れ替えることになります。00と01は動きません。
CNOT が結果を入れ替える
| 入力 | 出力 | わけ |
|---|---|---|
| 00 | 00 | 1つ目が0なので、そのまま |
| 01 | 01 | 1つ目が0なので、そのまま |
| 10 | 11 | 1つ目が1なので、2つ目を反転 |
| 11 | 10 | 1つ目が1なので、2つ目を反転 |
学生が入力するセルは、このプレビューでは空白です。
ラボはベル状態を作って測る
ラボの bell.py は、H ゲートを量子ビット0に当て、CNOT を当てます。最後に1000回測ります。
表示される言葉は英語です。after H on qubit 0 は、H の後という意味で、a Bell state はベル状態です。
ベル状態を作って測る
docker exec jupyter python3 steps/bell.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
もつれた状態は積に分けられない
[0.5, 0.5, 0.5, 0.5] は、2つの状態のテンソル積で書けます。ベル状態は、どう組み合わせても書けません。
書けない状態を量子もつれといいます。調べるには、00と11の積と、01と10の積を比べます。差が0なら、積に分けられます。
積に分けられるか調べる
# 積に分けられる状態かを、a0*a3 と a1*a2 で調べます。
def is_product(s):
return abs(s[0] * s[3] - s[1] * s[2]) < 1e-9
print(is_product([0.5, 0.5, 0.5, 0.5]))
print(is_product([0.7071, 0, 0, 0.7071]))
# 2つ目の状態を [0.7071, 0, 0.7071, 0] に変えて、もう一度実行してください。
# 結果は、どうなりますか。
よくある間違い
注意
もつれた片方を測れば、遠くへ瞬時に文字を送れると考えがちです。結果は、測るまで自分で選べません。結びつきは、後で2つの結果を並べて初めて分かります。
さらに挑戦: 別のもつれ
ノートブックで、量子ビット0に X を当ててから、H と CNOT を順に当てます。どんな状態になるかを、show で表示します。
振幅の符号が、ベル状態とどう違うかを、一文で書きましょう。結果の確率は、変わりますか。