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

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

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

参照用 記事

モノイド関手/ラックス・モノイド関手とその実例

モノイド圏のあいだの関手で、モノイド構造を考慮したものとしてモノイド関手(monoidal functor)やラックス・モノイド関手(lax monoidal functor)があります。その定義と幾つかの実例を挙げます。

この記事のもともとの動機は、“直積をモノイド積とした集合の圏 (Set, ×, 1)”と“直積をモノイド積とした付点集合(pointed set)の圏 (PtSet, ×, 1)”のあいだの付点関手({point adding|point augmentation} functor)を紹介することです。付点関手の性質を説明するための予備知識として、モノイド関手/ラックス・モノイド関手の概念が必要だったのです。しかしこの記事は、モノイド関手/ラックス・モノイド関手の手短な解説としても読めると思います。

内容:

モノイド関手

C = (C, \otimes, I)、D = (D, \otimes, I) を2つのモノイド圏とします。いつものとおり記号の乱用と省略をしてますが、細かいことに拘らないで先に進みます。

F:CD は関手だとして、この関手が圏のモノイド構造を保存する(あるいは尊重する)とはどういうことでしょうか。一番端的な表現は次の等式でしょう。

  • F(A\otimesB) = F(A)\otimesF(B)
  • F(I) = I

モノイド圏ではなくて普通のモノイド(つまり、集合圏内のモノイド対象)の場合の準同型は、このような等式を使った定義になっています。しかし圏の場合、等号を使った定義は強すぎて使えないことが多いですね。CDが厳密モノイド圏の場合でさえも、イコールによる定義は不適切なことがあります。

そこで、イコールを同型に置き換えた形を考えます。

  • F(A\otimesB) \stackrel{\sim}{=} F(A)\otimesF(B)
  • F(I) \stackrel{\sim}{=} I

このような同型が、A, Bごとに脈絡なくバランバランに与えられたのでは扱いに困ります。同型達が系統的に与えられる必要があります。「系統的に」とは、次のような同型射(可逆射)の族が自然変換になっていることです。

  • μA,B:F(A)\otimesF(B)→F(A\otimesB)
  • ε:I→F(I)

εはD内のただ一本の射に過ぎませんが、CからDへの定数関手のあいだの自然変換とも解釈できます。どうでもいいっちゃどうでもいい事ですが、こではεも自然変換として扱います。

モノイド圏のあいだのモノイド関手*1とは、単なる関手 F:CD だけではなくて、2つの自然変換μ, εも一緒にした組 (F, μ, ε) として定義されます。そして、モノイド関手の構成要素であるF, μ, εは、とある法則を満たすことを要求します。

満たすべき法則とは、(ある種の)結合律と左右の単位律です。つまり、モノイド関手が一種のモノイドになっているのです。結合律と左右の単位律を可換図式として書いたものは、nLabやWikipediaを参照してください。

可換図式を見てピンと来る人はいいのですが、僕は絵がないとモノイド関手の法則も理解できません。幸いにも、モノイド関手のモノイド法則の図示は可能です。

マッカーディのストライプ図

モノイド関手を絵で描くには、マッカーディ(Micah Blake McCurdy)が考案したストライプ図が便利です。ストライプ図の発想と描き方は、次の論文の最初の5ページに詳しく解説されています。

以下に、ストライプ図の描き方を簡単に記しておきましょう。

まず、関手F:CD があれば、A in C に対して A|→F(A) という対応により、 F(A) in D が定まります。当たり前ですよね。対象をストリングで描けば次のような感じです。

この状況を一枚の絵のなかで描くために、関手ボックス(functor box, functorial box)や関手シース(functor sheath)を使います。

左が関手ボックスです。関手の名前でラベルされたボックスは覗き窓で、内部には圏Cの様子が見えます。右に描いた関手シースでは、帯状の領域内に圏C側の様子を描きます。関手の識別にはラベルよりはシースの色が使われることが多いですね。僕の手描きの絵では薄い水色がFの色です。

ちなみにシースというのは、電線(例えば同軸ケーブル)の外側を包むビニルやゴムの外皮です。

[*2]

関手シースを使って絵を描くと、ストリング図のストリングが幅を持ったストライプになるので、描かれた絵をストライプ図と呼びます。立体的に描いたときはチューブ図とも呼ぶようです。

先に引用したBourke and McCurdyの論文には、色鮮やかなストライプ図による計算・証明が載っています。

さて、ストライプ図を使って、モノイド関手の構造射である μA,B:F(A)\otimesF(B)→F(A\otimesB) と ε:I→F(I) を描くと次のようになります。

この絵で採用した描画方向(「絵算の描画方向を示すために旗を使うことにした」参照)は ↓→ です。旗ならば:

μA,B:F(A)\otimesF(B)→F(A\otimesB) の絵について説明しましょう: ストライブの内部を無視して(幅をゼロだと思って)見ると、圏Dにおける“F(A)とF(B)のモノイド積”からF(A\otimesB)に至る射の絵とみなせます。ストライブ(シース)の内部まで見ると、図の上のほうではF(A)とF(B)が横に並んでいるのでF(A)\otimesF(B)です。下側では、圏Cにおける"AとBのモノイド積”がFで包まれています。つまり、F(A\otimesB)です。全体として μA,B:F(A)\otimesF(B)→F(A\otimesB) を忠実に描画していることになります。

