コンパクト閉圏

檜山正幸 (HIYAMA Masayuki)
Tue Feb 08 2005:start
Fri Feb 11 2005:draft

コンパクト閉圏の定義を示し、定義にまつわるいくつかの事柄を調べてみる。 より具体的には、「左」という形容詞への違和感を述べ、一方で「単位」とい う用語法が整合的であることを裏付ける。

目次

1. はじめに

2005年2月8日の時点において、Googleで "compact closed categories"(あ るいは、"compact closed category"、「コンパクト閉圏」)で日本語のペー ジを探しても、なんと2件しか出てこない。1件はこのChimairaサイトで、もう 1件は、 SLACS(スラックス; Symbolic Logic And Computer Science)1996年の発表プログラム内の、白 旗優(慶応大学商学部)氏発表のタイトル「A sequent calculus for compact closed categories」である。ということは、コンパクト閉圏に興味を持つ人 なんて事実上いないってことだ。かなりトホホな気分、寂(サビ)しいなぁ。

Web全体では、"compact closed categories"で225件がヒットするから、それ なり(かぁ?)の人が興味を持っている。が、日常的なプログラミング (everyday programming)に対して、コンパクト閉圏で考えよう、なんて言う 奴はたぶん僕だけかもしれない。哀(カナ)しいなぁ。

そういうわけだから、この記事の読者はたぶん僕ひとりだろう。が、自 分自身の備忘のために書いておきたい。…… しかし、侘(ワ)びしいなぁ。

備忘目的だから、脈絡もなく雑多なことを書く。もちろん、全然セルフコン テインドではない。が、コンパクト閉圏をソフトウェアの理論と実践に応用す る人が出現することを少しは期待して、そのような人には多少面白そうな話に はしたい。

(この段落は、記事を書き終えた後に書いている:)面白いと(少なくとも 僕には)思えることがいくつかあるのだけど、定義の周辺をウロウロしている うちに疲れたので、とりあえずは適当なところで区切って、続きは別な記事に 書くことにする。

[2005-07-05追記]第4節の「なんで左?」に書いておいた疑問は、僕の深読み し過ぎであったことが判明。左随伴の「随伴」は随伴対とは何の関係もなくて、 「双対」とほぼ同義語だった。このへんの事情は、別な記事として書くかもし れない。

2. 参考文献

