[WIP] 量子計算チートシート

$$
\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}}
$$

# ブロッホ球

三角関数の単位円みたいなもの。量子ビットの状態を表す球体。量子ビットに演算子を適用すると、量子ビットの状態を表すベクトルが、この球体の表面上を動き回る。

![](https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Bloch_sphere.svg/200px-Bloch_sphere.svg.png)
出典：wikipedia

```math
\begin{align}
\psi &= \cos (\theta / 2) \ket{0} + e^{i \phi} \sin (\theta / 2) \ket{1} \\
     &= \cos (\theta / 2) \ket{0} + ( \cos \phi + i \sin \phi) \sin (\theta / 2)\ket{1}
\end{align}
```

# ブラケット記法

## ケット

```math
\ket 0 = 
\begin{pmatrix}
1 \\
0
\end{pmatrix} \\
\ket 1 = 
\begin{pmatrix}
0 \\
1
\end{pmatrix}
```

## ブラ

```math
\bra 0 = 
\begin{pmatrix}
1 & 0
\end{pmatrix} = \ket 0 ^{\dagger} \\

\bra 1 = 
\begin{pmatrix}
0 & 1
\end{pmatrix} = \ket 1 ^{\dagger} \\
```

## ブラケット

```math
\braket 0 0 = 1 \\
\braket 0 1 = 0 \\
\braket 1 0 = 0 \\
\braket 1 1 = 1
```

# 量子ビット

## 1量子ビット

```math
\ket{0} =
\begin{pmatrix}
1 \\
0
\end{pmatrix} \\

\ket{1} =
\begin{pmatrix}
0 \\
1
\end{pmatrix}
```

## 2量子ビット

```math
\ket{00} =
\begin{pmatrix}
1 \\
0 \\
0 \\
0
\end{pmatrix} \\

\ket{01} =
\begin{pmatrix}
0 \\
1 \\
0 \\
0
\end{pmatrix} \\

\ket{10} =
\begin{pmatrix}
0 \\
0 \\
1 \\
0
\end{pmatrix} \\

\ket{11} =
\begin{pmatrix}
0 \\
0 \\
0 \\
1
\end{pmatrix}
```

## n量子ビット

```math
\ket{0...0}, \ket{0...1}, ...
```

# 演算子

## パウリ演算子

### 恒等演算子

ブロッホ球に対して、量子を回転させない演算子。

```math
I=\ket{0}\bra{0}+\ket{1}\bra{1}=
\begin{pmatrix}
1 & 0 \\
0 & 1
\end{pmatrix}
```

### ビット反転演算子

ブロッホ球に対して、量子を+X軸に$\pi$回転させる演算子。

```math
X=\ket{0}\bra{1}+\ket{1}\bra{0}=
\begin{pmatrix}
0 & 1 \\
1 & 0
\end{pmatrix}
```

```text
        ┌───┐
q_0: |0>┤ X ├
        └───┘
```

### ビット・位相反転演算子

ブロッホ球に対して、量子を+Y軸方向に$\pi$回転させる演算子。

```math
Y=i(\ket{0}\bra{1}-\ket{1}\bra{0})=
\begin{pmatrix}
0 & -i \\
i & 0
\end{pmatrix}
```

```text
        ┌───┐
q_0: |0>┤ Y ├
        └───┘
```

### 位相反転演算子

ブロッホ球に対して、量子を+Z軸方向に$\pi$回転させる演算子。

```math
Z=\ket{0}\bra{0}-\ket{1}\bra{1}=
\begin{pmatrix}
1 & 0 \\
0 & -1
\end{pmatrix}
```

```text
        ┌───┐
q_0: |0>┤ Z ├
        └───┘
```

## アダマール演算子

ブロッホ球に対して、量子を+Y軸方向に$\pi/2$回転させる演算子。

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

```text
        ┌───┐
q_0: |0>┤ H ├
        └───┘
```

## 位相演算

ブロッホ球に対して、量子を+Z軸方向に$\pi/2$度回転させる位相演算。

```math
S=\ket{0}\bra{0}+i\ket{1}\bra{1}=
\begin{pmatrix}
1 & 0 \\
0 & i
\end{pmatrix}
```

```text
        ┌───┐
q_0: |0>┤ S ├
        └───┘
```

ブロッホ球に対して、量子を+Z軸方向に$\pi/4$回転させる位相演算。

```math
T=\ket{0}\bra{0}+e^{\frac{i \pi}{4} }\ket{1}\bra{1}=
\begin{pmatrix}
1 & 0 \\
0 & e^{\frac{i \pi}{4} }
\end{pmatrix}
```

