細かい部分は訳していなかったりする。
http://hseeberger.wordpress.com/2010/11/25/introduction-to-category-theory-in-scala/
圏論入門 in Scala
もしあなたがJava開発者で私のようにScalaのファンであるならば、
あなたは遅かれ早かれmonadやfunctor、その他の圏論の領域に由来するミステリーに
遭遇するだろう。
あなたがこれらに熟知しているのであれば時間を無駄にせずに進んで欲しい。
しかしそうでないならば、抽象的な数学とコンピュータサイエンスの橋渡しとなる
秘密の領域を知る私の努力を反映したちょっとした観光にご招待したい。
このブログポストは入門として書いている。私の健康(書いている間、私の頭が爆発するんじゃないかと思った)、私の将来の時間の余裕(理解するのにとても時間がかかるので)、そしてあなたのフィードバックによっては、この続きを書こうと思う。だが今はとにかく始めよう。
圏とは何か?
圏論について話す時に、まずこれが最初の質問になるだろう。私の意見では圏の概念はプログラミングにはそこまで有用ではない。ここでは包括的な回答を載せる:
圏は、オブジェクトと、オブジェクトとオブジェクトの間のマップ(別名:モーフィズム、もしくはアロー)で形成される。マップはマップはassociative fashionで合成されることがあり、それぞれのオブジェクトにはアイデンティティマップを持つ。
オブジェクトは何であっても良いが、今回は単純なケースを見ていこう:圏は有限の集合とする。下記の図は、2つの有限の集合と、ソース(別名:ドメイン)からターゲット(別名:コドメイン)へのマップを表している。
※訳注:図は省略。
・carnivore:肉食動物
・herbivore:草食動物
やや形式的に表現すると、ドメインAとコドメインBについてのマップをこのように表現する。
f:A→B
では合成とは何だろう?次の図を見て欲しい。ここでは、別の有限な集合と別のマップを追加している。食性があなたの知っているものと異なっていることは気にしないで欲しい。
新しい集合をCと呼び、新しいマップをg:B→Cと呼ぼう。明らかに、AからCへたどり着くには、まずfを経由し次にgを進めば良い。従って、私たちはfとgを合成して新しいマップ:
g ο f: A → C
を得た。
さて合成を知ったところで、associativityとidentityについて話をしよう。別のマップh:C → Dを加えよう。
associativityの法則は、下記が真であることを要求する。
(h ο g) ο f = h ο (g ο f)
associativityは数字の加算か乗算を考えると分かり易いだろう。
identityの法則に進もう。
これは、圏におけるそれぞれのオブジェクトXについて、下記を満たすidentityマップ1X: X → X が存在することを要求している。
* f ο 1A = f
* 1B ο f = f
次の図は、私たちの例で用いる有限の集合におけるアイデンティティマップを表している。明らかにアイデンティティマップにとっては、ドメインとコドメインは同じオブジェクトである。
これが圏である。オブジェクト、マップ、合成、associativityとidentity。圏論について深く学びたいのであれば、Wikipedia か “Conceptual Mathematics” by Lawvere and Schanuel をお勧めする。それではScalaの観点から圏を見ていこう。
続きはいつか書く。
0 件のコメント:
コメントを投稿