色々メモその1

Haskell、圏論、自然変換、モノイド、とかに関するメモ。「Haskellのforallは三通りの解釈ができる。」「任意のモノイドは適当な集合AについてEnd(A)の部分モノイドと同型であることの証明」

http://nineties.github.io/category-seminar/
これを読んだらちょっとだけ圏論がわかった気がする。

Haskellのforallは三通りの解釈ができる。

(1)プログラム的解釈・・・ポリモルフィズム

(2)圏論的解釈・・・自然変換

(3)論理学的解釈・・・全称量化子

てことでいいのかな?

任意のモノイドは適当な集合AについてEnd(A)の部分モノイドと同型であることの証明

モノイド$(M, *)$について、 $A = M$ と定める。

また、 $B$は$End(A)$の部分モノイドとし、その要素は $B = \left\{ f | m ∈ M, f(x) = m*x\right\}$ と定める。 ($B ⊆ End(M) = End(A)$)

モノイド$(M, *)$と、モノイド$B$が同型であることを示す。

(1)

ここでは可読性のため、$F(m) = Fm, F(n) = Fn$と表記する。

$F : B \rightarrow M, Fm(x) = m*x$ とする。

$ \begin{aligned} (F(m*n))(x) &= m*n*x \\ &= m*(n*x) \\ &= m*Fn(x) \\ &= Fm(Fn(x)) \\ &= (Fm \circ Fn)(x) \\ \end{aligned} $
$∴ F(m*n) = F(m) \circ F(n)$

したがって、$(M, *)$から$B$への準同型が存在する。

(2)

$e$が$M$の単位元で、$G : B \rightarrow M, G(f) = f(e)$とすると、

$ \begin{aligned} G(f \circ g)& = (f \circ g)(e) \\ & = f(g(e)) \\ & = f(m*e) & (m ∈ M) \\ & = f(m) \\ & = n*m & (n ∈ M) \\ & = n*e*m*e \\ & = f(e)*g(e) \\ & = G(f)*G(g) \\ \end{aligned} $
$\therefore G(f \circ g) = G(f)*G(g)$

したがって、$B$から$(M, *)$への準同型が存在する。

以上より、モノイド$(M, *)$とモノイド$B$は同型。 したがって、任意のモノイドは適当な集合Aについて$End(A)$の部分モノイドと同型である。∎