En lisant l'article An Introduction to the Lambda Calculus , je suis tombé sur un paragraphe que je ne comprenais pas vraiment, à la page 34 (en italique):
Dans chacun des deux paradigmes, il existe plusieurs versions de calcul lambda typé. Dans de nombreux systèmes importants, en particulier ceux de l'Église, il est vrai que les termes qui ont un type possèdent toujours une forme normale. Par l'insolvabilité du problème d'arrêt, cela implique que toutes les fonctions calculables ne peuvent pas être représentées par un terme typé, voir Barendregt (1990), Théorème 4.2.15. Ce n'est pas si mauvais que cela puisse paraître, car pour trouver de telles fonctions calculables qui ne peuvent pas être représentées, il faut se tenir debout. Par exemple, en 2, le calcul lambda typé du second ordre, seules les fonctions récursives partielles ne peuvent pas être représentées qui se trouvent être totales, mais ce n'est pas prouvable dans l'analyse mathématique (arithmétique du second ordre).
Je connais la plupart de ces concepts, mais pas le concept d'une fonction récursive partielle, ni le concept d'une fonction prouvée totale. Cependant, ce n'est pas ce que je souhaite apprendre.
Je cherche une explication simple pour expliquer pourquoi certaines fonctions calculables ne peuvent pas être représentées par un terme tapé, ainsi que pourquoi de telles fonctions ne peuvent être trouvées que "en se tenant debout sur la tête".
Je trouve que la réponse de Merijn gère assez bien la première partie de votre question. Je vais essayer de répondre à la deuxième partie: pourquoi trouver des fonctions qui sont calculables mais non représentables dans le polymorphe -calculus nécessite "de se tenir debout".λ
Je crains que cela nécessite une explication des concepts qui ne vous intéressent pas. Une fonction récurrente partielle est un -term qui représente une fonction de à . Un -term appliqué au représentant d'un nombre naturel est envoyé à si et seulement si n'a pas une forme normale. Si aucun numéro n'est envoyé àλ N N∪{⊥} λ t n ⊥ t n ⊥ on dit que la fonction est totale . Maintenant, l'idée est qu'aucune théorie logiqueT peut prouver qu'un terme t représente une fonction totale pour chaque fonction totale t , il y a toujours des "angles morts" où t se termine sur toutes les entrées n , mais la déclaration
est indécidable dansT . Si la déclaration ci-dessus est prouvable dansT , nous disons que la fonction représentée par t est prouvée totale . Que toutes les fonctions totales ne sont pasT est une conséquence de (une variante de) le théorème d'incomplétude de Godel pour T .
Maintenant, le fait est que la grande majorité des programmes que nous souhaitons concrètement écrire (tri de liste, parcours de graphe, systèmes d'exploitation) ne sont pas seulement des fonctions totales, mais sont prouvées totales dans des systèmes logiques raisonnables, comme Peano Arithmetic.
Maintenant pour le polymorpheλ -calcul. On peut montrer que les termes que l'on peut taper dans ce calcul sont exactement les termes qui représentent les fonctions prouvées totales en arithmétique peano du second ordre. Le second ordre Peano Arithmetic est beaucoup, beaucoup plus puissant que le Peano Arithmetic ordinaire.
Cela signifie par les explications ci-dessus qu'il existe des termes qui sont totaux mais pas prouvés totaux, mais de telles fonctions sont extrêmement rares, car elles sont déjà rares pour Peano Arithmetic (et tellement plus rares dans la théorie du second ordre). D'où la déclaration «debout sur la tête».
la source
Je trouve qu'il est un peu difficile d'écrire de manière concise la preuve, mais j'espère que cette explication vous fournira suffisamment d'intuition pour voir pourquoi les termes typés simples ne peuvent pas représenter tous les termes non typés.
Le calcul lambda simplement tapé se normalise fortement. Chaqueβ la réduction nous rapprochera de la forme normale. Lorsque la fonctionf::α→β→γ est appliqué à une valeur de type α ce sera β réduire à une fonction de type β→γ . Étant donné un nombre fini d'arguments, il faut un nombre fini d'étapes de réduction pour atteindreβ - forme normale, dans laquelle il n'y a plus de réductions possibles.
Pour comparer cela avec le calcul lambda non typé. L'un des combinateurs UTLC les plus célèbres est leY -Combinateur:
Lorsque nous essayons de réduire laY -combinator ce qui se passe:
Peu importe les fonctions que nous transmettons, nous sommes coincés dans une séquence infinie de réductions! Si nous essayions d'épingler un type STLC sur l'UTLCY -combinator, nous trouvons rapidement cela impossible, car l'application de fonction ne réduit pas le type comme requis dans le STLC. leY -combinator est clairement calculable (il représente, en utilisant la récursivité, le concept d'une boucle infinie), mais il ne peut pas être représenté dans le STLC, car tous les termes STLC sont fortement normalisants.
la source