クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

量子もつれとベル状態

このレッスンのあとで: ベル状態を作り、結果が結びつく理由を説明できる。

60分のレッスンコマンド1件量子シミュレーターラボ:JupyterLab で量子ビット、ゲート、測定

量子もつれは2つの結果が結ばれる

量子もつれは、2つの量子ビットの結果が、切り離せないほど結びついた状態です。一方を測ると、他方の結果の見込みが決まります。

代表がベル状態です。H ゲートと CNOT ゲートの2つだけで作れます。このレッスンでは、作り方と、なぜ分けられないかを学びます。

このレッスンのゴール

メモ

ベル状態を作り、結果が結びつく理由を説明できる。

キーワード

ことばいみ
2量子ビットの状態00、01、10、11の4つの振幅の並び
テンソル積2つの状態を並べて、1つの状態にすること
CNOT1つ目が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が半々

学生が入力するセルは、このプレビューでは空白です。

テンソル積を関数にする

コード: python
# 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 が結果を入れ替える

入力出力わけ
00001つ目が0なので、そのまま
01011つ目が0なので、そのまま
10111つ目が1なので、2つ目を反転
11101つ目が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なら、積に分けられます。

積に分けられるか調べる

コード: python
# 積に分けられる状態かを、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 で表示します。

振幅の符号が、ベル状態とどう違うかを、一文で書きましょう。結果の確率は、変わりますか。

このラボとソースについて: 量子シミュレーターラボ:JupyterLab で量子ビット、ゲート、測定

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。