SlideShare a Scribd company logo
KSB:河原研究室発表会
              (河原康雄先生還暦記念)
                   2005年7月29日	




圏論のモナドとHaskellのモナド	

  九州大学 大学院数理学研究院
       溝 口 佳 寛
河原先生との出会い	
                      昭和54年(1979年)4月 溝口(大学1年生)
                      教養部での数学科専門科目
                      「情報数学序論」を担当されていた!
                             (受講せず!!)




昭和57年4月 数学講究(大学4年生)
圏論の情報科学への応用に惹かれる!
  (ゼミ生は1名だった!!)
LAシンポジウム会報No.7 (1986年7月)

(講座紹介)
九州大学理学部数学教室 数理解析学講座
                  河 原 康 雄

(一部略)

 私が所属するのは, 九州大学・理学部・数学教室・数理解析学講座で, 初代講座
担当教授は工藤達二先生(昭和56年2月~昭和58年3月, 現在久留米工業大学
教授)でしたが, 昨年4月からは大阪大学より赴任された田中俊一教授が講座を担
当されています. 私はここの助教授で, 助手として藤井一幸氏および現在西ドイツ
のPaderbornに遊学中の宮野悟氏の二人が所属しています. 大学院生としては,
溝口佳寛君(DC.2), 伊達博君, 大塚寛君(MC.2), 正代隆義君, 藤田義史君(MC.
1)が在籍し, また4年生セミナーには今年度14名(内女子学生4名)の受講者がいま
す.
そのころの写真がありました。	
            この冷蔵庫が, 現在の溝口教
            官室(3208室)に残っている!
                 (今は故障してます!!) →




LAシンポジウム(犬山!?)              14名(!?)の4年生たち.
LAシンポジウム会報No.7 (1986年7月) [続き]

 さて, この我国では聞きなれない数理解析学講座でどのような研究が行われているかをご
紹介しましょう. 田中先生は主に, グラフアルゴリズム, 組合せ最適化, ロボットの数理を研究
されており, 私はカテゴリー論そのものからカテゴリー論の情報数学(例えば, オートマトン,
Gouen-Burstallのinstitution, プログラムの代数的意味論など)への応用に興味を持ってい
ます. 助手の藤井氏は, トポロジーの知識に基づく場の量子論の数学的構成の研究, 宮野
氏は, オートマトン理論における階層定理, 計算量理論, 並列処理の理論の研究分野にお
いてそれぞれ活躍中です.
 また, 理学部には基礎情報学研究施設が付設されており, LAの会員として, 有川節夫教
授, 武谷俊一助教授, 原口誠助手がおられ, 研究・教育など色々の面で協力を頂いておりま
す. 例えば, 定期的なものとしては田中先生と有川先生が感じとして毎月1回情報数学談話
会が共済されており, その他では現在, 原口氏, 山本章博君(有川研のMC.2)達とrewriting
system, Goguen-Burstallのinstitutionについて合同セミナーを開催しています.
 更に, 九大・数学教室で情報数学に関して計算数学講座担当の藤野精一先生を忘れるこ
とはできないでしょう. ご承知のように先生は早くよりオートマトン理論, リスト処理等の研究
および紹介に貢献され, 現在はTraubなどの計算量理論, 数値解析を研究されています. ま
た, 数学基礎論の上江洲忠弘先生もおられ, 基礎論の観点から情報数学へ助言・提言を頂
いています.
LAシンポジウム会報No.7 (1986年7月) [続き2]

最後に, 最近の数理解析学講座の修士論文・学位論文の題目をお知らせします.

[修士論文]
溝口佳寛: 圏M-Set上のパワーセットモナド, フィルターモナドおよびプライムフィル
ターモナドについて (昭和60年2月)

[博士論文]
宮野悟: Hierarchy Theorems in Automata Theory (昭和59年3月)
藤井一幸: Study of Dynamics of Non-Linear Grassmann Sigma Models (昭和60
年12月)
圏論のモナド(1)
•  圏(category)とは?
  集合の圏, 群の圏, 連続束の圏, 位相空間の
   圏, 関係の圏など
•  関手(functor)とは?
   構造を忘れる関手, 代数構造を自由生成する
   関手など
•  自然変換(natural transformation)とは?
   関手で移された構造物間の射を一斉に与え
   る
例 (HaskellのListとconcat)
•  圏
集合の圏(Set) (集合と写像の圏),
リストの圏(List) (文字列と半群準同型の圏)
A=Integer (整数全体の集合)
•  L: Set → List は関手 LA=[A]
1,2,3 ∈A, [1,2,3] ∈LA
f: A→Bに対して, Lf = (map f)
Lf [1,2,3] = (map f [1,2,3]) = [f(1),f(2),f(3)]
•  concat: [[A]]→[A]: LLA→LA は自然変換
concat [[1,2],[3],[4,5,6]] = [1,2,3,4,5,6]
•  return: A→[A]: Id A→ LA も自然変換
return x = [x]
圏論のモナド(2)
•  随伴関手(adjoint functor)とは?
   関手 F:C→D, G:D→C に対して,
   射A→GB と FA→B とが自然に 1対1対応す
   るとき, FとGを随伴関手(adjoint)と言う.
•  例
 G:List→Set を構造を忘れる関手,
   F=T:Set→List を自由半群を生成する関手と
   すると, FとGはadjointになる.
圏論のモナド(3)
•  モナドとは?
 Eilenberg&Moore’s Triples (T,η,µ)
