数式を読めるエンジニアになるために

# きっかけ
最近、強化学習の理論を勉強するために、森村哲朗著の「MLPシリーズ　強化学習」を買った。
ただこの本、かなり理論的で厳密性が重視されているため数式が多く、慣れてない人はほとんど読まずに投げ出してしまうと思う。
かくいう自分もめちゃくちゃ難航しながら読み進めており、これを機に数式慣れしていきたいと思い、この記事を書いた。

# 導入
高校数学から大学数学に入ると、数式自体の理解ができなくなったという人も多いと思う。それは、ベクトル表示が矢印を文字上に付ける$\vec{a}$という表記から$\boldsymbol{a}$のような太字表記になるというような単純な違いが積み重なって……というのも大きいが、一番大きいのは高校数学でほとんど見ない「集合論的な数式」が多くなるからだと思う。

とりあえず目標としては、数式を読めるようになる、ということであり、あまり厳密的な議論はしない。この記事ではいろんな数学記号を簡単に解説していくだけに留めておく。

なお、筆者は集合論を学んだことは一度もないし、間違ってるところもあると思う。その場合はコメントで優しく教えて下さい。

# 集合の記法
## 集合とは
wikipediaによると、**集合**とはいくつかの「もの」からなる「集まり」だそうだ。この「もの」は集合の**元**もしくは**要素**という。  

集合は次のように記述する。
$$A= \\{ 1,2,3,4,5 \\} $$
この要素別に数値である必要はない。強化学習の**行動**(**action**)っぽく書くなら、次のように書くことができる。
$$\mathcal{A}=\\{ \text{左に動く}, \text{右に動く}, \text{下に動く}, \text{上に動く}, \text{動かない} \\} $$
単に集合というと、同じ要素が２つ以上あることはない(同一のものと考える)。また、その順序も関係がない。
pythonユーザーならのset型のイメージでいい。

また、集合の要素の個数は$|A|=5$と表記したり、$\\#A=5$と表記したりする。この記事では$|A|$の方を採用する。

## 特別な集合
よく使われる集合というのはすでに定義されている。
以下の四つはよく目にすると思う。

- $\mathbb{N}$: **自然数**全体の集合
- $\mathbb{Z}$: **整数**全体の集合
- $\mathbb{R}$: **実数**全体の集合
- $\mathbb{C}$: **複素数**全体の集合

注意しなければならないのは自然数で、高校教育までは1以上の整数だが、大学からは0以上の整数として定義されることが多い。
これらを区別するために、1以上の場合は$ \mathbb{N}_ {+} $、0以上の場合は$\mathbb{N}_ 0$と書くこともあるが、書かれていないことも多い。その場合は文脈から判断しなければならない。
この記事では単に自然数というとを0を含まない場合と定義し、この集合を$\mathbb{N}$と記す。
0以上の自然数の場合は$\mathbb{N}_0$と明記する。

## 集合の内包的記法
上記の$A=\\{ 1,2,3,4,5 \\} $は5以下の自然数である。  
これは、次のように表現し直すこともできる。  
$$ A=\\{ x | x\text{は5以下の自然数} \\} = \\{ 1,2,3,4,5 \\} $$
このように、$\\{ x | x\text{の条件} \\} $(真ん中の縦棒はコロン「:」が使われるときもある)と言う表記方法を**内包的記法**もしくは**内包表記**と呼ぶ。
Pythonを知っているならば、リストの内包表記となんとなく似ていることが見て取れる。厳密には違うかもしれないが、とりあえずはそのイメージで覚えるのがいいと思う。

上式のように日本語で書いてもらえればとてもわかり易いが、複雑になっていくとそうも言ってられないかもしれない。上の式を日本語を使わずに書き直してみよう。
$$ A=\\{ x | x\in \mathbb{N} \land x\leq5 \\} $$
実際の意味としてはめちゃくちゃ簡単なのだが、慣れていなければこんな表記を見ただけで本を閉じてしまうかもしれない。わかれば簡単だし、それはちょっと勿体ない。これくらいはすぐに読めるようになろう。  
なお、なんとなく雰囲気でわかると思うが、$\land$はいわゆるプログラムでのandだ。同様にして$\lor$はorを、$\lnot$はnotを表す。この$\land$は省略して次のように略記することもある。
$$ A= \\{ x | x\in \mathbb{N} , x\leq5 \\} = \\{ x\in\mathbb{N}|x\leq5 \\} $$
個人的には、こっちの記法が好き。