最初にネタもと(情報源)を挙げておく。ただし、星印が付いたものは入手 できないので、まったく見てない。他は、 インターネット(CiteSeer.IST (http://citeseer.ist.psu.edu/) arXiv.org (http://arxiv.org/))で探せば見付かる。

  1. [Abr93]* S. Abramsky "Interaction Categories" 1993 (unpublished lecture notes)
  2. [Abr04] QDay Paris Dec. 2004 のスライド
  3. [AC04] Samson Abramsky, Bob Coecke "A categorical semantics of quantum protocols" 2004
  4. [AGN95] Samson Abramsky, Simon Gay, Rajagopal Nagarajan "Interaction Categories and the Foundations of Typed Concurrent Programming" 1995
  5. [AD04] Samson Abramsky , Ross Duncan "A categorical quantum logic" 2004
  6. [JSV96]* Andre' Joyal, Ross Street, Dominic Verity "Traced monoidal categories" 1996
  7. [Has97] Masahito Hasegawa "Recursion from Cyclic Sharing: Traced Monoidal Categories and Models of Cyclic Lambda Calculi" 1997
  8. [KL80]* G.M. Kelly, M.L. Laplaza "Coherence for compact closed categories" Jurnal of Pure and Applied Algebra, 19, 1980
  9. [Shi96] Masaru Shirahata "A sequent calculus for compact closed categories" 1996

[JSV96]と[KL80]はそれぞれ、トレース付きモノイド圏とコンパクト閉圏の原 典らしいが、入手できない。トレース付きモノイド圏とコンパクト閉圏の定義 は、[Has97]と[Shi96]で言及されているので、僕はそれで知った。

[Abr93]は、コンパクト閉圏を計算科学/プログラミングに応用したものらし いが、unpublishedだから入手できない。ただし、[AGN95]でその内容を知るこ とができるようだ。とはいっても、[AGN95]は60ページ以上あるし、ウチのプ リンタが調子悪いときに印刷したので、あっちこっちかすれていて(って、そ れが理由か?)まったく読んでない(*注1)

注1

トナーを激しく振ったりすると何とかなることもある。が、このプリンタも いいかげん古いものだから、そろそろ買い換えないといけない。新しいプリン タで[AGN95]を印刷し直したら、読もうかな :-)。

僕が最近よく眺めているのは、プレゼン用のスライド[Abr04]( http://web.comlab.ox.ac.uk/oucl/work/samson.abramsky/talks.htmlの `QDay Paris December 14 2004: Talk on `Abstract Scalars and Free Constructions')だ。イラストがたくさんあり、概要が箇条書きで書いてある。 僕は、詳しい説明を読んでもどうせ分からないからこれで十分だ:-)。

3. とりあえず定義

まず、コンパクト閉圏の定義から。僕のネタもとは[Shi96]の第2節だが、お そらくは[KL80]で最初に定義されたのだろう。事前に、モノイド圏(monoidal category)Cの対象Aに対して、その左随伴(left adjoint)という概念が必要 だ。左随伴は、必ずしも対称でないモノイド圏でも定義できる(が、非対称ケー スで意味があるのだろうか? 僕はよく分からない)。以下、×はモノイド積 (monoidal product, multiplication)、Iはモノイド単位(monoidal unit) だとする。f:A→B を、A -(f)→Bのようにも書く(矢印の上にfを書けないの で代替表現)。また、対象Xの恒等射(identity)を同じ記号Xで表す(*注2)。 「≒」はisomorphicのつもりである。

注2

人によっては、IdXのXを省略してIdとか1とか書いたほうが分かりやすいと 思うだろう。実際、そのような記法もよく見かける。IdXをXと書くのは僕の 趣味に過ぎない。射が出現すべき文脈で対象が出てきたらIdを付けて考えればい い。

対象Lと、d:I→A×L、e:L×A→I の3つ組(L, d, e)がAの‘左随伴’であると は、次の等式が成立することである。

  1. [A≒I×A -(d×A)→(A×L)×A≒A×(L×A) -(A×e)→A×I≒A]の結合 = A
  2. [L≒L×I -(L×d)→L×(A×L)≒(L×A)×L -(e×L)→I×L≒L]の結合 = L

ここで、≒は標準的に定まる同型射と解釈する。これらの等式を可換図式で 描くと、六角形になるが、なぜか‘三角恒等式’(triangular identities) と呼ばれている([Abr04])。おそらく、自明な≒を同一視すると三角形の可 換図式になるからだろう(下の図)。

FIG: 六角形と三角形

/* triangular */

三角形に簡略化された形で等式を書き直せば、次のようになる。

  1. [A -(d×A)→A×L×A -(A×e)→A]の結合 = A
  2. [L -(L×d)→L×A×L -(e×L)→L]の結合 = L

Aに対してその左随伴Lが一意的に確定するわけではない(存在しても、同型 だけの違いはあり得る)。A|→A*、A|→ηA、A|→εA という一意的な 割り当てがあって、その(A*, ηA, εA) がAの左随伴を与えていて、も とのモノイド圏Cが対称のとき、これらをまとめた構造(C, (-)*, η, ε)を ‘コンパクト閉圏’と呼ぶ。

以上は、[Shi98]に基づいて述べたが、Abramskyは、ηA、εAの型(プロ ファイル)を、I→A×A*、A*×A→Iではなく、I→A*×A、A×A*→Iと している。別にどっちでもいいのだが、混乱のもとになるかもしれない。例え ば、三角恒等式を2種の定義に沿って書いてみると、次のようになる。

いま「別にどっちでもいい」と言ったが、ほんとにどっちでもいいことを示 すのは全然自明ではない。「結んでない輪は、ほどけてまっすぐになる」こと を意味するヤンキング公式が必要だ。そのヤンキング公式を示すためには、コ ンパクト閉圏のめぼしい性質を前もって調べておく必要がある。

めぼしい性質には次のようなものがある。

  1. (A×B)* ≒ A*×B*
  2. I* ≒ I
  3. A** ≒ A
  4. ηA* ≒ ηAA*,A
  5. εA* ≒ σA*,AA

Kelly & Laplazaの定義では、これらはすべて自明とは言えない定理になる。 が、コンパクト閉圏を使う側としては、基本的な性質は最初から列挙されてい たほうがいい。Kelly & Laplazaの定義は、公理の最小化を重視しているよう だが、冗長でも、もっと計算に便利な定式化があったほうがいいと僕は思う。

4. なんで「左」?

まず、Aに対する(A*, ηA, εA)を、なぜ左随伴と呼ぶのだろう。左随 伴といえば、関手の随伴対が思い浮かぶ。背後に随伴対があるのだろうか? あるといえばある。が、“左”随伴じゃないと思うのだけど…、以下に説明す る。

Cの対象Xに(右から)Aをかける(モノイダル積する)関手を‘Aテンソリン グ’と呼ぶことにする。つまり、TA(X)=X×AとしたときのTAがAテンソリ ングだ。Aテンソリングの右随伴関手があれば、それをEAと書いて‘Aベキ’ と呼ぶことにする。EA(X)は、XAとか[A, X]とかA-・X(実際は黒丸でなく て白丸)とか書かれる。呼び方もいろいろで、指数(exponent)、 内部hom(internal hom)、余テンソル(cotensor)などと呼ぶ(用語の微妙 な差は下のノートを見よ)。論理で言えば含意(implication)だし、集合圏 では関数集合/関数空間である。[Shi96]では、[A, X]をclosure operationと 呼んでいる。すべての対象Aに対してclosure operation [A, -]を持っている 圏が(monoidal) closed categoryだから、まー、ツジツマがあっているような 気もする。が、閉演算(closure operation/operator)は、順序構造や位相で 全然別な意味で使われることもある(例:クラトフスキーの閉演算)。

NOTE: 用語の微妙な差

指数、内部hom、余テンソルは、ほぼ同義語だと思ってよいと思うが、本来の 定義は“微妙に”違う。人によっては、“決定的に”違うと言うかもしれない。

指数という言い方は、デカルト閉圏やトポスでよく使われるようだ。デカル ト積(-)×Aの右随伴を(-)Aと書いて、(Aベキの)指数関手(exponent functor)と呼ぶようだ。が、(-)Aと書くか[A, -]と書くかは趣味の問題だ ろう。

もう少し一般化すれば、対称モノイド圏Cのモノイド積×(デカルト積とは限 らない)を使った掛け算関手(-)×Aに対する右随伴が任意のAに存在し、それ が、2項関手[-, -]:Cop×C→Cで与えられる状況、つまり、 C(X×A, Y)≒C(X, [A, Y])なら、[-, -]または第1変項を固定した[A, -]を指 数関手と呼んでよいと思う。モノイド積が対称でないと、C(X×A, Y)≒C(X, [A->Y])、C(A×X, Y)≒C(X, [A>-Y])のように2種類の指数が必要になる。×に 対応する論理結合子(logical connective)が非可換な論理なら、2種の含意 が出てきそうだが、よく知らない。

内部homは、圏Cのhom-setであるC(X, Y)が再びCの対象とみなせるとき、その 対象を指して呼ぶ。たとえば、アーベル群の圏Abにおいて、hom-set Ab(X, Y) に再びアーベル群構造を与えることができるから、Ab(X, Y)∈Obj(Ab)と思っ てよい。ただし、アーベル群だとみなしたAb(X, Y)は単なる集合(Setの対象) ではないから、ab(X, Y)と書くことにする。すると、ab(-, -)は、 Obj(Ab)×Obj(Ab)→Obj(Ab)という写像である。このような状況で、ab(X, Y) を内部hom対象と呼ぶのが正しいのだろう。なお、abはAbop×Ab→Abとい う関手に拡張できる。f1:X1←Y1、f2:X2→Y2に対して、ab(f1, f2):ab(X1, X2)→ab(Y1, Y2)は、g∈ab(X1, X2)に対して、f1;g;f2:Y1→Y2で定義される。 これは、Abにおける内部hom関手(internal hom functor)である。

Abは自分自身によりエンリッチされているが、一般に圏Cが対称モノイド 閉圏Vでエンリッチされた圏、つまりV-圏のとき、Vによる外部作用としてのテ ンソルと余テンソルは以下のように定義される。X∈Obj(V)、A∈Obj(C)に対し て、 テンソルをX◎A、余テンソルをX△Aと書くことにする。ただし、Vに前もって 備わっているモノイド積-×-、モノイド積の右随伴[-, -]とトーッテモ紛らわ しいから、◎は外部テンソル、△は外部余テンソルと呼ぶことにする。

CはV-圏だから、C(A, B)∈Obj(V)である。(C(-, -)の値は、単なる集合では なくて、Vに入るとする。)X∈Obj(V)に対して、

がV内で成立しているとき、X◎Aが外部テンソルである。([-, -]はVにおける モノイド積の右随伴、つまり指数である。)一方、 がV内で成立しているとき、X△Aが外部余テンソルである。

C=V、つまり、C自身が対称モノイド閉でかつ指数[-, -]を通じて自分自身に エンリッチされているときは、次が成立する。

これから、外部テンソルは内部テンソル(対称モノイド積)と一致して、外 部余テンソルは“内部余テンソル=内部テンソルの右随伴=指数=内部hom”に一致す ることが分かる(詳しいことは、Francis Borceuxの教科書の6.5節に出ている)。

以上をまとめれば、対称モノイド閉圏が、モノイド積の右随伴により自己エ ンリッチされている状況では、指数(モノイド積の右随伴)、余テンソル、内 部hom(自己エンリッチ)はほんとに同義語だといってよい。Setと直積、Abと 直和は、この状況の例である。

ついでに言っておくと、CがV-圏で、任意のX∈Obj(V)とA∈Obj(C)に対して、 外部テンソルX◎Aが定義できるなら、Cは(Vによって)"tensored"と言うそう だ。"cotensored"も同様な概念。と、しかし、Cをtensored categoryと呼ん だりすると、なんて訳語をあてればいいのだろう。relaxed monoidal categoryをtensor categoryと呼ぶ習慣があるから、「テンソル圏」とは呼べ ないし、「テンソルされた圏」か?

そもそも「テンソル」って言葉を使いすぎなんだよね。って僕もむやみに使っ ているわ。

AテンソリングTAとAベキEAは随伴だから、次の自然な同型が存在する。

もう少しなじみの記法を使えば、次のようになる。

ところで、コンパクト閉圏では、[A, Y]がY×A* で与えられる、つまり、 次が成立する;天下りだが、以下ではこの事実を仮定して話をする(*注3)

注3

f:X×A→Yに対して、(X×ηA);(f×A*):X×I→Y×A* を対応させる写 像を考える。これと、X≒X×Iの同型から、随伴を与える同型写像が得られる。

よって、AベキはA*テンソリングに他ならない。A*テンソリングをTAと 書けば(添字が二重になるのがイヤなので、Aを上付と下付で区別した)、次 のような随伴関係(adjunction)がある。

これは、次の主張と同じ事だ。

  1. TAは、TA随伴である。
  2. TAは、TA随伴である。
もっと簡略に書けば、
  1. `×A'は、`×A*'の随伴である。
  2. `×A*'は、`×A'の随伴である。
となる。あれーー? A*は右随伴だぞ。なんで「左」って呼ぶんだ?左右を 逆に書く記法で考えているのだろうか、あるいは、関手の随伴対とは別な背景 から命名したのだろうか。ウーム、わからない。
NOTE: 右と左

記事「Janusについて雑多なこと」の第5節「双面 神の右と左」で書いたけど、実は僕は、右と左の区別が苦手なのだ。とっさに は左右の判断がつかない。いまでも、「お箸を持つほうの手」とか心の中で確 認しないと安心できない。

そんな僕が「右と左が逆じゃないの」と言ったりするのは、内心とっても不 安なのだ。僕のほうが最初から左右を勘違いしていたってこともありそうで…

5. 単位と余単位

以下では、Abramskyに従って、ηA:I→A*×A、εA:A×A*→I とい う定義を採用しよう。記号ηとεを使うのもAbramskyのとおりである ([Shi98]では、dとeを使っている)。ηを‘単位’(unit)、εを‘余単位’ (counit)と呼ぶ。A*は、Aの‘双対’(dual)と呼ぶようだ。「双対」と いう言葉も使われすぎだけど、この場合はふさわしいと思えるので、遠慮しな いで「双対」を使うことにする(*注4)。よって、A|→A*‘双対化演算’ (dualizing operator)と呼ぶことにする。双対化 A|→A* は、定義の上か らは関手にはなっていないし、η、εもとりあえずは自然変換とは言えない。

注4

対蹠(たいせき;antipode)という言い方も悪くないと思っているが、使用 例は多くないようだ。

Abramsky流の定義では、 Aベキ関手[A, X]はA*×Xと、左から双対を掛け算する形になっている。それ で、TA(X) = A*×X と変更しておく。いずれにしても、TAとTAが随伴 対になることは変わりない。

随伴対に対して、単位と余単位という概念がある。習慣的記号法として、単 位にη、余単位にεをあてるが、それではコンパクト閉圏の単位/余単位と区別 が付かなくなるので、ΠとΘを随伴対の単位/余単位を表すために使う。

以下で何をしたいかというと、コンパクト閉圏の単位/余単位と随伴の単位/ 余単位がどう関係しているかを見たいのである。とりあえず、TAとTAが随 伴対であるという事実から出発する。随伴対から単位/余単位を構成する方法 を教科書(Mac Lane、Borceux)どおりにたどってみる。

単位とは、Xごとに決まる射ΠX:X→TA(TA(X)) なのだが、実際には、 随伴対に基づいて構成されるから、Π<TA, ψ, TA>X のように書くべき だろう。ここで、<TA, ψ, TA>が随伴対の構造全体を表している、ψは C(TA(X), Y)≒C(X, TA(Y))の同型を与える写像 (方向はC(TA(X), Y)→C(X, TA(Y)))だとする。

C(TA(X), Y)≒C(X, TA(Y))において、Y=TA(X)と置けば、 C(TA(X), TA(X))≒C(X, TA(TA(X)))となる。左辺の集合内に は、TA(X)の恒等射が存在するから、それのψによる像をgとすると、 g∈C(X, TA(TA(X)))、つまり、g:X→TA(TA(X))。このgは、随伴対を もとにして、対象Xごとに指定されるので、g=Π<TA, ψ, TA>Xと書く。 が、事情がはっきりしていれば、ΠXと略記してよい。TAとTAの随伴 構造がAで決定されるから、ΠAXという書き方も使うことにする。 X=TA(Y)と置いて、同様な議論をすれば、 余単位Θ<TA, ψ, TA>Y:TA(TA(Y))→Yが得られる。

TAとTAを開いて書けば、次のようになる。

特に、XとYをモノイド単位Iとすれば、次の形になる。

A*×(I×A)≒A*×A、(A*×I)×A≒A*×Aを使えば、形の上では、 Π<TA, ψ, TA>IAIはηAと、 Θ<TA, ψ, TA>IAIはεAと似ている(Θのプロファイルはε とちょっと違っているが)。これらは、ほんとにコンパクト閉圏のηとεなの だろうか。

6. ネームと余ネーム

前節の問題を考える上で、Abramskyが導入したネーム(name)と余ネーム (coname)を使うと便利である。コンパクト閉圏Cの射f:A→Bに対して、fをデー タまたは点とみなしたものを定義できる。それをfのネームと呼ぶ。ノイマン 式コンピュータでは、機能・動作を実現するプログラムも、格納されたデータ とみなせる。fのネームとは、「データ/点とみなしたf」ということになる。 Abramskyは、fのネームをゲーデル・コーディングの記号で表しているが、機 能・動作・手続き・アルゴリズムなどをデータ/値とみなすことは、確かに一 種のゲーデル・コーディングだ。

ネームを定義するには、C(A, B)≒C(I, A*×B)という同型を使う。これは、 C(A, B)≒C(I×A, B)とC(I×A, B)≒C(I, [A, B])をつなげればよい([A, B]=A*×Bに注意)。C(A, B)≒C(I, A*×B)を与える同型写像をΦA,B とすると、 [f]=ΦA,B(f)として、この[f]を、fの‘ネーム’と呼ぶ。

余ネームは、C(A×B*, I)≒C(A, B**×I)とC(A, B**×I)≒C(A, B)から定義される同型ΨA,B: C(A×B*, I)→C(A, B)を使って定義され る。つまり、fの‘余ネーム’]f[は、]f[=(ΨA,B)-1(f)である。ただ し、B**≒Bは別に示す必要がある。

AとBが同じときは、ΦA,A:C(A, A)→C(I, A*×A)となる。C(A, A)には Aの恒等射Aがあるから、そのネーム[A]はI→A*×Aである。同様に、 ΨA,A:C(A×A*, I)→C(A, A)だから、]A[:A×A*→ Iとなる。

[AC04]によれば、次が成立する(簡単に示せる、下のノート参照)。

NOTE: ネーミング同型のあからさまな表示

コンパクト閉圏では、ΦA,B:C(A, B)→C(I, A*×B)を具体的に書き下 すことができる。f∈C(A, B)、つまりf:A→Bとして、ηA;(A*×f)を 作る操作がΦA,Bである。

特に、ΦA,A(A)=ηA;(A*×A)=ηA だから、[A]=ηA が成立する。

コンパクト閉圏のメリットのひとつは、随伴(adjunction)、双対化 (dualizing, dualization)、トレースなど、圏の上に働くオペレータを、圏 の射と演算の組み合わせで具体的に書き下せることだ。しかも、ボックス&ワ イヤーの図を参照すれば、直感的に計算できる。“雰囲気”としては、コンパ クト閉圏は、算術的/運算的かつ初等幾何的なのである。僕が、「コンパクト 閉圏は計算科学と相性が良い」と思う心情的(論理的ではない)理由のひとつ は、この算数っぽい“雰囲気”である。

7. 随伴対の単位/余単位とコンパクト閉圏の単位/余単位

ηA=[A]だから、[A]=Π<TA, ψ, TA>Iが示せれば、ηA=Π<TA, ψ, TA>Iだといえる。実際には、この等式そのものを文字通りに示すこと はできないのだが、“[A]を定義するための自然変換”と、 “Π<TA, ψ, TA>Iを定義するための自然変換(の若干の変形)”が事 実上等しいことが示せる。さてまずは、[A]とΠ<TA, ψ, TA>Iの関係を 見るために、ネームと随伴単位の定義を、もっとあからさまに書き下してみよ う。

ネーム[A]を定義するために使ったΦA,Aは、2つの同型C(A, A)≒C(I×A, A)とC(I×A, A)≒C(I, [A, A])をつないだものであった。 もっと具体的にΦA,Aを書いてみる。まず、C(A, A)≒C(I×A, A)の同型を 与える写像をλAとする。C(I×A, A)≒C(I, [A, A])同型を与える写像のほ うは、随伴<TA, ψ, TA>に現れたψを使って、ψI,Aと書ける。だか ら、ΦA,AAI,A

これを使えば、恒等射Aのネーム[A]の定義は次のようになる。

一方、ΠAIは、C(TA(I), TA(I))≒C(I, TA(TA(I)))を使って定義さ れる。この同型写像は、ψを使って、ψI,I×Aと書ける。ΠAIとは、 TA(I)つまりはI×Aの恒等射を、ψI,I×Aに代入したものだから、 次のように書ける。

ここから先は図式でみたほうが早いだろう(下)。

FIG: [A]とΠAIの関係

/* unit-name */

対象Aの恒等射はC(A, A)のなかにあるが、C(A, A)から出る 写像λAI,Aは、別な経路を通った C(A, A)≒C(I×A, I×A) -(ψI,I×A)→C(I, A*×(I×A))≒C(I, A*×A) と同じである。そのとき、Aの恒等射とI×Aの恒等射が移りあっている。

上に出てくる同型写像C(A, A)→C(I×A, I×A)をρAとすれば、 ρAI,I×AとλAI,Aは、C(I, A*×(I×A))≒C(I, A*×A) の同型を後結合(post-compose)することで互いに移りあう。そのとき、[A]とΠAIも、互 いに移りあうのである。だから、[A]とΠAIは同一視できるといってもい いだろう。

結局、TA、TAという随伴対から作った単位(と呼ばれる自然変換)ΠA のIにおける値(I→TA(TA(I))というCの射)は、Aのネーム[A]と同一視でき、 したがって、ηAとも同一視できる、ということになる。おおざっぱにいえば、 次が成立する。

これをもって、随伴対の単位とコンパクト閉圏の単位は、(ほぼ)同じもの だといってもいいだろう。控えめにいっても、ΠAIとηAはハッキリ とした関係で結ばれている。ΘAIとεAに関しても同様である。

8. まとめ

脈絡もなく雑多なことを書いたので、ここでまとめておく。