εは、DにおけるI(モノイド単位)からF(I)への射です。モノイド単位は何も描かないのが普通の描画法ですが、ここでは「なにもないがある」ことを表すために点線を使っています。εは、IからF(I)が生じる様子を表してますが、F(I)のシースの内部にC側のモノイド単位(ほんとは何も描かない)が見えているわけです。

(F, μ, ε) に関する結合律と単位律は、以下のように描けます。


これらの絵を見れば、モノイド関手がモノイドであることが感得できるでしょう。念のために等式で書いておくと(idXを単にXと書く):

  1. A,B\otimesF(C));μA\otimesB,C = (F(A)\otimesμB,C);μA,B\otimesC
  2. \otimesF(A));μI,A = F(A)
  3. (F(A)\otimesε);μA,I = F(A)

これらの等式は若干簡略化してあります。圏C, Dが厳密モノイド圏ならこのままでいいのですが、モノイド積の結合律と単位律に関する構造同型射α(associator)、λ(left unitor)、ρ(right unitor)を考慮する必要があります。

αの関して言えば、Dにおける3本のストライプF(A), F(B), F(C)の束ね方の変更 (F(A)\otimesF(B))\otimesF(C) ←→ F(A)\otimes(F(B)\otimesF(C)) と、Cにおけるストリングの束ね方の変更 (A\otimesB)\otimesC ←→ A\otimes(B\otimesC) を明示的に考えましょう、ということです。気になる人は明示的に考えてください。僕は気にならないので割愛します。

モノイド関手の例

(M, ・, e), (-)・(-):M×M→M, e∈M がモノイドのとき、Mを離散圏とみなすとモノイド圏となります。もう少し詳しくいうと、次のような圏Cが作れるのです。

  1. Obj(C) = |C| = M
  2. Mor(C) = M
  3. x∈Mor(C) に対して、dom(x) = cod(x) = x
  4. x∈|C| に対して、id(x) = x
  5. 恒等射しかないので、結合(composition)は自明。
  6. x\otimesy := x・y がモノイド積
  7. eが単位対象

M = (M, ・, e), N = (N, ・, e) が2つのモノイドのとき、モノイド準同型写像 f:M→N は関手を定義します。関手としてのfは、“圏としてのモノイド積=元のモノイドの積”を保存するので、モノイド関手となります。

モノイドから定義されるモノイド圏とモノイド関手の具体例を出しましょう。太字のNは、自然数の集合 {0, 1, 2, ...} を表すとします。(N, +, 0) は足し算のモノイドです。(N, ×, 1) は掛け算のモノイドです。同じ台集合Nを持ちますが、足し算モノイドと掛け算モノイドは、モノイドとしては別物です。

n∈N に対して、f(n) = 2n(2のn乗)とすると、関数fはモノイド準同型 (N, +, 0)→(N, ×, 1) となります。よって、f(2の累乗を計算する関数)はモノイド圏のあいだのモノイド関手とみませます。

モノイド準同型では例としてつまらないので、「2のn乗」を「Sのn乗」にしましょう。ここで、Sは適当に選んで固定した集合です。n∈N に対して、F(n) = Sn = S×S×...×S(Sのn個の直積=n-タプルの集合)とします。このFは、“モノイド圏とみなした(N, +, 0)”から、"直積をモノイド積とする集合のモノイド圏 (Set, ×, 1)”へのモノイド関手となります。

等式 Sn+m = Sn×Sm は、厳密には(on the noseでは)成り立たないので、F(n) = Sn に伴う自然変換μ, εが必要になります。

  • μn,m:Sn×Sm→Sn+m in Set
  • ε:1→S0 in Set

集合の直積、タプル、選ばれた単元集合、集合のゼロ乗などを、具体的にどう定義するかに依存しますが、それらの定義をハッキリと決めれば、μとεも具体的にハッキリと決まります。(F, μ, ε)に関する結合律と単位律も(ほぼ自明ですが)示すことができます。

次に、F(n) = Sn において、S = RRは実数の全体)とします。これは、(N, +, 0)→Set のモノイド関手を定義します。このモノイド関手を、実数係数の行列の圏MatRからSetへのモノイド関手に拡張することができます。行列の圏におけるモノイド構造は、対角ブロック和*3と空な行列(MatR(0, 0)の要素)で定義します。

今定義したモノイド関手 F:MatSet は、圏Matから実数係数のベクトル空間の圏VectRへの関手とみなすこともできます。「行列の線形写像としての解釈」とはこの関手のことです。この関手はモノイド関手なので、行列の対角ブロック和を(ベクトル空間または線形写像の)直和として解釈することも含まれています。

ラックス・モノイド関手とその例

