一般的な高次圏、つまりn-圏は難しくて歯が立ちません。せめて n = 2 の場合、2次元の圏くらいは扱ってみたいな、と思います。
内容:
圏の圏とDOTN
圏の圏Catは2次元の圏の典型的例です。Catでの計算をするために、僕はDOTNという自前の記法を使っています。DOTNの目的と方針は:
- 左から右へと、目線のバックトラックなしで読み下せる。
- イタリック体や上付き・下付き添字を使わず、プレーンテキストとして書ける。
一番目の特徴はDiagrammatic-Order、2番目の特徴はText Notationなので、Diagrammatic-Order Text Notation です。
書体による区別は使わないので、代わりに次の約束をします。
- 圏は、英字大文字 A, B, C など
- 圏の対象は、英字小文字 a, b, c など
- 圏の射は、英字小文字 f, g, h など
- 関手は、英字大文字 F, G, H など
- 自然変換は、ギリシャ文字小文字 α, β, γ など
「結合」が4種類あります。
- 射の結合
- 関手の結合
- 自然変換の縦結合
- 自然変換の横結合
当初(http://www.chimaira.org/docs/DOTN.htm)は、4種の結合を全部別な記号で区別してました。それをマトリックスで書くと:
f;g | F;;G |
α|β | α*β |
α|β が縦結合、α*β が横結合です。F;;G は結局 F;G に落ち着いて、実際は3種になりました。
f;g | F;G |
α|β | α*β |
3種でも多いので、α|β は α;β でもいいんじゃないか、と思います。そうなると:
f;g | F;G |
α;β | α*β |
これで問題はないのですが、気になる点が出てきました。α::F⇒G:C→D、γ:J⇒K:D→E のとき、αとγの横結合が:
- α*γ::F;J⇒G;K:C→E
となりますが、これは、α*γ::F*J⇒G*K :C→E と同じ記号(星印)になって欲しいのです。それで、関手の結合を F*G に変更したのがDOTN二号です。
f;g | F*G |
α;β | α*β |
2-圏と二重圏
圏の圏Catは2-圏の例です。2次元の圏の一般的なものは双圏で、2-圏は双圏を単純化したものです。
圏の圏Catの対象(0-セル)は圏なので、内部に対象や射を持ちます。一般的な2-圏の対象はもはや内部構造を持たない単なる“点”なので、2-圏の計算で使う結合は3種類になります。1-セルの結合、2-セルの縦結合、2-セルの横結合です。
F*G | |
α;β | α*β |
2次元の圏には、双圏や2-圏とは別な形のものがあります。二重圏(double category)です。二重圏は、次の構成要素を持ちます。
- 0-セル(対象)
- 縦1-セル(縦射)
- 横1-セル(横射)
- 2-セル
「結合」は4種類あります。
- 縦1-セルの結合
- 横1-セルの結合
- 2-セルの縦結合
- 2-セルの横結合
二重圏は過去にもけっこう話題にしています。
- 二重圏における交替律
- 計算モデルに使えそうな2次元の圏:フレーム付き双圏
- 関手的データモデルと二重圏とアニメーション
- 圏論の練習問題:モノイド二重圏の定義の同値性
- 二重圏の具体的な定義
- 二重圏の簡単な例:非負行列の順序構造
- 二重圏のもっと簡単な例:圏の可換四角形の二重圏
二重圏は圏の圏ではありませんが、DOTNの約束を流用して、縦1-セルをf, gなど、横1-セルをF, Gなどで表し、結合の記号も流用すると:
f;g | F*G |
α;β | α*β |
僕が考える二重圏は、横1-セルがプログラムを表し、2-セルがプログラムのあいだの模倣関係を表すものです。そして、横1-セルの結合(横結合)は、プログラムの順次結合です。順次結合だと、記号はどうしても「;」を使いたくなります。そうなると:
f|g | F;G |
α|β | α;β |
この記法では、横結合は次元によらず「;」、縦結合は次元によらず「|」です。
計算ができない
n-圏は概念的にも難しいですが、具体的計算もままならないです。演算の対象となるモノ(セル)の種類が多く、演算(結合)も何種類もあります。これらを区別する方法(例えば書体)も使える記号も数に限りがあります。記号・記法をオーバーロードして使い回すしかなく、そうなると多義性・曖昧性で混乱しがちです。
n-圏の計算ができるプログラミング言語があればいいのですが、合理的で使いやすい構文がイメージすらできませんね。あー、難しい。