IBM Quantum ExperienceとBlueqatで作った2進数の加算回路にHゲートを適用して量子っぽさを体感してみる


量子コンピュータ初心者です。前回IBM Quantum ExperienceとBlueqatを使って2進数の加算回路を作ってみましたが、たぶんこんな疑問があると思います。

普通のデジタルな計算と変わらないのでは・・・?

そうですね。前回は4回計算して4つの答えを得ました。これでは普通に電卓たたくのと大差ありません。今回はここに$H$ゲートを適用して量子の重ね合わせを使った計算を行い、量子っぽさを体感してみます。

加算回路にHゲートを適用する

前回Circuit Composerで作成した加算回路のq[0]とq[1]に$H$ゲートを適用します。準備はこれだけ。
Measurement Probabilityの結果を見ると4つの値が並んでいます。

加算回路の復習

この加算回路ではq[0]とq[1]が入力ビット、q[2]とq[3]が出力ビットでした。そして以下のように計算することを想定していたのでした。

入力1 q[0] 入力2 q[1] 出力1桁目 q[2] 出力2桁目 q[3]
0 0 0 0
1 0 1 0
0 1 1 0
1 1 0 1

結果を確認する

Circuit Composerではq[3],q[2],q[1],q[0]と量子ビットの順番とは逆に結果を出すので、並んでいる4桁の数字は先頭2つが出力値、後ろ2つが入力値です。先の表の右から左へ数字が並んでいると思っていただければOKです。

ということで、$H$ゲートを入れることで1つの回路で4つの計算を同時に行うことができました!

発想の飛躍が必要(たぶん)

このようなことが起きるのは$H$ゲートを適用することで、q[0],q[1]が0と1の値を50%ずつ持つ、つまり0でもあり1でもあるという量子の重ね合わせ状態になるためです。確定的ではない値を入力値として、計算すると確定的な結果が出てくるというのはいかにも量子っぽく、普通の計算とはかなりイメージが違うので発想の飛躍が必要そうな気がしてます。

Blueqatで計算してみる

同じ計算をBlueqatでもやってみます。書くのはたったこれだけ。短い・・・

from blueqat import Circuit
Circuit().h[0,1].ccx[0,1,3].cx[1,2].cx[0,2].m[:].run(shots=100)

計算するとこんなふうに4つの結果が返ってきます。Circuit Composerとは逆でq[0],q[1],q[2],q[3]の順番で結果が出ていることに注意してください。

Counter({'0000': 23, '0110': 31, '1010': 25, '1101': 21})

まだ量子プログラミングはじめて数日ですが、量子プログラミングはセットアップまでが大変だけれども計算は一撃みたいな印象を持ちました。このあたりが量子コンピュータが注目される理由なのかもしれません。

参考資料

Blueqatチュートリアル 重ね合わせを使った足し算