Existe-t-il des calculs lambda typés complets de Turing? Si oui, quels sont quelques exemples?
Existe-t-il des calculs lambda typés complets de Turing? Si oui, quels sont quelques exemples?
Réponses:
Oui bien sûr. De nombreux calculs lambda typés n'acceptent que des termes fortement normalisants , par conception, de sorte qu'ils ne peuvent pas exprimer de calculs arbitraires. Mais un système de type peut être tout ce que vous aimez; le rendre assez large, et vous pouvez exprimer tous les calculs déterministes.
Un système de type trivial qui englobe un fragment de Turing-complet du calcul lambda est celui qui accepte chaque terme comme étant bien typé (avec un type supérieur ).
Plus concrètement, les langages de programmation fonctionnels typés statiquement ont à leur base un calcul lambda typé qui permet un combinateur de points fixes aussi bien typé. Par exemple, commencez par le calcul lambda simplement tapé (ou le système de type ML ou le système F ou tout autre système de type de votre choix) et ajoutez une règle qui crée un combinateur de points fixes comme bien typé. Γ ⊢ f : T → T Les règles présentées ci-dessus sont plutôt maladroites, car elles font des termes commeY
S'en tenir au calcul lambda pur, un système de type intéressant est le calcul lambda avec des types d'intersection.
Les types d'intersection ont des propriétés intéressantes par rapport à la normalisation:
Voir Caractérisation des termes lambda qui ont des types d'union pour savoir pourquoi les types d'intersection ont une portée si remarquable.
Vous avez donc un système de types qui définit un langage complet de Turing (puisque chaque terme est bien typé), et une caractérisation simple des calculs de fin. Bien sûr, puisque ce système de types caractérise la normalisation, il n'est pas décidable.