Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ラムダ計算に基づいた純粋関数型言語の実装~ラスト~ #TechLunch

ラムダ計算に基づいた純粋関数型言語の実装~ラスト~ #TechLunch

20110713(水) @ Livesense TechLunch
発表者:塩足 拓也

Livesense Inc.

April 23, 2014
Tweet

More Decks by Livesense Inc.

Other Decks in Technology

Transcript

  1. Agenda  Review(Digest) • Lambda Calculus • Bound Variable and

    Free Variable • Reduction Rule  Definition • Beta Reduction • Alpha conversion  Implementation
  2. Review(Bound Variable and Free Variable) 束縛変数(Bound Variable) ラムダ抽象によって束縛(bound)された変数 自由変数(Free Variable)

    ラムダ抽象によって束縛(bound)されていない変数 FV(x) = {x}, where x is a variable FV(λx.M) = FV(M) \ {x} FV(M N) = FV(M) ∪ FV(N)
  3. Definition(Beta Reduction) Example 1. (λx.x) y → [y/x] x →

    y 2. (λx.λy.x) z → [z/x] λy.x → λy.z 3. (λx.x)(λy.y) → [λy.y/x] x → λy.y 4. (λa.b)cd → ?
  4. Definition(Beta Reduction) M1 →  M1' M1 M2 → M1' M2 Definition

    (R-App1) R-Betaは適用される関数がλ抽象の形になっているこ とを要求 今回は適用される関数が(λa.b)cという関数適用の形 をしている そこで、また新たな変換規則を導入、、、
  5. Definition(Beta Reduction) M2 →  M2' M1 M2 → M1 M2' Definition

    (R-App2) 同様の理由で関数適用M1 M2において引数M2 を簡約する規則も必要
  6. Definition(Alpha Conversion) (λx.λy.xy)y → [y/x] λy.xy → λy.y y •

    1番目・2番目のyと3番目のyは別々の変数 • 別々の変数なのに同一視してしまったため、誤った簡約 を行ってしまった • 1番目・2番目のyは仮引数なので、名前は何でも良い (置き換え可能) • 簡約する前に、名前を置き換える (λx.λy.xy)y → (λx.λy'.xy')y → λy'.y y' この名前置き換えのことをα変換という
  7. Definition(Alpha Conversion) [M2/x] y = [M2/x] (λy.M) = λy'.[M2/x]([y'/y] M)

    [M2/x] (M M') = ([M2/x] e) ([M2 / x] M') Definition M2 (x == y)の場合 y (x != y)の場合