「圏論的コンストラクタと圏論的オペレータ: 関手性・自然性の呪縛からの脱却」において、必ずしも関手性〈functoriality〉を持たない対応や、必ずしも自然性〈naturality〉を持たない変換を紹介しました。
ときに、非関手的対応/非自然変換が多用されることがあります。しかし、関手/自然変換ほどに用語・記法が整備されてなくて困ることになります。$`\newcommand{\mrm}[1]{\mathrm{#1}}
\newcommand{\cat}[1]{\mathcal{#1}}
\newcommand{\twoto}{\Rightarrow }
\newcommand{\In}{\text{ in } }
\require{color} % 緑色
\newcommand{\Keyword}[1]{ \textcolor{green}{\text{#1}} }%
\newcommand{\For}{\Keyword{For } }%
%\newcommand{\Where}{\Keyword{Where } }
\newcommand{\Notation}{\Keyword{Notation } }
%`$
内容:
不足変換手
まず困るのが、関手性を持たない対応や自然性を持たない変換を示す呼び名がないことです*1。記事タイトルにあるように、僕は「圏論的コンストラクタ」「圏論的オペレータ〈圏論的コンビネータ〉」という言葉を使ってますが、もっと一般的な状況でも「☓☓を持たない◯◯」という概念が欲しくなるのです。
関手や自然変換を一般化した概念に変換手〈transfor〉があります。語源は、natural transformation + functor = transfor です。今、変換手の説明はしませんが、形式的な定義を言えば; n-圏達を対象とする(n + 1)-圏のホムn-圏のk-射が(n, k)-変換手です。関手 = (1, 0)-変換手、自然変換 = (1, 1)-変換手 です。
変換手は幾つかの構成素〈constituent〉から構成され、とある法則を満たします。満たすべき法則が変換手性〈transfority transforiality〉で、関手性/自然性の一般化です。
変換手として必要な構成素を備えていなかったり、変換手性を満たさない変換手もどきを不足変換手〈deficient transfor〉と呼ぶことにします。文字通り、何かが不足していて変換手になり切れてない存在のことです。注意すべきは、何も不足してない完全な変換手も不足変換手の一種とみることです。不足がゼロな不足変換手が変換手です。
例えば、型コンストラクタは対象から対象への対応で、関手の射パート〈morphism pat〉を持ってません。不足してます。不足関手 = 不足(1, 0)-変換手です。自然変換類似の対応だが自然性を持ってないものがあれば、それは自然性が不足しています。不足自然変換 = 不足(1, 1)-変換手です。
不足変換手において「何がどう不足しているか」の不足状況は実に様々になります。よって、不足の仕方で不足変換手を分類すると膨大な種類になってしまうでしょう。しかし頻繁に使うものはそう多くはありません。頻繁に使用する不足変換手をコンストラクタとオペレータ〈コンビネータ〉に大別して説明します。なお、「オペレータ」と「コンビネータ」は今の文脈では同義語なので、使い分けの基準はなく、気分次第です。
k-射の集合
準備として、n-圏のk-射の集合を短く表す記法を導入します。k-射の 'k' をどっかに付ければいいでしょう。
- $` |\cat{C}|_0 := |\cat{C}| = \mrm{Obj}(\cat{C})`$
- $` |\cat{C}|_1 := \mrm{Mor}(\cat{C})`$
右下添字に次元 k を付けました。あまり違和感ないですよね。次元 k が2以上のときも同様です。
- $` |\cat{C}|_k := \cat{C} \text{ の }k\text{-射の集合} `$
$`\cat{C}`$ の次元が1のときの2-射は1-射の等式です。$`\cat{C}`$ の次元が2のときの2-射は“2-圏の2-射”です。
次元に不等号を付けたときは次の意味だとします。
- $` |\cat{C}|_{\le k} := \coprod_{i = 0}^k |\cat{C}|_i `$
k = 0, 1, 2 のときは:
$`
\quad |\cat{C}|_{\le 0} = |\cat{C}|_0\\
\quad |\cat{C}|_{\le 1} = |\cat{C}|_0 + |\cat{C}|_1 \\
\quad |\cat{C}|_{\le 2} = |\cat{C}|_0 + |\cat{C}|_1 + |\cat{C}|_2
`$
次元をタプルにすると、集合の直積の意味(直和ではない)だとします。例えば:
$`
\quad |\cat{C}|_{(0, 0)} = |\cat{C}|_0 \times |\cat{C}|_0\\
\quad |\cat{C}|_{(1, 0, 1)} = |\cat{C}|_1 \times |\cat{C}|_0 \times |\cat{C}|_1 \\
\quad |\cat{C}|_{(i, j, k)} = |\cat{C}|_i \times |\cat{C}|_j \times |\cat{C}|_k
`$
コンストラクタ/オペレータの事例
拡張スタイルで定義される集合圏上のモナドは $`(T, \eta, (-)^\#)/{\bf Set}`$ と書けますが、型コンストラクタ〈type constructor〉 $`T`$ は関手ではありません。次のような写像です。
$`\quad T:|{\bf Set}|_0 \to |{\bf Set}|_0 \In {\bf SET}`$
ここで $`{\bf SET}`$ は、大きな集合〈large set〉も含む集合圏です。事後的に $`T`$ を拡張して関手にすることはできます。が、最初から関手である必要はありません。
対称モノイド圏 $`\cat{C}`$ 上のトレース・オペレータ〈trace operator〉は次のような形をしています。
$`\For A, B, X\in |\cat{C}|\\
\quad \mrm{Tr}^X_{A,B} : \cat{C}(A\otimes X, B\otimes X) \to \cat{C}(A, B) \In {\bf Set}
`$
マルコフ圏 $`\cat{C}`$ 上のベイズ反転オペレータ〈{Bayes | Bayesian} {conversion | inversion} operator〉は次のような形をしています。
$`\For A, B, \in |\cat{C}|\\
\quad \mrm{Convs}_{A, B} : \cat{C}(A, B)\times \cat{C}({\bf 1}, A) \to \cat{C}(B, A) \In {\bf Set}
`$
デカルト圏 $`\cat{C}`$ *2上のデカルト微分オペレータ〈Cartesian differential operator〉は次のような形をしています。
$`\For X, Y\in |\cat{C}|\\
\quad D_{X, Y} :\cat{C}(X, Y) \to \cat{C}(X \times X, Y) \In {\bf Set}
`$
ここで出てきた、“モナドの型コンストラクタ/トレース・オペレータ/ベイズ反転オペレータ/デカルト微分オペレータ”については、(必要があれば)次の記事達を参照してください。
- モナドの定義とか
- 絵算で見る、拡張スタイルのモナドとモノイド・スタイルのモナド
- トレース付き対称モノイド圏とはこんなモノ
- マルコフ圏におけるベイズの反転定理
- コンピュータ科学や組み合わせ論を“微分幾何”とみなす:CADGの夢
コンストラクタのプロファイル記述
プロファイルとは域と余域の情報です。関手や自然変換のプロファイルは次のように書きます。
$`
\quad F:\cat{C} \to \cat{D} \In {\bf CAT}\\
\quad G:\cat{C} \to \cat{D} \In {\bf CAT}\\
\quad \alpha:: F\twoto G:\cat{C} \to \cat{D} \In {\bf CAT}
`$
上記の書き方で十分に明確ですが、念の為、先頭に $`\text{0-transfor}, \text{1-transfor}`$というキーワードを付けることにします。
$`
\quad \text{0-transfor }F:\cat{C} \to \cat{D} \In {\bf CAT}\\
\quad \text{0-transfor }G:\cat{C} \to \cat{D} \In {\bf CAT}\\
\quad \text{1-transfor }\alpha:: F\twoto G:\cat{C} \to \cat{D} \In {\bf CAT}
`$
不足変換手である型コンストラクタも同様な形式でプロファイルを書くことにします。
$`
\quad \text{0-to-0-constructor }T : |{\bf Set}|_0 \to |{\bf Set}|_0 \In \widehat{\bf CAT}
`$
0-to-0コンストラクタ〈0-to-0-constructor〉とは、0-射〈対象〉を0-射〈対象〉に対応させる写像ということです。1-射のあいだの対応がないので関手にはならず不足0-変換手(できそこないの関手)です。しかし、できそこないでも $`\widehat{\bf CAT}`$ の住人として認めることにします。$`\widehat{\bf CAT}`$ は、変換手も不足変換手も別け隔てなく棲める居住地です*3。$`T`$ は($`{\bf SET}`$ だけではなくて)$`\widehat{\bf CAT}`$ にも棲んでいるとします($`{\bf SET} \subseteq \widehat{\bf CAT}`$)。
コンストラクタにいちいち名前を付けずに、次のような記述も認めるとしましょう。
$`
\quad \text{0-to-0-constructor } \cat{C}(\_1\times \_3, \_2\times \_3) : |\cat{C}|_{(0, 0, 0)} \to |{\bf Set}|_0 \In \widehat{\bf CAT}
`$
$`|\cat{C}|_{(0, 0, 0)}`$ については既に述べました。番号が付いたアンダースコアはラムダ変数です。このコンストラクタを通常のラムダ記法で書けば次のようになります。
$`
\quad \lambda\, (A, B, C)\in |\cat{C}|_0 \times|\cat{C}|_0\times|\cat{C}|_0.(\, \cat{C}(A\times C, B\times C)\;\in |{\bf Set}|_0 \,)
`$
ラムダ記法で書いてもかまいませんが、無名ラムダ変数(番号が付いたアンダースコア)を使うと幾分短く書けます。今定義したコンストラクタは、圏 $`\cat{C}`$ の対象の3つ組に集合(集合圏の対象)を対応付けます。
オペレータのプロファイル記述
コンストラクタのあいだを繋ぐ自然変換もどきがオペレータ〈operator〉(またはコンビネータ〈combinator〉)です。トレース・オペレータのプロファイルを書いてみます。
$`
\quad \text{0-to-0-constructor } \cat{C}(\_1\times \_3, \_2\times \_3) : |\cat{C}|_{(0, 0, 0)} \to |{\bf Set}|_0 \In \widehat{\bf CAT}\\
\quad \text{0-to-0-constructor } \cat{C}(\_1, \_2) : |\cat{C}|_{(0, 0, 0)} \to |{\bf Set}|_0 \In \widehat{\bf CAT}\\
\quad \text{combinator }\mrm{Tr} :: \cat{C}(\_1\times \_3, \_2\times \_3) \twoto \cat{C}(\_1, \_2) \\
\qquad : |\cat{C}|_{(0, 0, 0)} \to |{\bf Set}|_0 \In \widehat{\bf CAT}\\
\Notation \mrm{Tr}^{\_3}_{\_1, \_2} := \mrm{Tr}(\_1, \_2, \_3)
`$
最後の $`\Notation`$は、引数を添字として渡すときの構文を定義しています。キーワードに operator ではなく combinator を使っているのは、1-射の意味で operation が使われることがあり紛らわしいからです。
この調子で他のオペレータのプロファイルも書いてみます。
$`
\quad \text{0-to-0-constructor }\cat{C}(\_1, \_2)\times \cat{C}({\bf 1}, \_1):
|\cat{C}|_{(0, 0)} \to |{\bf Set}|_0 \In \widehat{\bf CAT}\\
\quad \text{0-to-0-constructor }\cat{C}(\_2, \_1) :
|\cat{C}|_{(0, 0)} \to |{\bf Set}|_0 \In \widehat{\bf CAT}\\
\quad \text{combinator }\mrm{Convs}:: \cat{C}(\_1, \_2)\times \cat{C}({\bf 1}, \_1) \twoto \cat{C}(\_2, \_1)\\
\qquad : |\cat{C}|_{(0, 0)} \to |{\bf Set}|_0 \In \widehat{\bf CAT}\\
\Notation \mrm{Convs}_{\_1, \_2} := \mrm{Convs}(\_1, \_2)
`$
$`
\quad \text{0-to-0-constructor }\cat{C}(\_1, \_2) : |\cat{C}|_{(0, 0)} \to |{\bf Set}|_0 \In \widehat{\bf CAT}\\
\quad \text{0-to-0-constructor }\cat{C}(\_1 \times \_1, \_2) : |\cat{C}|_{(0, 0)} \to |{\bf Set}|_0 \In \widehat{\bf CAT}\\
\quad \text{combinator }D :: \cat{C}(\_1, \_2) \twoto \cat{C}(\_1 \times \_1, \_2) \\
\qquad : |\cat{C}|_{(0, 0)} \to |{\bf Set}|_0 \In \widehat{\bf CAT}\\
\Notation D_{\_1, \_2} := D(\_1, \_2)
`$
オペレータ〈コンビネータ〉は、域・余域にコンストラクタがあることを想定しています。が、オペレータの写像部分だけを単独で取り出せば、それは0-to-1コンストラクタになります。
$`
\quad \text{0-to-1-constructor }D : |\cat{C}|_{(0, 0)} \to |{\bf Set}|_1
\In \widehat{\bf CAT}
`$
0-to-1コンストラクタが、0-to-0コンストラクタのあいだのオペレータだとは次のことです。
$`\require{AMScd}
\quad \text{0-to-1-constructor }\psi : |\cat{C}|_{(0, 0)} \to |{\bf Set}|_1
\In \widehat{\bf CAT}\\
\quad \text{0-to-0-constructor }F : |\cat{C}|_{(0, 0)} \to |{\bf Set}|_0
\In \widehat{\bf CAT}\\
\quad \text{0-to-0-constructor }G : |\cat{C}|_{(0, 0)} \to |{\bf Set}|_0
\In \widehat{\bf CAT}\\
\begin{CD}
|\cat{C}|_{(0, 0)} @>{\psi}>> |{\bf Set}|_1 \\
@| @VV{\mrm{dom}}V\\
|\cat{C}|_{(0, 0)} @>{F}>> |{\bf Set}|_0
\end{CD}\\
\begin{CD}
|\cat{C}|_{(0, 0)} @>{\psi}>> |{\bf Set}|_1 \\
@| @VV{\mrm{cod}}V\\
|\cat{C}|_{(0, 0)} @>{G}>> |{\bf Set}|_0
\end{CD}\\
\text{commutative in }{\bf SET}
`$
*1:「有法則代数と無法則代数」に書いた状況、つまり、法則を満たさない代数系の呼び名がなくて困っていたときと事情は似ています。
*2:微分オペレータを載せる圏には、単なるデカルト圏以上の構造が必要です。
*3:$`\widehat{\bf CAT}`$ は非差別的な共同居住地です。理想郷かも知れませんが、ごった煮過ぎて理論的には扱いにくいのは確かです。