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

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

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

参照用 記事

モノイド・スタンピングと単純スタンピング

僕はモノイド・スタンピング〈monoidal stamping〉という言葉をよく使います。この言葉を使い始めたのはバーボーサ*1〈Luis S. Barbosa〉ではないかと思います。つうか、バーボーサ以外の人が使っている例を僕は知りません(僕自身は盛んに使ってますが)。

モノイド・スタンピングとは、M = (M, m, e) をモノイドとして、任意の集合XにMを直積で掛け算する操作です。F(X) = X×M, F(f:X→Y) = (f×idM:X×M→Y×M) とすると、Fは関手 SetSet になります。それだけではなくて、モノイドの乗法mと単位eを使って関手Fを台とするモナドを構成できます。このモナドモノイド・スタンピング・モナド〈monoidal stamping monad〉と呼びます*2。具体例は「単一代入のモノイド、スタンピングモナド、モナド工場」にあります。

もともとバーボーサは、計算概念〈notion of computation〉の一種としてモノイド・スタンピングを挙げています。計算概念には、次のような例があります。

  1. 部分性〈partiality〉
  2. 非決定性〈nondeterminism〉
  3. モノイド・スタンピング〈monoidal stamping〉

モッジ〈Eugenio Moggi〉に従えば、これらの計算概念は、モナドとそのクライスリ圏〈Kleisli category〉によって定式化できます。

  1. 部分性モナド=Maybeモナド=オプション・モナド
  2. 非決定性モナド=ベキ集合モナド
  3. モノイド・スタンピング・モナド

それぞれのモナドのクライスリ射(モナドで修飾した型への関数)を考えれば:

  1. 値が未定義になるかも知れない関数
  2. 値の候補が複数あるかも知れない関数
  3. 値の出力と共にコマンドを発行したり、ストレージへの書き込みを行う関数


F(X) = X×M からモナドを作るにはMのモノイド構造が必要ですが、単なる集合Aを直積する操作 F(X) := X×A でも関手にはなります。これをスタンピング関手〈stamping functor〉と呼びましょう。モノイドじゃなくて単なる集合だよ、と強調したいなら単純スタンピング関手〈simple stamping functor〉と言うことにします。そして、特定した対象Aスタンプ対象〈stamp object〉とします。

集合圏に限らず一般のモノイド圏でスタンピング関手を考えることができます。C = (C, \otimes, I, α, λ, ρ) をモノイド圏とするとき、F(X) := X\otimesA, F(f:X→Y) := f\otimesidA でスタンピング関手を定義できます。Cが対称〈symmetric〉とは仮定してないので、左スタンピング関手と右スタンピング関手を区別する必要があります。

  • 左スタンピング関手: F(X) := A\otimesX
  • 右スタンピング関手: F(X) := X\otimesA

対称モノイド圏であっても、左右の区別はしたほうがいいと思います。

スタンピング関手は、スタンプ対象と左右の別で一意的に決まります -- これにいちいち名前を付けるほどのこともないので、無名のラムダ変数'-'(ハイフン)を使って、次のように書くことにしましょう。

  • 左スタンピング関手: (A\otimes-)
  • 右スタンピング関手: (-\otimesA)

さらに、ハイフンを省略してしまうこともあります。

  • 左スタンピング関手: (A\otimes)
  • 右スタンピング関手: (\otimesA)

Haskellのセクションと同じ記法になります。


スタンピング関手は、関手としては非常に簡単なものですが、テンソル強度〈tensorial strength〉や“加群圏〈module category〉の準同型”などに関係して出現します。簡単ではあっても、ツマラナイわけではありません。

最近、スタンピング関手/スタンピング・モナドと、その拡張概念に関する計算法について、もう一度考え直す必要があるんじゃないかと思っています。

*1:スペイン語https://ja.forvo.com/search/Barbosa/es/)だと「バルボサ」に近い音ですが、ポルトガル語https://ja.forvo.com/search/Barbosa/pt/)だと「バーボーサ」に近いようです。Luis S. Barbosaはポルトガルのミーニョ大学(https://www.uminho.pt/)の人なので、たぶんポルトガル語の人名かと。

*2:コモノイドをスタンピングすれば、コモナドを作れます。