The Untyped Lambda-Calculus     Types and Programming Languages                                5 章λ!                      ...
5.1Basics
λ?ラムダ計算 (lambda-calculus) 関数定義 と 関数適用 だけ 全て関数
Syntax項 (term) t ::=   x   λx.t   t t           * x: 任意の変数、t: 任意の項
Syntax項 (term) t ::=                   変数   x            (variable)   λx.t   t t           * x: 任意の変数、t: 任意の項
Syntax項 (term) t ::=   x                  ラムダ抽象   λx.t         (abstraction)   t t           * x: 任意の変数、t: 任意の項
Syntax項 (term) t ::=   x   λx.t            関数適用                (application)   t t           * x: 任意の変数、t: 任意の項
Syntax優先順位 ラムダ抽象 - 右から  例: λx.λy.t    =    λx.(λy.t) 関数適用 - 左から  例: λx.a b c       = λx.(a b) c
Scope束縛変数 (bound variable) λx.t で t の中にある x のこと 例: λx.x y での、x
Scope自由変数 (free variable) 項の中で、外側のラムダ抽象の変数部に現れな い変数のこと 例: λx.x y での、y
Scope閉項 (closed term) 自由変数を含まない項のこと コンビネータ (combinator) ともいう 例: λx.x   恒等関数 (identity function)
Operational      Semantics関数適用 (λx.a) b   !   [x!b]a   a の中の x を b に置き換える 例: (λx.x) y ! y
Operational      Semantics簡約基 (redex) (λx.a) b という形をした項のことβ簡約 (beta-reduction) 簡約基を、先のルールに従って書き換えること
Operational      Semantics簡約戦略 full beta-reduction normal order strategy call-by-name strategy call-by-value strategy
Operational       Semanticsfull beta-reduction  任意の簡約可能式を、任意のタイミングで簡  約できる
Operational       Semanticsnormal order strategy  最左最外簡約 (leftmost, outermost)  左側、外側の項から順番に簡約していく
Operational       Semanticscall-by-name strategy  ラムダ抽象の中は簡約しない  それ以外は normal order strategycall-by-need strategy  評価結果を保存...
Operational       Semanticscall-by-value strategy  関数適用の前に、右側を先に簡約する  それ以外は call-by-name strategy
Operational       Semanticscall-by-value strategy  正格 (strict)    関数内で引数が使われなくでも、引数を評    価する    call-by-name/need は 遅延 (la...
5.2Programming in the Lambda-Calculus
Multiple Arguments2引数関数 λ(a,b).t 的な λa.λb.t でできるよ!
Multiple Arguments高階関数 (higher-order function) 関数を引数に受け取ったり、関数を返したり する関数のこと 例: λa.λb.t   a をとって「b をとって t を返す関数」   を返す関数
Multiple Argumentsカリー化 (currying) 多引数の関数を、高階関数の形に変換するこ と 例: λ(a,b).t   !   λa.λb.t
Church Booleanstru = λt.λf.tfls = λt.λf.f
Church Booleanstru = λt.λf.t                t: 真を表すもの                f: 偽を表すものfls = λt.λf.f
Church Booleansand = λb.λc.b c flsor = λb.λc.b tru cnot = λb.b fls tru
Church Booleansand = λb.λc.b c fls                      b が真なら c                      偽なら flsor = λb.λc.b tru cnot = λb.b ...
Church Booleansand = λb.λc.b c fls                      b が真なら truor = λb.λc.b tru c                        偽なら cnot = λb....
Church Booleansand = λb.λc.b c flsor = λb.λc.b tru cnot = λb.b fls tru                      b が真なら fls                    ...
Church Booleans例: and tru fls     ! (λb.λc.b c fls) tru fls     ! (λc.tru c fls) fls     ! tru fls fls
Church Booleans例: and tru fls     ! tru fls fls     ! (λt.λf.t) fls fls     ! (λf.fls) fls     ! fls
Pairspair = λf.λs.λb.b f sfst = λp.p trusnd = λp.p fls
Pairspair = λf.λs.λb.b f sfst = λp.p tru          f が返るsnd = λp.p fls                        s が返る
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)  ...
Pairs例: fst (pair tru fls)     ! (λp.p tru) (λb.b tru fls)     ! (λb.b tru fls) tru     ! tru tru fls     ! (λt.λf.t) tru ...
Church Numeralsc0 = λs.λz.zc1 = λs.λz.s zc2 = λs.λz.s (s z)c3 = λs.λz.s (s (s z))...
Church Numerals                          z: 0 を表すものc0 = λs.λz.zc1 = λs.λz.s z           s: 次を取得するものc2 = λs.λz.s (s z)c3 = ...
Church Numeralsscc = λn.λs.λz.s (n s z)
Church Numerals              n のscc = λn.λs.λz.s (n s z)                次
Church Numeralsplus = λm.λn.λs.λz.m s (n s z)
Church Numerals                          n から始めてplus = λm.λn.λs.λz.m s (n s z)                  m 個                  次
Church Numeralsplus = λm.λn.λs.λz.m s (n s z)plus = λm.λn.m scc n
Church Numeralsplus = λm.λn.λs.λz.m s (n s z)plus = λm.λn.m scc n           m 回         n から始めて           scc
Church Numeralstimes = λm.λn.m (plus n) c0
Church Numerals                     0 から始めてtimes = λm.λn.m (plus n) c0               m 回             n を足す
Church Numeralsiszro = λm.m (λx.fls) tru
Church Numerals                   tru から始めてiszro = λm.m (λx.fls) tru             次は常に fls
Church Numeralsprd = λm.fst (m ss zz)  ss = λp.pair (snd p) (scc (snd p))  zz = pair c0 c0
Church Numeralsprd = λm.fst (m ss zz)  ss = λp.pair (snd p) (scc (snd p))  zz = pair c0 c0  (0, 0) から始めて
Church Numeralsprd = λm.fst (m ss zz)  ss = λp.pair (snd p) (scc (snd p))  zz = pair c0 c0                     (_, x) ! (x...
Church Numerals            m 回やると、                         m = 0 の時は            (m - 1, m)     (0, 0)prd = λm.fst (m ss zz...
Enriching the        CalculusλNB  NB (3章) に λ を加える  NB (Real) と λ (Church) は、  両方とも boolean と numeral を  持っている
Enriching the      CalculusChurch ! Real  realbool = λb.b true false  realnat = λm.m (λx.succ x) 0Real ! Church  churchboo...
Enriching the     Calculus振る舞い同値 (behaviorally equivalent) どんな引数に対しても、2つの評価結果が同じ 例: call-by-value での scc c1   (λs.λz.s ((λ...
Recursion正規形 (normal form) これ以上評価できない項のこと発散 (diverge) 正規形にならない項のこと 例: (λx.x x) (λx.x x)   - omega
Recursion不動点 (fixed-point) fix = λf.   (λx.f (λy.x x y))   (λx.f (λy.x x y))              Z-combinator / call-by-value Y-c...
Recursion不動点 (fixed-point) 例: factorial = fix (λf.λn.       (iszro n) c1       (times n (f (prd n))))
RecursionReal ! Church  churchnat = fix (λf.λn.    if iszero n then c0    else scc (f (pred n))
5.3Formalities
Syntax項集合 V を変数の可算集合とする 項集合は、次を満たす最小の集合 T
Syntax項集合 T x ∈ V ! x ∈ T t ∈ T かつ x ∈ V ! λx.t ∈ T s ∈ T かつ t ∈ T ! s t ∈ T
Syntax自由変数集合 項 t の自由変数集合 FV(t)  FV(x) = {x}  FV(λx.t) = FV(t) - {x}  FV(s t) = FV(s) ∪ FV(t)
Substitutionα変換 (alpha-conversion) 束縛変数の名前を変えること 例: λy.x y   !   λw.x w
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)
Operational          SemanticsSyntax   項 (term)     値 (value)    t ::=        v ::=         x         λx.t         λx.t   ...
Operational      Semantics評価 (evaluation)        (call-by-value)       t1 ! t1’                            E-APP1    t1 t2...
Upcoming SlideShare
Loading in...5
×

Tapl 5

1,492

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,492
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
9
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×