Partager cette page

Apprendre X en Y minutes

Où X=Lambda Calculus

Lambda-calcul

Le Lambda-calcul (λ-calcul), créé à l'origine par Alonzo Church, est le plus petit langage de programmation au monde. En dépit de ne pas avoir de nombres, de chaînes, de booléens, ou de tout type de données sans fonction, le lambda calcul peut être utilisé pour représenter n'importe quelle machine de Turing!

Le Lambda-calcul est composé de 3 éléments : variables, fonctions et applications.

Nom Syntaxe Exemple Explication
Variable <nom> x une variable nommée “x”
Fonction λ<paramètres>.<corps> λx.x une fonction avec le paramètre “x” et le corps “x”
Application <fonction><variable ou function> (λx.x)a appel de la fonction “λx.x” avec l'argument “a”

La fonction la plus fondamentale est la fonction identité: λx.x qui est équivalente à f(x) = x. Le premier “x” est l'argument de la fonction, et le second est le corps de la fonction.

Variables libres et liées :

Évaluation :

L'évaluation est réalisée par β-Réduction, qui est essentiellement une substitution lexicale.

Lors de l'évaluation de l'expression (λx.x)a, nous remplaçons toutes les occurrences de “x” dans le corps de la fonction par “a”.

Vous pouvez même créer des fonctions d'ordre supérieur:

Bien que le lambda-calcul ne prenne traditionnellement en charge que les fonctions à un seul paramètre, nous pouvons créer des fonctions multi-paramètres en utilisant une technique appelée currying.

Parfois, λxy.<corps> est utilisé de manière interchangeable avec: λx.λy.<corps>


Il est important de reconnaître que le lambda-calcul traditionnel n'a pas de nombres, de caractères ou tout autre type de données sans fonction!

Logique booléenne :

Il n'y a pas de “Vrai” ou de “Faux” dans le calcul lambda. Il n'y a même pas 1 ou 0.

Au lieu:

T est représenté par: λx.λy.x

F est représenté par: λx.λy.y

Premièrement, nous pouvons définir une fonction “if” λbtf qui renvoie t si b est vrai et f si b est faux

IF est équivalent à: λb.λt.λf.b t f

En utilisant IF, nous pouvons définir les opérateurs logiques de base booléens:

a AND b est équivalent à: λab.IF a b F

a OR b est équivalent à: λab.IF a T b

a NOT b est équivalent à: λa.IF a F T

Note: IF a b c est equivalent à : IF(a(b(c)))

Nombres :

Bien qu'il n'y ait pas de nombres dans le lambda-calcul, nous pouvons encoder des nombres en utilisant les nombres de Church.

Pour tout nombre n: n = λf.fn donc:

0 = λf.λx.x

1 = λf.λx.f x

2 = λf.λx.f(f x)

3 = λf.λx.f(f(f x))

Pour incrémenter un nombre de Church, nous utilisons la fonction successeur S(n) = n + 1 qui est:

S = λn.λf.λx.f((n f) x)

En utilisant S, nous pouvons définir la fonction ADD:

ADD = λab.(a S)n

Défi: essayez de définir votre propre fonction de multiplication!

Pour aller plus loin :

  1. A Tutorial Introduction to the Lambda Calculus
  2. Cornell CS 312 Recitation 26: The Lambda Calculus
  3. Wikipedia - Lambda Calculus

Vous avez une suggestion ? Peut-être une correction ? Ouvrez un ticket sur Github, ou faites vous-même une pull request !

Version originale par Max Sun, mis à jour par 0 contributeur(s).