Category of algebras
自然数の集合Nに対して、関数f x = x * nを定義すれば、{N,f}は圏であることは明らかだろう:
objects: n
morphisms: f: n -> n'
id: f x = x * 1
そこで、fはもう一つの圏のmorphismsとして働くことができる、Haskellの例:
foo :: (Int -> Int) -> (Int -> Int -> Int) -> Int -> Int -> Int foo f g x y = g (f x) (f y) add = foo f (+) where f = (*2)
ここで、「f x = x * 2」がバイナリ演算子の「+」を同じくバイナリ演算子の「add」へマッピングした:
f: + -> add
勿論compositionとidのルールも成立する:
-- add2 == add3 add2 = foo ((h . g) . f) (+) where f = (*2) g = (*3) h = (*4) add3 = foo (h . (g . f)) (+) where f = (*2) g = (*3) h = (*4) id = (*1)
ということで、ひとつの圏が出来上がり:
objects: +
morphisms: f: + -> +'
id: f x = x * 1
このような圏をAlg(II)と呼ぶらしい。さらに特殊な情況、(上記の例のような)「+」はmonoidの場合、圏をMonと呼ぶ。MonはAlg(II)のsubcategory。