ログイン
編集不可のページディスカッション情報添付ファイル

2013-12-18 17:40:06時点のリビジョン2

メッセージを消す
alstamber/CategoryTheoryAndHaskell

MMA

圏の概略

圏のおおまかな定義

圏は本質的には次の3つのものを持つようなものをいう。

圏の例

Setはすべての集合をObjectとして持ち、射として関数、合成として関数合成を持つような圏である。

Grpはすべての群をObjectとして持ち、射として群演算を保存する関数(群準同型)を持つような圏である。
つまり、任意の2つの群G, Hについて、f(u*v) = f(u) . f(v)であることと、f : G -> H はGrpの射であることは同値である。

Category則

Category則を満たしていないと、いくらObjectや射を持っていても圏と呼ぶことはできない。
Category則は3つ存在する。

Hask圏

圏の考え方をHaskellに拡張するために、Hask圏というものを定義する。これは

Hask圏がCategory則を満たしているかどうかは容易に確認できる。ただ注意するべきなのは、恒等射である。
Haskellにおける恒等射はid関数だが、このid関数は多相的である。つまり、定義域や値域として異なる型を取ることができる。
一方で、圏論における恒等射はSource ObjectとTarget Objectを指定して定義する。もっとも、Haskellにおける多相関数は型を明示することで単相にできるので、この違いはそれほど大きな問題を産まない。

Haskellにおける射の合成

Functor

Functorは圏同士の対応を表すものである。圏CとDが与えられた時、Functor F : C -> D は次のような役割を果たす。

Functorにも従わなければならないルールであるFunctor則が存在する。

HaskellにおけるFunctor

Haskellの型クラスであるFunctorは、圏論のFunctorの概念を取り入れたものである。HaskellのFunctorはHask圏からfuncへのFunctorになっている。
funcとはFunctorの型の上でちょうど定義されるHask圏の部分圏である。例えばListのFunctorはHask圏からLst圏へのFunctorである。
Lst圏はリスト型のみを含むような圏である。Lst圏における射はリスト型の上で定義される関数のことであり、すなわち任意の型T, Uについて[T] -> [U]であるような関数である。

Monad