Les fonctions qui ont tapé le calcul lambda ne peuvent pas calculer

12

Je veux juste connaître quelques exemples des fonctions qui peuvent être calculées par le calcul lambda non typé mais pas par des calculs lambda typés.

Comme je suis un débutant, une réitération des informations de base serait appréciée.

Merci.

Edit: en tapant des calculs lambda, j'avais l'intention de connaître le système F et le calcul lambda simplement tapé. Par fonction, je veux dire toute fonction calculable par Turing.

Timothy Zacchari
la source
Il existe de nombreuses disciplines de dactylographie pour -calculi, et la réponse à votre demande dépend en partie du choix de la discipline de dactylographie que vous envisagez. Cela dépend aussi de ce que vous entendez par fonction. Un exemple de différence serait que les disciplines de typage telles que le système F ne peuvent taper que des programmes de normalisation, tandis que le λ -calculus non typé contient des termes non normalisants. λλ
Martin Berger
Je pensais au système F et au calcul lambda typé simple. Par fonction, j'entends la fonction calculable de Turing.
Timothy Zacchari

Réponses:

15

Un bon exemple est donné par Godelization: dans le calcul lambda, la seule chose que vous pouvez faire avec une fonction est de l'appliquer. Par conséquent, il n'y a aucun moyen d'écrire une fonction fermée de type , qui prend un argument de fonction et renvoie un code Godel pour cela.(NN)N

L'ajout d'un axiome à l'arithmétique de Heyting est généralement appelé "la thèse constructive de l'Église" et est un axiome fortement anti-classique. À savoir, il est cohérent de l'ajouter à HA, mais pas à l'arithmétique Peano! (Fondamentalement, c'est un fait classique que chaque machine Turing s'arrête ou non, et il n'y a pas de fonction calculable qui puisse en témoigner.)

Neel Krishnaswami
la source
Je ne comprends pas comment cela est cohérent avec une théorie extensionnelle: prenez f et g extensionnellement égaux, mais avec des implémentations différentes et donc des codes godel différents. Votre fonction renvoie-t-elle le même nombre pour f et g?
cody
3
Ce n'est pas compatible avec l'extensionnalité! Cependant, dans HA et sont des connecteurs logiques, pas des fonctions / enregistrements. Ils doivent donc être réalisables, mais leurs réalisateurs n'ont pas à être d'extension. Andrej Bauer est un expert dans ce domaine, donc si vous posez une question, vous êtes sûr d'obtenir une bonne réponse.
Neel Krishnaswami
11

La réponse la plus simple est donnée par le fait que les calculs lambda typés correspondent à des logiques (calcul lambda simplement tapé -> logique de prédicat; système f -> logique de second ordre) et les logiques cohérentes ne peuvent pas prouver leur propre cohérence.

Supposons donc que vous ayez des nombres naturels (ou un codage Eglise de nombres naturels) dans votre calcul lambda typé. Il est possible de faire une numérotation Gödel qui attribue chaque terme du système F à un nombre naturel unique. Ensuite, il y a une fonction qui prend tout nombre naturel (qui correspond à un terme bien typé dans le système F) à un autre nombre naturel (qui correspond à la forme normale de ce terme système F bien typé) et fait autre chose pour tout nombre naturel qui ne correspond pas à un terme bien typé dans le système F (par exemple, il renvoie zéro). La fonction f est calculable, elle peut donc être calculée par le calcul lambda non typé mais pas par le calcul lambda typé (car ce dernier équivaudrait à une preuve de la cohérence de la logique de second ordre dansff logique du second ordre, ce qui impliquerait que la logique du second ordre est incohérente).

Mise en garde 1: si la logique du second ordre est incohérente, il pourrait être possible d'écrire dans le système F ... et / ou il pourrait ne pas être possible d'écrire f dans le calcul lambda non typé - vous pourriez écrire quelque chose, mais cela pourrait ne pas toujours terminer, ce qui est un critère pour «calculable».ff

Mise en garde 2: Parfois, par "calcul lambda simplement tapé", les gens veulent dire "calcul lambda simplement tapé avec un opérateur à virgule fixe ou des fonctions récursives". Ce serait plus ou moins PCF , qui peut calculer n'importe quelle fonction calculable, tout comme le calcul lambda non typé.

