Harvestは小説の題名。圏と圏とをつなぐ射は関手という特別な名前がついているが射であることに変わりはない。従って、二つの関手を合成することもできるはずだ。E}\)を考えてみよう。\(Maybe\)を利用して関手を説明したが、その他にもいろいろな関手を考えることができる。それらは(\(Maybe\)で説明した)\(fmap\)の実装が異なるだけだ。Javaを知っている人であればインターフェースを用いて実装したらと考えるだろう。バークレイの大学院生だった頃に指導教授からプログラムの正当性を研究テーマにしてみないかと誘いを受けたことがある。関手は圏論の中で最も重要な概念である。transformation)が重要であるが、これの根幹をなすのが関手である。圏論は数学的な構造を対象としての点と対象を結ぶ射としての矢印で表している。Milewskiの動画を元に、話を進める。デカルト積の圏について、前々回の記事で説明したが、積と名前がついているので、四則演算での乗算とかかわりがありそうである。テニス界のレジェンドといわれるフェデラーとナダルが決勝で争うこととなり、これ以上、楽しませてくれる組合せはなかった。これは集合の集まりに対して、それぞれの集合からひとつずつ元を取り出して組にしたものである。property)は圏論の中では重要な概念である。前回は、始対象と終対象について論じた。対象という言葉は、何かの集まりを表したものであり、抽象的な概念である。一条天皇と后たちのものがたり』を借りた。数学の本を読んでいると、1ページを読むのに数時間もかかることが往々にして起きる。定理があってその証明が書かれているときがそうだ。(初級編:圏論とHaskell)『プログラマのための圏論』はこれまでの分をまとめてPDFファイルにしました。前回の記事で、曜日を進めるプログラムの開発状況を手順を追いながら、説明した。このプログラムは、曜日を進める関数\(increase\)と遅らせる関数\(decrease\)から出発した。いろいろな圏を見てきたので、ここでは、プログラマーにとっては大事なプログラムを圏として構成することを考えよう。(初級編:圏論とHaskell)前回の記事は、ホモトピー論まで含まれていたので、とても高度な数学的概念が含まれていた。それにもめげず、沢山の人が記事を読んでくださったようで、感謝している。今回は現実の世界に戻して、二項演算子の世界を圏にすることを考えよう。圏に馴染むためにいくつかの例を挙げることにしよう。圏の中でもっとも単純な圏は、対象も射も持たない。このため、恒等射も存在しないことになる。これは空圏(圏0)と呼ばれる。その構成を挙げておこう。集合の世界は要素を中心に考えるが、圏論の世界は射を中心に考える。そこで、集合を考えるとき、その要素を射に変えるものが必要となる。その役割を果たしてくれるのが、一つだけの要素からなる集合である。したミクロの世界をかなぐり捨てて雄大なマクロの世界(宇宙)へ旅立つことにしよう。数学でのミクロな世界は集合で、雄大な宇宙は圏論である。集合は、要素の集まりとして定義される。ここでは、これから説明する合成も含めて、圏を構成する要素についてまとめておこう。圏は次の構成要素から成り立つ。対象\(A,B,C,..\)を有する。射はドメインとコドメインを有する。恒等射は自らを自らに写す射だ。これだけのことなので、今回の記事は簡単に済ますつもりでいた。ある射の中で恒等射を特別に圏の定義の中に含める必要がなぜあったのだろうか。圏論の中で一番重要な役割を担うのは射(arrowあるいはmorphism)である。射は対象を対象へと移す(写像という用語を使ったときは「写す」といったほうがよさそうだが、射は矢を射るという意味で用いているので「移す」という漢字を使う)。圏論の核となる圏の定義はとても単純である。抽象化は、細かいことを切り捨て、本質となている部分を取り出していく作業である。別の言い方をすると、数学の様々な分野での固有な部分を切り捨て、それらに共通する部分を抜きだすことである。これまで、さまざまな言語でプログラミングしてきたが、一番満足しているのはHaskellである。いう問いに一言で答えるならば、バグが入りにくい、あるいは、プログラムが信用できるということだろう。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。