T: C→C (functor)
η: id→T , µ:TT→T (natural transformation)
(T,η,µがある関係式らを満たすときモナドと言う)
•  例
随伴関手 F:C→D, G:D→C に対して,
T=GF:C→Cとして, 自然にモナドを構成出来る.
圏論のモナド(4)
•  モナドとは? (再)
   Kleisli triples (M, return, >>=)
M:Obj(C)→Obj(C) (写像)
return: A→MA (写像, A∈Obj(C))
>>=:C(A,MB)→C(MA,MB) (写像, A,B∈Obj(C))
M,return,>>=がある関係式らを満たすとき, Kleisliの
   tripleと言う.
•  例
随伴関手 F:C→D, G:D→C に対して,
M=GF:C→Cとして, 自然にKleisli tripleを構成できる.
例 (HaskellのList monad)
•  F:Set→List, G:List→Set, に対して, M=GF:Set→Set
   とする. (注: FA=[A])
•  return: A → [A] を return x = [x]
•  >>=:(A→MB)→(MA→MB) を
  >>=(f)(a) を a>>=f と書くことにして,
    a>>=f = concat (map f a) とすると,
   (M,return,>>=)は, Kleisli’s tripleとなる.
•  例 [1,2,3]>>=(λx.[x,2*x])
    = concat (map (λx.[x,2*x]) [1,2,3])
    = concat [[1,2],[2,4],[3,6]]
    = [1,2,2,4,3,6]
圏論のモナド(5)
•  adjoint functors F:C→D, G:D→Cから, tripleが作れ
   るが, 逆にtripleから, それを導くadjoint functors F,G
   を作ることは出来ないのだろうか?
•  Eilenberg and Moore’s solution
   T代数(T-algebra)の圏(CT)
   対象(A,ξ)を(A∈Obj(C),ξ:TA→A) とし,
   射f:(A,ξ)→(B,ζ)を, f ξ = ζ Tf を満たすCの射とする
   FT:C→ CT をFTA=(TA,µA )(µA:TTA→TA)で定める
   と, adjoint functorを構成出来る.
圏論のモナド(6)
•  Kleisli’s solution
   Kleisli圏(CT)
   対象はCと同じ, 射f:A→BをA→TBとする.
   射の結合をg:B→Cとするとき, h=gf を
   h a = (f a) >>= g で定義する.
   このとき, CTは圏となる.
   関手GT : CT →CをGT A=TA, GT f=(>>=f) と
   すると, adjoint functorを構成出来る.
圏論のモナド(7)
•  Eilenberg&MoorとKelisliのtripleの概念は同等.
   f:A→B, Tf:TA→TB, Tf := >>= (returnB. f)
   µA:= >>= idA :TTA→TA
    逆は, f:A→TB, >>= f := µA Tf
•  Kleisli圏CTは, T代数の圏CTに自然に埋め込まれ,
   自由T代数の圏と同等になる.
•  モナドTを構成するadjunctionたちについて, Kleisli
   圏はinitial objectになり, T代数圏はfinal objectにな
   る.
•  先に与えられたadjunction F:C→D, G:D→Cに対し
   ては, DとCTが同等になるための条件を与えたBeck
   の定理が有名.
講義ノート(1)
講義ノート (2)
講義ノート (3)
Haskellのモナド(1)
•  例
Instance Monad [ ] where
   xs >>= f = concat (map f xs)
   return x = [x]
•  do文は, monad関数のsyntax sugar!
  do a←[1,2,3]; b←[3,4,5]; return (a+b)