## 集合の演算子
高校数学でも習ったと思うが、集合にも和集合や積集合などのように演算子が存在する。このへんはほとんどの人がわかっていると思うので、せっかくだから集合の要素数と絡めて話していこう。

### 帰属関係と包含関係
#### 帰属関係
帰属関係とは要素 $a$が集合$A$の要素に含まれている事を言う。$A\in 5$や$5\ni A$は$A$という集合に$5$という要素が含まれていることを言う。

#### 包含関係
包含関係とは$B$の各要素がすべて$A$に含まれている事を言う。$B \subset A$や$A \supset B$ と書く。
この辺もいろんな流儀があり、$A \supseteq B$が$A=B$を含み、$A \supset B$は$A\neq B$としている場合の流儀と、$A \supset B$は$A = B$を含み、$A \supsetneq B$は$A \neq B$を表す流儀がある。
今回は前者の流儀を採用する。

これらは次の要素数の関係が成り立つ。
$$A' \subset A \iff |A'| < |A| \\\ A ' \subseteq A \iff |A'|\le |A|$$
これは直感的にわかるしわざわざ説明する必要もないだろう。

### 集合の演算
#### 和と積
集合$A$と$B$に含まれるすべての要素から作られる集合を和集合といい、$A\cup B$と表す。
また、集合$A$と$B$に共通して含まれる要素から作られる集合を積集合といい、$A\cap B$と表す。 
こんなことはほとんどの人がわかるだろう。
これらをあえて、上でやった内包的表現で表してみよう。抽象的なものを読み取る練習だ。
$$
A \cup B = \\{ x | x\in A \lor x\in B \\} \\\
A \cap B = \\{ x | x\in A \land x\in B \\}
$$
ところで、次のような表現を見たことがあるだろうか。
$$
\bigcup_{k=1}^n A_k=A_1 \cup A_2 \cup \cdots \cup A_n \\\
\bigcap_{k=1}^n A_k=A_1 \cap A_2 \cap \cdots \cap A_n
$$
書いていることは簡単で、書き方もだいたい総和を表すシグマと同じだ。これも一応覚えておこう。

#### 直積
これはあまり見たことない人が多いと思う。

説明の前に、**順序付けられた対**(**順序対**)について説明しよう。
これは、$(x_1,x_2,x_3,...,x_n)$のように書く。
集合との大きな違いは２つだ。一つ目は集合は順番に意味はなかったのに対し、記述する順番にも意味を持っている。もう一つは同じ要素が２つ以上あってもそれぞれに意味を持つところだ。

座標はこの順序対の一つである。まあ、簡単に言えば、リスト・タプルだと思ってくれれば良い。

直積はこの順序対の集合を作る演算子である。
例を出せばなんとなくわかると思う。
$A=\\{ 1,2 \\} , B=\\{ 7,8,9 \\} $のとき、
$$A\times B=\\{ (1,7),(1,8),(1,9),(2,7),(2,8),(2,9)\\} $$
となる。簡単だ。
なお、当然だが一般に$A\times B \neq B \times A$である。

内包表記で書くと、次のように書ける。
$$A\times B = \\{ (x,y) | x\in A \land y\in B \\} $$
このような直積をあえて日本語で記述すると「集合Aと集合Bの各要素のペアで作られた順序対の全ての組み合わせの集合」みたいな感じになって、一読じゃ何言っているかわからないだろう。こういうのを見ると、数式が偉大に感じる。

注目すべきは、$|A\times B|=|A||B|$となっているところだ。
２つの集合の直積の要素の数は元の集合の要素数の積となる。

さて、この演算子は意外とよく使うので、もう少し理解を深めるためにちょっと例題を出してみよう。

二次元デカルト座標系をイメージして、原点を中心とし、各辺が$x$軸,$y$軸に平行な$L_x \times L_y$の長方形を描いたとする。
この長方形に含まれる(境界も含む)格子点(座標の各成分が整数となる点)の集合$C$は何か？

