Existe-t-il un calcul lambda typé complet de Turing?

Réponses:

37

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 ).

ΓM:

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 TY=λf.(λx.f(xx))(λx.f(xx)) Les règles présentées ci-dessus sont plutôt maladroites, car elles font des termes commeY

Γf:TTΓYf:TΓf:TTΓ(λx.f(xx))(λx.f(xx)):T
bien typé même si leurs constituants ne sont pas bien typés - ils ne sont pas entièrement compositionnels. Une solution simple consiste à ajouter un combinateur de points fixes comme constante de langage et à lui fournir une règle delta; alors il est simple d'avoir un système de types et une sémantique de réduction avecconservation des types. Vous vous éloignez du calcul lambda pur dans le domaine du calcul lambda avec des constantes. Yf
Γfix:(TT)Tfixff(fixf)

S'en tenir au calcul lambda pur, un système de type intéressant est le calcul lambda avec des types d'intersection.

ΓM:T1ΓM:T2ΓM:T1T2(I)ΓM:(I)

Les types d'intersection ont des propriétés intéressantes par rapport à la normalisation:

  • I

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.

(I)(I)I

Gilles, arrête de faire le mal
la source