は,
   [1,2,3] >>= (λa. ([3,4,5]>>=λb.return(a+b))
= concat (map (λa.concat (map (λb.[a+b]) [3,4,5]))[1,2,3])
= concat [concat (map (λb.[1+b]) [3,4,5]),
            concat (map (λb.[2+b]) [3,4,5]),
            concat (map (λb.[3+b]) [3,4,5])]
= concat [[4,5,6],[5,6,7],[6,7,8]]=[4,5,6,5,6,7,6,7,8]
•  先のdo文を[a+b | a←[1,2,3],b←[3,4,5]]と書くのもsyntax sugar!!
Haskellのモナド(2)
•  なぜモナドを使うのか?
 –  Kleisli圏の対象と考えられるデータ構造は, 必要な関
    数(return,>>=)を定義して, モナドにしておくと良い.
    なぜ良いのか?
 –  プログラムが見やすくなる.
 –  構造に付随する部分と問題依存の部分とのプログラ
    ムを分割出来る.
 –  do文のsemanticsを関数型プログラミングの範疇で
    与えることが出来る.
 –  圏論は数学のデザインパターン, デザインパターンを
    使って、お行儀の良いプログラムを書きましょう.
Haskellのモナド(3)
State Transformation
f1 w a = let (b,x) = g1 w a
              (c,y) = h1 w x b
              (d,z) = i1 w x y c
          in (d,z)

C言語の大域変数に相当する状態を全ての計算で保
 持しようとすると, 上記のa,b,c,dのような関数の計算
 結果とは別に常に状態変数を引数と結果に持つよう
 なプログラミングが必要になる.
Haskellのモナド(4)
Type S s a = s → (s, a)
>>=::S s a →(a→S s b)→S s b
p >>= k = λs0 . let (s1,a)= p s0         % p: s→(s, a)
                       q=ka                % q: s→(s, b)
                  in q s1
return::a → S s a
return a = λs. (s,a)
このようにモナドSを定義すると, 先のプログラムは,
f w = g w >>= (λx.(h w x >>= (λy.(i w x y)>>=λz.return z)))
と書くことが出来る.
さらに, do文のsyntax sugar を使うと,
f w = do x←g w; y←h w x; z←I w x y; return z
と書くことが出来る.
Haskellのモナド(5)
•   リストを集合と考えると, リストモナドは, powerset funcorのKleisli圏, すなわち, 関係の圏となる.
    (関係の結合が, Kleisli圏の>>=に対応する.)
•  例
aa = [1,2,3]
alpha = [(1,4),(1,5),(2,6)]
bb = [4,5,6]
beta = [(4,7),(5,8),(6,8)]
cc = [7,8,9]

return::Integer→[Integer]
>>=::[Integer]→(Integer→[Integer])→[Integer]

pf::[(Integer,Integer)]→Integer→[Integer]                         % P(A x A) ~ (A→PA)
pf r a = nub [y | (x,y)←r, x==a]

●::[(Integer,Integer)]→[(Integer,Integer)]→Integery→[Integer]
(a ● b) x = (return x) >>= (pf a) >>= (pf b)

fp::[Integer]→[Integer]→(Integer→[Integer])→[(Integer,Integer)]
fp dom cod f = [(x,y) | x←dom, y←cod, y ∈ (f x)]

alpha_beta = fp aa cc (alpha ● beta)
alpha_beta = [(1,7),(1,8),(2,8)] となる.
もちろん, 直接計算も可! alpha_beta_direct = [(x,z) | (x,y0)←alpha, (y1,z)←beta, y0==y1]
参考文献	
•  A.Schalk, Some notes on monads, 16pages, 2002.
       http://www.cs.man.ac.uk/~schalk/notes/
       (Kleisli圏とT代数圏の比較について書いてある.)
•  T.Norvell, Monads for the Working Haskell Programmer, 15pages(html),
       http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm
       (Haskellのmonadについての短いチュートリアル)
•  P.Hundak, J.Peterson, J.H.Fasel, A Gentle Introduction to Haskell 98,
       64pages, 1999. http://www.haskell.org/tutorial/
       (Haskell 98言語の紹介, monadについても10pagesほど記述がある.)
•  P.Wadler, (モナドに関する論文を多数書いている.)
      http://homepages.inf.ed.ac.uk/wadler/topics/monads.html
	
 	
 The	
 marriage	
 of	
 effects	
 and	
 monads,	
 The	
 marriage	
 of	
 effects	
 and	
 
       monads	
 , How	
 to	
 declare	
 an	
 imperative	
 ,	
 Monads	
 and	
 composable	
 
       continuations,	
 Imperative	
 functional	
 programming	
 ,	
 Monads	
 for	
 
       functional	
 programming,	
 Comprehending	
 monads	
 (モナドの具体例がた
       くさんある),	
 Combining	
 monads,	
 The	
 essence	
 of	
 functional	
 
       programming	
 	
 
•  H.Daume, Yet Another Haskell Tutorial, 198pages, 2002.
       http://www.isi.edu/~hdaume/htut/ (monadについては, p.119-155)

More Related Content

What's hot

競プロでGo!
競プロでGo!競プロでGo!
競プロでGo!
鈴木 セシル
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
ryosuke-kojima
 
自動定理証明の紹介
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介
Masahiro Sakai
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
Eita Sugimoto
 
Variational AutoEncoder
Variational AutoEncoderVariational AutoEncoder
Variational AutoEncoder
Kazuki Nitta
 
Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)
Shohei Taniguchi
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門Kawamoto_Kazuhiko
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
Takami Sato
 
グラフデータの機械学習における特徴表現の設計と学習
グラフデータの機械学習における特徴表現の設計と学習グラフデータの機械学習における特徴表現の設計と学習
グラフデータの機械学習における特徴表現の設計と学習
Ichigaku Takigawa
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
Yuta Kikuchi
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
探索と活用の戦略 ベイズ最適化と多腕バンディット
探索と活用の戦略 ベイズ最適化と多腕バンディット探索と活用の戦略 ベイズ最適化と多腕バンディット
探索と活用の戦略 ベイズ最適化と多腕バンディット
H Okazaki
 
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)
Kota Matsui
 
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
Ken'ichi Matsui
 
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learningゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
Preferred Networks
 
SATySFi 最近の発展と目下実装中の変更
SATySFi 最近の発展と目下実装中の変更SATySFi 最近の発展と目下実装中の変更
SATySFi 最近の発展と目下実装中の変更
T. Suwa
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)Takao Yamanaka
 

What's hot (20)

競プロでGo!
競プロでGo!競プロでGo!
競プロでGo!
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
 
自動定理証明の紹介
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
 
Variational AutoEncoder
Variational AutoEncoderVariational AutoEncoder
Variational AutoEncoder
 
Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
グラフデータの機械学習における特徴表現の設計と学習
グラフデータの機械学習における特徴表現の設計と学習グラフデータの機械学習における特徴表現の設計と学習
グラフデータの機械学習における特徴表現の設計と学習
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
探索と活用の戦略 ベイズ最適化と多腕バンディット
探索と活用の戦略 ベイズ最適化と多腕バンディット探索と活用の戦略 ベイズ最適化と多腕バンディット
探索と活用の戦略 ベイズ最適化と多腕バンディット
 
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)
 
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
 
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learningゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
 
SATySFi 最近の発展と目下実装中の変更
SATySFi 最近の発展と目下実装中の変更SATySFi 最近の発展と目下実装中の変更
SATySFi 最近の発展と目下実装中の変更
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
 

Viewers also liked

TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
T. Suwa
 
Macrodown -MLが使えるML-
Macrodown -MLが使えるML-Macrodown -MLが使えるML-
Macrodown -MLが使えるML-
T. Suwa
 
