Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
すごいHaskell楽しく学ぼう 第6章
Next
Download to read offline and view in fullscreen.

2

Share

Download to read offline

Tapl 5

Download to read offline

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Tapl 5

  1. 1. The Untyped Lambda-Calculus Types and Programming Languages 5 章λ! @rf0444
  2. 2. 5.1Basics
  3. 3. λ?ラムダ計算 (lambda-calculus) 関数定義 と 関数適用 だけ 全て関数
  4. 4. Syntax項 (term) t ::= x λx.t t t * x: 任意の変数、t: 任意の項
  5. 5. Syntax項 (term) t ::= 変数 x (variable) λx.t t t * x: 任意の変数、t: 任意の項
  6. 6. Syntax項 (term) t ::= x ラムダ抽象 λx.t (abstraction) t t * x: 任意の変数、t: 任意の項
  7. 7. Syntax項 (term) t ::= x λx.t 関数適用 (application) t t * x: 任意の変数、t: 任意の項
  8. 8. Syntax優先順位 ラムダ抽象 - 右から 例: λx.λy.t = λx.(λy.t) 関数適用 - 左から 例: λx.a b c = λx.(a b) c
  9. 9. Scope束縛変数 (bound variable) λx.t で t の中にある x のこと 例: λx.x y での、x
  10. 10. Scope自由変数 (free variable) 項の中で、外側のラムダ抽象の変数部に現れな い変数のこと 例: λx.x y での、y
  11. 11. Scope閉項 (closed term) 自由変数を含まない項のこと コンビネータ (combinator) ともいう 例: λx.x 恒等関数 (identity function)
  12. 12. Operational Semantics関数適用 (λx.a) b ! [x!b]a a の中の x を b に置き換える 例: (λx.x) y ! y
  13. 13. Operational Semantics簡約基 (redex) (λx.a) b という形をした項のことβ簡約 (beta-reduction) 簡約基を、先のルールに従って書き換えること
  14. 14. Operational Semantics簡約戦略 full beta-reduction normal order strategy call-by-name strategy call-by-value strategy
  15. 15. Operational Semanticsfull beta-reduction 任意の簡約可能式を、任意のタイミングで簡 約できる
  16. 16. Operational Semanticsnormal order strategy 最左最外簡約 (leftmost, outermost) 左側、外側の項から順番に簡約していく
  17. 17. Operational Semanticscall-by-name strategy ラムダ抽象の中は簡約しない それ以外は normal order strategycall-by-need strategy 評価結果を保存して、再計算しない版
  18. 18. Operational Semanticscall-by-value strategy 関数適用の前に、右側を先に簡約する それ以外は call-by-name strategy
  19. 19. Operational Semanticscall-by-value strategy 正格 (strict) 関数内で引数が使われなくでも、引数を評 価する call-by-name/need は 遅延 (lazy)
  20. 20. 5.2Programming in the Lambda-Calculus
  21. 21. Multiple Arguments2引数関数 λ(a,b).t 的な λa.λb.t でできるよ!
  22. 22. Multiple Arguments高階関数 (higher-order function) 関数を引数に受け取ったり、関数を返したり する関数のこと 例: λa.λb.t a をとって「b をとって t を返す関数」 を返す関数
  23. 23. Multiple Argumentsカリー化 (currying) 多引数の関数を、高階関数の形に変換するこ と 例: λ(a,b).t ! λa.λb.t
  24. 24. Church Booleanstru = λt.λf.tfls = λt.λf.f
  25. 25. Church Booleanstru = λt.λf.t t: 真を表すもの f: 偽を表すものfls = λt.λf.f
  26. 26. Church Booleansand = λb.λc.b c flsor = λb.λc.b tru cnot = λb.b fls tru
  27. 27. Church Booleansand = λb.λc.b c fls b が真なら c 偽なら flsor = λb.λc.b tru cnot = λb.b fls tru
  28. 28. Church Booleansand = λb.λc.b c fls b が真なら truor = λb.λc.b tru c 偽なら cnot = λb.b fls tru
  29. 29. Church Booleansand = λb.λc.b c flsor = λb.λc.b tru cnot = λb.b fls tru b が真なら fls 偽なら tru
  30. 30. Church Booleans例: and tru fls ! (λb.λc.b c fls) tru fls ! (λc.tru c fls) fls ! tru fls fls
  31. 31. Church Booleans例: and tru fls ! tru fls fls ! (λt.λf.t) fls fls ! (λf.fls) fls ! fls
  32. 32. Pairspair = λf.λs.λb.b f sfst = λp.p trusnd = λp.p fls
  33. 33. Pairspair = λf.λs.λb.b f sfst = λp.p tru f が返るsnd = λp.p fls s が返る
  34. 34. Pairs例: fst (pair tru fls) ! fst ((λf.λs.λb.b f s) tru fls) ! fst ((λs.λb.b tru s) fls) ! fst (λb.b tru fls) ! (λp.p tru) (λb.b tru fls)
  35. 35. Pairs例: fst (pair tru fls) ! (λp.p tru) (λb.b tru fls) ! (λb.b tru fls) tru ! tru tru fls ! (λt.λf.t) tru fls ! tru
  36. 36. Church Numeralsc0 = λs.λz.zc1 = λs.λz.s zc2 = λs.λz.s (s z)c3 = λs.λz.s (s (s z))...
  37. 37. Church Numerals z: 0 を表すものc0 = λs.λz.zc1 = λs.λz.s z s: 次を取得するものc2 = λs.λz.s (s z)c3 = λs.λz.s (s (s z))...
  38. 38. Church Numeralsscc = λn.λs.λz.s (n s z)
  39. 39. Church Numerals n のscc = λn.λs.λz.s (n s z) 次
  40. 40. Church Numeralsplus = λm.λn.λs.λz.m s (n s z)
  41. 41. Church Numerals n から始めてplus = λm.λn.λs.λz.m s (n s z) m 個 次
  42. 42. Church Numeralsplus = λm.λn.λs.λz.m s (n s z)plus = λm.λn.m scc n
  43. 43. Church Numeralsplus = λm.λn.λs.λz.m s (n s z)plus = λm.λn.m scc n m 回 n から始めて scc
  44. 44. Church Numeralstimes = λm.λn.m (plus n) c0
  45. 45. Church Numerals 0 から始めてtimes = λm.λn.m (plus n) c0 m 回 n を足す
  46. 46. Church Numeralsiszro = λm.m (λx.fls) tru
  47. 47. Church Numerals tru から始めてiszro = λm.m (λx.fls) tru 次は常に fls
  48. 48. Church Numeralsprd = λm.fst (m ss zz) ss = λp.pair (snd p) (scc (snd p)) zz = pair c0 c0
  49. 49. Church Numeralsprd = λm.fst (m ss zz) ss = λp.pair (snd p) (scc (snd p)) zz = pair c0 c0 (0, 0) から始めて
  50. 50. Church Numeralsprd = λm.fst (m ss zz) ss = λp.pair (snd p) (scc (snd p)) zz = pair c0 c0 (_, x) ! (x, x + 1) (0, 0) から始めて
  51. 51. Church Numerals m 回やると、 m = 0 の時は (m - 1, m) (0, 0)prd = λm.fst (m ss zz) ss = λp.pair (snd p) (scc (snd p)) zz = pair c0 c0 (_, x) ! (x, x + 1) (0, 0) から始めて
  52. 52. Enriching the CalculusλNB NB (3章) に λ を加える NB (Real) と λ (Church) は、 両方とも boolean と numeral を 持っている
  53. 53. Enriching the CalculusChurch ! Real realbool = λb.b true false realnat = λm.m (λx.succ x) 0Real ! Church churchbool = λb.if b then tru else fls
  54. 54. Enriching the Calculus振る舞い同値 (behaviorally equivalent) どんな引数に対しても、2つの評価結果が同じ 例: call-by-value での scc c1 (λs.λz.s ((λs’.λz’.s’ z’) s z)) (λs.λz.s (s z)) と “振る舞い同値”
  55. 55. Recursion正規形 (normal form) これ以上評価できない項のこと発散 (diverge) 正規形にならない項のこと 例: (λx.x x) (λx.x x) - omega
  56. 56. Recursion不動点 (fixed-point) fix = λf. (λx.f (λy.x x y)) (λx.f (λy.x x y)) Z-combinator / call-by-value Y-combinator Y-combinator: λf.(λx.f (x x)) (λx.f (x x))
  57. 57. Recursion不動点 (fixed-point) 例: factorial = fix (λf.λn. (iszro n) c1 (times n (f (prd n))))
  58. 58. RecursionReal ! Church churchnat = fix (λf.λn. if iszero n then c0 else scc (f (pred n))
  59. 59. 5.3Formalities
  60. 60. Syntax項集合 V を変数の可算集合とする 項集合は、次を満たす最小の集合 T
  61. 61. Syntax項集合 T x ∈ V ! x ∈ T t ∈ T かつ x ∈ V ! λx.t ∈ T s ∈ T かつ t ∈ T ! s t ∈ T
  62. 62. Syntax自由変数集合 項 t の自由変数集合 FV(t) FV(x) = {x} FV(λx.t) = FV(t) - {x} FV(s t) = FV(s) ∪ FV(t)
  63. 63. Substitutionα変換 (alpha-conversion) 束縛変数の名前を変えること 例: λy.x y ! λw.x w
  64. 64. Substitution置き換え [x!s]x = s [x!s]y = y [x!s](λy.t) = λy.[x!s]t [x!s](t u) = ([x!s]t) ([x!s]u)
  65. 65. Operational SemanticsSyntax 項 (term) 値 (value) t ::= v ::= x λx.t λx.t t t
  66. 66. Operational Semantics評価 (evaluation) (call-by-value) t1 ! t1’ E-APP1 t1 t2 ! t1’ t2 t ! t’ E-APP2 v t ! v t’ (λx.t) v ! [x!v]t E-APPABS
  • zoetrope

    Jul. 2, 2013
  • TakeshiWatanabe2

    Jul. 18, 2012

Views

Total views

2,677

On Slideshare

0

From embeds

0

Number of embeds

560

Actions

Downloads

15

Shares

0

Comments

0

Likes

2

×