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.
pl.programming-languages
type-theory
lambda-calculus
computable-analysis
Timothy Zacchari
la source
la source
Réponses:
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.( N → N ) → 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.)
la source
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 dansF F 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».F F
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é.
la source
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.)λ Oui λ
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.λ Oui
la source
la source
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.la source
la source
A
tel queA \ident A \rightarrow A
pas étrange? Cela me semble absurde, qu'est-ce que je néglige?