狠狠撸

狠狠撸Share a Scribd company logo
圏論とHaskellは
仲良し
法政大学
大森健児
自己紹介
1969年5月卒業
1972年9月卒業
1969-85 企業の研究所で
マルチプロセッサシステム
2016.2.29最終講義
1985-2016大学で教育と研究
圏論
数学は、元来、抽象的だが、
その中で最も抽象的なのが圏論
それぞれの分野を圏とし、
それらに共通するものを扱う
カテゴリーには、
?集合の圏
?モノイドの圏
?群の圏
?ベクトル空間の圏
?グラフの圏
?実数の集合と
連続関数の圏
?位相空間の圏
?デカルト閉圏
圏とは
1.対象(集合:要素の集まり)
2.射(関数)
3.ソース、ターゲット
4.恒等射
5.合成(結合律)
例:自然数の加算
(モノイド)
?
恒等射:0
合成: +
0
1
?
例:自然数の加算
+?
恒等射:0
合成:
+? ° +? = +(? + ?)
+0
+1
?
?
カリー化
?
?
?
?
?
?
例:集合と写像の圏
? ? ?
?
? ?
? ? ?
?
? ? ? ?? ? ?
? ?? ? ?
?
?
? ?
例:グラフの圏
ノードとエッジを対象に
圏論
?
例:自然数とその列
[?]
? = [ ]
米田の補題 Nat(Hom ????(?, _), ?) ? ?(?)
X
Hom ????(?, _)
圏?
?(?)
圏????
?
随伴関手Hom ?(?(?), ?) ? Hom ?(?, ?(?))
圏? 圏?
?
?
赤ん坊
の世界
雑音
中学生
の世界
会話中学生:職場体験
?
?
? ° ?
= ? + ?
(+?)
(+?)
+? ° +?
= + ? + ?
?
?1 ?2
?
?
?
例:カリー化からモ
ノイドへの写像
関手:
圏?から圏?への関手?: ? → ?とは、圏?の対象?を圏?の対象?(?)に対応付け、圏?の 射
?: ? → ?を圏?の対象?(?)に対応付ける関数の組で、次の二つの条件を満たすものである。
1) ?の任意の二つの射?: ? → ?, ?: ? → ?に対して、?(? ? ?) = ?(?) ° ?(?)である。
2) ?の任意の対象?に対して、?(1 ?) = 1 ?( ?)
である。
?
?
?
?
?(?)
?(?)
?(?)
?
?
新しい圏に
Universal Properties
積の定義:
対象?1, ?2の積とは、対象?、射?1: ? → ?1, ?2: ? → ?2から
なり、次の条件を満足するものである。
任意の対象?と任意の射?1: ? → ?1, ?2: ? → ?2が与えられ
た時、以下の図式が可換となるような?: ? → ?が唯一つ
存在する。
このとき、?は ?1 × ?2と表す。
最大公約数 積集合
Universal Properties
和の定義:
対象?1, ?2の和とは、対象?、射?1: ? → ?1, ?2: ? → ?2か
らなり、次の条件を満足するものである。
任意の対象?と任意の射?1: ?1 → ?, ?2: ?2 → ?が与えられ
た時、以下の図式が可換となるような?′: ? → ?が唯一つ
存在する。
このとき、?は ?1 + ?2と表す。
最小公倍数 和集合
Haskell プログラミング言語で、カテゴリー(圏論)を
ベースにしているのは、Haskell
関数型言語の歴史
素数
primes = filterPrime [2..]
where filterPrime (p:xs) =
p : filterPrime [x | x <- xs, x `mod` p /= 0]
クイックソート
quicksort [] = []
quicksort (x:xs) = quicksort smaller ++ [x] ++ quicksort larger
where smaller = [a | a <- xs, a < x]
larger = [a | a <- xs, a >= x]
関数とは
? = ?0 ? ???(速度)
? = ?0 + ???(位置)
言語 年 発明者
ラムダ計算 1930 チャーチ
圏論 1945 マックレーン
LISP 1958 マッカーシー
Scheme 1975 サスマン
Smalltalk-80 1980 ゼロックス社
Haskell 1.0 1990 ハスケル?カリーに因
んで
Haskell 2010 2010
Haskellと圏論
圏
1.対象
2.射
3.ソース、ターゲット
4.恒等射
5.合成(結合律)
Haskell
1.データ型(集合:要素の集まり)
2.関数(クラス?インスタンス)
3.シグニチャ
データ型?
?
?
?°?
データ型?
?′
= ???? ?
?′
= ???? ?
?′
°?′
= ? ??? ?°?
= ???? ? °(???? ?)
Haskellでの関手
随伴関手
モナド ?°?
モナドの例
入出力
ファイル
Maybe (例外事象)
モナドの利点
ドメイン固有言語
→簡単に作成
圏? 圏?
?
?
忘却関手
赤ん坊
の世界
雑音
中学生
の世界
会話
実世界 純粋な
世界
関数型リアクティブ
プログラミング
関数型言語を実世界へ
?ロボット
?ゲーム
?シミュレーション
動画
ビリヤード台で衝突
しあう二つのボール
ビリヤード座標系 重心座標系
simulation :: HasTime t s => Wire s () IO a (Ball, Ball)
simulation = proc _ -> do
rec b1 <- ball "ball1" mass1 radius1 vInit1 pInit1 -< ("ball1", c)
b2 <- ball "ball2" mass2 radius2 vInit2 pInit2 -< ("ball2", c)
c <- collision -< (b1, b2)
returnA -< (b1, b2)
振舞い:時間を変数とする関数
イベント:ある時間での事象
例 :音楽
振舞い :曲
イベント:打鍵
デモ
Time
Int x
Time
Int
2
stepper 2 x
詳細は
http://bitterharvest.hatenablog.com/entry
/2015/09/24/164937
さらに勉强する人のために
ご清聴ありがとうございました。
http://bitterharvest.hatenablog.com
でお会いしましょう。

More Related Content

圏论と贬补蝉办别濒濒は仲良し