Hatena::ブログ(Diary)

すにぺっと

2013-04-26

Scalaで圏論入門を見ながら圏論を勉強(中編)

14:33 | Scalaで圏論入門を見ながら圏論を勉強(中編)を含むブックマーク

前回のつづき。


□射についてもう少し理解する

この文の最初のほうに、圏についての説明を引用したけど、

射については、次のように言っている。

マップは、結合則(associativity)にしたがって合成する(compose)ことができる。
また、それぞれの対象に対して、合成に関して中立な恒等射(identity map)が存在する。

これはつまり、射について以下2つの条件をいっているわけですね。

1.射は「結合則」にしたがって「合成」可能

2.射は、対象に対して「恒等射」が存在する

まずは1の、「結合則」と「合成」という

2つのキーワードについて確認。


・「合成」とは

Scala圏論入門」では、合成を説明するため、

さきほどから使用していた「2つの有限集合の圏」に、

もう1つ対象と射を追加して説明している。

「肉/草/石」の囲い部分が対象、

「肉食から肉」、「草食から草」への矢印2つをまとめて射。

この新しい囲い部分を新しい対象「FoodType」とすると、新しい射は

g:MealType -> FoodType

となる。

最初の対象Animalからいま追加したFoodTypeへの射を得るには、

最初に関数fを適用して、その後関数gを適用すれば得ることが可能。

つまり、関数fとgの合成によって新しい射を得られる。

これを「Scala圏論入門」では、

g ○ f:A -> C

と記述している。

ここの説明でいうと、

g ○ f:Animal -> FoodType

としている、これが合成。


結合則(結合法則)とは

はてなキーワード-結合法則

http://d.hatena.ne.jp/keyword/%B7%EB%B9%E7%CB%A1%C2%A7


はてなキーワードを見ると、

結合則は二項演算に対して考えられる性質の一つで、

「計算の順序を変えても同じ結果がでる場合」に、

その計算は結合法則を満たすことになるとのこと。


結合法則は、

自然数の加算や乗算

・行列の和と積

では満たす法則。

結合法則が成り立てば何重の演算に対しても演算の順番が結果に反映しない」

という部分が重要だと思われる。


なお、「Scala圏論入門」では、またもや新しい射(h)を追加して結合則を説明している。

h: C -> D

このとき、結合則を満たしていれば、以下の式が等しくなると。

(h ○ g) ○ f = h ○ (g ○ f)

どんな順番で関数適用しても、得られる結果は同じになる。


・1のルールまとめ

1のルールでいっている、「射は「結合則」にしたがって「合成」可能」とは、

「射は、関数をどんな順序で適用しても、結果は変わらないということを満たす必要がある」

ということだ(たぶん)。


次は、2のルールででてきた、「恒等射」について確認。

恒等射 = 恒等写像ってこと?

http://ja.wikipedia.org/wiki/%E6%81%92%E7%AD%89%E5%86%99%E5%83%8F

ここによると、「その引数として用いたのと同じ値を常にそのまま返すような写像」とある。

wikipediaにある恒等写像の定義。

厳密に述べれば、Mを集合として、M上の恒等写像fとは、
始域および終域がともにM であるような写像であって、
Mの任意の元xに対して
f(x) = x
を満たすものを言う。

また、性質は下記。

f:M->Hを任意の写像とすると、
f ○ idм = f = idн ○ f
が成り立つ。

恒等射=自分への射(というか、始域と終域が同じ対象)ってこと?

恒等射がどういう理屈でそうなっているのかは、ここ

で確認しましょう。そのサイトで出している結論は下記。

射の中には「他の射と合成しても影響を与えない射」というものが存在していて、
結果的にその射の始域と終域は一致するので、その一致する対象に付随するものとしてみなす

いまのところ、恒等射とは、

・始域と終域が同じ対象となる射である

・他の射と合成しても影響がない

という理解にしておくっ!


Scala圏論入門」でも、

有限集合の圏の例における恒等射は、ドメインとコドメインで同じ対象になってるな。


・ここまでのまとめ

圏とは、

・対象と射で構成される

・対象同士が射で接続されているものが集まったグループ

 →圏は恒等射の存在しか要求してないので、

  異なる対象間に全く射の無い圏(離散圏)もありえる。

  Scalaの型と関数を圏と見なした場合、

  ユーザが定義可能な関数(実際に定義されてないものも含む)は

  全て射なので、各対象の間にはものすごい数の射がぎっしり。

  (@hiratara氏。感謝!)

・射は「結合則」にしたがって「合成」可能」

 →つまり、射は関数をどんな順序で適用しても、結果は変わらないということを満たす必要がある

・射は、対象に対して「恒等射」が存在する

 →恒等射とは、始域と終域が同じ対象となる射である

 →恒等射は、他の射と合成しても影響がない


1つ調べるとそのれに付随する謎が3個くらいでてきて、その1つを調べると

また3個くらいの謎がでてくる・・・


参考サイト:

恒等射(同一矢)とはなんであるかをもう一度考える

http://math.artet.net/?eid=1305876

wikipedia 恒等写像

http://ja.wikipedia.org/wiki/%E6%81%92%E7%AD%89%E5%86%99%E5%83%8F

hiratarahiratara 2013/05/01 00:28 拝見しましたが、正しく理解されてると思います!
一点だけ大丈夫かとは思いますが、「> 対象同士が射で接続されているものが集まったグループ」とありますが、圏は恒等射の存在しか要求してないので、異なる対象間に全く射の無い圏(離散圏)も考えることができます。集合の要素を対象と見なした場合がそういう圏になります。
逆にScalaの型と関数を圏と見なした場合、ユーザが定義可能な関数(実際に定義されてないものも含む)は全て射なので、各対象の間にはものすごい数の射がぎっしりと詰まってる感じになります(コドメインがUnitの場合は1本ですけど)。

sy-2010sy-2010 2013/05/01 10:10 わざわざ確認していただいて、ありがとうございます!
射のない圏もあるんですね。圏論に関する書籍でも買って、基礎の基礎からしっかり学びたいところです。

トラックバック - http://d.hatena.ne.jp/sy-2010/20130426/1366954415
リンク元