Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
ラムダ計算入門  yingtai
自己紹介• 67回生• twitter: @_yingtai• 部誌でラムダ計算のこと書いた• Haskellerワナビ
LTの動機• ラムダ計算が人口に膾炙していない • 部誌書いたのに... • ※部誌の内容は信用しちゃだめです
流れ• ラムダ計算入門• データ型の表現
ラムダ計算入門
ラムダ計算とは• 「関数」をより抽象的に扱う
関数• 「箱」(ブラックボックス)• 入力(引数)があって、出力(結果)がある         f(x)
ラムダ記法
要するに• λ[入力].[出力]• なぜ「抽象的」と言えるのか? • = どこがええのんや
抽象化①• 無名関数 • いちいち名前を付けない       λx. x+2
抽象化②• 高階関数 • 関数そのものを入力 / 出力できる
例えば、• f(x, y) = x を考える (図はイメージ) • ラムダ記法では?             f
答えλx. (λy.x)
λx. (λy.x)      •Pythonコード      •f1 と f2 は同じ
カリー化• f(x, y) = x → f(x)(y) = x• これをカリー化と言います
ラムダ記法では• カリー化した関数を簡潔に表せる • λx.(λy.x) で事足りる
でっていう• カリー化して何が嬉しいのか• めんどいだけなのでは...
嬉しいです•   f(x, y) = x    • … x と y の両方を渡す必要がある• f(x)(y) = x • … x だけ渡す、という操作が可能• この操作を部分適用と言う
ついでに• λx. (λy. x) は λx. λy. x と表せる • どこがどの関数か自明• λx. λy. x は λxy. x と表せる • ただの省略記法
SKIコンビネータ• S = λx y z. x z (y z)• K = λx y. x• I = λx. x
I コンビネータ• λx. x• Identity combinator (恒等関数)• 取ったのをそのまま返すだけ
Kコンビネータ• λx y. x• Constant combinator• Konstant (独)• 定数関数
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]
データ型の表現
基本的な考え方• Turing: 関数をデータで表現する • → 手続き型• Church: データを関数で表現する • → 関数型
Church encoding• データ型をラムダ計算でエンコード • 自然数、真偽値、コンテナ、...etc.
自然数 (Church)• いわゆるチャーチ数• ペアノの公理系に基づいて構成• 1 := suc(0), 2 := suc(suc(0)), ...
具体的には• 0 := λs z. z• 1 := λs z. s z• 2 := λs z. s (s z)• 3 := λs z. s (s (s z))• ...
Boolean• True := λt f. t• False := λt f. f• if t1 then t2 else t3 := t1 t2 t3
Tuple• (t1, t2) := λx. x t1 t2• fst := λt. t (λf s. f)• snd := λt. t (λf s. s)
List (Church)• cons と nil で表現• [x,y,z]• = (cons x (cons y (cons z nil)))
List (Church)• Nil := λc n. n• Cons := λh t c n. c h (t c n)
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 ...
Scott encoding• もう一つのエンコーディング• Lazy Kのリストは Scott encoding
自然数 (Scott)• 0 := λz s. z• 1 := λz s. s 0• 2 := λz s. s 1• 3 := λz s. s 2• ...
List (Scott)• Nil = λf g. f• Cons = λx xs f g. g x xs
List (Scott)• [x,y,z]• = λc. c x (λc. c y (λc. (c z) Nil)) • consはパターンマッチ的!
まとめ• Scott encoding • プログラミングが簡単 • パターンマッチ• Church encoding • 再帰が簡単、計算量
Any questions?
Prochain SlideShare
Chargement dans…5
×

ラムダ計算入門

27 526 vues

Publié le

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

  • Soyez le premier à commenter

ラムダ計算入門

  1. 1. ラムダ計算入門 yingtai
  2. 2. 自己紹介• 67回生• twitter: @_yingtai• 部誌でラムダ計算のこと書いた• Haskellerワナビ
  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?

×