「コラージュ図式: 圏論的判断計算の主要な道具 // コラージュ図式」より:
コラージュ図式〈collage diagram〉は、ここでの判断計算の主役です。通常の図式と同様に、形状〈shape〉である図形の各セルにターゲット・ドクトリン内のモノを割り当てます。ただし、割り当てるモノはカインド内の対象・射に限りません。
コラージュ図式は、判断計算の文脈で導入しましたが、通常の可換図式やペースティング図もコラージュ図式の特別なものです。コラージュ図式は、ありとあらゆる場面で使う可能性があります。実際、ありとあらゆる場面で使うはずです。
様々な図式(コラージュ図式含む)の形状と、形状各部〈セル〉への値の割り当て(つまり図式そのもの)は、属性付き2次元グラフで表現できます。属性付き2次元グラフは図式言語〈diagrammatic language〉において“文”に相当するものです。属性付き2次元グラフは、図式言語の基本であり基盤となります。$`\newcommand{\cat}[1]{\mathcal{#1}}
\newcommand{\mbf}[1]{\mathbf{#1}}
\newcommand{\mrm}[1]{\mathrm{#1}}
\newcommand{\msc}[1]{\mathscr{#1}}
\newcommand{\In}{\text{ in }}
\newcommand{\twoto}{\Rightarrow }
%\newcommand{\op}{\mathrm{op} }
\newcommand{\id}{\mathrm{id}}
%\newcommand{\u}[1]{\underline{#1}}
%\newcommand{\o}[1]{\overline{#1}}
%\newcommand{\hyp}{ \text{-} }
%\newcommand{\Iff}{ \Leftrightarrow }
%\newcommand{\Imp}{ \Rightarrow }
%\newcommand{\incto}{\hookrightarrow }
\newcommand{\SWArrow}{\style{display: inline-block; transform: rotate(-45deg)}{\Leftarrow} }
\newcommand{\T}[1]{\text{#1}}
`$
内容:
2次元グラフ
有向グラフしか扱わないので、単にグラフと言ったらそれは有向グラフです。グラフに関して、次は同義語として使います。
- 0次元セル〈0-dimensional cell〉 = 0-セル〈0-cell〉 = 頂点〈vertex〉 = 点〈point〉
- 1次元セル〈1-dimensional cell〉 = 1-セル〈1-cell〉 = 辺〈edge〉 = 矢印〈arrow〉
グラフは1次元までのセルを持つので、1次元グラフ〈1-dimensional graph〉または1-グラフ〈1-graph〉とも呼びます。辺を持たないグラフ、つまり頂点だけのグラフは0次元グラフ〈0-dimensional graph〉または0-グラフ〈0-graph〉と呼びます。
通常、0-グラフは特別な1-グラフ(離散グラフ)と考えるので、1-グラフをより正確に言うなら“たかだか1次元のグラフ”です。離散グラフを1-グラフから除外することはしません。
2次元グラフは、2次元セルを持つ(かも知れない)グラフです。2次元セルは多角形〈polygon〉とも呼びます(次節で詳説)。つまり、次が同義語です。
- 2次元セル〈2-dimensional cell〉 = 2-セル〈2-cell〉 = 多角形〈polygon〉
1次元の場合と同様に、“たかだか2次元のグラフ”が2次元グラフなので、通常のグラフ〈1-グラフ〉は2次元グラフの特別な場合です。ただし、文脈や用語運用規約により、“真の2次元グラフ”だけを2次元グラフ〈2-グラフ〉と呼ぶことはあるでしょう。
2次元グラフを、「2次元のコンピュータッド〈computad〉」とか「2次元のポリグラフ〈polygraph〉」と呼ぶ場合もあります。このブログ内でも「2次元のコンピュータッド」は使ってます(「2次元のコンピュータッド」参照)が、今回は「2次元グラフ」を使います。
2次元グラフの多角形〈2-セル〉は、常識的な多角形より複雑な対象物です。一角形、二角形もあり、向き〈オリエンテーション〉を持っていて、境界のパスが潰れている可能性があります。次節で述べます。
多角形
5角形の例を挙げます。
$`\quad \xymatrix{
{}
&{}
&{2} \ar[drr]
&{}
&{}
\\
{1} \ar[urr] \ar[dr]
\ar@{.}[drrr]|{\SWArrow}
&{}
&{}
&{}
&{3} \ar[dl]
\\
{}
&{5} \ar[rr]
&{}
&{4}
&{}
\\
}`$
5個の頂点と5本の辺は常識的に理解できます。境界が5辺形で、内部は2次元セルで埋まっているとします。
2次元グラフの多角形〈2-セル〉には、特定された2つの(一致する1つの、でもかまわない)頂点があります。片一方を(多角形の)出発点〈starting {point | vertex}〉、もう一方を到着点〈destination {point | vertex}〉と呼びましょう。上の五角形の例では、頂点 1 が出発点で、頂点 4 が到着点です。
多角形の境界〈boundary〉は、出発点から到着点に向かう2本のパスから構成されます。上の五角形の例では、2本のパスは 1→2→3→4 と 1→5→4 です。多角形には向き〈orientation | オリエンテーション〉が必要ですが、2本のパスの一方をソースパス〈source path〉、もう一方をターゲットパス〈target path〉と指定することで向きが決まります。辺の向きが、ソース頂点とターゲット頂点の指定で決まるのと同じです。上の図では、二重矢印記号が五角形の向きを示しています。1→2→3→4 がソースパスで 1→5→4 がターゲットパスです。
視認性を良くするために、出発点から到着点へと点線を引いています。この点線は多角形の対角線のひとつですが、特に仕切り線〈dividing line〉と呼ぶことにします。仕切り線により、2次元図形としての対角線は2つの部分に分かれます。ソース側とターゲット側です。ソース側とターゲット側の区別ができることが、多角形が向きを持つことです。
多角形には一角形と二角形もあります。以下のようです。
$`\quad \xymatrix{
1 \ar@(ul, ur)[]_{\Downarrow}
}`$
$`\quad \xymatrix{
1 \ar@/^/[r] \ar@/_/[r]
\ar@{}[r]|{\Downarrow}
& 2
}`$
以下の2つの三角形では、境界である三辺形の向きも違うし、三角形自体の向きも違います。
$`\quad \xymatrix{
1 \ar[rr] \ar[dr]
\ar@{.}@/_1.5pc/[rr]|{\Uparrow}
&{}
&2
\\
{}
&3 \ar[ur]
&{}
}`$
$`\quad \xymatrix{
1 \ar[rr]
&{}
&2 \ar[dl]
\\
{}
&3 \ar[ul] \ar@{.}@(ul, ur)[0, 0]|{\Downarrow}
&{}
}`$
二番目の三角形では、ソースパスが 3→1→2→3 で、ターゲットパスは一点に潰れたパスです。以下のように四角形に展開して描くとわかりやすいかも知れません。
$`\quad \xymatrix@C+1pc{
1 \ar[r]
&2 \ar[d]
\\
3 \ar@{=}[r]\ar@{.}@/^1pc/[r]|{\Downarrow} \ar[u]
&3
}`$
ソースパスがサイクルで、ターゲットパスが一点に潰れたケース、あるいはその逆のケースを除外しません。
以下は1つの三角形と1つの五角形を含む2次元グラフの例です。1→2→5, 1→5 は三辺形にはなりますが、三角形ではありません(中身がない)。
$`\quad \xymatrix{
{}
&{}
&{3} \ar[dr]
&{}
\\
{1} \ar[r] \ar[dr]
&{2} \ar[rr] \ar[ur] \ar[d]
\ar@{.}[drr]|{\SWArrow}
\ar@{.}@/^1pc/[rr]|{\Downarrow}
&{}
&{4} \ar[d]
\\
{}
&{5} \ar[r]
&{6} \ar[r]
&{7}
}`$
以下の過去記事でも類似の話題を扱っています。
属性とその書き方
ここでの属性とは、キー・バリュー・ペアのことだとします。キーとバリューはイコールで区切って書きます。
$`\quad key = value`$
キー(イコールの左)を属性名〈attribute name〉、バリュー(イコールの右)を属性値〈attribute value〉とも呼びます。
属性の使用例でお馴染みのものと言えば、HTML要素の属性でしょう。
<div id=note03 class=caution> <p>いくつかの注意点を述べる ‥‥ </p> </div>
id=note03 class=caution の部分が属性です。1つのHTML要素に複数の属性を付けることができます。
さて、ここでの属性は、ブラケットで囲んでカンマ区切りで並べるとします。HTML要素の属性の例は、ブラケット囲み・カンマ区切りなら次のようです。
$`\quad [\text{id} = \mrm{note03}, \text{class}=\mrm{caution}]`$
属性〈キー・バリュー・ペア〉をカンマ区切りで並べてブラケットで囲んだ形式も属性〈attributes〉と呼びます*1。
属性付き2次元グラフ〈attributed 2-dimensional graph〉とは、頂点、辺、多角形に属性が付いた2次元グラフのことです。以下はその例です。
$`\quad \xymatrix@C+1pc{
{[\T{id} = 1, \T{val} =\mbf{R}, \T{vnam}= x]} \ar[r]^-{[\T{id} = 101] } \ar[d]_{[\T{id} = 103 ]}
\ar@{}[dr]|{\SWArrow\,[\T{id} = 201]}
&{[\T{id} = 2, \T{val} =\mbf{N}, \T{vnam}= n] } \ar[d]^{[\T{id} = 102]}
\\
{[\T{id} = 3]} \ar@{=}[r]
&{[\T{id} = 3]}
}`$
ここでの二本棒の辺(イコールに見える)は特殊な用途で、同一の頂点をレイアウトの都合で2箇所に描いていることを示します。見た目の四角形は実際には三角形です。これ以外の目的で二本棒(長いイコール記号)を使うことがあるので注意してください。例えば、辺の値が恒等射のときに二本棒(長いイコール記号)を使います。
id属性とval属性の使い方は完全に決まっています。その他の属性は必要に応じて導入して意味と用途を約束します。まず、id属性だけを抜き出して、id属性の値で2次元グラフのセルをラベルしてみます。
$`\quad \xymatrix@C+1pc{
{1} \ar[r]^-{101 } \ar[d]_{103}
\ar@{}[dr]|{\SWArrow\, 201}
&{2 } \ar[d]^{102}
\\
{3} \ar@{=}[r]
&{3}
}`$
id属性は、頂点・辺・多角形に一意識別子(番号や名前)を付与します。すべてのセルに異なる識別子を付ける必要があります。id属性を実際に使う機会はあまりないと思います。セルの値(後述のval属性の属性値)ではなくて、セルそのものを参照したいときはid属性(による一意識別子)が必要になります。
次に、val属性だけを抜き出して、val属性の値でグラフの各部をラベルしてみます。
$`\quad \xymatrix@C+1pc{
{\mbf{R}} \ar[r] \ar[d]
\ar@{}[dr]|{\SWArrow}
&{\mbf{N} } \ar[d]
\\
{\cdot} \ar@{=}[r]
&{\cdot}
}`$
$`\mbf{R}`$ は実数達の集合、$`\mbf{N}`$ は自然数達の集合を表します。val属性の値は、通常の意味でのセルのラベルです。つまり、セルが表わす意味的実体です。セル(頂点・辺・多角形)への値を割り当てを表にしてみると次のようです。
| $`\text{id属性の値}`$ | $`\text{val属性の値}`$ |
|---|---|
| $`1`$ | $`\mbf{R}`$ |
| $`2`$ | $`\mbf{N}`$ |
| $`3`$ | $`\text{未定義}`$ |
| $`101`$ | $`\text{未定義}`$ |
| $`102`$ | $`\text{未定義}`$ |
| $`103`$ | $`\text{未定義}`$ |
| $`201`$ | $`\text{未定義}`$ |
| $`202`$ | $`\text{未定義}`$ |
| $`203`$ | $`\text{未定義}`$ |
未定義の部分を未知セルと解釈すれば、これは問題図式(「メリス/ジルバーガーの圏論的判断計算 // 問題図式と解図式」参照)となります。未知セルを参照するには、id属性の値(番号)に疑問符を前置することにすれば、次の形になります。
$`\quad \xymatrix@C+1pc{
{\mbf{R}} \ar[r]^-{?101 } \ar[d]_{?103}
\ar@{}[dr]|{\SWArrow\, ?201}
&{\mbf{N} } \ar[d]^{?102}
\\
{?3} \ar@{=}[r]
&{?3}
}`$
番号では味気なくて嫌だ、というのであれば:
$`\quad \xymatrix@C+1pc{
{\mbf{R}} \ar[r]^-{?f } \ar[d]_{?h}
\ar@{}[dr]|{\SWArrow\, ?\alpha}
&{\mbf{N} } \ar[d]^{?g}
\\
{?X} \ar@{=}[r]
&{?X}
}`$
疑問符の所には値(val属性の属性値)がありません。値を割り当てるなら次のようにします。
- $`?X`$ に、何か集合を割り当てる。一例: ブール値の集合 $`\mbf{B}`$
- $`?f`$ に、実数から自然数への関数を割り当てる。一例: 絶対値を取ってから切り捨てる関数 $`\lambda\, x\in \mbf{R}.\mrm{floor}(|x|)`$
- $`?g`$ に、自然数からブール値への関数を割り当てる。一例: 偶数かどうかを返す述語 $`\lambda\, n\in \mbf{N}.\mrm{isEven}(n)`$
- $`?h`$ に、$`?f`$ に割り当てた関数と $`?g`$ に割り当てた関数を結合した関数を割り当てる。一例: 絶対値を取ってから切り捨てた自然数が偶数かどうかを返す述語 $`\lambda\, x\in \mbf{R}.\mrm{isEven}(\mrm{floor}(|x|))`$
- $`?\alpha`$ に、$`?f; ?g = ?h`$ に相当する等式を割り当てる。一例: $`\lambda\, x\in \mbf{R}.\mrm{floor}(|x|) ; \lambda\, n\in \mbf{N}.\mrm{isEven}(n) = \lambda\, x\in \mbf{R}.\mrm{isEven}(\mrm{floor}(|x|))`$
id属性とval属性以外は、適宜用途に応じて使用法を決めます。この事例におけるvnam属性は、推奨される変数名〈variable name〉だとしています。頂点が集合を表わす状況で、その集合上を走る変数をvnam属性で指定するわけです。因子グラフの変数ノード(変数を記入するノード、「ストリング図と因子グラフ」参照)と同じ役割りをはたします。vnam属性は、例えば次の形に描けます。
$`\quad \xymatrix@C+1pc{
{x: \mbf{R}} \ar[r] \ar[d]
\ar@{}[dr]|{\SWArrow}
&{n : \mbf{N} } \ar[d]
\\
{\cdot} \ar@{=}[r]
&{\cdot}
}`$
矢印の属性の表現方法
前節の例を考えます。class属性(すぐ後に説明)を追加します。
$`\quad \xymatrix@C+1.8pc@R+1pc{
{[\T{id} = 1, \T{val} =\mbf{R}]} \ar[r]^-{[\T{id} = 101, \T{class} = \mrm{surj}] } \ar[d]_{[\T{id} = 103 ]}
\ar@{}[dr]|{\SWArrow\,[\T{id} = 201]}
&{[\T{id} = 2, \T{val} =\mbf{N}] } \ar[d]^{[\T{id} = 102, \T{class} = \mrm{incl}]}
\\
{[\T{id} = 3]} \ar@{=}[r]
&{[\T{id} = 3]}
}`$
この図では、頂点 1 と頂点 2 には値(val属性の属性値)は割り当て済みです。頂点 3 、辺 101 、辺 102 、辺 103 への値はまだ未定(あるいは未知)です。これら値が未定のセルには、これから集合と写像を割り当てることにします。
「辺 101 には全射写像〈surjective map〉を割り当てるべし」「辺 102 には包含写像〈inclusion map〉を割り当てるべし」という制限が付いているとします。class属性はその制限を表現します。
一般に、圏の射達の集合の部分集合を射クラス〈class of morphisms | 射のクラス〉(「射のクラスと制約付きスパン // 圏の射のクラス」参照)と呼びます。class属性の値である $`\mrm{surj}, \mrm{incl}`$ は射クラスの名前だったわけです。
この例のような、矢印〈辺 | 1-セル〉に付けられた属性を視覚的に表現するために、矢印の形を変える方法がよく使われます。例えば、全射(class属性の値が $`\mrm{surj}`$)ならば矢頭〈アローヘッド〉が二重、包含(class属性の値が $`\mrm{incl}`$)ならば $`\subseteq`$ に似た形にするとかです。この約束で描きなおすと次のようです。
$`\quad \xymatrix@C+1.8pc@R+1pc{
{[\T{id} = 1, \T{val} =\mbf{R}]} \ar@{->>}[r]^-{[\T{id} = 101] } \ar[d]_{[\T{id} = 103 ]}
\ar@{}[dr]|{\SWArrow\,[\T{id} = 201]}
&{[\T{id} = 2, \T{val} =\mbf{N}] } \ar@{^{(}->}[d]^{[\T{id} = 102]}
\\
{[\T{id} = 3]} \ar@{=}[r]
&{[\T{id} = 3]}
}`$
他の視覚的表現方法としては、矢印の軸を点線、破線、二重線にするとか、矢の根本にも飾りを付けるとかがあります。矢印の変種や飾りが何を意味するかはローカル・ルール(その場ごとの規約)になります。
識別子、名前、値
写像〈関数 | 集合圏の射〉 $`f:X \to X`$ が、結合に関してベキ等〈idempotent〉だとは、等式 $`f;f = f`$ が成立することです。これを可換図式で表わすとします。図式の形状は次だとします。
$`\quad \xymatrix{
{[\T{id}=1]} \ar[r]^{[\T{id}=101]}\ar[d]_{[\T{id}=103]}
\ar@{}[dr]|{[\T{id}=201]}
&{[\T{id}=2]} \ar[d]^{[\T{id}=102]}
\\
{[\T{id}=3]} \ar@{=}[r]
&{[\T{id}=3]}
}`$
ほんとは三角形だけど、レイアウトの都合で四角形になっている、という状況です。
図式により示したいことは $`f;f = f`$ という等式であり、$`f`$ が具体的に何を指すかはどうでもいいとします。つまり、図式の辺には値を割り当てません。値を割り当てないのでval属性は使いません。辺には値ではなくて名前を割り当てます。
$`\quad \xymatrix{
{[\T{id}=1]} \ar[r]^{[\T{id}=101 , \T{name} = f]}\ar[d]_{[\T{id}=103, \T{name}= f]}
\ar@{}[dr]|{[\T{id}=201]}
&{[\T{id}=2]} \ar[d]^{[\T{id}=102, \T{name} = f]}
\\
{[\T{id}=3]} \ar@{=}[r]
&{[\T{id}=3]}
}`$
実際の値(今の場合は集合か写像)を割り当てるときは、「同じ名前のセルには同じモノ(集合か写像)を割り当てる」というルールが適用されます。例えば、偶数は半分にして奇数には何もしない関数を $`\mrm{evenHalf}`$ とします。次のような値の割り当て(名前の割り当てではない)を考えます。
| $`\text{id属性の値}`$ | $`\text{val属性の値}`$ |
|---|---|
| $`1`$ | $`\mbf{N}`$ |
| $`2`$ | $`\mbf{N}`$ |
| $`3`$ | $`\mbf{N}`$ |
| $`101`$ | $`\mrm{evenHalf}`$ |
| $`102`$ | $`\mrm{evenHalf}`$ |
| $`103`$ | $`\mrm{evenHalf}`$ |
| $`201`$ | $`\mrm{evenHalf};\mrm{evenHalf} = \mrm{evenHalf}`$ |
この具体的な値割り当ては、ベキ等写像の具体例を与えます。四角形内の $`\text{comm.}`$ は四角形の可換性、つまり等式を表します。
$`\quad \xymatrix@C+1.5pc@R+1pc{
{\mbf{N}} \ar[r]^{\mrm{evenHalf}}\ar[d]_{\mrm{evenHalf}}
\ar@{}[dr]|{\text{comm.}}
&{\mbf{N} } \ar[d]^{\mrm{evenHalf}}
\\
{\mbf{N} } \ar@{=}[r]
&{\mbf{N} }
}`$
値ではなくて名前だけが割り当てられた2次元グラフは一般的な概念(今の場合はベキ等写像)を記述して、具体的な値割り当てはその概念の具体例(今の場合は $`\mrm{evenHalf}`$)となります。
2次元グラフのセル(頂点、辺、多角形)を識別するための識別子(id属性の値)、具体的な値(val属性の値)、セルの名前(name属性の値)は別物です。しかし、いずれもセルのラベルとなるので混同してしまうのも無理もありません。また、名前と識別子は兼用してかまわない場合もあるし、val属性により割り当てる値が名前文字列のこともあります。
図式を描く側も読み取る側も、識別子/名前/値の違いを意識して十分注意する必要があります。
コラージュ図式
最後に、「コラージュ図式: 圏論的判断計算の主要な道具 // コラージュ図式」で導入したコラージュ図式を属性付き2次元グラフで定式化してみます。
新しくsort属性を導入します。「コラージュ図式: 圏論的判断計算の主要な道具 // コラージュ図式」の無名の属性が、今回のsort属性です。
sort属性の値と意味は次のようだとします。属性値である名前は「コラージュ図式: 圏論的判断計算の主要な道具 // コラージュ図式」より短くしています。
| sort属性の値 | 意味 |
|---|---|
| obj | 圏の対象を割り当てる |
| mor | 圏の射を割り当てる |
| val | 関手の値割り当てを割り当てる |
| lift | 持ち上げ四角形を割り当てる |
sort属性は頂点・辺・多角形のどれにも付けられますが、辺のsortを obj にすることは出来ません。セルの種類で、sort(属性の値)も制限されます。sort属性の属性値である val とval属性を混同しないように注意してください。
次はsort属性を付与した2次元グラフの例です。
$`\quad \xymatrix{
{[\T{sort}=\mrm{obj}]} \ar[r]^{[\T{sort}=\mrm{mor}]}\ar[d]_{[\T{sort}=\mrm{val} ]}
\ar@{}[dr]|{[\T{sort}=\mrm{lift}]}
&{[\T{sort}=\mrm{obj}] } \ar[d]^{[\T{sort}=\mrm{val}]}
\\
{[\T{sort}=\mrm{obj}]} \ar[r]_{[\T{sort}=\mrm{mor}]}
&{[\T{sort}=\mrm{obj}]}
}`$
視覚的表現として、次の約束をします。
- sort属性値が obj である頂点は小さな黒丸で描く。
- sort属性値が mor である辺は通常の矢印で描く。
- sort属性値が val である辺は $`\mapsto`$ の矢印で描く。
- sort属性値が lift である四角形内には $`\text{lift}`$ と書き込む。
この約束に従って描き換えると次のようになります。
$`\quad \xymatrix{
{\cdot} \ar[r] \ar@{|->}[d]
\ar@{}[dr]|{\text{lift}}
&{\cdot } \ar@{|->}[d]
\\
{\cdot} \ar[r]
&{\cdot}
}`$
具体例な値(val属性の値)を割り当てるには、ターゲット(割り当て先)である圏や関手を指定し、さらにそのなかの対象・射と関手の“引数・値ペア”〈関手の値割り当て〉を割り当てます。次のようなややこしい状況が生じるので注意してください。
val属性の値として割り当てた値は、関手の値割り当てである。
おわりに(プロモーション)
属性付き2次元グラフは、なにかを表現するための手段です。何をどのように表現するかは、属性値によって指定します。val属性の値が決まってなくても、グラフそれ自体で意味を持ちます。属性付き2次元グラフは、もともと図形としてトポロジカルな情報を持ちます。それに加えて、属性達が様々な情報を担います。
文字を直線状に配置しただけのテキストに比べて、属性付き2次元グラフはとんでもなくリッチな表現手段です。テキストで書かれた“テキスト文”から、属性付き2次元グラフで描かれた“図式文”へと切り替えれば、とんでもなくリッチな表現力が手に入ります。
*1:単一属性と複数の属性の並びをどうしても区別したいなら、後者を属性リスト〈attribute list〉と呼べばいいでしょう。