[超基礎]量子コンピュータのための量子論

# こんな人に役立つと思いまして…

- 量子コンピュータやりたい、でも量子論なんて知らん
- 量子力学とか難しいから何言ってるか分からん
- 細かいことはいいから量子コンピュータ理解するための最小限の量子論の知識が欲しい

以下、自分の中のまとめも兼ねているため悪しからず。多分何回かに分けて記事にすると思います。

#量子コンピュータの超簡単な基本事項

ざっくり言うと量子コンピュータは量子という「粒子のようなもの」をビットにしたコンピュータのことです。量子コンピュータにはゲート式とイジング式があり、ゲート式は0と1の状態をビットとして扱うので今のコンピュータに近く、とっかかりやすいです。量子コンピュータとして将来どちらの方式がマウントを取っているかわからんですが、ここではゲート式に絞って話を進めます。

今のコンピュータと量子コンピュータには根本的な違いがあり、それはビットに「量子」を使うということです。普通のビットは0か1のどちらかの状態しかとれないですが、量子はビットが0という状態と1という状態の「和」を作ることができます。「状態の和」とは一回の測定に対して確率的に、0の状態が観測できたり、1の状態が観測できたりする特殊な状態のことです。これは電圧がしきい値より高いか低いかで0と1を設定し計算を行う今のコンピュータでは考えていない事象です。量子の状態の和は後述する演算子に相当する操作で人為的にコントロールできます。どちらの状態が出てくるかは測定するまでわかりません。この状態の和を活用して、通常より少ない計算回数で結果を得られるのが量子コンピュータです。

#状態の書き方

ほかの学問ではあまり見ない特殊な記法を、慣用的に、量子論では用いています。量子論でxという状態は|x＞という記号で表します。例えばビットが0という状態は|0>と表します。0と1の状態の和は下記のように表すことになります。

![F5FBC020-6547-4DF9-AC31-78E0E6BDFC97.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/367df072-4e6d-9ebc-6f77-43129ad919e3.jpeg)

それぞれの係数の2乗がその状態をとる確率を意味します。この場合は0を1/2の確率で、1を
1/2の確率でとることを表しています。

ビットが2つある場合、つまり量子が2つある場合ですが、以下のように表します。

![5D5C841B-76D3-4784-BE8B-73CD3CB7A2F3.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/ff1474b9-de38-e97a-8d94-c0df94de5791.jpeg)

|x>|y>という記述に対して|x>は一つ目のビット、|y>は二つ目のビットを表します。係数の2乗がその状態の確率を表すことは同じです。例えば|0>|1>に着目すると1ビット目が0、2ビット目が1である状態でそれを観測できる確率が1/4であるということを意味しています。

#演算子を作用させるとは？

量子論を始めて最初に突き当たる難題が、状態に演算子を作用させるとはどういう意味？ということでしょう。

一般に演算子を状態に作用させると、その状態を変化させます。例えば|0>という状態に演算子**X**を作用させると|1>になるといった具合です。

状態を定数倍する演算子も存在します。例えば**n**という演算子を下記のルールに基づくように状態を定数倍する演算子と定義することもできます。

![5873ED32-8B42-453B-ADA8-448866AF6A20.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/84e0cce4-403c-e6c4-4797-ec45e8fbff39.jpeg)
![A66E0F52-1E5F-4779-B2A6-1D8089185F20.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/08494ffc-e3dd-e800-f167-b7fe8052e098.jpeg)

また和の状態を作る下記演算子も定義することができます。

![FFF86BA3-A01F-4FC3-AD9C-B29CEDE5781D.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/09789de3-5452-db29-1db1-8ef5137febee.jpeg)

量子コンピュータでの代表的な演算子を以下に説明します。

#代表的な演算子

###フリップ演算子 **X**

0の状態を1の状態に、1の状態を0の状態に反転させる演算子です。

![95D1DB77-E014-4965-83B3-95AE3B04B0C1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/93d4becf-2672-0f48-6513-40ccef133271.jpeg)
![6E3F13C8-B9F2-4187-8C32-81BB3FA1ED70.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/e1b269c5-02cd-3c56-2c4e-5eec4d740d7f.jpeg)

###位相反転演算子 **Z**

下記のような演算をするものです。なぜこれを位相反転と言うかはブロッホ球というものの考え方を導入する必要があるので、ここではふーんくらいにしたください。

![9844F7BF-5B13-4A86-9829-170FEDE1FE2C.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/08b03997-ed8d-4ed4-e5af-dcb96db0f7fb.jpeg)
![3C51F1ED-5890-4C9F-A5D6-3961F790895E.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/f5623bef-f380-4cc8-81a0-b56503efcff4.jpeg)

ブロッホ球参考
[Wikipedia](https://ja.m.wikipedia.org/wiki/ブロッホ球)

###アダマール演算子 **H**

状態和を作る演算子です。これは1/√2(**X**+**Z**)という演算子と同じです。状態の和を作ることができます。

![9A16BCE4-0C61-4DBF-B84B-EAA9FE12FB38.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/a76e9cb5-a3a7-1ed7-47e8-10a4ff0c784f.jpeg)
![DB69C0A8-8EFA-4738-94EE-65B29D941FD9.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/c225a4ec-89bf-7d63-e38e-e4dcabf05179.jpeg)

###cNOT演算子 **C01**

二つのビットに対して働く演算子も考えられます。この演算子は1ビット目が0だった場合には2ビット目に対して何もせず、1ビット目が1だった場合には2ビット目を反転させます。ちなみに添字の0は1ビット目を表し添字の1は2ビット目を表します。Pythonのリストのindexが0の時に一つ目の値を指定するするのと同じ考え方です。

![9F01B1E5-99D5-4BDF-A985-30DE5A9560CB.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/a6054dd9-c6a5-0669-0437-435cdb87bc2f.jpeg)
![247D98B0-FFC8-4151-B1B7-39AE956E94AB.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/2324a8de-a46a-656f-285a-c6a2b02b864c.jpeg)
![683C4C8E-4016-4F17-8E9F-CA633432BF01.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/be2f0e5a-0192-669e-93ca-2fb64e0c88be.jpeg)
![8C7207E3-AF16-495F-A080-1F1B6C7EE99E.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/421609/018f81b6-51c5-7c08-2aeb-abd67d409340.jpeg)

#まとめ

- 今のコンピュータは電圧高い=「1という状態」、電圧低い＝「0という状態」に割りつけその2パターンしかないが、量子力学では「0という状態と1という状態の和」という概念を使える。
- そのかわりビットは電圧ではなくスピンと呼ばれる量だったり離散化したエネルギーだったりする。
- 状態は量子論特有の|x>という記号で表す。これはビットがxという状態という意味である。(x=0 or 1)
- 状態は演算子を作用させることで変えることができる。演算子に相当する機器は量子コンピュータに実装することができる。


以上が、ゲート式の量子コンピュータを理解する上で、最低限、知っておけば良い全てのことです。次回は量子コンピュータ最初のアルゴリズムであるドイチュのアルゴリズムについて触れます。