このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

直和自明モナド、直積自明コモナド

余対角∇:A+A→A を積、始対象からの唯一射θA:0→Aを単位とすると、直和に対するモノイダル・スタンピング・モナドができる。これは対象Aで添字付けられる。つまり、対象と同じだけ直和自明モナドが存在する。

同様にして、対角Δ:A→A×Aを余積、終対象への唯一射!A:A→1を余単位とするとコモノイドができる。これにより、対象と同じだけのコモノイダル・スタンピング・コモナドができる。こっちは、直積自明コモナド

直和自明モナドは、部分関数の表現や単純な例外処理に対応する。自明ではあるが、つまらなくはない。一方の直積自明コモナドはホントにつまらないように思える。がそうでもない、と気付いた。

メイヤー方式のQuery/Commandインターフェースを持つオブジェクトをシステムコンポネントと呼ぶことにする。Sがシステムコンポネントで、fが関数のとき、

  • f:A→B consults S

は、fが明示的な引数(型はA)以外に、Sへの問い合わせも発行することを示す。Sから得られる値の集合を[S]とすると、f:A×[S]→B となる。(-)×[S]を直積スタンピング・コモノイドと考えてFとする。Fの余クライスリ圏をCoKl(F)とすると、CoKlは、ベース圏上のコモナドの圏(ベース圏上の自己関手の圏のコモノイドの圏)の上の圏バンドルになっている。とはいえ、コモナドがベース圏の対象で添字付けられているので、バンドルのベースが最初のベース圏だと思ってよい。

つまり、ベース圏(バンドルのベースとは別な概念)上に直接クライスリ圏が生えているような状況になる。この圏バンドルの平坦化がコモナド計算の舞台となるだろう。

「ベース圏」という用語が曖昧だから、用語法を工夫する必要があるが、ともかく、(対象|→直積スタンピング・コモナド) という対応があり、対象ごとに余クライスリ圏がある。余クライスリ射、直積スタンピング・コモナドFのF代数だともみなせる。

モナド/コモナドの議論としては異常に単純なのだが、プログラミングとしてはそれなりの意味があると思う。