量子コンピュータに使われる基本的な数学用語(1)

## この記事に関して
ここでは量子コンピュータで用いる数学の定義を述べます。
なるべくみんなが理解できるように簡単に書いています。
細かいことはまたどこかで載せようと思います。

## 複素数
日常的に使う数の形態として自然数、整数、有理数、実数があります。
これらはそれぞれ
自然数 … $1$, $2$, $3$, $4$, $5$
1以上の物の個数を数える集合

整数 … $-2, -1, 0, 1, 2$
自然数と負の自然数を合わせたものに０を加えた集合

有理数 … $-\frac{2}{3}, \frac{1}{2}, 2, \frac{3}{4}, \frac{11}{9}$
分数の集合

実数 … $\pi, \sqrt{2}, \sin(\frac{\pi}{3}), \log_{10}2$
有理数に分数では表せない数の集合を合わせたもの

では複素数とは何かというと簡単に言えば実数の集合を拡張したものです。

$i=\sqrt{-1}$ という現実には存在しない数を使います。大小も存在しません。
複素数はこれと二つの実数 $a$, $b$ を使って $a+ib$ と書けるものです。もちろん拡張なので実数も含まれています。

$i$ の符号を変えた $a-ib$ を $a+ib$ の複素共役(きょうやく)と言います。
記号で $\overline{a+ib}$ とも書きます(後でまた出てきます)。実数の場合は共役しても値は変わりません。
例) $-1, -i, 1+\sqrt2i$

ではなぜ存在しない $i$ を使って複素数を作ったのか？
実数までの数は数直線上で表します。ただ現実では基本的に面(座標)を考えるときがほとんどです。
$i$ を使えばこの座標を一つの値で表せるのです。
例えば

``` math
1+2i
```
この値は座標 $(1,2)$ と考えたら、一つの値で表現できますね。
このように考えることで座標を普通の値と同じように計算することができます。

量子コンピュータでは一般にこの複素数を使って考えます。


## ベクトル
この分野は高校で初めて出てきます。みなさん苦手な人も多くいると思います。
ベクトルとは簡単に言ってしまえば座標です。

例えば $\vec{a}=(1,2)$ と書けば横が $1$, 縦が $2$ の位置だとわかります。
なぜベクトルを使うのかというとさっきも言ったように座標なので場所を考えるのにとても便利なのです。
一般にはベクトルは

``` math
\vec{a}=\left(\begin{array}{cc} 1\\ 2\\ \end{array} \right)
```
のように縦で表します。
※ この場合、横のベクトルはまた意味が異なりますので混同しないようにしてください。

#### ケットベクトル
では量子コンピュータでどのように使われるのでしょう。
量子ビットは $\left|0\right>$, $\left|1\right>$ のように表します。
これが実は

``` math
\left|0\right> = \left(\begin{array}{cc} 1\\ 0\\ \end{array} \right),
\left|1\right> = \left(\begin{array}{cc} 0\\ 1\\ \end{array} \right)
```
となるのです。
一般に量子ビットのベクトルは複素数で書かれます。

※ ベクトルの値が複素数だけど複素数もベクトルも座標で意味がわからないと思うかもしれません。
もちろん実際は全部座標で考えると値が4つ必要です。ただこのように記述した方が計算上都合がいいのでこうなっているだけです。

## 行列
ここからは大学で習う行列の話をします。
行列とは以下のように

``` math
\left(
\begin{array}{cccc}
1 & 0 & 1 & 0 \\
0 & 1 & 0 & 1 \\
1 & 0 & 1 & 0 
\end{array}
\right)
```
とベクトルと同じような書き方をしています。
上の例は $3 \times 4$ 行列と言います。({行数}$\times${列数})

行列の積は以下のように計算します。
今回は $2 \times 2$ 行列同士で計算をします。

``` math
\left(\begin{array}{cc}a & b \\c & d\end{array}\right)
\times
\left(\begin{array}{cc}p & q \\r & s\end{array}\right)=
\left(\begin{array}{cc}ap+br & ap+bs\\cp+dr & cq+ds\end{array}\right)
```
見てわかる通り左の行列の横と右の行列の縦をそれぞれ掛け算して答えの値を作っていきます。
どの大きさの行列になっても縦横を繰り返すだけです。

なぜ行列を使うのかというと行列はベクトルを変形させることができます。
つまり座標を好きな場所に移動できるのです。

例えば

``` math
\left( \begin{array}{cc} 0 & 1\\ 1 & 0 \end{array} \right) \times
\left( \begin{array}{c} 1\\ 0 \end{array} \right) =
\left( \begin{array}{c} 0\\ 1 \end{array} \right)
```
となることから座標 $(1, 0)$ から、座標 $(0, 1)$ に移動したのがわかります。

これは量子コンピュータでは $\left|0\right>$ から $\left|1\right>$ に変換したのと同じになります。

## 内積
まずは定義から。内積は同じ長さのベクトル同士で作られます。
$2 \times 1$ ベクトル同士の内積は $\langle\rangle$ を用いて

``` math
\left<
\left( \begin{array}{cc} a\\ b \end{array} \right),
\left( \begin{array}{cc} c\\ d \end{array} \right)
\right>=
a\overline{c}+b\overline{d}
```
と書きます。
各座標同士を掛け算して足しているのがわかります。ベクトルの長さが増えても計算方法は同じです。

内積の使う理由は右辺を見るとベクトルでなく、ただの値になるということです。
これは何を意味しているのかというと、2つのベクトルの関係を何かしらの形で数値化できるということです。

例えば同じベクトル同士で内積をとるとすると。

``` math
\left<
\left( \begin{array}{cc} a\\ b \end{array} \right),
\left( \begin{array}{cc} a\\ b \end{array} \right)
\right>=
|a|^2+|b|^2
```
となります。これは原点から座標までの距離の2乗になります。

量子コンピュータではこの内積が観測という操作と同じになります。

## テンソル積
ここは少し難しいので頑張りましょう。
ではまず定義。2×1 のベクトル同士のテンソル積は $\otimes$ を用いて

``` math
\left( \begin{array}{c} a\\ b \end{array} \right)
\otimes
\left( \begin{array}{c} c\\ d \end{array} \right)=
\left( \begin{array}{c}
a\left(\begin{array}{c} c\\d \end{array} \right) \\ 
b\left(\begin{array}{c} c\\d \end{array} \right)
\end{array} \right)=
\left( \begin{array}{c} ac\\ ad\\ bc\\ bd \end{array} \right)
```
と書きます。
これからベクトルのテンソル積は新たなベクトルを作ることがわかります。

テンソル積を使う理由としてはベクトルをまとめることができます。
例えばたくさんのベクトルを考える際にテンソル積を使って一本の長いベクトルにしたら計算がすっきりします。

量子コンピュータでは、複数の量子ビットを扱うのに用い、
例えば2量子ビットだと $\left|0\right> \otimes \left|0\right>$ のように表します。

---
引き続き用語がでてき次第載せていこうと思います。