LoginSignup
6
4

More than 3 years have passed since last update.

Blueqatで爆弾検査問題やってみる

Last updated at Posted at 2020-01-06

爆弾検査問題?

とても敏感な爆弾がある「かもしれない」とします。たった1つの光子でも、当たると爆発する爆弾です。
そんなもん、外乱で既に爆発してるだろうと思うのですが、そういう細かいことは無視します。

たった1つの光子でも爆発する爆弾を、爆発させずにあるかどうかを判定することは非常に難しいです。
何らかの形で光を使って検査することは不可能でしょう。

そう、古典物理ならね。

量子力学なら、爆弾を爆発させずに、爆弾かどうか分かるかもしれない

ビームスプリッタという、ひとつの光子に対してアダマールゲートのような働きをする素子を使い、図のように、爆弾がある「かもしれない」位置を光が通るように、実験系を組みます。

Screenshot_20200106_134257.png

ミラーは単に光の向きを変えているだけで、ここでは、何も起こらないと考えて構いません。
これは、量子回路で書くと、次のようになります。

Screenshot_20200106_134517.png

爆弾がなければ、測定結果は常に|0>です。

from blueqat import Circuit

Circuit().h[0].h[0].m[0].run(shots=1000)
# 結果: Counter({'0': 1000})

爆弾がある場合のことを考えます。

爆弾も量子回路に取り入れてみましょう。
爆弾は、もし0qubit目が|1>だったら爆発するので、CNOTゲートで置くことができます。

また、爆発したかしてないかは、明らかに分かるので、観測も行われていると考えられます。

Screenshot_20200106_135420.png

from blueqat import Circuit

Circuit().h[0].cx[0, 1].m[1].run(shots=1000)
# 観測結果が0なら、爆弾に光は当たらなかった。1なら、爆弾に光が当たった。

1qubit目の観測結果が1だったなら、爆弾が爆発してしまって、実験は終了です。
ところで、もし観測結果が1にならなかったら、先ほどの量子回路の観測結果はどうなるでしょう?

Screenshot_20200106_140308.png

from blueqat import Circuit

Circuit().h[0].cx[0, 1].h[0].m[1].m[0].run(shots=1000)                                           
# 結果(ランダムに変わります): Counter({'00': 243, '01': 271, '10': 233, '11': 253})

まず、1qubit目の観測結果(0から数えるので、1から数えると2番目)が1の場合は、爆発してしまい、終了です。
つまり、'01'と'11'の場合は、爆発エンドです。
今回、1000回試しましたが、271+253 = 524回は爆発エンドでした。

爆発は免れた場合を考えます。

その前に、そもそも爆弾がなければ観測結果は0だったことを思い出してください。
爆発したかしてないか(1qubit目)を観測した場合、爆弾がないと爆発は起こらず(0を観測)、0qubit目と合わせて00が観測されます。
念の為Blueqatで計算しておきます。

from blueqat import Circuit
# 爆弾(CNOTゲート)がなければ、観測結果は00になる
Circuit().h[0].h[0].m[1].m[0].run(shots=1000)

爆弾がなければ、観測結果は必ず'00'になることが確認できました。

爆弾があった場合の話に戻ります。
先ほどの結果を見ると、1000回試して、243回は'00'でした。
'00'は、爆弾がなかった場合の結果と同じですので「実験したけど爆弾があるかないかは分からなかった」という結果になります。

しかし、233回だけ'10'が出ています。
これは、爆発していなくて、かつ、爆弾がない場合には絶対に出ない観測結果です。
もしも'10'が出たなら、爆弾を爆発させることなく「爆弾はあった」と結論付けることができます。

ところで、それぞれ、どれくらいの確率で観測されるのでしょうか。
観測前の状態ベクトルを見てみましょう。

from blueqat import Circuit

Circuit().h[0].cx[0, 1].h[0].run()
# array([ 0.5+0.j,  0.5+0.j,  0.5+0.j, -0.5+0.j])

観測確率は状態ベクトルの絶対値の2乗なので、00, 01, 10, 11ともに0.25の確率で観測されることが分かります。

つまり、この実験を行うと、爆弾があった場合、

  • 50%の確率で、爆弾は爆発してしまう
  • 25%の確率で、爆弾があるのかないのか分からない
  • 25%の確率で、爆弾を爆発させることなく、爆弾があることが分かる

ということになります。

まとめ

今回、量子力学を使った、一風変わった問題を取り扱ってみました。

古典だと

  • 何も実験をしない。爆弾があるかどうか分からない
  • 何か実験をする。爆弾があった場合、100%爆発する

しか選択肢がなかったのですが、量子の世界では、このように、

  • 何か実験をする。爆弾があった場合、50%の確率で爆発するが、25%の確率で、爆弾を爆発させることなく爆弾の存在を検知できる

といった選択肢も取ることができます。

6
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4