SlideShare a Scribd company logo
Lambda calculus
eunmin
λ x . x
y x
y x z
function(x) {
return x;
}
y(x);
y(x(z));
λ x . (λ y . y x)
λ x y . y x
function(x) {
return function(y) {
return y(x);
};
}
function(x, y) {
return y(x);
}
(λ x . x) y
(λ x . x) (λ x . x)
(function(x) {
return x;
})(y);
(function(x) {
return x;
})(function(x) {
return x;
});
α-equivalent
λ x . x
=
λ y . y
λ x . x
!=
λ x . y
(λ x . x) (λ x . x)
=
(λ x . x) (λ y . y)
β-reduction
(λ x. x) y
y
(λ x . x) (λ y . y)
λ y . y
(λ x y . x y) (λ x . x) (λ x . x)
(λ x . x) (λ x . x)
λ x . x
β-reduction
(λ x y . x y) (λ x . x) (λ x . x)
(function (x, y) {
return x(y);
})(function (x) {
return x;
},
function (x) {
return x;
});
β-reduction
(λ x y . x y) (λ x . x) (λ x . x)
(function (x, y) {
return x(y);
})(function (x) {
return x;
},
function (x) {
return x;
});
β-reduction
(λ x y . x y) (λ x . x) (λ x . x)
(function (x, y) {
return x(y);
})(function (x) {
return x;
},
function (x) {
return x;
});
β-reduction
(λ x y . x y) (λ x . x) (λ x . x)
(function (x, y) {
return x(y);
})(function (x) {
return x;
},
function (x) {
return x;
});
β-reduction
(λ x y . x y) (λ x . x) (λ x . x)
(λ x . x) (λ x . x)
(function (x) {
return x;
})(function (x) {
return x;
});
β-reduction
(λ x y . x y) (λ x . x) (λ x . x)
(λ x . x) (λ x . x)
(function (x) {
return x;
})(function (x) {
return x;
});
β-reduction
(λ x y . x y) (λ x . x) (λ x . x)
(λ x . x) (λ x . x)
(function (x) {
return x;
})(function (x) {
return x;
});
β-reduction
(λ x y . x y) (λ x . x) (λ x . x)
(λ x . x) (λ x . x)
λ x . x
function (x) {
return x;
}
Church encoding
λ s z . z
Church encoding
λ s z . z 0
Church encoding
λ s z . z 0
λ s z . s z 1
Church encoding
λ s z . z 0
λ s z . s z 1
λ s z . s (s z) 2
Church encoding
λ s z . z 0
λ s z . s z 1
λ s z . s (s z) 2
λ s z . s (s (s z)) 3
Church encoding
0
Encoding
0
1
Encoding
0
1
2
Encoding
0
1
2
3
Encoding
0
1
2
3
λ s z . z 0
λ s z . s z 1
λ s z . s (s z) 2
λ s z . s (s (s z)) 3
+
λ x y. (λ s z . (x s (y s z)))
function (x, y) {
return function (s, z) {
return x(s(y(s, z)));
}
}
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s z . s z)(λ s z . s (s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s z . s z)(λ s z . s (s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s z . s z)(λ s z . s (s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s z . s z)(λ s z . s (s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s z . s z)(λ s z . s (s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3)) ;; α-equivalent
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
λ s z . ((λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))) ;;
β-reduction
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z))
λ s z . s (s (s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z))
λ s z . s (s (s z))
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z))
λ s z . s (s (s z))
λ s z . z 0
λ s z . s z 1
λ s z . s (s z) 2
λ s z . s (s (s z)) 3
1 + 2
+ 1 2
(λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3
(s3 z3))
λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z))
λ s z . s (s (s z)) = 3
λ s z . z 0
λ s z . s z 1
λ s z . s (s z) 2
λ s z . s (s (s z)) 3
Boolean
λ t f . t true
Boolean
λ t f . t true
λ t f . f false
function(t, f) {
return t;
}
function(t, f) {
return f;
}
if-else
λ b t f . b t f
function(b, t, f) {
return b(t, f);
}
if true 1 else 2
if (true) {
return 1;
} else {
return 2;
}
if (true) { return 1; } else { return 2; }
if-else = λ b t f . b t f
true = λ t f . t
1 = λ s z . s z
2 = λ s z . s (s z)
if-else true 1 2
(λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
if (true) { return 1; } else { return 2; }
if-else = λ b t f . b t f
true = λ t f . t
1 = λ s z . s z
2 = λ s z . s (s z)
if-else true 1 2
(λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
if (true) { return 1; } else { return 2; }
if-else = λ b t f . b t f
true = λ t f . t
1 = λ s z . s z
2 = λ s z . s (s z)
if-else true 1 2
(λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
if (true) { return 1; } else { return 2; }
if-else = λ b t f . b t f
true = λ t f . t
1 = λ s z . s z
2 = λ s z . s (s z)
if-else true 1 2
(λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
if (true) { return 1; } else { return 2; }
if-else = λ b t f . b t f
true = λ t f . t
1 = λ s z . s z
2 = λ s z . s (s z)
if-else true 1 2
(λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
if (true) { return 1; } else { return 2; }
if-else = λ b t f . b t f
true = λ t f . t
1 = λ s z . s z
2 = λ s z . s (s z)
if-else true 1 2
(λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
(λ t f . t)(λ s z . s z)(λ s z . s (s z)) ;; β-reduction
if (true) { return 1; } else { return 2; }
if-else = λ b t f . b t f
true = λ t f . t
1 = λ s z . s z
2 = λ s z . s (s z)
if-else true 1 2
(λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
(λ t f . t)(λ s z . s z)(λ s z . s (s z))
if (true) { return 1; } else { return 2; }
if-else = λ b t f . b t f
true = λ t f . t
1 = λ s z . s z
2 = λ s z . s (s z)
if-else true 1 2
(λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
(λ t f . t)(λ s z . s z)(λ s z . s (s z))
(λ s z . s z) ;; β-reduction
if (true) { return 1; } else { return 2; }
if-else = λ b t f . b t f
true = λ t f . t
1 = λ s z . s z
2 = λ s z . s (s z)
if-else true 1 2
(λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
(λ t f . t)(λ s z . s z)(λ s z . s (s z))
λ s z . s z
if (true) { return 1; } else { return 2; }
if-else = λ b t f . b t f
true = λ t f . t
1 = λ s z . s z
2 = λ s z . s (s z)
if-else true 1 2
(λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
(λ t f . t)(λ s z . s z)(λ s z . s (s z))
λ s z . s z = 1
Loop (Recursion)
f = λ x . f x
function f(x) {
return f(x);
}
Loop (Recursion)
f = λ x . f x
function f(x) {
return f(x);
}
Loop (Recursion)
Y combinator
Y = λ y . (λ x . y (x x)) (λ x . y (x x))
Y f = f Y f = f f Y f = f f f Y f = …
loop f with Y Lambda Abstraction
Y f
(λ y . (λ x . y (x x)) (λ x . y (x x)))f
Y f
(λ y . (λ x . y (x x)) (λ x . y (x x)))f
(λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f ;; α-equivalent
Y f
(λ y . (λ x . y (x x)) (λ x . y (x x)))f
(λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f
Y f
(λ y . (λ x . y (x x)) (λ x . y (x x)))f
(λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f
(λ x2 . f (x2 x2)) (λ x3 . f (x3 x3)) ;; β-reduction
Y f
(λ y . (λ x . y (x x)) (λ x . y (x x)))f
(λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f
(λ x2 . f (x2 x2)) (λ x3 . f (x3 x3))
Y f
(λ y . (λ x . y (x x)) (λ x . y (x x)))f
(λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f
(λ x2 . f (x2 x2)) (λ x3 . f (x3 x3))
Y f
(λ y . (λ x . y (x x)) (λ x . y (x x)))f
(λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f
(λ x2 . f (x2 x2)) (λ x3 . f (x3 x3))
f (λ x3 . f (x3 x3)) (λ x3 . f (x3 x3)) ;; β-reduction
Y f
(λ y . (λ x . y (x x)) (λ x . y (x x)))f
(λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f
(λ x2 . f (x2 x2)) (λ x3 . f (x3 x3))
f (λ x3 . f (x3 x3)) (λ x3 . f (x3 x3))
Y f
(λ y . (λ x . y (x x)) (λ x . y (x x)))f
(λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f
(λ x2 . f (x2 x2)) (λ x3 . f (x3 x3))
f (λ x3 . f (x3 x3)) (λ x3 . f (x3 x3))
f (λ x . y (x x)) (λ x . y (x x)) ;; α-equivalent
Y f
(λ y . (λ x . y (x x)) (λ x . y (x x)))f
(λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f
(λ x2 . f (x2 x2)) (λ x3 . f (x3 x3))
f (λ x3 . f (x3 x3)) (λ x3 . f (x3 x3))
f (λ x . y (x x)) (λ x . y (x x))
Y f
(λ y . (λ x . y (x x)) (λ x . y (x x)))f
(λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f
(λ x2 . f (x2 x2)) (λ x3 . f (x3 x3))
f (λ x3 . f (x3 x3)) (λ x3 . f (x3 x3))
f (λ x . f (x x)) (λ x . f (x x))
Y f
(λ y . (λ x . y (x x)) (λ x . y (x x)))f
(λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f
(λ x2 . f (x2 x2)) (λ x3 . f (x3 x3))
f (λ x3 . f (x3 x3)) (λ x3 . f (x3 x3))
f Y f

More Related Content

PDF
Tabla de Dualidad Transformada Z, Transformada de LaPlace y Discreta.
PDF
Space time relations
PDF
Transformasi Laplace
DOC
Bài tập có lời giải chương 1
DOCX
PPTX
Говнокод
PDF
Clojure Monad
PDF
동시성 프로그래밍 하기 좋은 Clojure
Tabla de Dualidad Transformada Z, Transformada de LaPlace y Discreta.
Space time relations
Transformasi Laplace
Bài tập có lời giải chương 1
Говнокод
Clojure Monad
동시성 프로그래밍 하기 좋은 Clojure
Ad

Lambda calculus

  • 2. λ x . x y x y x z function(x) { return x; } y(x); y(x(z));
  • 3. λ x . (λ y . y x) λ x y . y x function(x) { return function(y) { return y(x); }; } function(x, y) { return y(x); }
  • 4. (λ x . x) y (λ x . x) (λ x . x) (function(x) { return x; })(y); (function(x) { return x; })(function(x) { return x; });
  • 5. α-equivalent λ x . x = λ y . y λ x . x != λ x . y (λ x . x) (λ x . x) = (λ x . x) (λ y . y)
  • 6. β-reduction (λ x. x) y y (λ x . x) (λ y . y) λ y . y (λ x y . x y) (λ x . x) (λ x . x) (λ x . x) (λ x . x) λ x . x
  • 7. β-reduction (λ x y . x y) (λ x . x) (λ x . x) (function (x, y) { return x(y); })(function (x) { return x; }, function (x) { return x; });
  • 8. β-reduction (λ x y . x y) (λ x . x) (λ x . x) (function (x, y) { return x(y); })(function (x) { return x; }, function (x) { return x; });
  • 9. β-reduction (λ x y . x y) (λ x . x) (λ x . x) (function (x, y) { return x(y); })(function (x) { return x; }, function (x) { return x; });
  • 10. β-reduction (λ x y . x y) (λ x . x) (λ x . x) (function (x, y) { return x(y); })(function (x) { return x; }, function (x) { return x; });
  • 11. β-reduction (λ x y . x y) (λ x . x) (λ x . x) (λ x . x) (λ x . x) (function (x) { return x; })(function (x) { return x; });
  • 12. β-reduction (λ x y . x y) (λ x . x) (λ x . x) (λ x . x) (λ x . x) (function (x) { return x; })(function (x) { return x; });
  • 13. β-reduction (λ x y . x y) (λ x . x) (λ x . x) (λ x . x) (λ x . x) (function (x) { return x; })(function (x) { return x; });
  • 14. β-reduction (λ x y . x y) (λ x . x) (λ x . x) (λ x . x) (λ x . x) λ x . x function (x) { return x; }
  • 17. Church encoding λ s z . z 0 λ s z . s z 1
  • 18. Church encoding λ s z . z 0 λ s z . s z 1 λ s z . s (s z) 2
  • 19. Church encoding λ s z . z 0 λ s z . s z 1 λ s z . s (s z) 2 λ s z . s (s (s z)) 3
  • 24. Encoding 0 1 2 3 λ s z . z 0 λ s z . s z 1 λ s z . s (s z) 2 λ s z . s (s (s z)) 3
  • 25. + λ x y. (λ s z . (x s (y s z))) function (x, y) { return function (s, z) { return x(s(y(s, z))); } }
  • 26. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s z . s z)(λ s z . s (s z))
  • 27. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s z . s z)(λ s z . s (s z))
  • 28. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s z . s z)(λ s z . s (s z))
  • 29. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s z . s z)(λ s z . s (s z))
  • 30. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s z . s z)(λ s z . s (s z))
  • 31. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3)) ;; α-equivalent
  • 32. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3))
  • 33. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3))
  • 34. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3)) λ s z . ((λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))) ;; β-reduction
  • 35. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3)) λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
  • 36. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3)) λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
  • 37. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3)) λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z))
  • 38. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3)) λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z)) λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z))
  • 39. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3)) λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z)) λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z))
  • 40. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3)) λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z)) λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z))
  • 41. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3)) λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z)) λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z))
  • 42. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3)) λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z)) λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z)) λ s z . s (s (s z))
  • 43. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3)) λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z)) λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z)) λ s z . s (s (s z))
  • 44. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3)) λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z)) λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z)) λ s z . s (s (s z)) λ s z . z 0 λ s z . s z 1 λ s z . s (s z) 2 λ s z . s (s (s z)) 3
  • 45. 1 + 2 + 1 2 (λ x y. (λ s z . (x s (y s z))))(λ s2 z2 . s2 z2)(λ s3 z3 . s3 (s3 z3)) λ s z . (λ s2 z2 . s2 z2) s ((λ s3 z3 . s3 (s3 z3)) s z)) λ s z . s ((λ s3 z3 . s3 (s3 z3)) s z)) λ s z . s (s (s z)) = 3 λ s z . z 0 λ s z . s z 1 λ s z . s (s z) 2 λ s z . s (s (s z)) 3
  • 46. Boolean λ t f . t true
  • 47. Boolean λ t f . t true λ t f . f false function(t, f) { return t; } function(t, f) { return f; }
  • 48. if-else λ b t f . b t f function(b, t, f) { return b(t, f); }
  • 49. if true 1 else 2 if (true) { return 1; } else { return 2; }
  • 50. if (true) { return 1; } else { return 2; } if-else = λ b t f . b t f true = λ t f . t 1 = λ s z . s z 2 = λ s z . s (s z) if-else true 1 2 (λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
  • 51. if (true) { return 1; } else { return 2; } if-else = λ b t f . b t f true = λ t f . t 1 = λ s z . s z 2 = λ s z . s (s z) if-else true 1 2 (λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
  • 52. if (true) { return 1; } else { return 2; } if-else = λ b t f . b t f true = λ t f . t 1 = λ s z . s z 2 = λ s z . s (s z) if-else true 1 2 (λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
  • 53. if (true) { return 1; } else { return 2; } if-else = λ b t f . b t f true = λ t f . t 1 = λ s z . s z 2 = λ s z . s (s z) if-else true 1 2 (λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
  • 54. if (true) { return 1; } else { return 2; } if-else = λ b t f . b t f true = λ t f . t 1 = λ s z . s z 2 = λ s z . s (s z) if-else true 1 2 (λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z))
  • 55. if (true) { return 1; } else { return 2; } if-else = λ b t f . b t f true = λ t f . t 1 = λ s z . s z 2 = λ s z . s (s z) if-else true 1 2 (λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z)) (λ t f . t)(λ s z . s z)(λ s z . s (s z)) ;; β-reduction
  • 56. if (true) { return 1; } else { return 2; } if-else = λ b t f . b t f true = λ t f . t 1 = λ s z . s z 2 = λ s z . s (s z) if-else true 1 2 (λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z)) (λ t f . t)(λ s z . s z)(λ s z . s (s z))
  • 57. if (true) { return 1; } else { return 2; } if-else = λ b t f . b t f true = λ t f . t 1 = λ s z . s z 2 = λ s z . s (s z) if-else true 1 2 (λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z)) (λ t f . t)(λ s z . s z)(λ s z . s (s z)) (λ s z . s z) ;; β-reduction
  • 58. if (true) { return 1; } else { return 2; } if-else = λ b t f . b t f true = λ t f . t 1 = λ s z . s z 2 = λ s z . s (s z) if-else true 1 2 (λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z)) (λ t f . t)(λ s z . s z)(λ s z . s (s z)) λ s z . s z
  • 59. if (true) { return 1; } else { return 2; } if-else = λ b t f . b t f true = λ t f . t 1 = λ s z . s z 2 = λ s z . s (s z) if-else true 1 2 (λ b t f . b t f)(λ t f . t)(λ s z . s z)(λ s z . s (s z)) (λ t f . t)(λ s z . s z)(λ s z . s (s z)) λ s z . s z = 1
  • 60. Loop (Recursion) f = λ x . f x function f(x) { return f(x); }
  • 61. Loop (Recursion) f = λ x . f x function f(x) { return f(x); }
  • 62. Loop (Recursion) Y combinator Y = λ y . (λ x . y (x x)) (λ x . y (x x)) Y f = f Y f = f f Y f = f f f Y f = … loop f with Y Lambda Abstraction
  • 63. Y f (λ y . (λ x . y (x x)) (λ x . y (x x)))f
  • 64. Y f (λ y . (λ x . y (x x)) (λ x . y (x x)))f (λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f ;; α-equivalent
  • 65. Y f (λ y . (λ x . y (x x)) (λ x . y (x x)))f (λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f
  • 66. Y f (λ y . (λ x . y (x x)) (λ x . y (x x)))f (λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f (λ x2 . f (x2 x2)) (λ x3 . f (x3 x3)) ;; β-reduction
  • 67. Y f (λ y . (λ x . y (x x)) (λ x . y (x x)))f (λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f (λ x2 . f (x2 x2)) (λ x3 . f (x3 x3))
  • 68. Y f (λ y . (λ x . y (x x)) (λ x . y (x x)))f (λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f (λ x2 . f (x2 x2)) (λ x3 . f (x3 x3))
  • 69. Y f (λ y . (λ x . y (x x)) (λ x . y (x x)))f (λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f (λ x2 . f (x2 x2)) (λ x3 . f (x3 x3)) f (λ x3 . f (x3 x3)) (λ x3 . f (x3 x3)) ;; β-reduction
  • 70. Y f (λ y . (λ x . y (x x)) (λ x . y (x x)))f (λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f (λ x2 . f (x2 x2)) (λ x3 . f (x3 x3)) f (λ x3 . f (x3 x3)) (λ x3 . f (x3 x3))
  • 71. Y f (λ y . (λ x . y (x x)) (λ x . y (x x)))f (λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f (λ x2 . f (x2 x2)) (λ x3 . f (x3 x3)) f (λ x3 . f (x3 x3)) (λ x3 . f (x3 x3)) f (λ x . y (x x)) (λ x . y (x x)) ;; α-equivalent
  • 72. Y f (λ y . (λ x . y (x x)) (λ x . y (x x)))f (λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f (λ x2 . f (x2 x2)) (λ x3 . f (x3 x3)) f (λ x3 . f (x3 x3)) (λ x3 . f (x3 x3)) f (λ x . y (x x)) (λ x . y (x x))
  • 73. Y f (λ y . (λ x . y (x x)) (λ x . y (x x)))f (λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f (λ x2 . f (x2 x2)) (λ x3 . f (x3 x3)) f (λ x3 . f (x3 x3)) (λ x3 . f (x3 x3)) f (λ x . f (x x)) (λ x . f (x x))
  • 74. Y f (λ y . (λ x . y (x x)) (λ x . y (x x)))f (λ y . (λ x2 . y (x2 x2)) (λ x3 . y (x3 x3)))f (λ x2 . f (x2 x2)) (λ x3 . f (x3 x3)) f (λ x3 . f (x3 x3)) (λ x3 . f (x3 x3)) f Y f