圏論 3分(?) クッキング
圏論 3分(?) クッキング圏論 3分(?) クッキング
圏論 3分(?) クッキング
aiya000
 
圏論とHaskellは仲良し
圏論とHaskellは仲良し圏論とHaskellは仲良し
圏論とHaskellは仲良し
ohmori
 
数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由
Hiromi Ishii
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
MITSUNARI Shigeo
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 

Viewers also liked (10)

TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
 
Macrodown -MLが使えるML-
Macrodown -MLが使えるML-Macrodown -MLが使えるML-
Macrodown -MLが使えるML-
 
プログラミングTeX
プログラミングTeXプログラミングTeX
プログラミングTeX
 
圏論 3分(?) クッキング
圏論 3分(?) クッキング圏論 3分(?) クッキング
圏論 3分(?) クッキング
 
圏論とHaskellは仲良し
圏論とHaskellは仲良し圏論とHaskellは仲良し
圏論とHaskellは仲良し
 
Haskell超入門 Part.1
Haskell超入門 Part.1Haskell超入門 Part.1
Haskell超入門 Part.1
 
Monad tutorial
Monad tutorialMonad tutorial
Monad tutorial
 
数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 

Similar to 圏論のモナドとHaskellのモナド

Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
Masahiro Sakai
 
Introduction to Categorical Programming
Introduction to Categorical ProgrammingIntroduction to Categorical Programming
Introduction to Categorical Programming
Masahiro Sakai
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
Kazuyuki TAKASE
 
圏とHaskellの型
圏とHaskellの型圏とHaskellの型
圏とHaskellの型
KinebuchiTomo
 
代数的実数とCADの実装紹介
代数的実数とCADの実装紹介代数的実数とCADの実装紹介
代数的実数とCADの実装紹介
Masahiro Sakai
 
Coq関係計算ライブラリの開発と写像の性質の証明
Coq関係計算ライブラリの開発と写像の性質の証明Coq関係計算ライブラリの開発と写像の性質の証明
Coq関係計算ライブラリの開発と写像の性質の証明
Yoshihiro Mizoguchi
 
行列計算を利用したデータ解析技術
行列計算を利用したデータ解析技術行列計算を利用したデータ解析技術
行列計算を利用したデータ解析技術
Yoshihiro Mizoguchi
 
複素数・四元数と図形の回転
複素数・四元数と図形の回転複素数・四元数と図形の回転
複素数・四元数と図形の回転
Yoshihiro Mizoguchi
 
トピックモデル
トピックモデルトピックモデル
トピックモデル
貴之 八木
 
リストモナドを作ってみた
リストモナドを作ってみたリストモナドを作ってみた
リストモナドを作ってみた
Atsushi Kanehara
 
第5章 拡張モデル(前半)
第5章 拡張モデル(前半)第5章 拡張モデル(前半)
第5章 拡張モデル(前半)
Akito Nakano
 
ベイズ推論による機械学習入門 第4章
ベイズ推論による機械学習入門 第4章ベイズ推論による機械学習入門 第4章
ベイズ推論による機械学習入門 第4章
YosukeAkasaka
 
Stochastic Variational Inference
Stochastic Variational InferenceStochastic Variational Inference
Stochastic Variational Inference
Kaede Hayashi
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
Tomoharu ASAMI
 
Operad and Recognition Principle
Operad and Recognition PrincipleOperad and Recognition Principle
Operad and Recognition Principle
Tatsuki SHIMIZU
 
Proof summit2014mizar
Proof summit2014mizarProof summit2014mizar
Proof summit2014mizar
Alcor80UMa
 
Scala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみたScala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみた
Kazuyuki TAKASE
 
topology of musical data
topology of musical datatopology of musical data
topology of musical data
Tatsuki SHIMIZU
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
 
MP in Scala
MP in ScalaMP in Scala
MP in Scala
Kent Ohashi
 

Similar to 圏論のモナドとHaskellのモナド (20)

Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
 
Introduction to Categorical Programming
Introduction to Categorical ProgrammingIntroduction to Categorical Programming
Introduction to Categorical Programming
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
 
圏とHaskellの型
圏とHaskellの型圏とHaskellの型
圏とHaskellの型
 
代数的実数とCADの実装紹介
代数的実数とCADの実装紹介代数的実数とCADの実装紹介
代数的実数とCADの実装紹介
 
Coq関係計算ライブラリの開発と写像の性質の証明
Coq関係計算ライブラリの開発と写像の性質の証明Coq関係計算ライブラリの開発と写像の性質の証明
Coq関係計算ライブラリの開発と写像の性質の証明
 
行列計算を利用したデータ解析技術
行列計算を利用したデータ解析技術行列計算を利用したデータ解析技術
行列計算を利用したデータ解析技術
 
複素数・四元数と図形の回転
複素数・四元数と図形の回転複素数・四元数と図形の回転
複素数・四元数と図形の回転
 
トピックモデル
トピックモデルトピックモデル
トピックモデル
 
リストモナドを作ってみた
リストモナドを作ってみたリストモナドを作ってみた
リストモナドを作ってみた
 
第5章 拡張モデル(前半)
第5章 拡張モデル(前半)第5章 拡張モデル(前半)
第5章 拡張モデル(前半)
 
ベイズ推論による機械学習入門 第4章
ベイズ推論による機械学習入門 第4章ベイズ推論による機械学習入門 第4章
ベイズ推論による機械学習入門 第4章
 
Stochastic Variational Inference
Stochastic Variational InferenceStochastic Variational Inference
Stochastic Variational Inference
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
 
