圏
圏(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
関連