D'accord, je vais y donner une fissure: En général, pour un système de type , ce qui suit est vrai:T
Si tous les termes de type puits dans le calcul se normalisent, alors est cohérent lorsqu'il est considéré comme une logique.TTT
La preuve procède généralement en supposant que vous avez un terme de type , en utilisant la réduction de sujet pour obtenir une forme normale, puis en procédant par induction sur la structure d'un tel terme pour obtenir une contradiction.F a l s ea b s u r dF a l s e
Il est naturel de se demander si l’inverse est vrai, c’est-à-dire
Pour tout système de type , si est logiquement cohérent , alors chaque terme bien typé dans se normalise.T TTTT
Le problème avec cela est qu'il n'y a pas de véritable notion la plus générale de "système de type", et encore moins d'accord sur le sens de cohérence logique pour de tels systèmes. Cependant, nous pouvons vérifier empiriquement que
Pour la plupart des systèmes de types connus qui ont une interprétation logique, l'inverse est vrai.
Comment est-ce lié à l'exhaustivité de Turing? Eh bien, pour commencer, si la vérification de type est décidable , alors l'argument d'Andrej montre que l'un des éléments suivants doit tenir:
- L'ensemble de tous les programmes bien typés n'est pas Turing Complete.
- Il existe un programme bien typé sans terminaison.
Cela tend à suggérer que:
Les systèmes de types qui ont une interprétation logique et sont cohérents et sont énumérables récursivement ne sont pas Turing Complete.
Donner un théorème réel plutôt qu'une suggestion nécessite de rendre mathématique la notion de systèmes de types et d'interprétations logiques.
Maintenant, deux remarques me viennent à l'esprit:
Il existe un système de type indécidable , le système de type intersection qui a une interprétation logique et peut représenter chaque normalisation -term. Comme vous le remarquez, ce n'est pas tout à fait comme étant Turing Complete, car le type d'une fonction totale peut avoir besoin d'être mis à jour (affiné, en fait) avant de l'appliquer à l'argument souhaité. Le calcul est un calcul de "style curry" et est égal à STLC +
et
Il est clair que l '"interprétation"Γ ⊢ M : τλ Γ⊢M:τ∩σ
Γ⊢M:τΓ⊢M:σΓ⊢M:τ∩σ
∩=∧Γ⊢M:τ∩σΓ⊢M:τΓ⊢M:τ∩σΓ⊢M:σ
∩=∧ conduit à une interprétation logique cohérente.
Il existe une classe de systèmes de types, les systèmes de types purs , dans lesquels une telle question pourrait être précisée. Dans ce cadre cependant, l'interprétation logique est moins claire. On pourrait être tenté de dire: "un PTS est cohérent s'il a un type inhabité". Mais cela ne fonctionne pas, car les types peuvent vivre dans différents "univers", où certains peuvent être cohérents et d'autres non.
Coquand et Herbelin définissent une notion de systèmes logiques de type pur , dans laquelle la question a un sens, et montrent
Chaque LPTS incohérent et non dépendant a un combinateur de boucle (tout comme Turing Complete)
Ce qui répond à la question dans un sens (incohérent TC) dans ce cas. Pour autant que je sache, la question du LPTS général est toujours ouverte et assez difficile.⇒
Edit: L'inverse du résultat Coquand-Herbelin n'est pas aussi facile que je le pensais! Voici ce que j'ai trouvé jusqu'à présent.
Un système logique de type pur est un PTS avec (au moins) les tris et , (au moins) l'axiome et (au moins) le règle , la condition selon laquelle il n'y a pas de sortes de type .T y p e P r oPropTypeProp:Type(Prop,Prop,Prop)Prop
Maintenant, je vais supposer une déclaration particulière d'exhaustivité de Turing: corriger un LPTS et laisser être le contexteLΓ
Γ=nat:Prop, 0:nat, S:nat→nat
f : N → N t f Γ ⊢ t f : n a t → n a t nL est Turing Complete ssi pour chaque fonction calculable totale il y a un terme tel que
et pour chaquef:N→Ntf
Γ⊢tf:nat→nat
n∈N
tf (Sn 0)→∗βSf(n) 0
L'argument de diagonalisation d'Andrej montre qu'il existe des sans terminaison de type .tnat
Maintenant, il semble que nous soyons à mi-chemin! Étant donné un terme non terminatif , nous voulons remplacer les occurrences de par un type générique et nous débarrasser de et dans , et nous aura notre incohérence ( est habité dans le contexte )!Γ⊢loop:natnatA0SΓAA:Prop
Malheureusement, c'est là que je suis bloqué, car il est facile de remplacer par l'identité, mais le est beaucoup plus difficile à éliminer. Idéalement, nous aimerions utiliser un théorème de récurrence de Kleene, mais je ne l'ai pas encore compris.0S0