量子ビットの復習（ブラケットの計算）

#はじめに
量子コンピュータの学習をしていて、量子ビットの状態式が何を表しているのか分からなくなるので、復習として自分の言葉で説明してみる。
あまり意味を理解しきれていないブラケットの計算について

関連
1. [量子ビットの復習（状態式）](https://qiita.com/ito-koichi/items/ab7b4cea6611be6943aa)
2. [量子ビットの復習（位相）](https://qiita.com/ito-koichi/items/c1e8b65b4c3de49b383c)
3. [量子ビットの復習（状態ベクトル）](https://qiita.com/ito-koichi/items/8fbc1b2f2bb14e994a8a)
4. 量子ビットの復習（ブラケットの計算） この記事

#対象読者
自分用。自分の中で整理したり、誰かに説明するときの手助けに。

#量子ビットの状態式
量子ビットの状態式は線形独立な基底$\\{|0\rangle, |1\rangle\\}$の線形結合になっている。

```math
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
　(|\alpha|^2 + |\beta|^2 = 1)
```

状態式は2次元複素ベクトルを使って以下のように表せる。

```math
|0\rangle = \left(\begin{matrix}1 \\ 0\end{matrix}\right),
|1\rangle = \left(\begin{matrix}0 \\ 1\end{matrix}\right) \\

|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
= \alpha\left(\begin{matrix}1 \\ 0\end{matrix}\right) +
\beta\left(\begin{matrix}0 \\ 1\end{matrix}\right)
= \left(\begin{matrix}\alpha \\ \beta\end{matrix}\right)
```

$|\psi\rangle$のエルミート転置(転置して要素のエルミート共役をとったもの)を$\langle\psi|$で表す。

```math
|\psi\rangle = \left(\begin{matrix}\alpha \\ \beta\end{matrix}\right), 
\langle\psi| = \left(\begin{matrix}\alpha^* & \beta^*\end{matrix}\right)
```

"*"は複素共役を取ることを表す記号。

#内積
2次元複素ベクトル$|\psi\rangle$の自身の内積を以下のように定義する。

```math
内積|\psi\rangle\cdot|\psi\rangle
= \alpha\alpha^* + \beta\beta^*
```

これは以下のようにブラとケットのベクトルの積で表せる。

```math
\langle\psi|\psi\rangle
= \left(\begin{matrix}\alpha^* & \beta^*\end{matrix}\right)
  \left(\begin{matrix}\alpha \\ \beta\end{matrix}\right)
= \alpha\alpha^* + \beta\beta^*
```

ここで$\alpha\alpha^* + \beta\beta^* = |\alpha|^2 + |\beta|^2 = 1$。つまり自身の内積は1になる。

基底ベクトルで計算してみると確かに1になる。

```math
\langle0|0\rangle
= \left(\begin{matrix}1 & 0\end{matrix}\right)
  \left(\begin{matrix}1 \\ 0\end{matrix}\right)
= 1 \\
\langle1|1\rangle
= \left(\begin{matrix}0 & 1\end{matrix}\right)
  \left(\begin{matrix}0 \\ 1\end{matrix}\right)
= 1 \\
```

次に互いに独立な基底同士の内積を計算してみると0になる。

```math
\langle0|1\rangle
= \left(\begin{matrix}1 & 0\end{matrix}\right)
  \left(\begin{matrix}0 \\ 1\end{matrix}\right)
= 0 \\
\langle1|0\rangle
= \left(\begin{matrix}0 & 1\end{matrix}\right)
  \left(\begin{matrix}1 \\ 0\end{matrix}\right)
= 0 \\
```

内積が0になるベクトル同士は「直交している」という。

$|0\rangle$と$|1\rangle$は直交している。

#ノルム
ベクトルのノルム(いわゆる大きさ)は次の式であらわされる。

```math
|\psi\rangle = \left(\begin{matrix}\alpha \\ \beta\end{matrix}\right)のとき、
ノルム||\psi\rangle| = \sqrt{|\alpha|^2 + |\beta|^2}
= \sqrt{\alpha\alpha^* + \beta\beta^*}
= \sqrt{\langle\psi|\psi\rangle}
```

つまり自身の内積の平方根。自身の内積は1なので、ノルムも1。ベクトルのノルムが1のとき「正規化されている」という。

$|0\rangle$と$|1\rangle$は正規化されている。

#正規直交系
$|\psi\rangle$は直交かつ正規化された基底$\\{|0\rangle, |1\rangle\\}$の線形結合で表されるため、「正規直交系」であるという(言い方合ってる?)

#内積が表すもの
$|\psi\rangle$に対して基底$|0\rangle$との内積を取ることを考える。

```math
|\psi\rangle = \left(\begin{matrix}\alpha \\ \beta\end{matrix}\right), 
  |0\rangle = \left(\begin{matrix}1 \\ 0\end{matrix}\right) \\
\langle0|\psi\rangle
= \left(\begin{matrix}1 & 0\end{matrix}\right)
  \left(\begin{matrix}\alpha \\ \beta\end{matrix}\right)
= \alpha
```

$|\psi\rangle$の、$|0\rangle$の確率振幅$\alpha$が取れた。$|1\rangle$の場合は同様に$\beta$が取れる。

```math
\langle1|\psi\rangle
= \left(\begin{matrix}0 & 1\end{matrix}\right)
  \left(\begin{matrix}\alpha \\ \beta\end{matrix}\right)
= \beta
```

つまり$|\psi\rangle$について基底ベクトルとの内積を取る計算は、$|\psi\rangle$の基底ベクトルの確率振幅を取ることに相当する。

#演算子
(この辺から理解があやしい)
内積はケットとブラを掛ける計算だが、ブラとケットを掛ける計算もある。計算結果は$2 \times 2$行列になり、この行列を「演算子」と呼ぶ。
演算子と呼ぶ理由は、$2 \times 1$ベクトルの左から$2 \times 2$行列を掛けると、計算結果は元と同じ$2 \times 1$ベクトルになり、これはベクトルからベクトルへの変換演算に相当するため(だいたいあってると思う)。

まず同じ基底同士で計算してみる。

```math
|0\rangle\langle0|
= \left(\begin{matrix}1 \\ 0\end{matrix}\right) \left(\begin{matrix}1 & 0\end{matrix}\right)
= \left(\begin{matrix}1 & 0\\0 & 0\end{matrix}\right) \\
|1\rangle\langle1|
= \left(\begin{matrix}0 \\ 1\end{matrix}\right) \left(\begin{matrix}0 & 1\end{matrix}\right)
= \left(\begin{matrix}0 & 0\\0 & 1\end{matrix}\right) \\
```

一つ目の$|0\rangle\langle0|$を基底$\\{|0\rangle, |1\rangle\\}$に左から掛けてみる。

```math
|0\rangle\langle0||0\rangle = |0\rangle\cdot1 = |0\rangle \\
|0\rangle\langle0||1\rangle = |0\rangle\cdot0 = O (オー, 零ベクトル) 
```

ここでは直接ベクトルの積を計算せずに内積の性質を使った(ベクトルの結合則の説明が足りない)。

今度は異なる基底同士の演算子を計算してみる。

```math
|0\rangle\langle1|
= \left(\begin{matrix}1 \\ 0\end{matrix}\right) \left(\begin{matrix}0 & 1\end{matrix}\right)
= \left(\begin{matrix}0 & 1\\0 & 0\end{matrix}\right) \\
|1\rangle\langle0|
= \left(\begin{matrix}0 \\ 1\end{matrix}\right) \left(\begin{matrix}1 & 0\end{matrix}\right)
= \left(\begin{matrix}0 & 0\\1 & 0\end{matrix}\right) \\
```

一つ目の$|0\rangle\langle1|$を基底$\\{|0\rangle, |1\rangle\\}$に左から掛けてみる。

```math
|0\rangle\langle1||0\rangle = |0\rangle\cdot0 = O (オー, 零ベクトル) \\
|0\rangle\langle1||1\rangle = |0\rangle\cdot1 = |0\rangle 
```

表にしてみる。

| 演算子 | 対象$&#124;0\rangle$ | 対象$&#124;1\rangle$ |
|:-----:|:---------------:|:--------------:|
| $&#124;0\rangle\langle0&#124;$ | $&#124;0\rangle$ | $O$ |
| $&#124;1\rangle\langle1&#124;$ | $O$ | $&#124;1\rangle$ |
| $&#124;0\rangle\langle1&#124;$ | $O$ | $&#124;0\rangle$ |
| $&#124;1\rangle\langle0&#124;$ | $&#124;1\rangle$ | $O$ |

1番目と4番目、2番目と3番目をセットにして結果を見ると、以下のように考えられる。

```math
|a\rangle\langle b|は、対象状態の|b\rangleを|a\rangleに変換する。
```

たとえば、$|\psi\rangle = \alpha|0\rangle + \beta|1\rangle$に対して$|1\rangle\langle0|$を適用することを考える。
演算内容は「$|\psi\rangleの|0\rangleを|1\rangleに変換する$」。
すると、$|0\rangle$が$|1\rangle$になって、全体が$|1\rangle$になる？
やってみよう。

```math
(|1\rangle\langle0|)|\psi\rangle \\
= (|1\rangle\langle0|)(\alpha|0\rangle + \beta|1\rangle) \\
= \alpha|1\rangle\langle0||0\rangle + \beta|1\rangle\langle0||1\rangle \\
= \alpha|1\rangle\cdot1 + \beta|1\rangle\cdot0 \\
= \alpha|1\rangle
```

おかしい。量子ビットの確率の和は1のはずなのに$|\alpha|^2$になってしまった。
原因として考えられるのは、$|0\rangle$しか演算していないので、残りの$|1\rangle$が消えてしまったのではないか。

ならば、$1\rangle$の方もセットで演算してみよう。
演算内容は「$|\psi\rangleの|0\rangleを|1\rangleに、|1\rangleを|1\rangle$に変換する」。

```math
(|1\rangle\langle0| + |1\rangle\langle1|)|\psi\rangle \\
= (|1\rangle\langle0| + |1\rangle\langle1|)(\alpha|0\rangle + \beta|1\rangle) \\
= \alpha|1\rangle\langle0||0\rangle +
  \beta|1\rangle\langle0||1\rangle +
  \alpha|1\rangle\langle1||0\rangle +
  \beta|1\rangle\langle1||1\rangle \\
= \alpha|1\rangle\cdot1 + \beta|1\rangle\cdot0 +
  \alpha|1\rangle\cdot0 + \beta|1\rangle\cdot1 \\
= \alpha|1\rangle + \beta|1\rangle \\
= |0\rangle + (\alpha + \beta)|1\rangle
```

今度は$|1\rangle$の確率が1になった。

これを行列でもやってみる。

```math
\left(\left(\begin{matrix}0 & 0\\1 & 0\end{matrix}\right) +
      \left(\begin{matrix}0 & 0\\0 & 1\end{matrix}\right) \right)
  \left(\begin{matrix}\alpha \\ \beta\end{matrix}\right) \\
= \left(\begin{matrix}0 & 0\\1 & 1\end{matrix}\right)
  \left(\begin{matrix}\alpha \\ \beta\end{matrix}\right) \\
= \left(\begin{matrix}0 \\ \alpha + \beta\end{matrix}\right)
```

同じになった。

いま同じ演算をブラケットの式と行列でやってみて同じ結果になったということは、つまりブラケットの式は行列、ベクトルの表現を変えただけ。
ブラケット式の方が機械的に計算できて楽だと感じるけど、たぶん適材適所なんだろう。

#まとめ
量子ビットの量子状態$|\psi\rangle$は以下のようにベクトルで表せる。
右向きの縦ベクトルを「ケット」、左向きの横ベクトルを「ブラ」という。

```math
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
　(|\alpha|^2 + |\beta|^2 = 1)
```

```math
|\psi\rangle = \left(\begin{matrix}\alpha \\ \beta\end{matrix}\right), 
\langle\psi| = \left(\begin{matrix}\alpha^* & \beta^*\end{matrix}\right)
```

ブラとケットを掛けたものはベクトルの「内積」を表し、スカラとなる。
量子ビット$|\psi\rangle$と基底ベクトルの内積をとる計算は、$|\psi\rangle$の基底の確率振幅を取ることに相当する。

```math
|\psi\rangle = \left(\begin{matrix}\alpha \\ \beta\end{matrix}\right), 
  |0\rangle = \left(\begin{matrix}1 \\ 0\end{matrix}\right) \\
\langle0|\psi\rangle
= \left(\begin{matrix}1 & 0\end{matrix}\right)
  \left(\begin{matrix}\alpha \\ \beta\end{matrix}\right)
= \alpha
```

$|0\rangle$と$|1\rangle$は正規直交基底なので、以下のような内積の性質があり、ブラケット式の計算の時に便利。

```math
\langle0|0\rangle = \langle1|1\rangle = 1\\
\langle0|1\rangle = \langle1|0\rangle = 0
```

ケットとブラを掛けたものは「演算子」と呼ばれる行列になる。
演算子は以下のような計算を表す。

```math
|a\rangle\langle b|は、対象状態の|b\rangleを|a\rangleに変換する。
```

例えば$|0\rangle$に$|1\rangle\langle0|$を掛けると、次のように$|1\rangle$になる。

```math
|1\rangle\langle0||0\rangle = |1\rangle\cdot1 = |1\rangle
```

ここでは内積の性質($\langle0|0\rangle = 1$)を使った。

演算子を使うことで、やりたいことを数式で記述しそのまま計算できる。

#最後に
演算子の表を作って少し理解できた気がする。
それにしても説明が足りない(汗)。量子コンピュータの本は線形代数の規則の説明が書いてあるものが多いけど、丁寧に作られてるんだなと実感した。
考えながら書いてるので説明の流れが悪かったり用語の統一性がない。そのうち直したい。