Rob Simmons
la source
10

Le -calculus non typé possède une récursion générale sous la forme du combinateur Y. Le λ -calculus simplement tapé ne fonctionne pas. Ainsi, toute fonction qui nécessite une récursion générale est candidate, par exemple la fonction Ackermann. (Je saute quelques détails sur la précision avec laquelle nous représentons les nombres naturels dans chaque système, mais essentiellement toute approche raisonnable fera l'affaire.)λYλ

Bien sûr, vous pouvez toujours étendre le -calculus simplement tapé pour correspondre à la puissance de Y , mais vous changez ensuite les règles du jeu.λY

Andrej Bauer
la source
Pour une raison quelconque, je pensais que vous pourriez faire Ackermann dans System F ...
Rob Simmons
@Rob, si je comprends bien, Andrej ne dit pas que ce n'est pas le cas.
Kaveh
1
Je suppose que j'ai dit que la fonction Ackermann peut être programmée dans le -calculus non typé (parce que chaque fonction calculable le peut), mais pas dans le λ -calculus simplement typé . Je n'ai rien dit sur System F.λλ
Andrej Bauer
Oh, c'est vrai, j'étais juste stupide. (Parce que la question était assez ambiguë entre parler du système F et parler du STLC, j'ai choisi le système le plus puissant et j'ai oublié la question plus simple.)
Rob Simmons
λλm.m(λfn.nf(f1_)) suc(((((fe)fe)h)((((fe)fe)h) hg)g)(((bc)ab)(bc)ac)d)dY
Francisco Mota
6

a

Sam Tobin-Hochstadt
la source
5
(pp)ppp
2
λ
@Marting: Merci! Je vis en Allemagne maintenant, c'est donc une belle incitation supplémentaire pour pratiquer mon allemand. :)
Neel Krishnaswami
4

Une vision des limites des calculs fortement normalisants que j'aime est l'angle de calculabilité. Dans un calcul typé fortement normalisant, tel que le calcul lambda de base simplement tapé, le système F ou le calcul des constructions, vous avez une preuve que tous les termes finissent par se terminer.

Si cette preuve est constructive, vous obtenez un algorithme fixe pour évaluer tous les termes avec une borne supérieure garantie sur le temps de calcul. Ou vous pouvez également étudier la preuve (pas nécessairement constructive) et en extraire une borne supérieure - qui est probablement énorme , car ces calculs sont expressifs.

Cette limite vous donne des exemples "naturels" de fonctions qui ne peuvent pas être saisies dans ce lambda-calcul fixe: toutes les fonctions arithmétiques qui sont asymptotiquement supérieures à cette limite.

Si je me souviens bien, les termes tapés dans le lambda-calcul simplement typé peuvent être évalués dans des tours d'exponentielle: O(2^(2^(...(2^n)..); une fonction qui croît plus vite que toutes ces tours ne sera pas exprimable dans ces calculs. Le système F correspond à une logique intuitive du second ordre, la puissance de calcul est donc tout simplement énorme. Pour saisir la force de calcul des théories encore plus puissantes, nous raisonnons généralement en termes de théorie des ensembles et de théorie des modèles (par exemple, quels ordinaux peuvent être construits) au lieu de la théorie de calcul.

gasche
la source
0

Δ=λx.xxΔΔβ ΔΔΔAA=AA

Charles
la source
λAAAA
Oui, vous avez raison, mais je pensais (peut-être que je me trompe) qu'il n'était pas possible d'avoir un tel type dans le lambda-calcul simplement tapé ou le système F, qui sont tous deux fortement normalisants.
Charles
ΔΔΔΔ
@Kaveh Pourquoi avoir un type Atel que A \ident A \rightarrow Apas étrange? Cela me semble absurde, qu'est-ce que je néglige?
Martijn
Vous pensez probablement de manière classique aux ensembles et aux espaces fonctionnels par-dessus. Pensez par exemple aux chaînes binaires finies et aux fonctions calculables par-dessus.
Kaveh