Operad and Recognition Principle
Operad and Recognition PrincipleOperad and Recognition Principle
Operad and Recognition Principle
 
Proof summit2014mizar
Proof summit2014mizarProof summit2014mizar
Proof summit2014mizar
 
Scala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみたScala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみた
 
topology of musical data
topology of musical datatopology of musical data
topology of musical data
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
 
MP in Scala
MP in ScalaMP in Scala
MP in Scala
 

More from Yoshihiro Mizoguchi

DockerでAlmaLinux(web, php, pukiwiki)環境構築
DockerでAlmaLinux(web, php, pukiwiki)環境構築DockerでAlmaLinux(web, php, pukiwiki)環境構築
DockerでAlmaLinux(web, php, pukiwiki)環境構築
Yoshihiro Mizoguchi
 
DockerでCoq インストール
DockerでCoq インストールDockerでCoq インストール
DockerでCoq インストール
Yoshihiro Mizoguchi
 
Homebrewによるソフトウェアの実装 (3)
Homebrewによるソフトウェアの実装 (3)Homebrewによるソフトウェアの実装 (3)
Homebrewによるソフトウェアの実装 (3)
Yoshihiro Mizoguchi
 
Homebrewによるソフトウェアの実装 (2)
Homebrewによるソフトウェアの実装 (2)Homebrewによるソフトウェアの実装 (2)
Homebrewによるソフトウェアの実装 (2)
Yoshihiro Mizoguchi
 
Homebrewによるソフトウェアの実装(1)
Homebrewによるソフトウェアの実装(1)Homebrewによるソフトウェアの実装(1)
Homebrewによるソフトウェアの実装(1)
Yoshihiro Mizoguchi
 
Overleafを使った文書作成
Overleafを使った文書作成Overleafを使った文書作成
Overleafを使った文書作成
Yoshihiro Mizoguchi
 
Amazon AWSの使い方
Amazon AWSの使い方Amazon AWSの使い方
Amazon AWSの使い方
Yoshihiro Mizoguchi
 
ShareLaTeXの使い方
ShareLaTeXの使い方ShareLaTeXの使い方
ShareLaTeXの使い方
Yoshihiro Mizoguchi
 
Symbolic Computations in Conformal Geometric Algebra for Three Dimensional O...
Symbolic Computations in Conformal Geometric Algebra for Three Dimensional  O...Symbolic Computations in Conformal Geometric Algebra for Three Dimensional  O...
Symbolic Computations in Conformal Geometric Algebra for Three Dimensional O...
Yoshihiro Mizoguchi
 
Theory of Relational Calculus and its Formalization
Theory of Relational Calculus and its FormalizationTheory of Relational Calculus and its Formalization
Theory of Relational Calculus and its Formalization
Yoshihiro Mizoguchi
 
数式処理ソフトMathematicaで数学の問題を解く
数式処理ソフトMathematicaで数学の問題を解く数式処理ソフトMathematicaで数学の問題を解く
数式処理ソフトMathematicaで数学の問題を解く
Yoshihiro Mizoguchi
 
Verification of a brick wang tiling algorithm
Verification of a brick wang tiling algorithmVerification of a brick wang tiling algorithm
Verification of a brick wang tiling algorithm
Yoshihiro Mizoguchi
 
計算機を用いて数学の問題を解くということ
計算機を用いて数学の問題を解くということ計算機を用いて数学の問題を解くということ
計算機を用いて数学の問題を解くということ
Yoshihiro Mizoguchi
 
A Coq Library for the Theory of Relational Calculus
A Coq Library for the Theory of Relational CalculusA Coq Library for the Theory of Relational Calculus
A Coq Library for the Theory of Relational Calculus
Yoshihiro Mizoguchi
 
Algebras for programming languages
Algebras for programming languagesAlgebras for programming languages
Algebras for programming languages
Yoshihiro Mizoguchi
 
Mac bookでwebサーバーを起動する方法
Mac bookでwebサーバーを起動する方法Mac bookでwebサーバーを起動する方法
Mac bookでwebサーバーを起動する方法
Yoshihiro Mizoguchi
 
有限オートマトンとスティッカー系に関するCoqによる形式証明について
有限オートマトンとスティッカー系に関するCoqによる形式証明について有限オートマトンとスティッカー系に関するCoqによる形式証明について
有限オートマトンとスティッカー系に関するCoqによる形式証明について
Yoshihiro Mizoguchi
 
計算可能実数とは
計算可能実数とは計算可能実数とは
計算可能実数とは
Yoshihiro Mizoguchi
 
グラフデータ構造と5色定理
グラフデータ構造と5色定理グラフデータ構造と5色定理
グラフデータ構造と5色定理
Yoshihiro Mizoguchi
 
Graph partitioning and characteristic polynomials of Laplacian matrics of Roa...
Graph partitioning and characteristic polynomials of Laplacian matrics of Roa...Graph partitioning and characteristic polynomials of Laplacian matrics of Roa...
Graph partitioning and characteristic polynomials of Laplacian matrics of Roa...
Yoshihiro Mizoguchi
 

More from Yoshihiro Mizoguchi (20)

DockerでAlmaLinux(web, php, pukiwiki)環境構築
DockerでAlmaLinux(web, php, pukiwiki)環境構築DockerでAlmaLinux(web, php, pukiwiki)環境構築
DockerでAlmaLinux(web, php, pukiwiki)環境構築
 
DockerでCoq インストール
DockerでCoq インストールDockerでCoq インストール
DockerでCoq インストール
 