```text
        ┌───┐
q_0: |0>┤ T ├
        └───┘
```
## 回転演算

### Rx

ブロッホ球に対して、量子をX軸方向に$\theta$回転させる位相演算。

```math
\begin{align}
R_x(\theta) =& \cos\frac{\theta}{2}(\ket{0}\bra{0}+\ket{1}\bra{1})-i\sin\frac{\theta}{2}(\ket{1}\bra{0}+\ket{0}\bra{1}) \\
            =& \begin{pmatrix}
\cos\frac{\theta}{2} & -i\sin\frac{\theta}{2} \\
-i\sin\frac{\theta}{2} & \cos\frac{\theta}{2}
\end{pmatrix}
\end{align}
```

ここで、X軸方向に$\theta$回転させることは、[行列指数関数の級数展開](https://ja.wikipedia.org/wiki/%E8%A1%8C%E5%88%97%E6%8C%87%E6%95%B0%E9%96%A2%E6%95%B0)の定義を使うことで示すことができる。

```math
\begin{align}
R_x(\theta ) &= e^{-i\frac{\theta}{2} X} \\
&= \sum _{k=0} ^{\infty} \frac{(-i\frac{\theta}{2} ) ^{k}}{k!} X^{k} \\
&= \sum _{l=0} ^{\infty} \frac{(-i\frac{\theta}{2} ) ^{2l}}{(2l)!} X^{2l} + 
\sum _{l=0} ^{\infty} \frac{(-i\frac{\theta}{2} ) ^{2l+1}}{(2l+1)!} X^{2l+1} \\
&= \sum _{l=0} ^{\infty} \frac{(-1) ^{l}\frac{\theta}{2} ^{2l}}{(2l)!} I 
- i\sum _{l=0} ^{\infty} \frac{(-1) ^{l} \frac{\theta}{2} ^{2l+1}}{(2l+1)!} X\\
&= \cos \frac{\theta}{2} I - i \sin \frac{\theta}{2} X \\
&= \cos \frac{\theta}{2} \begin{pmatrix}
1 & 0 \\
0 & 1
\end{pmatrix} - i \sin \frac{\theta}{2} \begin{pmatrix}
0 & 1 \\
1 & 0
\end{pmatrix} \\
&= \begin{pmatrix}
\cos\frac{\theta}{2} & -i\sin\frac{\theta}{2} \\
-i\sin\frac{\theta}{2} & \cos\frac{\theta}{2}
\end{pmatrix}
\end{align}
```

### Ry

ブロッホ球に対して、量子をY軸方向に$\theta$回転させる位相演算。

```math
\begin{align}
R_y(\theta) &= \cos\frac{\theta}{2}(\ket{0}\bra{0}+\ket{1}\bra{1})+
\sin\frac{\theta}{2}(\ket{1}\bra{0}-\ket{0}\bra{1}) \\
            &= \begin{pmatrix}
\cos\frac{\theta}{2} & -\sin\frac{\theta}{2} \\
\sin\frac{\theta}{2} & \cos\frac{\theta}{2}
\end{pmatrix}
\end{align}
```

ここで、Y軸方向に$\theta$回転させることは、[行列指数関数の級数展開](https://ja.wikipedia.org/wiki/%E8%A1%8C%E5%88%97%E6%8C%87%E6%95%B0%E9%96%A2%E6%95%B0)の定義を使うことで示すことができる。

```math
\begin{align}
R_y(\theta ) &= e^{-i\frac{\theta}{2} Y} \\
&= \sum _{k=0} ^{\infty} \frac{(-i\frac{\theta}{2} ) ^{k}}{k!} Y^{k} \\
&= \sum _{l=0} ^{\infty} \frac{(-i\frac{\theta}{2} ) ^{2l}}{(2l)!} Y^{2l} + 
\sum _{l=0} ^{\infty} \frac{(-i\frac{\theta}{2} ) ^{2l+1}}{(2l+1)!} Y^{2l+1} \\
&= \sum _{l=0} ^{\infty} \frac{(-1) ^{l}\frac{\theta}{2} ^{2l}}{(2l)!} I 
- i\sum _{l=0} ^{\infty} \frac{(-1) ^{l} \frac{\theta}{2} ^{2l+1}}{(2l+1)!} Y\\
&= \cos \frac{\theta}{2} I - i \sin \frac{\theta}{2} Y \\
&= \cos \frac{\theta}{2} \begin{pmatrix}
1 & 0 \\
0 & 1
\end{pmatrix} - i \sin \frac{\theta}{2} \begin{pmatrix}
0 & -i \\
i & 0
\end{pmatrix} \\
&= \begin{pmatrix}
\cos\frac{\theta}{2} & -\sin\frac{\theta}{2} \\
\sin\frac{\theta}{2} & \cos\frac{\theta}{2}
\end{pmatrix}
\end{align}
```

### Rz

ブロッホ球に対して、量子をZ軸方向に$\theta$回転させる位相演算。

```math
\begin{align}
R_z(\theta) &= e^{-i\frac{\theta}{2}}\ket{0}\bra{0}+e^{i\frac{\theta}{2}}\ket{1}\bra{1} \\
            &= \begin{pmatrix}
e^{-i\frac{\theta}{2}} & 0 \\
0 & e^{i\frac{\theta}{2}}
\end{pmatrix}
\end{align}
```


ここで、Z軸方向に$\theta$回転させることは、[行列指数関数の級数展開](https://ja.wikipedia.org/wiki/%E8%A1%8C%E5%88%97%E6%8C%87%E6%95%B0%E9%96%A2%E6%95%B0)の定義を使うことで示すことができる。

```math
\begin{align}
R_z(\theta ) &= e^{-i\frac{\theta}{2} Z} \\
&= \sum _{k=0} ^{\infty} \frac{(-i\frac{\theta}{2} ) ^{k}}{k!} Z^{k} \\
&= \sum _{l=0} ^{\infty} \frac{(-i\frac{\theta}{2} ) ^{2l}}{(2l)!} Z^{2l} + 
\sum _{l=0} ^{\infty} \frac{(-i\frac{\theta}{2} ) ^{2l+1}}{(2l+1)!} Z^{2l+1} \\
&= \sum _{l=0} ^{\infty} \frac{(-1) ^{l}\frac{\theta}{2} ^{2l}}{(2l)!} I 
- i\sum _{l=0} ^{\infty} \frac{(-1) ^{l} \frac{\theta}{2} ^{2l+1}}{(2l+1)!} Z\\
&= \cos \frac{\theta}{2} I - i \sin \frac{\theta}{2} Z \\
&= \cos \frac{\theta}{2} \begin{pmatrix}
1 & 0 \\
0 & 1
\end{pmatrix} - i \sin \frac{\theta}{2} \begin{pmatrix}
1 & 0 \\
0 & -1
\end{pmatrix} \\
&= \begin{pmatrix}
\cos\frac{\theta}{2} - i\sin\frac{\theta}{2} & 0 \\
0 & \cos\frac{\theta}{2} + i\sin\frac{\theta}{2}
\end{pmatrix} \\
&= \begin{pmatrix}
e^{-i\frac{\theta}{2}} & 0 \\
0 & e^{i\frac{\theta}{2}}
\end{pmatrix}
\end{align}
```

## 2量子ビット演算子

### 制御NOT演算子(CNOT)

第1ビットが$\ket 1$場合に第2ビットをビット反転する演算。
より一般的に第nビットが$\ket 1$場合に第mビットをビット反転する演算を$\Lambda(X)_{n,m}$とよぶ。

```math
\Lambda(X)_{1,2}=\ket{00}\bra{00}+\ket{01}\bra{01}+\ket{10}\bra{11}+\ket{11}\bra{10}=
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0
\end{pmatrix}
```

```text
q_0: |0>──■──
        ┌─┴─┐
q_1: |0>┤ X ├
        └───┘
```

### SWAPゲート

```math
\Lambda(X)=\ket{00}\bra{00}+\ket{01}\bra{10}+\ket{10}\bra{01}+\ket{11}\bra{11}=
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}
```

### ユニタリ演算

第1ビットが$\ket 1$場合にユニタリ行列$U$を作用させる演算。

```math
\Lambda(U)=\ket 0 \bra 0 I \otimes \ket 1 \bra 1 U
```

## 3量子ビット演算

### トフォリゲート(CCNOT)

第1,2ビットが$\ket 1$の場合に第3ビットをビット反転する演算。

```text
q_0: |0>──■──
          │  
q_1: |0>──■──
        ┌─┴─┐
q_2: |0>┤ X ├
        └───┘
```

# アルゴリズム

## アダマールテスト

```math
( H \otimes I ) \Lambda(U) ( H \otimes I )( \ket 0 \otimes \ket \psi )
```