このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

モナドはモノイドだが、モノイドじゃない

わけわからん記事タイトルを付けてしまいました。モナドが、あるモノイド圏内のモノイド対象であることは事実です。が、モノイドとして扱ってもラチがあかない問題もあります。さあ、どうしましょう。


定期的に、いやっ不定期的にだけど、マイ・モナドブームがやって来ます。2,3日前からn(不明)回目のマイ・モナドブームです。今回のブームのテーマは、「2-圏論からモナドを考える」です。キャッチフレーズは「モナドはモノイドじゃない」かな。

もちろん「モナドはモノイドだ」は嘘じゃないし、そう理解することは色々と役に立ちます。しかし、「モナドはモノイドだ」は特殊な視点からのモノの見方なので、モナドの全貌がモノイドとして把握できるわけではありません。

例えば、異なる圏の上のモナドのあいだの準同型射を定義するにはどうしたらいいでしょうか? この問に対して、「モナドはモノイドだ」と唱えてもご利益があるとは思えません。「モナドはモノイドだ」とは別な視点/別なアプローチが必要そうです。

モナドとは何であるか?」に対する「モノイドだ」とは別な見方として、「自明な2-圏から2-圏CATへのラックス2-関手である」という定義があります。これについては、「モナド論をヒントに圏論をする(弱2-圏の割と詳しい説明付き) // 自明な2-圏からのラックス2-関手」で触れています。「モナドはラックス2-関手だ」という見方をすると、モナドのあいだの準同型射はラックス2-自然変換〈lax 2-natural transformation〉だろうと見当が付きます*1

では、どんなときに異なる圏の上のモナドのあいだの準同型射が欲しくなるのでしょう。プログラミング言語の構文論は、指標と呼ばれるデータ構造の圏の上のモナドと解釈できます。モナドが構文生成規則(文法)の定式化になります。一番簡単な例は、単なる集合を指標とみなして、構文生成は連接を自由に使ってよいとするものです。

このモナドを (Set, L, μ, η) とすると:

  • 指標の圏=集合圏Set
  • (L, μ, η) はリスト・モナド

集合(基本記号の集合=アルファベット)Aに対して、L(A) = List(A) = A* と書けます。A*はクリーネスターです。μA:L(L(A))→L(A) は、リストのリスト(列の列)を平坦にする写像; ηA:A→L(A) は、基本記号を長さ1のリストとみなす写像です。

必ずしも集合圏ではない圏C上のモナド (C, L, μ, η) があり、これがプログラミング言語の構文論を記述しているとします。別なプログラミング言語の構文論は別なモナド (D, M, ν, ε) で記述されるでしょう。(C, L, μ, η) から (D, M, ν, ε) への構文的変換(翻訳)は、モナドのあいだの準同型射として定式化するのが自然でしょう。これは、異なる圏上のモナドのあいだの準同型射、つまりラックス2-自然変換の応用例となります。

モナドはモノイドだ」視点は、2-圏論的対象物であるモナドの基礎圏=0-射部分を固定して1-圏論(=通常の圏論)に持ち込む方法に頼っています。そのまま2-圏論的に見たほうがモナド本来の生態が観察できる気がします。

関連する記事:

*1:[追記]「ラックス2-」という形容詞にそれほど意味がわるわけではない(語呂を揃えるため)ので、「0-変換手」と「1-変換手」のほうが良い呼び名かも知れません。[/追記]