Homebrewによるソフトウェアの実装 (3)
Homebrewによるソフトウェアの実装 (3)Homebrewによるソフトウェアの実装 (3)
Homebrewによるソフトウェアの実装 (3)
 
Homebrewによるソフトウェアの実装 (2)
Homebrewによるソフトウェアの実装 (2)Homebrewによるソフトウェアの実装 (2)
Homebrewによるソフトウェアの実装 (2)
 
Homebrewによるソフトウェアの実装(1)
Homebrewによるソフトウェアの実装(1)Homebrewによるソフトウェアの実装(1)
Homebrewによるソフトウェアの実装(1)
 
Overleafを使った文書作成
Overleafを使った文書作成Overleafを使った文書作成
Overleafを使った文書作成
 
Amazon AWSの使い方
Amazon AWSの使い方Amazon AWSの使い方
Amazon AWSの使い方
 
ShareLaTeXの使い方
ShareLaTeXの使い方ShareLaTeXの使い方
ShareLaTeXの使い方
 
Symbolic Computations in Conformal Geometric Algebra for Three Dimensional O...
Symbolic Computations in Conformal Geometric Algebra for Three Dimensional  O...Symbolic Computations in Conformal Geometric Algebra for Three Dimensional  O...
Symbolic Computations in Conformal Geometric Algebra for Three Dimensional O...
 
Theory of Relational Calculus and its Formalization
Theory of Relational Calculus and its FormalizationTheory of Relational Calculus and its Formalization
Theory of Relational Calculus and its Formalization
 
数式処理ソフトMathematicaで数学の問題を解く
数式処理ソフトMathematicaで数学の問題を解く数式処理ソフトMathematicaで数学の問題を解く
数式処理ソフトMathematicaで数学の問題を解く
 
Verification of a brick wang tiling algorithm
Verification of a brick wang tiling algorithmVerification of a brick wang tiling algorithm
Verification of a brick wang tiling algorithm
 
計算機を用いて数学の問題を解くということ
計算機を用いて数学の問題を解くということ計算機を用いて数学の問題を解くということ
計算機を用いて数学の問題を解くということ
 
A Coq Library for the Theory of Relational Calculus
A Coq Library for the Theory of Relational CalculusA Coq Library for the Theory of Relational Calculus
A Coq Library for the Theory of Relational Calculus
 
Algebras for programming languages
Algebras for programming languagesAlgebras for programming languages
Algebras for programming languages
 
Mac bookでwebサーバーを起動する方法
Mac bookでwebサーバーを起動する方法Mac bookでwebサーバーを起動する方法
Mac bookでwebサーバーを起動する方法
 
有限オートマトンとスティッカー系に関するCoqによる形式証明について
有限オートマトンとスティッカー系に関するCoqによる形式証明について有限オートマトンとスティッカー系に関するCoqによる形式証明について
有限オートマトンとスティッカー系に関するCoqによる形式証明について
 
計算可能実数とは
計算可能実数とは計算可能実数とは
計算可能実数とは
 
グラフデータ構造と5色定理
グラフデータ構造と5色定理グラフデータ構造と5色定理
グラフデータ構造と5色定理
 
Graph partitioning and characteristic polynomials of Laplacian matrics of Roa...
Graph partitioning and characteristic polynomials of Laplacian matrics of Roa...Graph partitioning and characteristic polynomials of Laplacian matrics of Roa...
Graph partitioning and characteristic polynomials of Laplacian matrics of Roa...
 

