J'ai trois sous-questions liées, qui sont soulignées par des points dans la liste ci-dessous (non, elles ne pourraient pas être divisées, si vous vous le demandez). Andrej Bauer a écrit ici que certaines fonctions sont réalisables avec une machine de Turing, mais pas avec le lambda-calcul. Une étape clé de son raisonnement est la suivante:
Cependant, si nous utilisons le calcul lambda, alors [le programme] c est supposé calculer un nombre représentant une machine de Turing à partir d'un terme lambda représentant une fonction f. Cela ne peut pas être fait (je peux expliquer pourquoi, si vous le posez séparément).
- Je voudrais voir une explication / une preuve informelle.
Je ne vois pas comment appliquer le théorème de Rice ici; cela s'appliquerait au problème "est-ce que cette machine de turing T et ce lambda terme équivalent L?", car appliquer ce prédicat à des termes équivalents donne le même résultat. Cependant, la fonction requise peut calculer des MT différentes, mais équivalentes, pour des termes lambda différents, mais équivalents.
- De plus, si le problème concerne l'introspection d'un terme lambda, je pense que le codage de Gödel d'un terme lambda serait également acceptable, n'est-ce pas?
D'une part, étant donné que son exemple implique de calculer, dans le calcul lambda, le nombre d'étapes nécessaires à une machine de Turing pour effectuer une tâche donnée, je ne suis pas très surpris.
- Mais comme ici le lambda-calcul ne peut pas résoudre un problème lié à la machine de Turing, je me demande si on peut définir un problème similaire pour le lambda-calcul et le prouver insoluble pour les machines de Turing, ou s'il existe une différence de puissance en faveur de Turing Machines (ce qui me surprendrait).
la source
Qu'est-ce que Neel a dit, et aussi ce qui suit.
Je voudrais souligner ( encore , encore et encore ) que la représentation des intrants et des extrants est importante. Si nous sommes autorisés à changer de représentation, nous pouvons réaliser à peu près n'importe quoi (par exemple, rendre toute fonction donnée calculable). Ainsi, passer d'une représentation des fonctions par -terms à une représentation par des nombres de Gödel n'est pas acceptable si notre modèle de calcul est -calculus (car alors l'opération de currying devient non calculable par -calculus).N→N λ λ λ
Une déclaration qui est réalisable dans le modèle -term mais pas dans le modèle de Turing n'est pas "toutes les fonctions ont un code de Gödel", ce qui est un peu ridicule. Je vais essayer d’en trouver un meilleur et d’éditer cette réponse.λ N→N
Edit on 2013-10-07: Voici ce que je voulais dire par "currying devient impossible à calculer". Supposons que nous utilisions le -calculus non typé comme modèle de calcul, mais que nous décidions ensuite de représenter mappages avec les codes de Gödel (des machines de Turing, codés sous forme de chiffres de l'Église). Cela semble inoffensif, non? Après tout, nous pensons que le mantra "Les machines de Turing et les calculus sont équivalents".λ N→N λ
Eh bien, pour que cette nouvelle représentation soit réellement une représentation valide de , nous devons également réaliser une application et un currying (parce que "représenter des fonctions" signifie la même chose que "représenter un objet exponentiel "). Plus précisément, nous avons besoin d'un -term tel que, chaque fois que le chiffre d'église représente alors est représenté par . (J'écris ici pour le chiffre de l'église représentant le nombre .) Such anN→N λ app n¯¯¯ f:N→N f(k) appn¯¯¯k¯¯¯ n¯¯¯ n app est facilement disponible parce qu’il s’agit d’un interprète pour les machines de Turing, implémenté dans le -calculus.λ
Mais qu'en est-il currying? Pour cela, nous avons besoin de ce qui suit. Supposons que est un ensemble représenté. Quelle que soit la carte calculée par un -term , nous devons montrer que la transposition est également calculé par certains -term . Mais considérons l'exemple où est l'ensemble ofmaps représenté par -terms, et est l'application. Alors serait une carte qui sert d’identité surX f:X×N→N λ t f~:X→(N→N) λ s X N→N λ f f~ N→N , mais son réalisateur est un terme qui convertit termes représentant les mappes en codes de Gödel correspondants. Un tel terme n'existe pas (par exemple parce qu'il serait discontinu dans un modèle sémantique topologique).λ λ N→N λ
Vous pouvez essayer de objecter que je n'aurais pas dû utiliser l'ensemble représenté spécifique de maps représenté par -terms, car nous avons "accepté" que ceux-ci soient représentés par des codes de Gödel . Mais vous auriez tort. Tout d'abord, j'aurais pu utiliser un différent avec une preuve plus complexe qui vous échapperait tout en obtenant le même résultat. Deuxièmement, est là dans la catégorie et la définition de exponentielle exige que le travail de curry concerne tous les objets. Vous devez respecter la catégorie. Vous ne pouvez pas simplement le boucher au hasard et en retirer des objets (vous pouvez le faire, mais vous êtes alors un boucher).X N→N λ X X
la source