Qu'est-ce que le λ-calcul essentiellement?


11

J'ai ce que j'appellerais une question philosophique sur le λ-calcul.

Lorsque vous explorez le λ-calcul, vous serez surpris de voir toutes les choses que vous pouvez y faire. Vous pouvez définir des nombres entiers, des opérations arithmétiques, des booléens, des instructions if-then-else, des boucles, des fonctions récursives, etc. Je crois que cela a été prouvé computationnellement complet.

Mais d'un autre côté, si vous considérez ce que vous pouvez faire avec les fonctions en λ-calcul, vous vous rendez compte que la seule chose que vous pouvez faire est de lui donner une fonction et elle renvoie une autre fonction. Et ce processus ne se termine jamais.

Alors, comment pouvez-vous extraire un résultat d'un calcul?

Supposons que le résultat d'une expression soit fonction f. Vous voulez vérifier si fc'est ce que vous attendiez. Vous pouvez le tester, prendre une fonction que vous connaissez, lui appliquer fet recevoir g. Mais pour vérifier que gc'est correct, vous devez maintenant vérifier ce qui gfonctionne. Et vous recommencez. Alors, comment pouvez-vous en parler f?

Il me semble que vous pouvez remplacer toutes les fonctions du λ-calcul par une seule fonction, la fonction d'identité I = λx.x, et tout fonctionne toujours comme décrit dans le λ-calcul. Le chiffre de l'Église une 3fois donné fet xrevient f(f(f(x))). Mais depuis fet xne peut être I, il revient I. Iappliqué Iet Iretourne également I. ISatisfait donc la définition de 3. Les « booléens » (λxy.x)et ont (λxy.y)besoin de 2 arguments qui seront Iet Isi les deux booléens retourneront I. Chacun est équivalent à l'identité, même s'ils se comportent exactement selon leurs définitions.

Alors, comment faites-vous la différence? Comment montrez-vous que le λ-calcul traite bien plus qu'une seule fonction?

Existe-t-il un concept d'identité? Pouvez-vous identifier une fonction immédiatement sans l'évaluer? Je crois qu'il a été prouvé qu'il n'y a aucun moyen de tester 2 fonctions pour l'égalité.

Ou le λ-calcul n'est-il pas une question de fonctions, mais une description formelle de ce qu'elles font? Cela signifierait que les expressions λ non seulement définissent ce que font les fonctions mais sont également les données que les fonctions manipulent. Ainsi, lorsque vous écrivez A B, vous ne vous appliquez pas Aà B, mais vous appliquez la fonction décrite par la chaîne Aà la définition formelle d'une fonction contenue dans le Brenvoi d'une autre définition formelle.

Que se passe-t-il réellement dans le λ-calcul? De quels objets mathématiques s'agit-il?


Suivre:

OK, d'après la réponse ci-dessous, il semble que le λ-calcul ne concerne pas tant les fonctions au sens mathématique, mais le sous-ensemble de fonctions qui peuvent être exprimées sous forme d'expressions λ. Ou encore plus sur la manipulation des expressions λ.


2
Pourriez-vous reformuler la dernière question en quelque chose d'un peu moins orienté vers l'opinion? Il devrait y avoir une réponse solide et sans opinion pour cela.
Telastyn

De mon éducation, le λ-calcul n'existe que pour me faire mal au cerveau. Je ne sais toujours pas comment j'ai réussi à traverser cette classe intacte.

Réponses:


9

Il est en effet impossible de déterminer l'équivalence sémantique des termes de calcul lambda. Ceci est une application du théorème de Rice. Cependant, il est facile de comparer syntaxiquement les termes , c'est-à-dire de tester s'ils ont exactement la même structure (de manière équivalente, si leur "représentation de chaîne" est la même). C'est vraiment tout ce dont vous avez besoin pour obtenir des résultats.

Par exemple, pour calculer les fonctions n = f(i)des naturels aux naturels, vous fournissez le codage d'église en itant que paramètre à votre fonction de calcul lambda, appliquez des règles de réduction jusqu'à ce que vous vous arrêtiez et inspectez le terme résultant. S'il correspond à la structure des chiffres de l'église, extrayez le nombre nqu'il code. Voilà votre résultat. Si le terme résultant ne ressemble pas à un chiffre d'église, ou si la réduction ne s'arrête pas, la fonction n'est pas définie à i.

Les termes tirent effectivement le double devoir de "code" et de "données". Cela n'a rien de spécial: la bande d'une machine de Turing (une chaîne sur un alphabet) peut être --- et est fréquemment --- interprétée comme un encodage d'une machine de Turing ou d'un de ses aspects. De même, les bits dans la mémoire principale d'une machine von Neumann peuvent être soit un encodage d'un programme, soit un encodage d'autre chose. Ou même les deux à la fois. Ce n'est que la "perspective par défaut" qui diffère.


L'expression du résultat d'un calcul impliquant des chiffres de l'Église se résoudra-t-elle toujours à la forme canonique comme (λfx.f (f (fx)))? Ou pouvez-vous obtenir différentes expressions équivalentes du même chiffre?
Florian F

@FlorianF Je suis presque certain qu'il existe de tels termes non canoniques (jusqu'à l'équivalence alpha), mais si c'est le cas, ils peuvent être évités en construisant soigneusement le programme.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.