はじめての圏論 - しりとりの圏

お久しぶりデス。

わかりやすかったので、自分なりにまとめてみる。

はじめての圏論 その第1歩:しりとりの圏 - 檜山正幸のキマイラ飼育記

チュートリアルに従い、しりとりの圏について考える事にする。

とりあえずしりとりの圏の定義

集合関係

対象

ひらがな文字一文字「あ」を対象とする。

対象の集合

ひらがな文字全体の集合をH={あ,ぁ,い,ぃ,う,ぅ...ん,ー}とする。
要するにHは型?

ひらがな文字列"りんご"を射とする。(ダブルクオートで囲んだものを文字列とし、空文字列""は含まない)

射の集合

ひらがな文字列全体の集合をHStr={"あ","あいうえお","りんご","ばなな","みかん"...}とする。
いっぱいある。

演算子

演算に使うものの定義

域(dom)

文字列sの最初の文字を取り出す first(s) = x : HStr -> H

例 : first("りんご") = り (文字列 -> ひらがな文字)

余域(cod)

文字列の最後の文字を取り出す last(s) = x : HStr -> H

例 : last("りんご") = ご

恒等射(id)

1文字なら、文字列に変換できる。unit_x = "x" (H -> HStr)

例 : unit_あ = "あ"

逆もあるのかな。

結合(合成,comp)

;でしりとり結合する。s;t = u (HStr, HStr -> HStr)

例 : "ぶた" ; "たぬき" = "ぶたぬき"

しりとりの結合なので結合出来ないものもあるっぽいが気にしないでおこう。

結合演算

色々計算してみよう。

first,last

first(unit_x) = last(unit_x) = x
例 : first(unit_あ) = last(unit_あ) = あ


first(s;t) = first(s), last(s;t) = last(t)
例1 : first("りんご";"ごりら") = first("りんご")
例2 : last("りんご";"ごりら") = first("ごりら")

結合法則

(s;t);u = s;(t;u)
例 : ("りんご";"ごりら");"らっぱ" = "りんご";("ごりら";"らっぱ")


x = first(s), y = last(s)ならば、unit_x;s = s, s;unit_y = s
例 : unit_り;"りんご" = "りんご"

対象の集合,射の集合,dom,cod,id,compからなる系を圏という。らしい。

まとめ

難しい言葉が色々並んでるけど、具体例で説明されるとなんとなくわかった気分になれる。
色々よくわかんないけど、圏論の最初の一歩は踏み出すことができた。