【量子コンピュータ】色々な量子ゲートを理解する（1量子ゲート）

## はじめに
量子コンピュータの勉強をする中で、色々な量子ゲートを覚える必要があったので備忘と頭の整理を兼ねて行列計算をしながらまとめてみます。

$$
\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}
$$

## 前提
- 自分なりの整理なので理解が間違っている可能性があります。
- 頭の中でブロッホ球をイメージしてください。
- ページが長くなりそうなのでとりあえず1量子ゲートのみ、、、

## パウリゲート
以下のXYZゲートはパウリゲートと呼ばれます。パウリさんという物理学者が量子力学の中で導入したことに由来するらしいです。

### Xゲート
X軸を基準に180度回転させるゲート。
量子ビットの状態を反転させる時に利用します。
（感覚的には初期値$\ket{0}$を$\ket{1}$にするときに使うことが多い気がします）
$$ X = \begin{pmatrix} 0 & 1 \\\ 1 & 0 \end{pmatrix} $$

$$ X\ket{0} = \begin{pmatrix} 0 & 1 \\\ 1 & 0 \end{pmatrix}\begin{pmatrix} 1 \\\ 0 \end{pmatrix} = \begin{pmatrix} 0 \\\ 1 \end{pmatrix} = \ket{1} \\\\
X\ket{1} = \begin{pmatrix} 0 & 1 \\\ 1 & 0 \end{pmatrix}\begin{pmatrix} 0 \\\ 1 \end{pmatrix} = \begin{pmatrix} 1 \\\ 0 \end{pmatrix} = \ket{0} $$

### Yゲート
Y軸を基準に180度回転させるゲート。
あまり使われない？
$$ Y = \begin{pmatrix} 0 & -i \\\ i & 0 \end{pmatrix} $$

$$ Y\ket{0} = \begin{pmatrix} 0 & -i \\\ i & 0 \end{pmatrix}\begin{pmatrix} 1 \\\ 0 \end{pmatrix} = \begin{pmatrix} 0 \\\ i \end{pmatrix} = i\ket{1} \\\\
Y\ket{1} = \begin{pmatrix} 0 & -i \\\ i & 0 \end{pmatrix}\begin{pmatrix} 0 \\\ 1 \end{pmatrix} = \begin{pmatrix} -i \\\ 0 \end{pmatrix} = -i\ket{0} $$

### Zゲート
Z軸を基準に180度回転させるゲート。
位相を反転させるゲートだけど位相とは？って説明がされているものが少ない気がします。
（私は量子フーリエ変換にいくまでよく分からないまま進みました）
$$ Z = \begin{pmatrix} 1 & 0 \\\ 0 & -1 \end{pmatrix} $$

$$ Z\ket{0} = \begin{pmatrix} 1 & 0 \\\ 0 & -1 \end{pmatrix}\begin{pmatrix} 1 \\\ 0 \end{pmatrix} = \begin{pmatrix} 1 \\\ 0 \end{pmatrix} = \ket{0} \\\\
Z\ket{1} = \begin{pmatrix} 1 & 0 \\\ 0 & -1 \end{pmatrix}\begin{pmatrix} 0 \\\ 1 \end{pmatrix} = \begin{pmatrix} 0 \\\ -1 \end{pmatrix} = -\ket{1} $$

## その他よく使うゲート
### Hゲート
アダマールゲート、X軸とZ軸の間の45度の傾きの軸を基準に180度回転させます。
超重要で、重ね合わせ状態を作り出す為に必須です。
$$ H = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \\\ 1 & -1 \end{pmatrix} $$

$$ H\ket{0} = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \\\ 1 & -1 \end{pmatrix}\begin{pmatrix} 1 \\\ 0 \end{pmatrix} = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\\ 1 \end{pmatrix} = \frac{1}{\sqrt{2}}(\ket{0} + \ket{1}) \\\\
H\ket{1} = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \\\ 1 & -1 \end{pmatrix}\begin{pmatrix} 0 \\\ 1 \end{pmatrix} = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\\ -1 \end{pmatrix} = \frac{1}{\sqrt{2}}(\ket{0}-\ket{1}) $$

<br>
ちなみにXYZおよびHゲートは180度回転させるので、同じものを2回連続で作用させれば360度、つまり元の状態に戻ります。要は逆行列が自分自身ということですね。
$$ XX=YY=ZZ=HH=I $$
$$ HH = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \\\ 1 & -1 \end{pmatrix} * \frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \\\ 1 & -1 \end{pmatrix} = \frac{1}{2}\begin{pmatrix} 2 & 0 \\\ 0 & 2 \end{pmatrix} = \begin{pmatrix} 1 & 0 \\\ 0 & 1 \end{pmatrix} = I $$

### Sゲート
位相を$\pi$/2（90度）回転させるゲート（なぜSなんだろう？）
Zゲートの半分回転させるという意味で、$\sqrt{Z}$とも表されます。
$$ S = \begin{pmatrix} 1 & 0 \\\ 0 & i \end{pmatrix} $$