圏論のモナドとHaskellのモナド

  • 1. KSB:河原研究室発表会 (河原康雄先生還暦記念) 2005年7月29日 圏論のモナドとHaskellのモナド 九州大学 大学院数理学研究院 溝 口 佳 寛
  • 2. 河原先生との出会い 昭和54年(1979年)4月 溝口(大学1年生) 教養部での数学科専門科目 「情報数学序論」を担当されていた! (受講せず!!) 昭和57年4月 数学講究(大学4年生) 圏論の情報科学への応用に惹かれる! (ゼミ生は1名だった!!)
  • 3. LAシンポジウム会報No.7 (1986年7月) (講座紹介) 九州大学理学部数学教室 数理解析学講座                   河 原 康 雄 (一部略)  私が所属するのは, 九州大学・理学部・数学教室・数理解析学講座で, 初代講座 担当教授は工藤達二先生(昭和56年2月~昭和58年3月, 現在久留米工業大学 教授)でしたが, 昨年4月からは大阪大学より赴任された田中俊一教授が講座を担 当されています. 私はここの助教授で, 助手として藤井一幸氏および現在西ドイツ のPaderbornに遊学中の宮野悟氏の二人が所属しています. 大学院生としては, 溝口佳寛君(DC.2), 伊達博君, 大塚寛君(MC.2), 正代隆義君, 藤田義史君(MC. 1)が在籍し, また4年生セミナーには今年度14名(内女子学生4名)の受講者がいま す.
  • 4. そのころの写真がありました。 この冷蔵庫が, 現在の溝口教 官室(3208室)に残っている! (今は故障してます!!) → LAシンポジウム(犬山!?) 14名(!?)の4年生たち.
  • 5. LAシンポジウム会報No.7 (1986年7月) [続き]  さて, この我国では聞きなれない数理解析学講座でどのような研究が行われているかをご 紹介しましょう. 田中先生は主に, グラフアルゴリズム, 組合せ最適化, ロボットの数理を研究 されており, 私はカテゴリー論そのものからカテゴリー論の情報数学(例えば, オートマトン, Gouen-Burstallのinstitution, プログラムの代数的意味論など)への応用に興味を持ってい ます. 助手の藤井氏は, トポロジーの知識に基づく場の量子論の数学的構成の研究, 宮野 氏は, オートマトン理論における階層定理, 計算量理論, 並列処理の理論の研究分野にお いてそれぞれ活躍中です.  また, 理学部には基礎情報学研究施設が付設されており, LAの会員として, 有川節夫教 授, 武谷俊一助教授, 原口誠助手がおられ, 研究・教育など色々の面で協力を頂いておりま す. 例えば, 定期的なものとしては田中先生と有川先生が感じとして毎月1回情報数学談話 会が共済されており, その他では現在, 原口氏, 山本章博君(有川研のMC.2)達とrewriting system, Goguen-Burstallのinstitutionについて合同セミナーを開催しています.  更に, 九大・数学教室で情報数学に関して計算数学講座担当の藤野精一先生を忘れるこ とはできないでしょう. ご承知のように先生は早くよりオートマトン理論, リスト処理等の研究 および紹介に貢献され, 現在はTraubなどの計算量理論, 数値解析を研究されています. ま た, 数学基礎論の上江洲忠弘先生もおられ, 基礎論の観点から情報数学へ助言・提言を頂 いています.
  • 6. LAシンポジウム会報No.7 (1986年7月) [続き2] 最後に, 最近の数理解析学講座の修士論文・学位論文の題目をお知らせします. [修士論文] 溝口佳寛: 圏M-Set上のパワーセットモナド, フィルターモナドおよびプライムフィル ターモナドについて (昭和60年2月) [博士論文] 宮野悟: Hierarchy Theorems in Automata Theory (昭和59年3月) 藤井一幸: Study of Dynamics of Non-Linear Grassmann Sigma Models (昭和60 年12月)
  • 7. 圏論のモナド(1) •  圏(category)とは? 集合の圏, 群の圏, 連続束の圏, 位相空間の 圏, 関係の圏など •  関手(functor)とは? 構造を忘れる関手, 代数構造を自由生成する 関手など •  自然変換(natural transformation)とは? 関手で移された構造物間の射を一斉に与え る
  • 8. 例 (HaskellのListとconcat) •  圏 集合の圏(Set) (集合と写像の圏), リストの圏(List) (文字列と半群準同型の圏) A=Integer (整数全体の集合) •  L: Set → List は関手 LA=[A] 1,2,3 ∈A, [1,2,3] ∈LA f: A→Bに対して, Lf = (map f) Lf [1,2,3] = (map f [1,2,3]) = [f(1),f(2),f(3)] •  concat: [[A]]→[A]: LLA→LA は自然変換 concat [[1,2],[3],[4,5,6]] = [1,2,3,4,5,6] •  return: A→[A]: Id A→ LA も自然変換 return x = [x]
  • 9. 圏論のモナド(2) •  随伴関手(adjoint functor)とは? 関手 F:C→D, G:D→C に対して, 射A→GB と FA→B とが自然に 1対1対応す るとき, FとGを随伴関手(adjoint)と言う. •  例  G:List→Set を構造を忘れる関手, F=T:Set→List を自由半群を生成する関手と すると, FとGはadjointになる.
  • 10. 圏論のモナド(3) •  モナドとは? Eilenberg&Moore’s Triples (T,η,µ) T: C→C (functor) η: id→T , µ:TT→T (natural transformation) (T,η,µがある関係式らを満たすときモナドと言う) •  例 随伴関手 F:C→D, G:D→C に対して, T=GF:C→Cとして, 自然にモナドを構成出来る.
  • 11. 圏論のモナド(4) •  モナドとは? (再) Kleisli triples (M, return, >>=) M:Obj(C)→Obj(C) (写像) return: A→MA (写像, A∈Obj(C)) >>=:C(A,MB)→C(MA,MB) (写像, A,B∈Obj(C)) M,return,>>=がある関係式らを満たすとき, Kleisliの tripleと言う. •  例 随伴関手 F:C→D, G:D→C に対して, M=GF:C→Cとして, 自然にKleisli tripleを構成できる.
  • 12. 例 (HaskellのList monad) •  F:Set→List, G:List→Set, に対して, M=GF:Set→Set とする. (注: FA=[A]) •  return: A → [A] を return x = [x] •  >>=:(A→MB)→(MA→MB) を   >>=(f)(a) を a>>=f と書くことにして, a>>=f = concat (map f a) とすると, (M,return,>>=)は, Kleisli’s tripleとなる. •  例 [1,2,3]>>=(λx.[x,2*x]) = concat (map (λx.[x,2*x]) [1,2,3]) = concat [[1,2],[2,4],[3,6]] = [1,2,2,4,3,6]
  • 13. 圏論のモナド(5) •  adjoint functors F:C→D, G:D→Cから, tripleが作れ るが, 逆にtripleから, それを導くadjoint functors F,G を作ることは出来ないのだろうか? •  Eilenberg and Moore’s solution T代数(T-algebra)の圏(CT) 対象(A,ξ)を(A∈Obj(C),ξ:TA→A) とし, 射f:(A,ξ)→(B,ζ)を, f ξ = ζ Tf を満たすCの射とする FT:C→ CT をFTA=(TA,µA )(µA:TTA→TA)で定める と, adjoint functorを構成出来る.
  • 14. 圏論のモナド(6) •  Kleisli’s solution Kleisli圏(CT) 対象はCと同じ, 射f:A→BをA→TBとする. 射の結合をg:B→Cとするとき, h=gf を h a = (f a) >>= g で定義する. このとき, CTは圏となる. 関手GT : CT →CをGT A=TA, GT f=(>>=f) と すると, adjoint functorを構成出来る.
  • 15. 圏論のモナド(7) •  Eilenberg&MoorとKelisliのtripleの概念は同等. f:A→B, Tf:TA→TB, Tf := >>= (returnB. f) µA:= >>= idA :TTA→TA 逆は, f:A→TB, >>= f := µA Tf •  Kleisli圏CTは, T代数の圏CTに自然に埋め込まれ, 自由T代数の圏と同等になる. •  モナドTを構成するadjunctionたちについて, Kleisli 圏はinitial objectになり, T代数圏はfinal objectにな る. •  先に与えられたadjunction F:C→D, G:D→Cに対し ては, DとCTが同等になるための条件を与えたBeck の定理が有名.
  • 19. Haskellのモナド(1) •  例 Instance Monad [ ] where xs >>= f = concat (map f xs) return x = [x] •  do文は, monad関数のsyntax sugar! do a←[1,2,3]; b←[3,4,5]; return (a+b) は, [1,2,3] >>= (λa. ([3,4,5]>>=λb.return(a+b)) = concat (map (λa.concat (map (λb.[a+b]) [3,4,5]))[1,2,3]) = concat [concat (map (λb.[1+b]) [3,4,5]), concat (map (λb.[2+b]) [3,4,5]), concat (map (λb.[3+b]) [3,4,5])] = concat [[4,5,6],[5,6,7],[6,7,8]]=[4,5,6,5,6,7,6,7,8] •  先のdo文を[a+b | a←[1,2,3],b←[3,4,5]]と書くのもsyntax sugar!!
  • 20. Haskellのモナド(2) •  なぜモナドを使うのか? –  Kleisli圏の対象と考えられるデータ構造は, 必要な関 数(return,>>=)を定義して, モナドにしておくと良い. なぜ良いのか? –  プログラムが見やすくなる. –  構造に付随する部分と問題依存の部分とのプログラ ムを分割出来る. –  do文のsemanticsを関数型プログラミングの範疇で 与えることが出来る. –  圏論は数学のデザインパターン, デザインパターンを 使って、お行儀の良いプログラムを書きましょう.
  • 21. Haskellのモナド(3) State Transformation f1 w a = let (b,x) = g1 w a (c,y) = h1 w x b (d,z) = i1 w x y c in (d,z) C言語の大域変数に相当する状態を全ての計算で保 持しようとすると, 上記のa,b,c,dのような関数の計算 結果とは別に常に状態変数を引数と結果に持つよう なプログラミングが必要になる.
  • 22. Haskellのモナド(4) Type S s a = s → (s, a) >>=::S s a →(a→S s b)→S s b p >>= k = λs0 . let (s1,a)= p s0 % p: s→(s, a) q=ka % q: s→(s, b) in q s1 return::a → S s a return a = λs. (s,a) このようにモナドSを定義すると, 先のプログラムは, f w = g w >>= (λx.(h w x >>= (λy.(i w x y)>>=λz.return z))) と書くことが出来る. さらに, do文のsyntax sugar を使うと, f w = do x←g w; y←h w x; z←I w x y; return z と書くことが出来る.
  • 23. Haskellのモナド(5) •  リストを集合と考えると, リストモナドは, powerset funcorのKleisli圏, すなわち, 関係の圏となる. (関係の結合が, Kleisli圏の>>=に対応する.) •  例 aa = [1,2,3] alpha = [(1,4),(1,5),(2,6)] bb = [4,5,6] beta = [(4,7),(5,8),(6,8)] cc = [7,8,9] return::Integer→[Integer] >>=::[Integer]→(Integer→[Integer])→[Integer] pf::[(Integer,Integer)]→Integer→[Integer] % P(A x A) ~ (A→PA) pf r a = nub [y | (x,y)←r, x==a] ●::[(Integer,Integer)]→[(Integer,Integer)]→Integery→[Integer] (a ● b) x = (return x) >>= (pf a) >>= (pf b) fp::[Integer]→[Integer]→(Integer→[Integer])→[(Integer,Integer)] fp dom cod f = [(x,y) | x←dom, y←cod, y ∈ (f x)] alpha_beta = fp aa cc (alpha ● beta) alpha_beta = [(1,7),(1,8),(2,8)] となる. もちろん, 直接計算も可! alpha_beta_direct = [(x,z) | (x,y0)←alpha, (y1,z)←beta, y0==y1]
  • 24. 参考文献 •  A.Schalk, Some notes on monads, 16pages, 2002. http://www.cs.man.ac.uk/~schalk/notes/ (Kleisli圏とT代数圏の比較について書いてある.) •  T.Norvell, Monads for the Working Haskell Programmer, 15pages(html), http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm (Haskellのmonadについての短いチュートリアル) •  P.Hundak, J.Peterson, J.H.Fasel, A Gentle Introduction to Haskell 98, 64pages, 1999. http://www.haskell.org/tutorial/ (Haskell 98言語の紹介, monadについても10pagesほど記述がある.) •  P.Wadler, (モナドに関する論文を多数書いている.) http://homepages.inf.ed.ac.uk/wadler/topics/monads.html The marriage of effects and monads, The marriage of effects and monads , How to declare an imperative , Monads and composable continuations, Imperative functional programming , Monads for functional programming, Comprehending monads (モナドの具体例がた くさんある), Combining monads, The essence of functional programming •  H.Daume, Yet Another Haskell Tutorial, 198pages, 2002. http://www.isi.edu/~hdaume/htut/ (monadについては, p.119-155)