$30 off During Our Annual Pro Sale. View Details »

ラムダ計算入門 / Introduction of Lambda Calculus

katashin
August 09, 2017

ラムダ計算入門 / Introduction of Lambda Calculus

型勉強会 #2 2017/08/09

katashin

August 09, 2017
Tweet

More Decks by katashin

Other Decks in Programming

Transcript

  1. ϥϜμܭࢉೖ໳
    ܕษڧձ #2 2017/08/09

    View Slide

  2. ࢀߟจݙ: TAPL

    View Slide

  3. ϥϜμܭࢉ
    • ͢΂ͯͷܭࢉ͕ؔ਺ఆٛͱؔ਺ద༻ʹؼண͞ΕΔମܥ

    • ߏจ͸ɺม਺ɺϥϜμந৅ (ແ໊ؔ਺)ɺؔ਺ద༻ͷ

    3ͭͷ߲ͷΈ͔Βߏ੒͞ΕΔ

    • ؔ਺ܕݴޠͷΞηϯϒϦͱݺ͹ΕͯΔΒ͍͠

    • ࠓճ͸ܕແ͠ϥϜμܭࢉΛઆ໌͠·͢

    (୯७ܕ෇͖ϥϜμܭࢉ͸࣍ճ……ʁ)

    View Slide

  4. t ::=
    x
    λx. t
    t t
    ม਺
    ϥϜμந৅
    ؔ਺ద༻
    λx. λy. x (λz. x z) y
    ྫ:

    View Slide

  5. Q ਅِ஋ͱ͔਺஋ͱ͔͕ແ͍……ʁ

    View Slide

  6. Q ਅِ஋ͱ͔਺஋ͱ͔͕ແ͍……ʁ
    A ϥϜμந৅Ͱදݱ͢Ε͹͍͍͡Όͳ͍

    View Slide

  7. ਅِ஋ͷදݱ
    tru = λt. λf. t
    fls = λt. λf. f
    → true ͱΈͳͤΔ
    → false ͱΈͳͤΔ

    View Slide

  8. ྫ͑͹ if ࣜͬΆ͍ϥϜμந৅Λ͜ͷΑ͏ʹఆٛͰ͖Δ
    test = λl. λm. λn. l m n
    e.g. test t v w 

    t ͕ tru ͷ࣌ v Λɺfls ͷ࣌ w Λฦ͢

    View Slide

  9. ɹ test tru v w
    → (λl. λm. λn. l m n) tru v w
    → (λm. λn. tru m n) v w
    → (λn. tru v n) w
    → tru v w
    → (λt. λf. t) v w
    → (λf. v) w
    → v
    t = tru ͷ࣌ͷධՁͷྲྀΕ

    View Slide

  10. ੔਺஋ͷදݱ
    c0 = λs. λz. z
    c1 = λs. λz. s z
    c2 = λs. λz. s (s z)
    c3 = λs. λz. s (s (s z))

    → 0

    → 1

    → 2

    → 3

    View Slide

  11. plus = λm. λn. λs. λz. m s (n s z)
    ଍͠ࢉΛ͢ΔϥϜμந৅

    View Slide

  12. ɹ plus c1 c3
    → (λm. λn. λs. λz. m s (n s z)) c1 c3
    → (λn. λs. λz. c1 s (n s z)) c3
    → λs. λz. c1 s (c3 s z)
    → λs. λz. (λs’. λz’. s’ z’) s (c3 s z)
    → λs. λz. (λz’. s z’) (c3 s z)
    → λs. λz. s (c3 s z)
    → λs. λz. s ((λs’’. λz’’. s’’ (s’’ (s’’ z’’)) s z)
    → λs. λz. s ((λz’’. s (s (s z’’)) z)
    → λs. λz. s (s (s (s z)))
    → c4
    ධՁͷྲྀΕ

    View Slide

  13. β-؆໿
    • [x → t2] t12
    ͸ t12
    தͷ x ͷࣗ༝ͳग़ݱΛ͢΂ͯ t2
    Ͱஔ͖׵
    ͑Δ͜ͱʹΑͬͯಘΒΕΔ߲

    • ͭ·Γؔ਺ద༻ͷධՁ
    (λx. t12) t2 → [x → t2] t12

    View Slide

  14. α-ม׵
    • ม਺໊ΛҟͳΔม਺໊ʹม׵͢Δ͜ͱ

    • ม਺໊͸ॏཁͰ͸ͳ͍ͷͰม׵ޙ΋ಉҰͷ߲ͱͳΔ

    • ͨͩ͠ผͷม਺໊ͱ͔ͿΒͳ͍Α͏ʹม׵͠ͳ͍ͱ

    ҎԼͷྫͷΑ͏ʹม׵લޙͰҟͳͬͯ͠·͏

    • ز͔ͭͷίϯύΠϥ͸ม਺ΛҰҙʹ͢ΔͨΊʹα-ม׵Λߦ͏
    λx. x x → λy. y y
    λx. x y → λy. y y

    View Slide

  15. ߲ͷ໊ແ͠දݱ
    • ม਺໊͸ͳΜͰ΋ྑ͍

    • ͦΕͳΒ࠷ॳ͔ΒҰҙʹͳΔදݱΛબ୒͢Ε͹ྑ͍

    • ࣗવ਺ k ΛɺͦΕΛғΉ k ൪໨ͷ λ ʹΑͬͯଋറ͞ΕΔ
    ม਺ͱ͢Δ
    λx. x (λy. x y) → λ. 0 (λ. 1 0)

    View Slide

  16. ࣮૷ͯ͠Έͨ
    https://github.com/ktsn/lambda-calculus

    View Slide