$$ S\ket{0} = \begin{pmatrix} 1 & 0 \\\ 0 & i \end{pmatrix}\begin{pmatrix} 1 \\\ 0 \end{pmatrix} = \begin{pmatrix} 1 \\\ 0 \end{pmatrix} = \ket{0} \\\\
S\ket{1} = \begin{pmatrix} 1 & 0 \\\ 0 & i \end{pmatrix}\begin{pmatrix} 0 \\\ 1 \end{pmatrix} = \begin{pmatrix} 0 \\\ i \end{pmatrix} = i\ket{1} $$

### Tゲート
位相を$\pi$/4（45度）回転させるゲート（なぜTなんだろう？）
Zゲートの4分の1回転させるという意味で、$\sqrt[4]{Z}$とも表されます。
$$ T = \begin{pmatrix} 1 & 0 \\\ 0 & e^{\frac{i\pi}{4}} \end{pmatrix} $$

$$ T\ket{0} = \begin{pmatrix} 1 & 0 \\\ 0 & e^{\frac{i\pi}{4}} \end{pmatrix}\begin{pmatrix} 1 \\\ 0 \end{pmatrix} = \begin{pmatrix} 1 \\\ 0 \end{pmatrix} = \ket{0} \\\\
T\ket{1} = \begin{pmatrix} 1 & 0 \\\ 0 & e^{\frac{i\pi}{4}} \end{pmatrix}\begin{pmatrix} 0 \\\ 1 \end{pmatrix} = \begin{pmatrix} 0 \\\ e^{\frac{i\pi}{4}} \end{pmatrix} = e^{\frac{i\pi}{4}}\ket{1} $$

### Pゲート
SやT、Zゲートは位相に作用するゲートでした。これを一般化したものがPゲートになります。
いわゆる右下の値にオイラーの公式を適用したものですね。
$$ P(\phi) = \begin{pmatrix} 1 & 0 \\\ 0 & e^{i\phi} \end{pmatrix} $$

## ユニバーサルセット
これらのゲートを組み合わせることによって、任意の量子状態の近似状態を作り出すことが可能です。
その最低限の組み合わせのことをユニバーサルセットと呼び、1量子ビットにおいては、HゲートとTゲートになり、これに2量子ゲートであるCNOTゲートを追加したものがユニバーサルセットと呼ばれます。

## クリフォードゲート
ではHとTゲートだけあれば良いかというと、量子回路が非常に冗長になりエラー率が上昇します。その為、上記で説明したような様々なゲートが必要となります。
特に上記の内、T、Pゲートを除くゲート（XYZ、H、S）はクリフォードゲートと呼ばれます。
クリフォードゲートは以下のような計算によってパウリゲートを別のパウリゲートに変換する特徴があります。
$$ HXH^\dagger = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \\\ 1 & -1 \end{pmatrix} *  \begin{pmatrix} 0 & 1 \\\ 1 & 0 \end{pmatrix} * \frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \\\ 1 & -1 \end{pmatrix} = \begin{pmatrix} 1 & 0 \\\ 0 & -1 \end{pmatrix} = Z \\\\
 SXS^\dagger = \begin{pmatrix} 1 & 0 \\\ 0 & i \end{pmatrix} * \begin{pmatrix} 0 & 1 \\\ 1 & 0 \end{pmatrix} * \begin{pmatrix} 1 & 0 \\\ 0 & -i \end{pmatrix} = \begin{pmatrix} 0 & -i \\\ i & 0 \end{pmatrix} = Y $$

ここで$\dagger$は随伴行列であることを意味します。あるパウリゲートの左からクリフォードゲート、右からそのクリフォードゲートの随伴行列をかけることにより、別のパウリゲート（同じものになってもOK）になります。この考え方も重要で色々なアルゴリズムでサラッと出てきます。


## より一般的なゲート
XYZゲートはそれぞれの軸を基準に180度回転させるものでした。これを一般化することで自由な回転を表すゲートが作れます（でもあんまり使わないかも、、、）
計算がしんどいので機会があれば、、、

### Rxゲート
X軸を基準に回転させるゲート。
$$ Rx(\theta) = e^{-i\frac{\theta}{2}X} = \begin{pmatrix} \cos\frac{\theta}{2} & -i\sin\frac{\theta}{2} \\\ -i\sin\frac{\theta}{2} & \cos\frac{\theta}{2} \end{pmatrix} $$

### Ryゲート
Y軸を基準に回転させるゲート。
$$ Ry(\theta) = e^{-i\frac{\theta}{2}Y} = \begin{pmatrix} \cos\frac{\theta}{2} & -\sin\frac{\theta}{2} \\\ \sin\frac{\theta}{2} & \cos\frac{\theta}{2} \end{pmatrix} $$

### Rzゲート
Z軸を基準に回転させるゲート。Pゲートと似ていますが、実際1量子ゲートではグローバル位相への作用を除き同じ動きになります。2量子ゲート、つまり制御ゲートと組み合わせると違いが出てきます。
$$ Rz(\theta) = e^{-i\frac{\theta}{2}Z} = \begin{pmatrix} e^{-i\frac{\theta}{2}} & 0 \\\ 0 & e^{i\frac{\theta}{2}} \end{pmatrix} $$


## 最後に
整理する中でユニバーサルセットやクリフォードゲートに対する理解が深まった気がします。
Rゲートは複雑なので暗記してしまいがちですが、あんまり使わないから今はいいや（汗