\ et . permettent de définir une abstraction. Équivalents Objective Caml : mots-clef fun et -> (c'est un choix arbitraire ! Si la touche λ (il y a marqué la lettre grecque lambda, je précise pour ceux qui ne peuvent pas afficher les lettres grecques) était disponible sur le clavier de tout le monde, on utiliserait cette lettre à la place de \ ou de ,\ etc.)
exemple : \x.x
exemple : (a b)
Rappelons que cette syntaxe est une syntaxe parmi d'autres. Ensuite, notons qu'il est utile d'autoriser les parenthèses autour des définitions d'abstractions. Notons également qu'il est prudent d'imposer les parenthèses autour des applications. (tout ça dans le but de simplifier l'analyse syntaxique)
Limiter les variables à un seul caractère permet d'écrire \xzy.(x y z)
| Lambda-Calcul | Objective Caml |
|---|---|
| \x.x | fun x -> x |
| (a b) | (a b) |
| ((\x.x) 42) | (fun x -> x) 42 |
| (\x.x 42) Attention, cette notation peut souvent signifier autre chose avec une autre syntaxe | (fun x -> x) 42 |
| (\x y z. x z y) (\x.x) (\x.(x 42)) (\y z.(y z)) | (fun x y z -> x y z) (fun x -> x) (fun x -> x 42) (fun y z -> y z) |
Voici un codage possible des booléens, parmi d'autres !
| Valeur représentée | Codage |
|---|---|
| TRUE | \x y.x |
| FALSE | \x y.y |
| IFTHENELSE | \x y z.(x y z) |
| IFTHENELSE COND A B | (\x y z.(x y z)) COND A B |
Deux lambda-termes sont alpha-équivalents signifie qu'ils calculent exactement la même chose.
Par exemple :\x.x et \y.y calculent exactement la même chose.
\a.(a b) et \a.(a c) ne calculent pas forcément exactement la même chose. Il faut prouver que b et c sont pareils pour pouvoir dire que les deux termes sont alpha-équivalents
La beta-reduction, c'est pour réduire (attention parfois ça agrandi...) les lambda-termes. S'il existe une beta-réduction qui permet de passer d'un terme A à un terme B, alors A et B calculent la même chose.
Par exemple :((\x.x) a) se beta-réduit en a