1. Introduction to Lambda Calculus
Introduction
πHistory
17μΈκΈ° λΌμ΄νλμΈ λ λ€μκ³Ό κ°μ μ΄μμ μΈ μ μμ νλ€.
- κ°λ₯ν λͺ¨λ λ¬Έμ λ₯Ό κΈ°μ ν μ μλ λ²μ©μΈμ΄λ₯Ό λ§λ λ€.
- λ²μ©μΈμ΄λ‘ κΈ°μ λλ λͺ¨λ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν κ²°μ λ°©λ²μ μ°Ύλλ€.
μνμ λ¬Έμ μ νμ νλ€λ©΄, λΌμ΄νλμΈ μ 첫 λ²μ§Έ μ μμ νλ κ²μ λ¬μ
μ΄ν μ΄λ€ ννμ μ§ν© μ΄λ‘ μ΄
μΌμ°¨ μ μ΄ λ
Όλ¦¬μ μΈμ΄λ‘ ννλ κ²μΌλ‘ μΆ©μ‘±λμλ€.
λ λ²μ§Έ μ μμ μ€μν μ² νμ λ¬Έμ κ° λμλλ°, "λ²μ©μΈμ΄λ‘ μ μλ λͺ¨λ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμκΉ?"λΌλ μ§λ¬Έμ΄μλ€.
보νΈμ μΌλ‘, κ·Έλ¬ν κ²μ λΆκ°λ₯νλ€κ³ 보μ΄μ§λ§, μ΄κ²μ μ¦λͺ
νλ λ°©λ²μ λͺ
ννμ§ μμλ€. μ΄λ¬ν μ§λ¬Έμ
Entscheidungsproblem(μμ¬κ²°μ λ¬Έμ )λ‘ μλ €μ§κ² λμλ€.
1936λ , Entscheidungsproblem(μμ¬κ²°μ λ¬Έμ )λ μλ‘ μ‘° μ²μΉ(Alonzo Church)μ μ¨λ° νλ§(Alan Turing)μ΄ λ 립μ μΌλ‘ λΆμ νμ¬ ν΄κ²°νμλ€. μ΄λ₯Ό μν΄μ, μ§κ΄μ μΈ 'κ²°μ κ°λ₯(decidable)'λλ λλ±ν μλ―Έλ‘ 'κ³μ°κ°λ₯(computable)'μ νμνκ° νμνλλ°, μ²μΉμ νλ§μ λκ°μ§ λ€λ₯Έ λ°©μμΌλ‘ κ³μ° λͺ¨λΈμ λμ νμ¬ ν΄κ²°νμλ€.
- μ²μΉ(1936)λ λλ€ κ³μ°λ²(lambda calculus)λΌλ νμ 체κ³λ₯Ό λ°λͺ νκ³ , μ΄ μμ€ν μ ν΅ν΄ κ³μ° κ°λ₯ν ν¨μμ κ°λ μ μ μνλ€.
- νλ§(1936/7)μ νλ§ λ¨Έμ (Turing machines)λΌκ³ λΆλ¦¬λ κΈ°κ³λ€μ λ°λͺ νκ³ , μ΄λ¬ν κΈ°κ³λ€μ ν΅ν΄ κ³μ° κ°λ₯ν κ°λ μ μ μνλ€.
λν 1936λ
μ νλ§μ λ λͺ¨λΈμ΄ λμΌν κ°λλ₯Ό κ°μ§λ©°, λ λͺ¨λΈμ΄ κ°μ κ³μ° κ°λ₯ν ν¨μλ€μ ν΄λμ€λ₯Ό μ μνλ€λ κ²μ μ¦λͺ
νμλ€. (Turing 1937)
νμ¬μ ν° λ
Έμ΄λ§ μ»΄ν¨ν°λ€μ νλ§ λ¨Έμ μ κ°λ
μ κΈ°λ°μΌλ‘ νλ€. κ°λ
μ μΌλ‘, ν° λ
Έμ΄λ§ μ»΄ν¨ν°λ€μ λλ€ μ‘μΈμ€ λ μ§μ€ν°λ₯Ό κ°μΆ νλ§ λ¨Έμ μΌλ‘ λ³Ό μ μλ€. ν¬νΈλ(Fortran), νμ€μΉΌ(Pascal)λ±μ λͺ
λ Ήν νλ‘κ·Έλλ° μΈμ΄λ€κ³Ό λͺ¨λ μ΄μ
λΈλ¦¬μ΄ μΈμ΄λ€μ νλ§ λ¨Έμ μ΄ μνλλ λ°©μμ κΈ°λ°νμ¬ μμ±λλ€.(λͺ
λ Ήλ¬Έμ μ°μμΌλ‘μ¨ νλ§ λ¨Έμ μ΄ μ§μλλ€.)
νμ€μΌ(Haskell), λ―Έλλ€(Miranda), ML λ±κ³Ό κ°μ ν¨μν νλ‘κ·Έλλ° μΈμ΄λ€μ λλ€ κ³μ°λ²μ κΈ°λ°μΌλ‘ νλ€. 리μ€ν(Lisp)λ
μ΄λ¬ν μΈμ΄λ€μ μ΄κΈ°(λΉλ‘ ν¨μνμΈμ΄ μνκ³μ λ
Όλμ΄ μμ§λ§..) μμλΌκ³ ν μ μλ€. 리λμ
λ¨Έμ (reduction machine)μ νΉν μ΄λ¬ν ν¨μν νλ‘κ·Έλλ° μΈμ΄λ€μ μ€νμ μν΄ μ€κ³λμλ€.
리μ€νλ μμν¨μν μΈμ΄κ° μλκΈ° λλ¬Έμ, νμ€μΌκ³Ό κ°μ λͺλͺ λ€λ₯Έ ν¨μν μΈμ΄λ€κ³Ό λμ‘°μ μ΄λ€. 리μ€νλ 리λμ λ¨Έμ μμμ μ€νλμ§λ§ λμμ λͺ λ Ήν νλ‘κ·Έλλ°κ³Ό λ³μ΄(mutability)λ νμ©νλ€. μ΄λ¬ν νΉμ± λλ¬Έμ νμ€μΌκ³Ό κ°μ μμν¨μν νλ‘κ·Έλλ¨Έλ€μ΄ 리μ€νλ₯Ό μ νΈνμ§ μμΌλ©°, μμ§κΉμ§λ "리μ€νλ μ§μ€λ‘ ν¨μν μΈμ΄μΈκ°?" μ κ°μ λ Όλμ΄ μλ€. λλ λνμ λ μΈκ³΅μ§λ₯ μμ μμ 리μ€νλ₯Ό λ°°μ κ³ , μκ³ λ¦¬μ¦, λ°μ΄ν° ꡬ쑰 κ³Όμ λ₯Ό 리μ€νλ‘ κ΅¬ννμ¬ μ μΆν μ λλ‘ λ¦¬μ€νμ λΉ μ§μ μ΄ μμλ€. νΉν κ΅λ΄μ λ²μμκ° μ λ¬Έμμ€μ 1κΆλ°μ μκΈ° λλ¬Έμ, λμκ΄μμ μ€λλ μμλ€μ λΉλ € μ½μλ κΈ°μ΅μ΄μλ€. μ λͺ ν μ± μ€μ SICP(λΉλ‘ schemeμ μ¬μ©νμ§λ§ μκ΄μλ€)λ ν΄ κ·Έλ μ΄μμ΄ μ΄ μ± λ€μ 보며 리μ€νμ 맀λ ₯μ λΉ μ Έλ³΄κΈΈ λ°λλ€.
πReduction and functional programming
ν¨μν νλ‘κ·Έλ¨μ μκ³ λ¦¬μ¦κ³Ό μ λ ₯μ λνλ΄λ ννμ \(E\)λ‘ κ΅¬μ±λλ€. μ΄ ννμ \(E\)λ μΌμ ν μ¬μμ± κ·μΉμ λ°λΌ λ체λ μ μλλ°,리λμ μ ννμ \(E\)μ μΌλΆλΆ \(P\)μ μ£Όμ΄μ§ μ¬μμ± κ·μΉμ λ°λΌ λ€λ₯Έ ννμ \(P'\)λ‘ λ체νλ κ²μ μλ―Ένλ€. κΈ°νΈμ μΌλ‘ νννλ©΄ λ€μκ³Ό κ°λ€. \[E[P] \rightarrow E[P'],\] λ¨ \(P \rightarrow P'\)μ κ·μΉμ λ°λΌ λ체 κ°λ₯ν κ²½μ°μ΄λ€. μ΄ λ¦¬λμ κ³Όμ μ κ²°κ³Όμ μΌλ‘ λ μ΄μ μ¬μμ±μ΄ λΆκ°λ₯ν λΆλΆμ΄ μλ ννμμ΄ λμ¬ λκΉμ§ λ°λ³΅λλ€. μ΄λ κ² μ»μ΄μ§ μ΅μ’ ννμμ μ κ·ν(normal form)μ΄λΌκ³ νλ©°, μ£Όμ΄μ§ ν¨μν νλ‘κ·Έλ¨μ μΆλ ₯κ°μ λνλΈλ€.
μμ: $$ \begin{aligned} (7 + 4) \cdot (8 + 5 \cdot 3) &\rightarrow 11 \cdot (8 + 5 \cdot 3)\\ &\rightarrow 11 \cdot (8 + 15)\\ &\rightarrow 11 \cdot 23\\ &\rightarrow 253. \end{aligned} $$
μμ μμμμ 리λμ
κ·μΉμ μ«μλ€μ λν λ§μ
κ³Ό κ³±μ
μ 'ν(table)'λ‘ κ΅¬μ±λλ€.
ν¨μν νλ‘κ·Έλλ°μμλ 리λμ
μ ν΅ν΄ κΈ°νΈ μ°μ°(symbolic computation)μ΄ κ°λ₯νλ€. μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ΄
first of (sort (append ('dog', 'rabbit') (sort (('mouse', 'cat')))))
-> first of (sort (append ('dog', 'rabbit') ('cat', 'mouse')))
-> first of (sort ('dog', 'rabbit', 'cat', 'mouse'))
-> first of ('cat', 'dog', 'mouse', 'rabbit')
-> 'cat'.
μ΄λ¬ν κΈ°νΈ μ°μ° κ³Όμ μ appendμ sortμ κ°μ ν¨μλ€μ΄ μΌλΆ μ¬μμ± κ·μΉμ μν΄ μ μλ μ μμμ 보μ¬μ€λ€. μ¬μμ± κ·μΉμ ν΅ν΄ μ μλ μ΄λ¬ν ν¨μλ€μ 'μ½€λΉλ€μ΄ν°(combinator)'λΌκ³ λΆλ¦¬λ©°, ν¨μν νλ‘κ·Έλλ°μμ κΈ°νΈ λ°μ΄ν°λ₯Ό μ‘°μνκΈ° μν νμμ μΈ λκ΅¬λ‘ μ¬μ©λλ€.
리λμ μμ€ν μ μΌλ°μ μΌλ‘ \(Church-Rosser\) μμ±μ λ§μ‘±νλλ°, μ΄λ μ»μ΄μ§ μ κ·νμ΄ νμ μ©μ΄λ€μ κ³μ° μμμ λ 립μ μ΄λΌλ κ²μ λνλΈλ€. μ€μ λ‘ μ²« λ²μ§Έ μμλ λ€μκ³Ό κ°μ΄ 리λμ λ μ μλ€.
$$ \begin{aligned} (7 + 4) \cdot (8 + 5 \cdot 3) &\rightarrow (7 + 4) \cdot (8 + 15)\\ &\rightarrow 11 \cdot (8 + 15)\\ &\rightarrow 11 \cdot 23\\ &\rightarrow 253. \end{aligned} $$
νΉμ μ¬λ¬ ννμλ€μ λμμ νκ°ν¨μΌλ‘μ¨ λ λ¨μνκ² λ¦¬λμ λ μλ μλ€.
$$ \begin{aligned} (7 + 4) \cdot (8 + 5 \cdot 3) &\rightarrow 11 \cdot (8 + 15)\\ &\rightarrow 11 \cdot 23\\ &\rightarrow 253. \end{aligned} $$
πApplication and abstraction
\(\lambda-\)κ³μ°μ 첫 λ²μ§Έ κΈ°λ³Έ μμ μ μ μ©(\(application\))μ΄λ€. ννμ \(F \cdot A\) λλ \(F A\)λ λ°μ΄ν° \(F\)λ₯Ό μκ³ λ¦¬μ¦μΌλ‘ κ°μ£Όνμ¬ λ°μ΄ν° \(A\)λ₯Ό μ λ ₯μΌλ‘ μ μ©νλ κ²μ λνλΈλ€. μ΄λ λ κ°μ§ κ΄μ μΌλ‘ λ³Ό μ μλλ°, κ³μ° κ³Όμ \(F A\) λλ μ΄ κ³Όμ μ μΆλ ₯μΌλ‘ λ³Ό μ μλ€. 첫 λ²μ§Έ κ΄μ μ λ³ν(conversion)λλ λ λμ 리λμ (reduction) κ°λ μΌλ‘ ν¬μ°©λλ©°, λ λ²μ§Έ κ΄μ μ λͺ¨λΈ(μλ―Έλ‘ ) κ°λ μΌλ‘ ννλλ€. μ΄ μ΄λ‘ μ νμ μ μ νμ΄ μλ€(type-free). μ¦, \(F\)κ° μκΈ° μμ μκ² μ μ©λ \(F F\)μ κ°μ ννμμ κ³ λ €ν μ μλ€. μ΄λ μ¬κ·λ₯Ό λͺ¨λ°©νλλ° μ μ©νλ€.
λ€λ₯Έ κΈ°λ³Έ μμ
μ μΆμν(\(abstraction\))μ΄λ€. λ§μ½ \(M \equiv M[x]\)λΌλ ννμμ΄ \(x\)μ μμ‘΄νλ€λ©΄, \(\lambda{x}.M[x]\)λ ν¨μ \(x \mapsto M[x]\)λ₯Ό λνλΈλ€.
μ μ©(\(application\))κ³Ό μΆμν(\(abstraction\))λ λ€μκ³Ό κ°μ μ§κ΄μ μΈ κ³΅μμμ ν¨κ» μλνλ€.
\[(\lambda{x}.2 \cdot x + 1)3 = 2 \cdot 3 + 1 \space\space\space (= 7).\]
μ¦, \((\lambda{x}.2 \cdot x + 1)3\)μ ν¨μ \(x \mapsto 2 \cdot x + 1\)μ μΈμ \(3\)μ μ μ©νμ¬ \(2 \cdot 3 + 1\)λ‘ κ³μ°λλ©° κ°μ \(7\)μ΄ λλ€. μΌλ°μ μΌλ‘ \((\lambda{x}.M[x])N = M[N]\) μμ λ€μκ³Ό κ°μ΄ μ°μ΄κΈ°λ νλ€.
\[(\lambda{x}.M)N = M[x \coloneqq N], \qquad (\beta)\]
μ¬κΈ°μ \([x := N]\)μ \(x\)μ \(N\)μ λμ
νλ κ²μ λνλ΄λλ°, λλκ²λ \((\beta)\)κ° \(\lambda-\)κ³μ°μ μ μΌν νμμ μΈ κ³΅λ¦¬μ΄μ§λ§, κ·Έ κ²°κ³Όλ‘ μ»μ΄μ§λ μ΄λ‘ μ κ½€ 볡μ‘νλ€.
πFree and bound variables
μΆμν\((abstraction)\)λ λ³μ \(x\)λ₯Ό \(M\) μμμ "λ¬Άλλ€\((bind)\)"κ³ νννλ€. μλ₯Ό λ€μ΄, \(\lambda{x}.yx\)μμ \(x\)λ λ¬Άμ¬μλ λ³μ(bound variable)μ΄κ³ \(y\)λ μμ λ³μ(free variable)λΌκ³ νλ€. μΉν \([x := N]\)μ \(x\)μ μμ λ±μ₯(free occurrences)μλ§ μ μ©λλ€ \[yx(\lambda{x}.x)[x := N] \equiv yN(\lambda{x}.x)\]
λ―Έμ λΆνμμλ μ μ¬ν λ³μ λ¬Άμ κ°λ
μ΄ μλ€. \(\int_{a}^bf(x,y)dx\)μμ λ³μ \(x\)λ λ¬Άμ¬μκ³ \(y\)λ μμ λ³μμ΄λ€.
λͺ
λ£μ±μ μν΄, νΉμ ννμμ λ±μ₯νλ λ¬ΆμΈ λ³μλ€μ μμ λ³μλ€κ³Ό λ€λ₯΄λ€κ³ κ°μ νλ€. μ΄κ²μ λ¬ΆμΈ λ³μλ€μ μ΄λ¦μ λ³κ²½ν¨μΌλ‘μ¨ μΆ©μ‘±ν μ μλλ°, μλ₯Ό λ€μ΄, \(\lambda{x}.x\)λ \(\lambda{y}.y\)λ‘ λ°λ μ μλ€. μ¬μ€, μ΄λ¬ν ννμλ€μ λμΌν λ°©μμΌλ‘ μλνλ€.
\[(\lambda{x}.x)a = a = (\lambda{y}.y)a\]
κ·Έλ¦¬κ³ μ¬μ€μ μ΄λ€μ κ°μ μλλ μκ³ λ¦¬μ¦μ λνλΈλ€. λ°λΌμ λ¬ΆμΈ λ³μλ€μ μ΄λ¦λ§ λ€λ₯Έ ννμλ€μ λμΌν κ²μΌλ‘ κ°μ£Όλλ€.
πFunctions of more arguments
μ¬λ¬ μΈμλ₯Ό κ°μ§λ ν¨μλ μ μ©μ λ°λ³΅ν¨μΌλ‘μ¨ μ»μ μ μλ€. μ΄ μμ΄λμ΄λ SchΓΆnfinkel(1924)μ μν΄ μ μλμμ§λ§, H.B. Curryκ° λ 립μ μΌλ‘ λμ ν ν \(currying\)μ΄λΌλ μ΄λ¦μΌλ‘ λ리 μλ €μ‘λ€. μ§κ΄μ μΌλ‘ \(f(x, y)\)κ° λ κ°μ μΈμμ μμ‘΄νλ€λ©΄, λ€μκ³Ό κ°μ΄ μ μν μ μλ€. \[F_x = \lambda{y}.f(x,y),\] \[F = \lambda{x}.F_x.\] κ·Έλ° λ€μ, \[(Fx)y = F_xy = f(x, y). \qquad (\rho)\]
μ΄λ κ² ν¨μΌλ‘μ¨ λ μΈμλ₯Ό κ°μ§λ ν¨μ \(f(x, y)\)λ₯Ό λ¨μΌ μΈμ ν¨μ \(F\)λ‘ λ³νν μ μλ€. μ΄λ¬ν κΈ°λ²μ \(currying\)λΌκ³ λΆλ¦¬λ©°, ν¨μν νλ‘κ·Έλλ°μμ ν¨μλ€μ λ μ μ°νκ² μ‘°μνλ λ°μ μ¬μ©λλ€.
λ§μ§λ§ μμ λ°λ³΅μ μΈ μ μ©μ λν΄ μΌμͺ½μΌλ‘ κ²°ν©\((association)\)νλ κ²μ΄ νΈλ¦¬νλ€λ κ²μ 보μ¬μ€λ€. \[FM_1 Β·Β·Β· M_n \space denotes \space (Β·Β·((FM_1)M_2)Β·Β·Β·M_n).\] μ \((\rho)\)μ κ·Έλ° λ€μ λ€μκ³Ό κ°μ΄ ννλλ€. \[F{xy} = f(x, y)\] μ΄μ λ§μ°¬κ°μ§λ‘, λ°λ³΅μ μΈ μΆμνλ μ€λ₯Έμͺ½μΌλ‘ κ²°ν©νλ κ²μ μ¬μ©νλ€. \[\lambda{x_1} Β·Β·Β· x_n.f(x_1, ...., x_n) \space denotes \space \lambda{x_1}.(\lambda{x_2}.(Β·Β·Β·(\lambda{x_n}.f(x_1,....x_n))Β·Β·)).\] κ·Έλ¬λ©΄ μμμ μ μν \(F\)μ λν΄ λ€μ \[F = \lambda{xy}.f(x, y)\] κ·Έλ¦¬κ³ \((\rho)\)λ λ€μκ³Ό κ°μ΄ ννλλ€. \[(\lambda{xy}.f(x, y))xy = f(x, y).\] \(n\)κ°μ μΈμμ λν΄ λ€μκ³Ό κ°μ΄ νννλ€. \[(\lambda{x_1}Β·Β·Β·x_n.f(x_1,Β·Β·Β·,x_n))x_1Β·Β·Β·x_n = f(x_1,....,x_n)\] \(n\)λ² \((\beta)\)λ₯Ό μ¬μ©νμ¬ μ΄ μμ λ€μκ³Ό κ°μ΄ λ²‘ν° νκΈ°λ‘ ννλλ€. \[(\lambda{\vec{x}}.f[{\vec{x}}])\vec{x} = f[\vec{x}];\] λ³΄λ€ μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ΄ νννλ€. \[(\lambda{\vec{x}}.f[{\vec{x}}])\vec{N} = f[\vec{N}];\]