Haskell勉強会

関数型プログラミングの学習日記

圏論の教材

Haskellの本を読みつつ、興味が湧いたのでLispの本も読んでいました。

 

型の話抜きで、関数型プログラミングの基礎を学ぶ場合、Lispもあり?

Lisp関数型言語の先祖であり、マクロという便利な道具もあるので、今でも学ぶ価値はあると思います。

 

haskell.hatenablog.com

 

haskell.hatenablog.com

 

さて、Lispの本を読み終えて、またHaskellの本に戻るのですが、知識習得の方向性について、少し吟味。

 

Haskellの本を読んでいると、圏論の話がチラつきます。

Haskell本の読書と同時並行で圏論もかじってみたいです。(時間的余力があれば)

まあ、いずれは避けて通れない道ですね?

 

圏論の資料

圏論」について検索したら、いろいろ資料が見つかったのでメモ。

 

b.hatena.ne.jp

 

圏論の入門書

圏論の道案内 ~矢印でえがく数学の世界~ (数学への招待シリーズ)

圏論の道案内 ~矢印でえがく数学の世界~ (数学への招待シリーズ)

 

 

gihyo.jp

 

gihyo.jp

 

圏論の教材まとめ

qiita.com

 

ここで紹介されていた圏論の教材を読んでみたら良いかも。

日本語、英語の資料あり。

 

プログラマ圏論で学んでおいたほうがよい概念

とりあえず「Category Theory for Programmers Scala Edition」に出てきた概念の中で、プログラマが学んでおいた方が良いと思うものを以下に分類してみました。これはあくまで数学が苦手な圏論入門者である自分の私見です。

 

  • 必ず学んでおきたい
  • 圏、関手、自然変換
  • 集合の圏(Set)、圏の圏(Cat)、関手圏
  • 半群、モノイド
  • モナド、クライスリ圏
  • 普遍的構成(普遍性)

 

  • できれば学んでおきたい
  • 積、余積
  • 同型
  • 双対
  • 冪、デカルト閉圏
  • モノイダル圏
  • 自由モノイド、自由モナド
  • F代数、T代数

 

  • 余力があれば学んでおきたい
  • ホム関手、表現可能関手
  • 米田の補題、米田埋め込み
  • 極限と余極限
  • 随伴
  • カリー=ハワード同型

 

  • 興味があれば学んだ方が良い
  • エンド
  • カン拡張 ← 全ての概念
  • 豊穣圏
  • トポス
  • ローヴェア理論

 

圏論の話題はたくさんあるんですね。

とりあえず基本だけでいいや。

 

もっと圏論を学びたい人向けのオンラインで読めるオススメ資料

残念ながら本記事の趣旨には合いませんでしたが、プログラマ圏論を学ぶ上でぜひオススメしたい資料です。

 

プログラマーのための圏論

  • 説明がHaskellベースですが非常に丁寧で分かりやすいです
  • 上、中、下

 

物理学者のための圏論入門

  • 物理学者ではなくても圏論の基本的な概念を理解できる非常にオススメの資料です
  • 特に普遍射の説明が秀逸で、会社組織に擬えての説明がツボりました

 

圏論によるプログラミングと論理

  • 灘校パソコン研究部の部誌(2013年)に掲載されていたものです
  • 普通に書店に並んでいてもおかしくないボリュームとクオリティです
  • 圏論だけでなく数学やコンピュータサイエンスの基礎も補完しています

 

圏論 | 壱大整域

  • 圏論の概念を本気で理解したくなったらここに駆け込んでください
  • ただしストイックな数学スタイルで書かれているのでプログラマには少し辛いかもしれません

 

灘高の資料がスゴイと思いました。

高校生でも理解できるなら、自分にも理解できるはずだと思いたいですw

 

とりあえず、灘高の資料を足掛かりとして、他の資料も当たってみればいいかな?

 

bitterharvest.hatenablog.com

 

bitterharvest.hatenablog.com

 

bitterharvest.hatenablog.com

 

名古屋大学 大学院情報学研究科 谷村省吾教授の資料 

www.phys.cs.is.nagoya-u.ac.jp

 

「物理学者のための圏論入門」 研究会「量子と古典の物理と幾何」にて講演(2017年2月)

http://www.phys.cs.is.nagoya-u.ac.jp/~tanimura/lectures/tanimura-category.pdf

 

www.npca.jp

 

灘校パソコン研究部 2013年部誌 圏論によるプログラミングと論理(PDF)

https://www.npca.jp/works/magazine/2013_10/

 

alg-d.com

 

alg-d.com

 

その他

ja.wikipedia.org

 

f:id:hamamuratakuo:20190907093500p:plain

 

qiita.com

 

f:id:hamamuratakuo:20190907093832p:plain

 

kentutorialbook.github.io

 

f:id:hamamuratakuo:20190907094355p:plain

4.6. モナド(Monad)

なんのことはない、Array で言えば、普通の Array.map に Array.flat を付け加えたものがモナドになります。 unit というのは、[] なので最初からあるといえばありました。

 

bitterharvest.hatenablog.com

↑こちらのブログには、圏論Haskellに関する記事がたくさんありました。

参考のために一読してみたいです。

 

www.youtube.com

 

英語の動画ですが、日本語の字幕がつけられていました!

(字幕を付けてくれた方、どうもありがとうございます。)

 

まとめ

Haskellや型の話ってのは、その背景に圏論があるってことですよね?

数学を専攻しなかったので、圏論の厳密な理解はさておき、Haskellの理解を助ける程度の基礎知識を得ることを目標にしてみたいです。