√NOTで量子コンピュータ

量子コンピュータって何でしょう。
夢の次世代計算機、実用化まであと一歩、解読不能だった暗号が解ける、多世界宇宙で並列処理・・・
いろんな噂を断片的に耳にするのですが、それでは量子コンピュータとは一体何なのか、本質的なところはなかなか理解できません。
本格的に理解するには、物理と数学の膨大な予備知識が必要なんです。
ならば、いきなり全容は無理としても、せめて基本的な原理だけでもしっかり解説してあるサイトは無いものか。
そう思って探したところ、うってつけのコンテンツを見つけました。

* √NOTゲートで考察する量子コンピュータの基本原理
>> http://www.comp.tmu.ac.jp/sasabe/
このページから「量子コンピュータの原理(PDF)」をダウンロードしよう。

                                                                                                                                              • -

従来の電子回路型計算機の作動原理の知識を抱えたまま量子コンピュータを学ぼうとすると、
両者の間の概念の相違の大きさに戸惑うことが多い。
例えば演算の基本要素である「論理ゲート」一つを取り上げても、電子回路的イメージでは描けない。
従来型との動作の比較だけでなく、量子コンピュータには『状態の重ね合わせ』や『干渉効果』、『量子並列計算』など、
従来型には存在しない新しい作動原理の理解が必要となる。
・・・
本論文は、量子コンピュータが持つこれらの新しい概念を短期間に理解できるように工夫された教材である。
最もシンプルな可逆論理ゲートである『NOTゲートの平方根』を用いて、
量子コンピュータの上記に掲げた重要な特質を全て説明している。

                                                                                                                                              • -

√NOTゲート、おそらくこれが、量子コンピュータを最短距離で理解できる突破口ではないかと思います。
笹部先生、ありがとう。
以下は、このペーパーを私なりに読解したものです。
間違っているところがあるかもしれないので、見つけたら教えてくだされ。
高度な質問は、著者の先生の方に直接送ってね。

量子コンピュータとは何か。
一言で言えば、それは「虚数が使えるコンピュータ」のことです。
普通のデジタルコンピュータは、0と1から成り立っています。
量子コンピュータでは、それに加えて虚数単位iが構成要素に含まれています。
普通のデジタルコンピュータは、AND, OR, NOT 操作の組み合わせからできています。
最も簡単な NOT という操作は、1を0に変える操作、あるいは0を1に変える操作を行います。
これがペーパーの (1) 式です。
虚数が使える量子コンピュータでは、普通のコンピュータではできなかったようなことも実現できます。
その最も簡単な例が「2回続けて行うとNOTになるような操作」、√NOTゲートなのです。
そんなゲートが何の役に立つの?という疑問は、ひとまず棚上げにしましょう。
とにかく従来のコンピュータでできなかったことが、量子コンピュータでできちゃう、というところに価値があるんです。

ここで最初の大きな疑問、
 √NOTゲートを1回だけ行ったとき、データはどうなっているの?
たとえばデータ1からスタートして、2回目の操作で0になるということは、1回目の操作では 0.5 なのかな?
いやいや、それでは単なるアナログ。
量子コンピュータでは、一回目の操作の後は「虚数で表されるような」データになっているんです。
それって具体的にはどうなっているのか。
具体的には・・・虚数を人間が直接見ることはできません。
人間が直接観測すると、50%の確率で1に、50%の確率で0に変わってしまうような、とってもデリケートな状態になっているんです。
普通のコンピュータのデータは単純に0と1で表しますが、量子コンピュータのデータはちょっと複雑で「ベクトル」で表現します。
しかも、ただの(実数の)ベクトルではなく、複素数のベクトルです。
ペーパーの (3)式を見てください。
量子コンピュータでは、状態0のことを |0> という記号で、状態1のことを |1> という記号で表記します。
この |ψ> という記号はベクトルの意味で、ベクトルの中身の成分を書き下すと (3)式のようになります。
そして、量子コンピュータ最大の特色であり、理解の最大の難関は (2)式にあります。
量子コンピュータでは、データの状態は「ベクトルの重ね合わせ」になっています。
「重ね合わせ」というのは「両方同時に存在している」ということなんです。
量子コンピュータで扱うデータは、ベクトル|0> と ベクトル|1> が重なり合った状態となっている・・・これが式(2)の意味です。
「重なり合った状態」って、一体何なのだろう。
ここが理解の最大の難関なので、しつこく繰り返しましょう。
「重なり合った状態」を、人間がそのまま直接見ることはできません。
無理に見ようとすると、ある一定の確率で |1> になったり、|0> になったりします。
きっと2つのベクトルが入り交じったような状態になっているのだろう・・・
とにかく(2)のように式に表せば、それで計算だけは万事うまくゆく、そんな状態なんです。

