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


爆弾検査問題?

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

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

そう、古典物理ならね。

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

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

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

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

from blueqat import Circuit

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

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

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

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

from blueqat import Circuit

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

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

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%の確率で、爆弾を爆発させることなく爆弾の存在を検知できる

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