Vincent

RC F2'2019

- Learn about programming languages design (mainly through "Types and programming languages" from Pierce) ...
- ... in the perspective of building my own later

- Invented by Alzonzo Church (1936)
- Church Turing Thesis: functions computable in are function computable in a Turing machine
- Fun fact: Church was the doctoral advisor of Turing

How the hell can computability be captured with such a tiny syntax ?

- x (define a variable)
- λx. t (function of param x and body t)
- f t (function application: f applied to t)

No builtin constant or operators, no numbers, no loops...everything is a function

- (λx.x) (λz. (λx.x z))
- λz. (λx.x z)
- λz.z

How to evaluate a term ? idea: substitute right hand side of a term for bound variable in the body of the function

Idea: use higher order functions

λx.λy.x y

This can equivalently be seen as a function which returns a function (ie given x, it returns the function λy. x y, and a function of two arguments. => currying

- true = λt. λf. t
- false = λt.λf. f
- reminder: every value is a function
- if = λb.λx.λy. b x y (where b is true or false)
- not =λb.b false true

- numbers
- arithmetic operation
- recursion with infamous ycombinator:

λf. (λx. f (λy. x x y)) (λx. f (λy. x x y))

- Not practical
- but interesting to see that computability can be built from such a tiny core
- gave rise to functional programming