虚数の操作を行うことができて、
・扱うデータがベクトルになっているようなコンピュータ、
 それが量子コンピュータというものです。
これだけの知識があれば (4)式を読み取ることができるでしょう。
√NOTゲートとは、ベクトル|0> に2回作用させるとベクトル|1> に変わるような変換のことです。
その変換を行列で書き表せば (4)式のようになります。
(変換は行列の掛け算。ユニタリー行列っていうのは、ユニット、つまりベクトルの長さを変えない変換という意味です。O.K?)
√NOTゲートを2回掛け算すれば、(5)式のようにNOTゲートになりますね。
じゃあ、ベクトル|0> に√NOTゲートを1回だけ作用させたら、、、そのときの「重ね合わせ」状態を式に書くと (6)式になります。
exp(iπx) は、x の値を変えてゆくと虚数平面上の単位円をグルグル回る動きを示します。
√NOTゲートを作用させた後のベクトルは、「虚数方向に90度回転したような」かっこうになっているんです。
もう1回作用させると、あと90度回転して、ベクトルは180度反対向きに変わります。

普通のコンピュータで扱うデータの基本単位は bit ですが、量子コンピュータで扱うデータの基本単位は Q-bit と呼ばれています。
bit の取る値は、単純に0か1のどちらかです。
Q-bit の取る値は、虚数まで含んだ長さ1のベクトルになっています。
この Q-bit を図に描けば、半径1の球面として表現できるでしょう。

図の北極がベクトル|0>、南極がベクトル|1>、その間は虚数を含んだ重ね合わせ状態です。
この球は「ブロッホ球」と呼ばれています。
ところで、虚数平面は「平面」なのに、ブロッホ球は3次元の「立体」になってます。
この増えた1次元は何なのか。
それは「波動の位相」です。
ブロッホ球は、緯度(縦方向)によって「0か1かの確率」を表し、経度(横方向)によって「波動の位相」を表現しています。
ただでさえ「人間が直接見ることができない」状態に、「波動」があって、「位相」があるのかっ!?
はい、あります。
目に見えない状態の、波動の位相って何だ?
それは、とりあえず「重なったときに、強まるか、打ち消し合うか」のことだと思ってください。
波って、ぴったり揃うと倍の強さになるし、反対だと打ち消し合って消えることもありますよね。
その、揃っているか、反対か、というのが位相。
波と同じように、Q-bit の状態には、重なるタイミングによって、互いに強め合ったり、打ち消し合ったりする性質があります。
この重なったときの相性みたいな性質を「位相」といって、ブロッホ球上では経度によって表現しているんです。

さて、ブロッホ球のイメージを持てば、「ユニタリー作用素」の意味がわかってきます。
ユニタリーというのは、半径の長さを変えない変換のこと。
つまりユニタリー変換とは、(複素数の)球面上を指し示すベクトルの向きを変える変換の総称なんです。
普通のコンピュータでは、つまるところ0と1の値の変化だけを考えれば、全ての計算ができていました。
量子コンピュータでは、つまるところ球面上のベクトルの向きの変化だけを考えて、全ての計算を行います。
矢印の向きを変えるだけですよ。
それならきっと、幾つかの(具体的には3つの)基本的な操作の組み合わせで、自由にベクトルの向きを変えることができるでしょう。
ほら、ルービックキューブだって、縦、横、前後の3つの回転操作で全てを実現しているじゃあないですか。
あんな感じ。
その基本的な3つの操作を書き下したのが、ペーパーの式(9)。
Ry(θ) は y軸周りにθ度の回転、Rz(α) は z軸周りにα度の回転。
Φ(δ) は単位行列複素平面上で偏角δだけ回したもの、つまり実数を複素数の領域にもってくるもの(だと私は理解してます)。
これらの基本操作を組み合わせた表現が、式(10)。
その表現を使って√NOTゲートを表したのが、式(11)です。
ペーパーの少し先の Figure 2: 図2に回転の様子が描かれています。
z軸に90度回転、y軸に90度回転、z軸に-90度回転。
なんだかルービックキューブみたいでややこしいのですが、結果としてデータベクトルは90度倒れて、-y軸の向きになります。

