人気ブログランキング | 話題のタグを見る

圏論は面白い(9)  Kleisli 圏

モナドへの近道・Haskell からの寄道』の定義9は Kleisli 圏の定義だ。このブログの圏論の記事もこれが最後だ。Kleisli 圏の定義は次のようになる。
圏論は面白い(9)  Kleisli 圏_d0038298_640841.png

上の定義を理解する上で大切なのは、Kleisli 圏はモナドから派生した圏であるが、モナドそのものではないということだ。これで、IOモナド型の関数の型が IO a -> IO b ではなく、a -> IO b 型である理由が分かった。

Kleisli 圏はモナドそのものではないが、Kleisli 圏から簡単にモナドを導くことができる。また、Kleisli 圏の対象と射の操作をすることで、モナドの対象を操作することができる。

IOモナドで何故モナドそのものではなくKleisli 圏を採用したのか理由はわからないが、Kleisli 圏とモナドとの関係を知ることで、liftM などの関数を使うときのイメージが混乱しなくて済む。

定義9のKleisli 圏の定義を見ると、今までIOモナドを操作する基本としてこのブログで強調してきたIOモナドの特徴が説明できる。つまり、

1.IOモナドの値は IO a で、それは retrun a で与えられる。
2. IOモナド型の関数(Kleisli 圏の関数)の型は f :: a -> IO b である。
3.IOモナド型の関数を >>= 演算子で結合したものは IO モナド型の関数(Kleisli 圏の関数)である。

数学の理論は抽象的で解りにくいが、理解するためのポイントは、記号が表しているもののイメージを作ることだ。詳しい証明を理解することができなくても、定義や定理の記号が何を意味しているのかというイメージを作ることによってその骨格をつかむことができる。

数学をプログラミングに利用するためには、このイメージを作ることが出来れば十分だ。イメージが実際に動作するかどうかは、プログラムが教えてくれる。

このブログの圏論の記事はこれで終わりだ。ここに書いた記事が数学的に正しいかどうかはあまり自身がない。数学を理解するのに大切なのは記号のさし示す内容のイメージを作ることだが、そのイメージが正しいものであるかどうかを独学で検証するのは難しい。

しかし、モナドに対して管理人がどういうイメージを持つことで理解しようとしているかは示すことができたのではないかと思う。数学書には、そういうイメージの持ち方について書かれていないので、自分で作らなければならない。この記事の圏論についてのイメージが必ずしも正しいものでなくても、読者が自分のイメージを作ってプログラミングに活用するときの助けになれば幸いだ。

蛇足だが、昔ε-δ論法について書かれた説明で、おもちゃの兵隊が陣地を守って立てられた無数のトランプの兵隊を突き破って前に進んでいくというイメージが書かれていて面白かったことがあるが、こういう分かりやすいイメージを数学教育はもっと取り入れて行かないといけないのではないだろうか。記号についてのイメージ作りを子供の能力に任せて放り出すのではなく、教育で水路付をする必要があるだろう。
by tnomura9 | 2012-01-19 07:04 | 圏論 | Comments(1)
Commented by 『モナドトランプ』 at 2020-03-18 15:44 x
自然数は、『モナドカード』による『モナド模様』の遊びから・・・
<< ヤル気がでない、ヤル気がでない... 圏論は面白い(8)  モナド >>