答えは次のように書くことができる。
$$ X=\left\\{ x \in \mathbb{Z}|-\frac{L_x}{2} \le x\le \frac{L_x}{2} \right\\} ,\hspace{10pt}Y=\left\\{ y \in \mathbb{Z}|-\frac{L_y}{2} \le x\le \frac{L_y}{2} \right\\} $$
$$C=X\times Y$$
そんな難しくもないと思う。自分で読んでみよう。

ところで、少し話は変わるが$\mathbb{R}$は実数全体の集合を表すのであった。
直積を使って$\mathbb{R}\times\mathbb{R}$と書けば２つの実数の集合、即ち二次元空間の集合として表すことができる。これを$\mathbb{R}^2$と表すこともある。

他の有名どころなら、差集合や冪集合などもあるが、とりあえずこれくらいでやめておこう。

## 集合表記の利用
ちょっと脱線するが、これらの集合の意外と便利な使い道について説明する。  

高校で習う総和、シグマの記法は次のように教えられていると思う。
$$\sum_{k=1}^5 a_k = a_1+a_2+a_3+a_4+a_5$$
これは、集合$A=\\{ 1,2,3,4,5\\} $を用いて次のように書くこともできる。
$$\sum_{k\in A} a_k = a_1+a_2+a_3+a_4+a_5$$
当然、集合$A'=\\{ 1,4,5\\} $を使えば次のように表現できる。
$$\sum_{k\in A'} a_k = a_1+a_4+a_5$$
このような表記も突然出てくると驚いてしまうと思うので、ここで書いておいた。
意外と使ってみると便利だ。

# 写像
次にとても重要な概念である、写像について話そう。  

集合$A$と集合$B$があったとする。
この集合$A$のすべての要素が、何らかの操作によって集合$B$と対応付けられるとき、これを**写像**と呼ぶ。

最も有名な写像は関数である。
あまりイメージが沸かないと思うので、例を出して説明しよう。  

$A=\\{ 0,1,2,3,4 \\} $, $B= \\{ -1,0,1 \\} $とする。
このとき、$f(x)=\displaystyle \sin{\frac{\pi}{2} x}$の$x$に$A$の要素をそれぞれ代入していくと、$f(x)$はすべて$B$の要素の一つである。写像はこのような関係のことをいう。

これを、記号で書くと次のようになる。
$$f:A\rightarrow B$$
この記法、簡単そうに見えるがめちゃくちゃ大事なので絶対に覚えておこう。このとき、$A$を**始域**、$B$を**終域**という。

よく考えると、$f$はすべての整数で$B$の要素であるため、もう少し一般的に言うと、次のように書ける。
$$f:\mathbb{Z} \rightarrow B$$
さらに、始域を$\mathbb{R}$とすると、次のように表せる。
$$f:\mathbb{R} \rightarrow [-1,1]$$

また、関数の表記法として、
$$f:x \mapsto \sin{x}$$
という表し方もあるので覚えておこう。
$\rightarrow$ではなく、$\mapsto$であることに注意しよう。

# 全ての～　と　～が存在する
最後に、重要な記号である$\forall$と$\exists$の紹介をしよう。
これは、集合論ではなく、どちらかと言うと論理記号の方なのだが、知っておいて損はない(というか知らないと困ることのほうが多い)。

## 全ての〇〇に対して✕✕

まず、$\forall$について説明する。
これは「全ての〇〇に対して✕✕」という意味を持っている。
例えば、$\forall x \in \mathbb{N}$とかくと「全ての自然数に対して」という意味になる。  

以下のように書くことができる。
$$\forall{x}\in \mathbb{R},\ -1\le\sin{x}\le 1$$
これは「全ての実数$x$に対して$-1 \le\sin{x}\le 1$である」という意味である。  
とても簡単だ。

## ✕✕となる〇〇が存在する
次に、$\exists$の説明をする。これは「✕✕となる〇〇が(少なくとも１つは)存在する」という意味である。こっちのほうが解りにくいと思う。  
よく、$\forall$と同時に説明されることが多いのが、筆者はあまり並列的に考えないほうがいい気がする。タイトルを見てもらえばわかると思うが、日本語で書くと$\forall$と順番が違うのである。

たとえば、$\exists x \in \mathbb{R}, f(x)=0$と書くと、「$f(x)=0$となる$x\in \mathbb{R}$が存在する」という意味である。まあ、$\exists$は右から順に読めばいいと覚えておけばいいと思う。

これも、もう一つ例を上げる。
$$\exists x,y,z,w \in \mathbb{N},\ x^4+y^4+z^4=w^4$$
この式は[オイラー予想](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E4%BA%88%E6%83%B3)が成り立たないということを言っている。(念の為言っておくが、この式がオイラー予想が成り立たないことの証明というわけではない。この式は「オイラー予想は成り立たない」という結論を式で書いているだけだ
)

$\exists$のときはカンマがs.t.と書かれることもある。such thatの略である。  
一応、書いておくと$\exists x \in \mathbb{R}\ \text{s.t.}\  f(x)=0$みたいな感じだ。

## イプシロン-デルタ論法
これは本筋とは関係ないが、これまでの記号の確認のために例題として学んでみよう。  
大学で躓くことで有名なこの$\epsilon$-$\delta$論法。簡単に言えば高校で学んだ極限$\lim$の定義を厳密化するものである。
この記事では、あまり詳しい話はしない。ただ数式の読み方だけに焦点を当てる。

簡単のため、$0$への極限について考える。
$$\lim_{x\rightarrow 0}f(x)=L\hspace{5pt} \iff \hspace{5pt} \forall \epsilon >0, \exists \delta > 0\text{  s.t. } \forall x\in\mathbb{R}, |x|<\delta \Rightarrow |f(x)-L|<\epsilon $$

ひとつひとつ見ていこう。  
$\forall \epsilon > 0$は「全ての0より大きい$\epsilon$について」、$\exists \delta > 0$は「～となる($0$より大きい)$\delta$が存在する」である。  
この～のところが$\text{s.t.}$以降のところになる。  

$\text{s.t.}$以降は$\forall x \in \mathbb{R}$「全ての実数$\mathbb{R}$について」、$|x|<\delta \Rightarrow |f(x)-L|<\epsilon$は「$|x|<\delta$のとき$|f(x)-L|<\epsilon$である」となる。

まとめて訳してみよう。
「全ての0より大きい$\epsilon$について、『$|x|<\delta$のとき$|f(x)-L|<\epsilon$』となる$\delta$が存在する」

う～ん、日本語訳しても難しい。慣れれば数式のほうがわかりやすい気がする。   
詳しい話は解説されてるHPはたくさんあるので、そっちを参照してほしい。わかればとても簡単だと思う。

なお、軽い事前知識があると勘違いする人もいるかも知れないが、$\epsilon$には非常に小さいなどの意味は、数式上では明示されていないし、$\epsilon$自体にその意味はない。
実際に数値を入れて当てはめたらわかるが、$\epsilon$がある値で成り立てば、その$\epsilon$よりも大きいときは明らかに成り立つのだ。だから結局、色んな所にある解説サイトでは「非常に小さい$\epsilon$で成り立つ」と表現しているのである。
あくまで数式上では(0より大きい)全ての$\epsilon$は、という意味であることに注意しよう。


# まとめ
今回まとめた記号について整理しよう

- 集合の表記法$A = \\{ 1,2,3,4,5 \\} $
    - 集合の内包表記 $ A=\\{ x | x\in \mathbb{N} \land x\leq5 \\} $
    - 集合の数$|A|=5$, $ \\# A =5 $
- 特別な集合
    - $\mathbb{N}$: **自然数**全体の集合
    - $\mathbb{Z}$: **整数**全体の集合
    - $\mathbb{R}$: **実数**全体の集合
    - $\mathbb{C}$: **複素数**全体の集合
- 帰属・包含関係
    - 帰属関係：$a \in A$
    - 包含関係：$A \subseteq B$, $A \subset B$, $A \subsetneq B$
- 集合の演算
    - 和：$A \cup B$
    - 積：$A \cap B$
    - 直積：$A \times B$
- 写像
    - $f:A \rightarrow B$
    - $f:x \mapsto \sin{x}$
- 全ての～　と　～が存在する
    - 全ての$x$について：$\forall x$
    - ...となる$x$が存在する：　$\exists x \  \text{s.t. }$...

これだけわかれば、(数学の専門書でもない限り)ある程度の教科書なら読めると思う。
あとは、気持ちの問題だけだ。
謎の数式がでてきても、落ち着いて見てみれば意外と簡単なことを言っているはずだ。

それでもわからない記号があるならググろう。これくらいの事前知識を持っていればすぐに理解できるだろう。