Entrée et sortie sous forme de chiffres d'église .
00000000 01011111 01100101 11101101 0
Dans le lambda calcul , il s'agit de λ m . λ n . λ f . λ x . m f ( n f x ).
Indice de Bruijn : λ λ λ λ 4 2 (3 2 1)
Le lambda calcul est une manière concise de décrire une cartographie (fonction).
Par exemple, cette tâche peut être écrite sous la forme de λ x . λ y . x + y
La chose à noter est que ce n'est pas une lambda (fonction) qui prend deux arguments. C'est en fait un lambda imbriqué. Cependant, il se comporte comme un lambda qui prend deux arguments et peut donc être décrit de manière informelle en tant que tel. Chaque lambda ne prend officiellement qu'un seul argument.
Par exemple, si nous appliquons ce lambda à 3 et 4:
(λ x . λ y . x + y ) 3 4 (λ y . 3 + y ) 4 3 + 4 = 7
Ainsi, le premier lambda renvoie en réalité un autre lambda.
Les chiffres d'église sont un moyen de supprimer les signes supplémentaires en ne laissant que des symboles et des variables lambda.
Chaque numéro dans le système de l'église est en fait un lambda qui spécifie combien de fois la fonction est appliquée à un élément.
Laissez la fonction être f et l'élément soit x .
Donc, le nombre 1 correspondrait à λ f . λ x . f x , ce qui signifie appliquer f à x exactement une fois.
Le nombre 3, par exemple, serait λ f . λ x . f ( f ( f x )), ce qui signifie appliquer f à x exactement trois fois.
Par conséquent, ajouter deux chiffres d'église (par exemple, m et n ) ensemble, revient à appliquer f à x , m + n fois.
Nous pouvons observer que cela revient à appliquer d'abord f à x , n fois, puis à appliquer f à l'élément résultant m fois.
Par exemple, 2 signifierait f(f(x))
et 3 signifierait f(f(f(x)))
, donc 2 + 3 serait f(f(f(f(f(x)))))
.
Pour appliquer f à x , n fois, nous avons n f x .
Vous pouvez voir m et n comme des fonctions prenant deux arguments, de manière informelle.
Ensuite, nous appliquons à nouveau f à cet élément résultant, m fois: m f ( n f x ).
Ensuite, nous rajoutons le passe-partout pour obtenir λ m . λ n . λ f . λ x . m f ( n f x ).
Maintenant, nous devons le convertir en index De Bruijn .
Premièrement, nous comptons la "distance relative" entre chaque variable à la déclaration lambda. Par exemple, le m aurait une distance de 4 car il est déclaré 4 lambdas "il y a". De même, le n aurait une distance de 3, le f aurait une distance de 2 et le x aurait une distance de 1.
Donc, nous l’écrivons sous cette forme intermédiaire: λ m . λ n . λ f . λ x . 4 2 (3 2 1)
Ensuite, nous supprimons les déclarations de variables, nous laissant avec: λ λ λ λ 4 2 (3 2 1)
Maintenant, nous le convertissons en calcul lambda binaire .
Les règles sont:
- λ devient
00
.
- m n (groupement) devient
01 m n
.
- les nombres i deviennent
1
i fois + 0
, par exemple 4 devient 11110
.
λ λ λ λ 4 2 (3 2 1)
Λ λ λ λ 11110
110
( 1110
110
10
)
Λ λ λ λ 11110
110
0101 111011010
Λ λ λ λ 0101
111101100101111011010
≡ 00
00
00
00
0101
111101100101 111011010
≡ 000000000101111101100101111011010