概要
モノイド圏やモノイド対象、そしてそれらの具体例であるモノイドとモナドについてまとめる。モノイド対象はモノイド圏において定義される。集合の圏 はモノイド圏であり、そのモノイド対象はモノイドである。つまりモノイド対象はモノイドの一般化である。自己関手の圏 もモノイド圏であり、そのモノイド対象がモナドである。
- はじめに: モナドについて
- 今回の記事について
- STEP 1: 圏論におけるモナドの定義
- STEP 2: モノイド対象とモノイドとモナドの関係性
- STEP 3: 圏論において定義されているモナドと実際にHaskellなどで定義されているモナドの関係性
- まとめ
- 参考文献
はじめに: モナドについて
最近、PythonやHaskellなどの関数型プログラムを勉強している友達にこう聞かれた。
これって意味わかる?
「モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?」
このサイトに書いてた。
私はそのとき、「「何か問題でも?」はわからないけど、「モナドは単なる自己関手の圏におけるモノイド対象だよ」はわかる。」と返信した。そして友達から教えて欲しいと言われたので、「よっしゃやってやるか!」と本腰を入れて、モノイド圏やモノイド対象を勉強した。今回はそのまとめである。
ちなみにこの発言について、One Div Zero: A Brief, Incomplete, and Mostly Wrong History of Programming Languagesによると、Philip Wadlerは批判者に対して、「モナドは自己関手の圏のモノイドだよ。何か問題でも?」とたしなめた(appease)そうだ。英語だと、
A monad is a monoid in the category of endofunctors, what's the problem?
ということである。
今回の記事について
モナドについて次のような理解度があると思われる。
このためには、圏と関手と自然変換さえ知っていれば、とりあえずモナドの定義を理解することができる。ただし、それだけである。
STEP 2: モノイド対象とモナドとモノイドの関係性を理解する。
このためには、まずモノイド圏を理解しなければならない。モノイド対象がモノイド圏で定義されているためである。そして、集合の圏 がモノイド圏であり、そのモノイド対象がモノイドである。さらに、自己関手の圏 がモノイド圏であり、そのモノイド対象がモナドであることを理解する。後者が先に述べられた「モナドは単なる自己関手の圏におけるモノイド対象だよ」のことである。
STEP 3: 圏論において定義されているモナドと実際にHaskellなどで定義されているモナドの関係性を理解する。
Haskellの圏 においてのモナドが実際のモナドと一致することを理解すること。そのためには、抽象的な圏の知識だけでなく、具体的なHaskellなどの関数型プログラミングの知識も必要である。
このような理解度の深さがあるなかで、今回はSTEP 2までを明らかにしたいと思う。 つまり、「モナドは単なる自己関手の圏におけるモノイド対象だよ」という言葉の真意を完全に理解することが本記事の目標である。ただ当然ながらここの記事はSTEP 3をクリアされていないのでまだ不完全である。そこは了承していただきたい。モナドやモノイドがHaskellにおいてどのように具体例として現れているのかまだよく知らない。
STEP 1: 圏論におけるモナドの定義
定義 1 (モナド)
を圏とする。 におけるモナドとは三つの組み である; ただし、
は圏 の自己関手である;
は圏 の恒等関手 から自己関手 への自然変換である;
は自然変換である;
それらが次の性質を満たす:
(1)
(2)
ここで、 は自然変換の合成である。
つまり、圏 の任意の対象 に対して、
(1)
(2)
が成り立つことである。
ここで、それぞれの概念を定義する。
1. 圏 (Categories)
圏 とは、対象(objects)と呼ばれるものと射(arrows)と呼ばれるものから構成されている。
Objects of :
Arrows of :
射の合成が定義されている。任意の射 に対して、新しい射 が定義されている。
これらが次の公理を満たす。
(1) 結合法則
任意の射 に対して、 が成り立つ。
(2) 恒等射の存在
任意の対象 に対して、射 が存在して、任意の射 に対して、 が成り立つ。
例えば、対象が集合であり射が写像である集合の圏 はこれらの性質を満たすので圏である。
2. 関手(functors)
圏 から圏 への関手 とは、圏 の各対象 を圏 の対象 に写し、圏 の各射 を圏 の射 に写し、関手性(functionality)と呼ばれる次の性質を満たす。
(1) 合成射の保存
圏 の任意の射 に対して、圏 の射 の合成 と に対して、
が成り立つ。
(2) 恒等射の保存
圏 の任意の恒等射 に対して、 と が一致する。
圏 の自己関手とは 行く圏と行った圏が同じ関手のことである。つまり、関手 のことである。
最も簡単な自己関手として、恒等関手 がある。圏 の任意の対象 に対して、 と定義する。圏 の任意の射 に対して、 と定義する。これは自明な自己関手である。我々は恒等関手を と書くが、圏の恒等射 と混同するかもしれない。そのようにならないために恒等関手を と書いてもいいかもしれない。
2つの関手 があるとき、関手の合成 を考えることができる。 を単に と書く。それを次のように定義する。
圏 の各対象 に対して、圏 の対象 と定義する。圏 の任意の射 に対して、 と定義する。
このとき、関手の合成 が関手であることが容易にわかる。実際、圏 の任意の射 に対して、
である。さらに、圏 の任意の恒等射 に対して、
である。
3. 自然変換(natural transformations)
2つの関手 があるとする。自然変換 とは、次のような射の族 である。圏 の 任意の射 に対して、
が成り立つことである。
ある本では自然変換 を と書くときもある。もしかしたらそのように書いた方がわかりやすいのかもしれない。
最も簡単な自然変換は恒等変換 である。圏 の各対象 に対して、 を恒等射とする。
関手の合成を考えたように自然変換の合成も考えることができる。 を圏 から圏 への関手とする。 をそれぞれ自然変換とする。このとき、自然変換の合成 を次のように定義する。圏 の各対象 に対して、
とする。
が自然変換であることは容易にわかる。実際、任意の射 に対して、 が自然変換より、 かつ より、
これによって、我々はとりあえず、モナドの定義がわかった。あまりに抽象的だが!!!!!
モナドの性質はAwodeyの本に書いてある。今回はそれについて書かないが、いつかまとめる。
続いて、モノイド圏やモノイド対象について議論する。
STEP 2: モノイド対象とモノイドとモナドの関係性
モノイド対象(monoidal objects)はモノイド圏(monoidal categories)上で定義される。そのために、まずモノイド圏を定義する。
定義 2 (モノイド圏)
モノイド圏 とは、
- は圏である。
- はバイファンクターである。
- は圏 の対象である。
- は自然同型(natural isomorphisms) である。
- は自然同型である。
- は自然同型である。
これらは次の図式を可換にする。
(1)
(2)
特に、 が恒等射であるとき、strict monoidal categoryと呼ばれる。今回はstrictしか使われない。
ここでバイファンクターと自然同型の用語を確認しよう。
まずバイファンクターを定義する。そのためにはプロダクト・カテゴリーを定義する。
圏 に対するプロダクトカテゴリー を次のように定義する。 の対象を とする。ただし、 を圏 の対象として、 を圏 の対象とする。
の射を とする。ただし、 を圏 の射であり、 を圏 の射である。
プロダクトカテゴリの射の合成を次のように定義する。 の射
に対して、
と定義する。
これが圏であることは容易にわかる。
プロダクトカテゴリからある圏への関手をバイファンクターという。つまり、関手 をバイファンクターという。
を関手とする。 が自然同型であるとは、 が自然変換であり、圏 の各対象 に対して、射 が同型(isomorphism) であることである。つまり、ある射 が存在して、 かつ が成り立つことである。
モノイド圏の具体例は置いといて、次にモノイド対象を定義しよう。
定義 3 (モノイド対象)
をモノイド圏とする。モノイド対象(monoidal object)とは であり、
- は圏 の対象である
- は圏 の射であり、multiplicationと呼ばれる
- は圏 の射であり、unitと呼ばれる
これらは次の図式を可換にする。
(1)
(2)
最後にモノイドを定義しよう(すでにどこかの記事に書かれている)。簡単に言えば、モノイドとは対象がただ1つであるような圏のことである。すなわち、
定義 4 (モノイド)
であり、 は集合であり、 は二項関係であり、 は の元である。それらが次のような関係が成り立っている。
(1)
(2)
それではモノイド圏の例をみてみよう。
Example 1: 集合の圏
集合の圏 はモノイド圏である。
を次のように定義する。集合の圏 の対象 に対して、 とする。つまり、 と の直積 である。
射 に対して、集合の圏 の射 を
と定義する。
このとき、明らかに はバイファンクターである。
集合の圏 の対象 について、 とする。つまり、 を一点集合とする。
であるので、 である。つまり、 である。
と について、それぞれ恒等射である。
の各対象 に対して、
さて、モノイド圏 におけるモノイド対象は何だろうか。集合の圏 におけるモノイド対象は であり、
- は集合の圏 の対象である。つまり、 は集合である。
- は集合の圏 の射である。
- は集合の圏 の射である。
これらは次の図式を可換する。
(1)
(2)
さて、実はこのモノイド対象 はまさにモノイドであるのである*1。
任意の元 に対して、一方で であるから、
である。
他方で であるから、
である。
よって、 である。これはモノイドの性質 (1) と同じである(二項関係 を とすればよい)。
次に について、これは集合 の元と解釈することができる。つまり、 とする。このとき、任意の元 に対して、
である。
同様に、 である。
つまり、 である。これはモノイドの性質 (2) と同じである( を とすればよい)。
以上より、集合の圏 はモノイド圏であり、集合の圏 のモノイド対象はモノイドである。ここからモノイド対象がモノイドの一般化であることがわかる。
Example 2: 自己関手の圏
次に自己関手の圏 について考えてみよう。これがモノイド圏であり、そのモノイド対象がモナドであることを示そう。
を圏とする。 の自己関手の圏 を次のように定義する。
対象は の自己関手である:
射は自然変換である:
射の合成を次のように定義する。 に対して、
自己関手の圏 のテンソル積 を次のように定義する。
の対象 に対して、 つまり、 を関手の合成とする。
の射 に対して、 を次のように定義する。
の任意の対象 に対して、 を と定義する。さらに自然変換の性質より、
である。
が自然変換であることを示さなければならない。が、それはほぼ自明である。我々は他に がバイファンクターであることを示さなければならない。それほど自明ではないが、示すことは難しくない、と思う。
だけをここでは示す。圏 の任意の対象 に対して、
を圏 の恒等関手 とする。
を
とする。 を
とそれぞれする。
すると、自己関手の圏 はモノイド圏である。
それでは自己関手の圏 のモノイド対象は何であろうか。
自己関手の圏 のモノイド対象は であり
- は 自己関手の圏 の対象である。つまり、 は圏 の自己関手である。
- は自己関手の圏 の射である。つまり、 は自然変換である。
- は自己関手の圏 の射である。つまり、 は自然変換である。
これらは次の図式を可換する。
(1)
(2)
したがって、あとは、 をそれぞれ計算すればよい。
(i)
(ii)
より、 とすれば、
である。
(iii)
より、 とすれば、
(iv)
よって、
(1)
(2)
である。
自己関手の圏のモノイド対象はまさにモナドである。
STEP 3: 圏論において定義されているモナドと実際にHaskellなどで定義されているモナドの関係性
まだよくわからない。私がHaskellとか知らないから。ただ、J. Isazaの本によると、
: 対象はHaskell型であり、射はHaskell関数である。
は自己関手である。
}] (リスト)は自己関手である。
関数は 関手からリスト関手への自然変換である。
関数はリスト関手から 関手への自然変換である。
関数はリスト関手からそれ自身への自然変換である。
リストモナドとは自己関手がリスト関手であるようなモナドのことである。
まとめ
A monoid is exactly a monoidal object in the category of sets .
A monad is exactly a monoidal object in the category of endofunctors of a category .
他にも考えなければならなければならないことがある。
(1)
A monoidal category is exactly a monoid in the category of all categories .
(2)
A monad is exactly a monoidal monoid in the category of endofunctors of a category , where a monoidal monoid is a monoidal category whose object is only one.
我々は現在、モノイドとモナドとモノイド対象の関係性を考えた。だが、まだモノイド対象とモノイド圏の関係性もわからない。(1)によると圏の圏のモノイド対象がモノイド圏らしい(ホント?)。さらにモノイダルモノイドなる概念もあり、それとモノイド対象やモナドとの関係も考えなくてはならない。特に、モノイドは対象がただ一つの圏であり、それとの関わりも理解されなくてはならない。鋭意、研究中である。次号を待て。
僕から以上
参考文献
S. Awodey, Category Theory 2nd
G. M. Kelly, Basic Concepts of Enriched Category Theory (2005)
P. Etingof, et. al., Tensor Categories (2010)
J. Isaza, Category Theory Applied to Functional Programming (2014)
All downloadable!!
*1:まだ、完全には理解していない。もう少し考える余地がある。