外に出るねくら

~ 外に出たって結局やることは自宅と同じ ~

量子ビット

反省

前回のポスト

量子コンピューティングのためのクソみたいなメモ - 外に出るねくら

であまりにお粗末なことをしてしまったと反省しました。
そしてお粗末なことをしたと思っている割にアクセスがあり、しかもfacebookでのシェアが勘違いじゃなければ8もあり、、、
なので、可及的速やかに次のポストをせねばと思いながらこのポストを書きました。
はい、今回のテーマは

量子ビット

割と序盤からぶっ飛ばしていきます。
コードは0です。
ちなみに、今回数式を扱う関係でmarkdownではなく、はてな記法で書いたため、今までと見え方が異なっています。
読みにくかったらすみません。
そうでなくても読みにくい? ですね。すみません。

動機

量子ビットに対してXゲートやCNOTゲートといった演算を適用するにあたり、
そもそも量子ビットがどのように表現されるかはちゃんとまとめておかないとなと思った次第。

まず前提

量子力学の世界では、僕たちが普段使っているコンピュータは「古典コンピュータ」と呼ぶらしいです。
また、ビットも同様に「古典ビット」と呼ばれます。
ここでもこれに従います。

さて内容

古典コンピュータは0か1の状態で情報が表現されている。
これだけ考えてればよかった。
これが古典ビット。

量子ビットは重ね合わせがあるのでそうはいかない。
量子ビットはまず、複素ベクトルを用いて


\left(\begin{array}{c}
 α\\
 β\\
\end{array}\right)

とすることで、量子の状態を表します。

 \alpha \betaはどの程度0と1が重ね合わさっているかを表現しており、「複素確率振幅」なんて呼ばれてます。

なぜ複素数?という疑問に対しては、
ビシッと「そうした方がのちのち計算が簡単だから」と答えます。
すみません、正直わからないです。
自分の理解ですが、
量子力学では、粒子の運動状態を波動関数で表します。
(波動関数は読んで字の如く波の動きについての関数)
波なので、素直に計算しようとすると懐かしの \sinやら \cosやらの三角関数が出てくるし、そしてこれが2乗とか微分とかやろうとすると計算しにくいです。
そこで、指数関数に変換して計算を行うんですが、このときに使うオイラーの公式でどうしても虚数が出てきます。
だったら最初から虚数が出てくることを前提に、複素数で表した方が計算は楽だろうという理解です。

さて、話を戻します。


\left(\begin{array}{c}
 1\\
 0\\
\end{array}\right)

と表現すると、古典ビットの0に対応し、


\left(\begin{array}{c}
 0\\
 1\\
\end{array}\right)

と表現すると、古典ビットの1に対応しています。

ところで毎回毎回上のような列ベクトルを書くのはめんどくさいです。
少なくとも過去の偉人たちはそう考えたみたいです。
なので、量子力学の世界では、量子状態を表すためにブラ・ケット表記というものが使われます。

ブラ記法:   \langle x|で記載し、行ベクトルを表しています
ケット記法:  |x\rangleで記載し、列ベクトルを表しています

少なくともこのポストでブラは使わないです。ケットのみ使います。

これを使うと先ほどの複素ベクトルを

量子ビットの状態 |\psi\rangle = α|0\rangle + β|1\rangle

と簡潔に書くことができるようになります。
急に \psiと書きましたが、量子力学における「適当な変数」です。
xみたいなものです。

注意すべきなのは、上の式の \alpha \betaは0と1がどの程度重なり合っているかを示しているだけであり、出現する確率を直接表しているわけではありません。
「重なり合っていると言っても程度があって、量子ビット \psiは0が \alpha割、1が \beta割で重なり合っているんだぜ」
ということを言っているだけで、
量子ビット \psiは、 \alpha%の確率で0となり、 \beta%の確率で1となる」
と言っているわけではないということです。

さぁクライマックスです

量子力学では、「測定」という操作を行うことで、ある量子ビットが0なのか1なのかを観測します。
「測定によって、量子状態が測定結果に収束する」という表現がされます。
なんだか、「あなたが0っていうから0になったのよ」って言われてるみたいですが、まぁだいたいそういうことらしいです。
測定を行うまでは0と1が重なり合った状態であり、測定をしたときに初めて0か1かが確率的に決定します。

上で言ったように、 \alpha \betaは重なり合っている程度を表していますが、
ボルンの法則というものがあり、それによると、ここでいう \alpha \betaの絶対値を2乗するとそれぞれの値が測定結果として現れる確率になります。
空間のどこに粒子が存在するかについての確率なので、足せば当然1となります。
(あとは「波動関数の規格化」なんて話があったりしてゴチャゴチャして...)
結果、

 |α|^2 + |β|^2 = 1

となります。
散々 \alphaやら \betaやら書いた上に、どの程度重なり合っているか...なんて言ってましたが、
0と1は同じ程度重なり合っているとされ、同じ確率で観測されるので、
量子の状態は

 \frac{1}{\sqrt{2}}(|0\rangle + |1\rangle)\to\left(\begin{array}{c}
 \frac{1}{\sqrt{2}}\\
 \frac{1}{\sqrt{2}}\\
\end{array}\right)

と表すことができます。

ですが、 \frac{1}{\sqrt{2}}だけでは一般式としては不十分で、
最初の方に言った通り、量子力学では粒子の運動状態を波動関数で表すので、位相因子 \mathrm{e}^{\mathrm{i}\theta}というものを考慮する必要があり、
これを考慮すると、最終的に量子ビットの状態の一般的な表し方としては

 |\psi\rangle = \frac{1}{\sqrt{2}}|0\rangle + \frac{\mathrm{e}^{\mathrm{i}\theta}}{\sqrt{2}}|1\rangle

となります。
特に、 \frac{\mathrm{e}^{\mathrm{i}\theta}}{\sqrt{2}}|1\rangleの部分は量子力学全般で重要な役割を果たします。

今日はこの辺でまとめます.

まとめ

量子ビットの状態は、複素ベクトルを使って


\left(\begin{array}{c}
 α\\
 β\\
\end{array}\right)

と表すことができ、
ブラ・ケット記法を使うことで

 |\psi\rangle = α|0\rangle + β|1\rangle

と表すことができました。

 \alpha \betaの絶対値を2乗するとそれぞれの値が測定結果として現れる確率が、

また、0と1は同じ程度重なり合っていること、量子力学では粒子の運動状態を波動関数で表すことから、
最終的に、量子の状態を表す一般式として

 |\psi\rangle = \frac{1}{\sqrt{2}}|0\rangle + \frac{\mathrm{e}^{\mathrm{i}\theta}}{\sqrt{2}}|1\rangle

を求めることができました。

これが量子ビットの演算の出発点です。
次のポストでは実際に演算を適用していこうと思います。