ラックス・モノイド関手*4は、モノイド関手と同様に、台関手 F:CD と、ある種のモノイド構造を与える自然変換μ, εからなります。満たすべき法則(結合律、左右の単位律)も同じです。違う点は、μ、εの成分が同型射(可逆射)であることを要求しないことです。つまり、μA,B-1:F(A\otimesB)→F(A)\otimesF(B)、ε-1:F(I)→I は存在しないかも知れません。

ラックス・モノイド関手の例を挙げます。そのために、付点集合(pointed set)の圏PtSet*5を考えます。圏PtSetの対象は、集合AとAの要素⊥Aの組 (A, ⊥A) です。記号の乱用で、A = (A, ⊥A) あるいはときに、A = (A, ⊥) のように書きます。圏PtSetの射 f:(A, ⊥A)→(B, ⊥B) は、写像 f:A→B であって、f(⊥A) = ⊥B を満たすものです。

(A, ⊥A), (B, ⊥A) が圏PtSetの2つの対象であるとき、それらの直積を定義できます。A×B を台集合として、⊥A×B = (⊥A, ⊥B)∈A×B を基点(選ばれた点)とした (A×B, ⊥A×B) をPtSetにおける直積とすればいいのです。射影を考えて、実際に圏論的な直積であることを確認できます。

1 = {0} として、⊥1 = 0 と置けば、1 = (1, ⊥1) は圏PtSetの終対象になります。この1はまた、圏PtSetの始対象でもあり、直積の単位対象でもあります。

これで準備が出来たので、集合の圏Setから、付点集合の圏PtSetへの付点関手を定義します。集合Aに対して、F(A) := A + {θA} とします。θAは集合Aには属さない要素を適当に取ったものです。「適当に」が不安なら、F(A) = A∪{A} とすればいいでしょう。A∈A とはならないし、一意的に A∪{A} が決まります。

単なる集合Aから作った (A + {θA}, θA) は付点集合になるので、|Set|→|PtSet| が定義できます。単なる写像 f:A→B を (A + θA)→(B + θB) に拡張するのは簡単なので、Fは SetPtSet の関手になります。これが付点関手です。

集合Aに付点関手Fを適用すると、F(A)にはちょうど1個の新しい要素が追加されます。このことから、F(A×B) \stackrel{\sim}{=} F(A)×F(B) は成立しないことがわかります。例えば、A = B = 1 のとき、F(1×1)は2個の要素を持ち、F(1)×F(1) は4個の要素を持つので同型になりようがありません。

しかし、μA,B:F(A)×F(B)→F(A×B) を次のように定義できます。以下で、⊥F(A) = θA、⊥F(B) = θB、⊥F(A)×F(B) = (θA, θB) です。

  • μA,B(⊥F(A), b) = ⊥F(A×B)
  • μA,B(a, ⊥F(B)) = ⊥F(A×B)
  • μA,B(a, b) = (a, b) (a∈A, b∈B のとき)

ε:I→F(I) は自明に定義できます。μA,Bもεも圏Dにおける同型射にはならないので、(F, μ, ε) はモノイド関手にはなりません。しかし、付点関手Fはラックス・モノイド関手にはなっているのです。これを確認するには、(F, μ, ε) に関する結合律と単位律を示す必要がありますが、それは練習問題とします。

付点関手 F:SetPtSet と、基点を忘れる忘却関手 U:PtSetSet は随伴関手対となり、この関手対から生成されるモナドがMaybeモナド(Optionモナド)です。Maybeモナドは例外モナドの一番簡単な例であり、そのクライスリ圏は未定義値を許す関数の圏になっています。付点集合の圏PtSetはMaybeモナドアイレンベルク/ムーア圏として再現できます -- 「アイレンベルグ/ムーア圏 その3:Maybeモナドのとき」を参照。

付点関手をラックス・モノイド関手とみなしたものは、幾つかの引数を持つ関数の評価戦略に関係します。使わない引数が未定義でも別にかまわないとするか、すべての引数の値を確定してから評価を始めるか、その2つの戦略の橋渡しが付点関手Fのモノイド構造μ, εで与えられます。そういう事情で、ラックス・モノイド関手としての付点関手は、計算の科学(computing science)とも関わってくるのです。

今日の話はここまでにしておきますが、モノイド関手/ラックス・モノイド関手の定義からすぐ出るようなことでもけっこう面白い話題があるので、補足を書くかも。

*1:ここで定義するモノイド関手は、強モノイド関手(strong monoidal functor)と呼ばれることがありますが、これが標準的なモノイド関手だと思われるので特に形容詞は付けないことにします。

*2:画像は http://www.junkosha.co.jp/saiyo/wire/images/p1_2.png(記事:http://www.kanzacc.co.jp/products/cable/pro/em_k_cpee.html)から

*3:m行n列の行列aと、k行l列の行列bの対角ブロック和は、(m + k)行(n + l)列の行列です。左上の矩形部分にaの成分をそのまま置いて、右下の矩形部分にはbの成分をそのまま起きます。残り(左下と右上)はゼロで埋めます。

*4:"lax"の訳語として、「緩」とか「ゆるい」とかも考えてはみたのですが、結局カタカナ書きにしました。

*5:PtSetの代わりに、以前Setという記号を使ったこともあります。