量子コンピュータ
量子ゲート
量子もつれ

【初心者向け】量子もつれと量子コンピュータ


はじめに

最近初心者、初級者の方で、どこから量子コンピュータをはじめていいかわからないという方向けによく聞かれるので、Hello World!として、アダマールゲートトの実装と量子もつれの実装をみてみたいと思います。ぜひ新年の活動として量子ゲートプログラミングをここから始めてみてください。


ツール

ツールはオープンソースのBlueqatを使います。簡単にPythonベースで量子ゲートマシンのプログラミングができます。

https://github.com/Blueqat/Blueqat


インストール

pipが入ってる方は簡単です、

pip3 install blueqat

これで導入できます。


最初の一歩

まずは量子もつれを実現する前にアダマールゲートを作ってみましょう。最初にBlueqatを読み込んで、1行で計算できます。

from blueqat import Circuit

Circuit().h[0].m[:].run(shots=100)

Circuit()はインスタンスというものを準備します。

.h[0]はアダマールゲートを0番目の量子ビットに適用するという意味です。

.m[:]は測定をします。

.run(shots=100)は100回同じ計算をします。

さて答えは、、、

Counter({'0': 54, '1': 46})

人によって異なりますが、0と1がだいたい半々ででます。これが重ね合わせです。アダマールゲートは0と1の重ね合わせを作るゲートですので、早速量子コンピュータぽいことができました。

-----H-----

こういうとても単純な回路です。量子コンピュータは確率計算を行うマシンなので、何回も計算して出る答えを確率で判断します。


量子もつれ

次に入門量子もつれ回路を作ります。これは2つの量子ビットを使ってもつれさせることで情報を同期できます。

from blueqat import Circuit

Circuit().h[0].cx[0,1].m[:].run(shots=100)

結果は、、、

Counter({'11': 50, '00': 50})

これは11と00が半々で出ています。本来は00,01,10,11の四種類が出るはずですが、この回路では00と11という両方の量子ビットが揃った解しかでません。これが量子もつれです。ベル状態とも呼びます。

Circuit()はインスタンスというものを準備します。

.h[0]はアダマールゲートを0番目の量子ビットに適用するという意味です。

.cx[0,1]はCX/CNOT回路と呼び、条件付きの反転回路です。0番目の量子ビットが0なら1番目も0、0番目の量子ビットが1なら1番目の量子ビットは反転して1になります。そのため、00と11のどちらかしかでない回路ができます。

.m[:]は測定をします。

.run(shots=100)は100回同じ計算をします。

回路自体は、先ほどの回路にCX(CNOT)回路がついたものです。これで完了です。

------H------*-------

-------------X-------


まとめ

ここまでできれば量子コンピュータは入門完了です。あとは少しずついろいろな問題を解いていくことで奥深い量子コンピュータの世界を徐々に体感できます。