Successfully reported this slideshow.                                       Upcoming SlideShare
×

ラムダ計算入門

27,595 views

Published on

NPCAでLTしたスライド そのうちブログにちゃんとした解説とかを書くかも

• Full Name
Comment goes here.

Are you sure you want to Yes No • Be the first to comment

ラムダ計算入門

1. 1. ラムダ計算入門 yingtai
3. 3. LTの動機• ラムダ計算が人口に膾炙していない • 部誌書いたのに... • ※部誌の内容は信用しちゃだめです
4. 4. 流れ• ラムダ計算入門• データ型の表現
5. 5. ラムダ計算入門
6. 6. ラムダ計算とは• 「関数」をより抽象的に扱う
7. 7. 関数• 「箱」(ブラックボックス)• 入力(引数)があって、出力(結果)がある f(x)
8. 8. ラムダ記法
9. 9. 要するに• λ[入力].[出力]• なぜ「抽象的」と言えるのか？ • = どこがええのんや
10. 10. 抽象化①• 無名関数 • いちいち名前を付けない λx. x+2
11. 11. 抽象化②• 高階関数 • 関数そのものを入力 / 出力できる
12. 12. 例えば、• f(x, y) = x を考える (図はイメージ) • ラムダ記法では? f
13. 13. 答えλx. (λy.x)
14. 14. λx. (λy.x) •Pythonコード •f1 と f2 は同じ
15. 15. カリー化• f(x, y) = x → f(x)(y) = x• これをカリー化と言います
16. 16. ラムダ記法では• カリー化した関数を簡潔に表せる • λx.(λy.x) で事足りる
17. 17. でっていう• カリー化して何が嬉しいのか• めんどいだけなのでは...
18. 18. 嬉しいです• f(x, y) = x • … x と y の両方を渡す必要がある• f(x)(y) = x • … x だけ渡す、という操作が可能• この操作を部分適用と言う
19. 19. ついでに• λx. (λy. x) は λx. λy. x と表せる • どこがどの関数か自明• λx. λy. x は λxy. x と表せる • ただの省略記法
20. 20. SKIコンビネータ• S = λx y z. x z (y z)• K = λx y. x• I = λx. x
21. 21. I コンビネータ• λx. x• Identity combinator (恒等関数)• 取ったのをそのまま返すだけ
22. 22. Kコンビネータ• λx y. x• Constant combinator• Konstant (独)• 定数関数
23. 23. Sコンビネータ• λx y z. x z (y z)• Sharing combinator • z をシェアする • S (λa. M) (λb. N) = λz. M N • ただし M = M[a:=z], N = N[b:=z]
24. 24. データ型の表現
25. 25. 基本的な考え方• Turing: 関数をデータで表現する • → 手続き型• Church: データを関数で表現する • → 関数型
26. 26. Church encoding• データ型をラムダ計算でエンコード • 自然数、真偽値、コンテナ、...etc.
27. 27. 自然数 (Church)• いわゆるチャーチ数• ペアノの公理系に基づいて構成• 1 := suc(0), 2 := suc(suc(0)), ...
28. 28. 具体的には• 0 := λs z. z• 1 := λs z. s z• 2 := λs z. s (s z)• 3 := λs z. s (s (s z))• ...
29. 29. Boolean• True := λt f. t• False := λt f. f• if t1 then t2 else t3 := t1 t2 t3
30. 30. Tuple• (t1, t2) := λx. x t1 t2• fst := λt. t (λf s. f)• snd := λt. t (λf s. s)
31. 31. List (Church)• cons と nil で表現• [x,y,z]• = (cons x (cons y (cons z nil)))
32. 32. List (Church)• Nil := λc n. n• Cons := λh t c n. c h (t c n)
33. 33. List (Church)• [x,y,z]• =λc n. c x(λc n. c y(λc n. c z n))• cons が foldr 的に振る舞う！ • foldr = λn c l. l c n • tail = λl. l (λx xs. xs) Nil
34. 34. Scott encoding• もう一つのエンコーディング• Lazy Kのリストは Scott encoding
35. 35. 自然数 (Scott)• 0 := λz s. z• 1 := λz s. s 0• 2 := λz s. s 1• 3 := λz s. s 2• ...
36. 36. List (Scott)• Nil = λf g. f• Cons = λx xs f g. g x xs
37. 37. List (Scott)• [x,y,z]• = λc. c x (λc. c y (λc. (c z) Nil)) • consはパターンマッチ的！
38. 38. まとめ• Scott encoding • プログラミングが簡単 • パターンマッチ• Church encoding • 再帰が簡単、計算量
39. 39. Any questions?