2020-12-01から1ヶ月間の記事一覧

Javaプログラマーのための圏論(5.積と余積)

積と余積 $$ $$ 古代ギリシャの劇作家エウリピデスは言った。「人はその人が付き合っている人に似ている(類は友を呼ぶ)」我々は関係によって定義されている。そのことがどこよりも明らかなのは圏論である。ある圏からある特別な対象を選択したいなら、他の…

Javaプログラマーのための圏論(4.クライスリ圏)

クライスリ圏 これまで型と純粋関数を圏としてモデル化する方法を見てきた。圏論で副作用、また非純粋関数をモデル化する方法があることも触れた。次のような例:実行時のログまたはトレースをする関数を見てみよう。javaでは次のようにグローバルに状態を変…

Javaプログラマーのための圏論(3.大小様々な圏)

大小様々な圏 対象がない圏 最も自明な圏は一つの対象も持たない圏で、射も持たない圏である。状況によって重要になるかもしれない。例えば全ての圏の圏を考えるとき。空集合に意味がある状況であれば、空な圏も意味があるだろう。 単純グラフ 対象を矢印で…

Javaプログラマーのための圏論(2.型と関数)

型と関数 型の合成について 圏論の本質は矢印の合成である。必ずしも2つの矢印が合成できるとは限らない。ある矢印の終端の対象が次の矢印の始点の対象と一致していなければならない。プログラミングではある関数の結果が別の関数へ通過させることになる。…

Javaプログラマーのための圏論(1.圏)

圏 圏は対象(object)と対象から対象へ進む矢印(arrow)から構成される。対象は丸印または点で表し、矢印は矢印(有向辺)で表す。圏の本質は合成であり、合成の本質は合成と言える。対象Aから対象Bへの矢印と対象Bから対象Cへの矢印があれば、これらの合成であ…

Javaプログラマーのための圏論(はじめに)

Bartosz Milewskiによって書かれた「Category Theory for Programmers」と言う書籍の内容が以下で公開されている。 https://github.com/hmemcpy/milewski-ctfp-pdf この書籍では、多くの具体的な説明はHaskellであり、一部C++で説明されている。 今回はこの…