圏は対象と射の集まりなので、頂点と辺(矢印)の集まりである有向グラフで図示できます。例えば、次の図はある圏を表していることになります。
正確に言えば、この有向グラフは圏そのものではなくて、圏の生成系です。実際の圏を作るには、グラフの各頂点Xに対して、恒等射 idX を追加します。また、f;i、g;g;h;k のようなパス(経路)も射とみなします。もし、h;j = i のような等式的関係(可換図式と言っても同じ)があれば、その等式的関係によりパスの同一視もします。今回は等式的関係はないので、自由圏の構成となります。
さて、圏(の生成系)をテキストで表現することを考えましょう。まずは、射(グラフの辺)を列挙する方式で書いてみます。
category Foo {
f:A→B;
g:B→B;
h:B→C;
i:B→D;
j:C→D;
k:C→D;E;
}
射の両端(域と余域)となっている対象は、あえて対象だけを宣言する必要はありませんが、最後に書いたEは射を持ってないので、対象だけを記述しています。対象Eも恒等射idEは持っています。
次に、この圏を余代数の集まりとして記述してみます(「代数と余代数、クラスと余クラス」を参照)。
category Foo {
coalgebra A {
f: B;
}coalgebra B {
g: B;
h: C;
i: D;
}coalgebra C {
j: D;
k: D;
}coalgebra D {}
coalgebra E {}
}
代数の集まりとしても記述できます。
category Foo {
algebra A {}algebra B {
f: A;
g: B;
}algebra C {
h: B;
}algebra D {
i: B;
j: C;
k: C;
}algebra E {};
}
余代数と代数を適当に混ぜても記述できます。
category Foo {
coalgebra A {
f: B;
}coalgebra B {
g: B;
h: C;
i: D;
}coalgebra C {
j: D;
k: D;
}algebra D {}
algebra E {}
}
ひとつの圏でも、余代数/代数を混ぜて記述すると、グルーピングの方法が多様になります。分かりやすいようにまとめ方を工夫する余地が生まれますが、同時にグルーピングの恣意性や偶発性が入りこんでしまいます。フラットな圏なら単純明快なことが、階層化され構造化されることによってややこしくなってしまう原因の一端は、ここらあたりにあるのかも知れません。