Question

Existe-il une complète Turing lambda typé lithiase? Si oui, quelles sont quelques exemples?

Était-ce utile?

La solution

Oui, bien sûr. Beaucoup lambda typé CALCULS acceptent seulement fortement normalisant termes , par la conception, de sorte ils ne peuvent pas exprimer des calculs arbitraires. Mais un système de type peut être ce que vous voulez; rendre suffisamment large, et vous pouvez exprimer tous les calculs déterministes.

Un système de type trivial qui englobe un fragment complet-du calcul Turing lambda est celui qui accepte tous les termes aussi bien typé (avec top Type). $$ \ dfrac {} {\ Gamma vdash de M: \ top} $$

Plus pratiquement, statiquement typé langages de programmation fonctionnels ont à leur base un lambda-calcul typé qui permet à un fixpoint Combinator aussi bien typé. Par exemple, commencez par le simplement typé lambda-calcul (ou le système de type ML ou système F ou tout autre système de type de votre choix) et ajouter une règle qui fait une combinateur fixpoint comme $ \ mathbf {Y} = \ lambda f. (\ Lambda x. F (x \, x)) (\ lambda x. F (x \, x)) $ bien typé. $$   \ Dfrac {\ Gamma \ vdash f: T \ rightarrow T}         {\ Gamma \ vdash \ mathbf {Y} \, f: T}   \ qquad   \ Dfrac {\ Gamma \ vdash f: T \ rightarrow T}         {\ Gamma \ vdash (\ lambda x f (x \, x)). (\ Lambda x f (x \, x).): T} $$ Les règles que présentées ci-dessus sont plutôt maladroite, car ils font des termes tels que $ \ mathbf {Y} \, f $ bien typé, même si leurs électeurs ne sont pas bien typés - ils ne sont pas entièrement composition. Une solution simple est d'ajouter un combinateur fixpoint comme une constante de la langue et de fournir une règle delta pour elle; alors il est une simple question d'avoir un système de type sémantique et de réduction avec de conservation de type. Vous ne vous éloignez du calcul pur lambda dans le domaine du calcul lambda avec des constantes. $$ \ begin {*} rassembler   \ Dfrac {} {\ Gamma \ vdash \ textbf {} fix: (T \ rightarrow T) \ rightarrow T} \\   \ Textbf {fix} \, f \ f (\ textbf {fix} \, f) \\ \ End {*} $$ rassembler

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

$$ \ Dfrac {\ Gamma \ vdash M: T_1 \ quad \ Gamma \ vdash M: T_2}       {\ Gamma \ vdash M: T_1 \ wedge T_2}       (I \ wedge) \ Qquad \ qquad \ Dfrac {}       {\ Gamma \ vdash M: \ top}       (\ Top I) $$

types d'intersection ont des propriétés intéressantes en ce qui concerne la normalisation:

  • Un lambda terme peut être saisie sans utiliser le \ $ haut I $ règle ssi il est fortement normalisant.
  • Un lambda terme admet un type ne contenant pas $ \ top $ ssi il a une forme normale.

Voir Caractérisation des termes lambda qui ont des types de syndicats pour un aperçu des raisons pour lesquelles les types d'intersection ont une telle portée remarquable.

Vous avez donc un système de type qui définit un langage Turing-complet (puisque chaque terme est bien typé), et une simple caractérisation de mettre fin à des calculs. Bien sûr, étant donné que ce système de type caractérise la normalisation, il est décidable.

Une remarque sur les noms de règle $ (\ top I) $ et $ (\ wedge I) $: ils ont pas de sens formel, mais ils sont choisis délibérément. I $ $ signifie « introduction », car ce sont des règles d'introduction - ils introduisent le symbole ($ \ wedge $ ou $ \ supérieure $) dans le type ci-dessous la ligne. Doublement, vous trouverez des règles d'élimination, lorsqu'un symbole apparaît au-dessus de la ligne, mais pas au-dessous. Par exemple, la règle à Typecheck une expression lambda dans le lambda-calcul simplement typé est la règle d'introductionpour $ \ rightarrow $, et la règle à typer une application est la règle d'élimination pour $ \ rightarrow $.

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top