圏
圏(category)
圏は「対象 (object) の集まり」と、その間を走る「射 (arrow / morphism)の集まり」から成る
対象は圏に含まれるモノ
対象はなんでも大丈夫
射は対象の間に定義される「向きのある関係」
グラフ理論でいうところの有向
射は合成できる
2つの射から1つの射を求める演算
合成ができるのは射$ f, g があったときに、射$ f の余域(codomain、終域、値域)と射$ g の域(domain、始域、定義域)、が一致している場合のみ
始まりと終わりが一致してたら一致していたら良い
具体的なものだと「しりとり」
射は以下の条件を満たす
結合律
単位律
全ての対象は自分自身に返る恒等射(identity)を持つ
圏とは,隣あったエッジ(辺)の合成が定義されているマルチエッジ有向グラフ 対象はノード(node)
射は有向辺
射は自己ループを持つ
プログラミング言語(の圏)で考えると
対象 は 型
射 は 関数
TypeScriptのような関数名 : 型の記法で書くとする。
関数f : A、g : Bの合成$ g \circ f をCで書くと以下のようになる。
code:memo.c
B f(A a);
C g(B b);
C g_after_f(A a)
{
return g(f(a));
}
圏の定義
圏は3つの要素で構成される
対象(object)
射(arrow / morphism)
合成(composition)
集合$ \bm{C} は対象と射の集まり。
対象の集まりは
$ C_0 := Ob(\bm{C})
(別表記)
$ C_0 := |C|
射の集まりは
$ C_1 := Mor(\bm{C})
とする。Morはmorphismの略。
射$ f,g,h,\mathrm{id}_a,\mathrm{id}_b∈C_1 と対象$ a,b∈C_0 に対して、
結合律、単位律の二つを満たすとき、$ \bm{C} は圏である。
結合律(associative law)
$ (f⋙g)⋙h=f⋙(g⋙h)
演算子は$ \circ とかでもよい
読み方: $ (f \ggg g) を合成してから$ h を合成したものと、$ (g \ggg h) を合成してから$ f と合成したものは同じ
計算の順序によらず一意という言い方にもなる
(別の書き方)
結合律(associative law)
$ h\ggg(g \ggg f)=(h \ggg g) \ggg f=h \ggg g \ggg f
読み方: $ (g \ggg f) を合成してから$ h を合成したものと、$ (h \ggg g) を合成してから$ f と合成したものは、$ h を合成して、$
単位律(unit law)
$ \mathrm{id}_a⋙f=f⋙\mathrm{id}_b=f
読み方: 恒等射$ \mathrm{id}_a と射$ f を合成したものと、射$ f と恒等射$ \mathrm{id}_b を合成したものは等しい
$ \mathrm{id}_a, \mathrm{id}_b は恒等射 恒等射は自分自身に返るような射
$ \mathrm{id}_a : 対象$ a から対象$ a に返る射
$ \mathrm{id}_b : 対象$ b から対象$ b に返る射
$ \ggg は合成の演算子
演算子は$ \circ とかでもよい
(別の書き方)
$ 1_a \ggg f = f \ggg 1_b = f
読み方: 読み方: 恒等射$ 1_a と射$ f を合成したものと、射$ f と恒等射$ 1_b を合成したものは等しい
圏の例
code:example1.mermaid
flowchart LR
subgraph C
direction LR
end
code:example2.mermaid
flowchart LR
subgraph C
direction LR
end
以上が普通の圏の定義
定義の仕方は他にもあって関係付き箙(えびら)による圏の定義の仕方がある プログラミング言語で使用できるうまく定義された圏がいろいろある
確認用
Q. 圏
Q. 圏になる条件は?
[]律
[]律
[]
Q. 圏の例
参考
もう諦めない圏論入門 - Qiita
圏と関手 【 圏論とモナド #1 / 数学 解説 】 - YouTube https://www.youtube.com/watch?v=I6HxnynPkSA
https://youtu.be/PGkzf24i3-Q?si=S2pT45Keno8cWAlS
関連