ここまでは抽象的な話だったのですが、それでは実際に Q-bit はどのようにして作るのでしょうか。
それはずばり「スピン」によって作ります。
もちろんスピンでなければ絶対にいけない、ということではありません。
たとえば普通のコンピュータは、0と1が表現できるものであれば、何を使っても構わないわけです。
歯車のような機械式であっても良いし、DNAを使って計算してもいいでしょう。
でも実際には、電位によって0と1を表す電気回路でできたコンピュータが世の中の9割方を占めています。
これと同じで、グルグル回転するベクトルを素直に表しているものといえば、スピンを考えるのが最も自然でしょう。
スピンとは何か。
それは荷電粒子の持つ磁気的な性質のことです。
最も身近な荷電粒子、電子は1つの小さな磁石になっています。
電子という小さな磁石の向きが、そっくりそのまま Q-bit の実例になっているわけです。
では、静磁場中に置かれた電子はどのようになっているのか。
それを説明しているのがペーパーの (12),(13),(14)式です。
イメージとしては、コマの歳差運動、傾いた軸がグルグル回っているものを想像すればよいでしょう。
(「ラーマー振動」は、「ラーモア振動」と表記されることもあります。)
この電子に、外から力を加えて操作することを考えてみる。それが式(15)。
電子が歳差運動しているのだから、自分もいっしょになってグルグル回ってみよう、というのが式(16),(17),(18)。
(回っている地球の上に乗っかって地上の物体の運動を見るのと、ちょっとだけ似てます。)
ここで改めて、外部から「x軸よりφだけ位相の進みを持つ回転磁場」を電子に対してかけてみます。
外部からかけてみる磁場を式に書いたのが、式(19)。
そこで生じる作用が、式(20)。・・・えーっと、飛ばします。
最終的な答は、式(22)〜(25)。
何が言いたかったというと・・・
「スピンの歳差運動と同じ振動数の円偏光した磁場を位相φでt秒間だけスピン量子系に掛け」れば、
スピンを思い通りの方向に傾けることができる、ということが言いたかったんです。

上の計算に従えば、√NOTゲートを実現する方法がわかります。
 「磁場の位相をπにとり、π/2Ω秒間のパルスを与えれば√NOTゲートが実現する。」
・・・早い話、電子に対して絶妙のタイミングで、いい感じに磁場をかければ、√NOT状態が実現できるってことですね。
|0> と |1> の確率は、磁場をかける時間の長さによって変わってきます。
それを式に書いたのが、式(27),(28)。
これを見ると、確率は cos2, sin2 で、つまり波の二乗といった形でウネウネと変化するわけです。

以上が√NOTゲートという、最も単純な量子コンピュータの原型です。
たしかにこれで、電子の向きを変える方法はわかりました。
けど、いったいこれのどこがすごいんだろう?
それは、√NOTになった状態が |0> と |1> の「重ね合わせ」になっているところです。
|0> と |1> の重ね合わせとは、「両方同時に存在している」ということです。
√NOTによるデータの反転は、|0> からスタートして、途中で |0> と |1> の重ね合わせを経過して、|1> に至ります。
結果はつまらないですが、途中が2つに分かれている、という点に着目。
これって、2列同時に、並列処理してるってことじゃあないですか。
これを上手いこと使えば、もっとたくさんの計算を、同時に並列処理できそうですね。
量子コンピュータが着目されているのは、この並列処理能力なんです。
従来の計算機ではとてもできなかった膨大な計算を、並列処理によって一気に解いてしまおう。
それが量子コンピュータの目指している未来なのです。