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

20

Existe-t-il un calcul lambda typé où la logique correspondante sous la correspondance de Curry-Howard est cohérente et où il existe des expressions lambda typables pour chaque fonction calculable?

Il s'agit certes d'une question imprécise, dépourvue d'une définition précise du «calcul lambda typé». Je me demande essentiellement s'il y a (a) des exemples connus de cela, ou (b) des preuves d'impossibilité connues pour quelque chose dans ce domaine.

Edit: @cody donne une version précise de cette question dans sa réponse ci-dessous: existe-t-il un système logique de type pur (LPTS) cohérent et complet de Turing (dans un sens défini ci-dessous)?

Morgan Thomas
la source
2
Il n'y a pas de calcul récursivement axiomatisable (lambda ou autre) dont les fonctions récursives prouvées totales sont toutes des fonctions récursives, donc votre calcul devrait impliquer des termes sans terminaison.
Emil Jeřábek soutient Monica le
2
Cette réponse a un théorème qui dit que vous ne pouvez pas avoir une sorte de calcul qui est à la fois Turing-complet et totale.
Andrej Bauer
1
Il répondra probablement à votre question une fois que vous serez suffisamment précis. Je pense que la preuve d'Andrej est inutilement compliquée (mais elle en montre plus): le point est simplement que s'il y avait un système effectivement décrit où toutes les fonctions récursives étaient représentables de telle manière que vous pouvez certifier syntaxiquement qu'une expression est une représentation honnête d'un fonction récursive (par exemple, en vérifiant qu'il est correctement tapé dans le système), vous obtiendrez alors une fonction récursive totale universelle, ce qui est impossible.
Emil Jeřábek soutient Monica le
1
Bien sûr, une réponse classique à ce type de question pourrait être: typé -calculus avec des types d'intersection , car il tape tous les termes (et seulement ceux) qui sont fortement normalisants. Il s'agit plutôt d'une question philosophique de se demander si le calcul admet ou non une "interprétation de Curry-Howard". λ
cody
2
Il est difficile d'être plus précis ici car la question n'est pas précise.
Andrej Bauer

Réponses:

21

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 eabsurdFalse

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:

  1. L'ensemble de tous les programmes bien typés n'est pas Turing Complete.
  2. 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:

  1. 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.
  2. 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:natnat

f : NN t f Γ t f : n a tn a t nL est Turing Complete ssi pour chaque fonction calculable totale il y a un terme tel que et pour chaquef:NNtf

Γtf:natnat
nN
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

cody
la source
λx.xx
Maintenant une question sur votre remarque (2). Il me semble que le théorème que vous citez n'est pas ce qui nous intéresse. Il dit que pour chaque LPTS non dépendant, s'il est incohérent, c'est Turing complet. Mais nous aimerions savoir si pour chaque LPTS, si c'est Turing complet, alors c'est incohérent. Suis-je en train de mal comprendre quelque chose ici?
Morgan Thomas
Γ,t,AΓt:A
Le deuxième point: vous avez également raison de dire que l'on peut avoir une fonction non totale bien typée (bien que l'on ne puisse pas nécessairement l'appliquer à un argument donné). Je vais modifier la réponse.
cody
1
Troisième point. Vous avez encore raison! Cependant l'inverse (dans le cas particulier du LPTS) est plutôt trivial. Je vais expliquer l'argument.
cody
11

β

λnat,0,S

nat:
0:nat
S:natnat

efefe:natnate,xNβ

fe(x)βΦe(x),

Φe(x)exΦe(x)ββ

Maintenant, cette théorie est clairement Turing complète au sens de @ cody, juste par la force brute; mais l'affirmation est qu'elle est également cohérente. Construisons-en un modèle.

U1U2U3

  • ,N,0,SU1S
  • abUiaUi
  • A,BUiBAUi
  • AUif:AUiaAf(a)Ui

Ui

vU2vIv

  • Iv(x)=v(x)x
  • Iv()=U1,Iv()=U2
  • Iv(nat)=N,Iv(0)=0,Iv(S)=S
  • Iv(fe)=ΦeNNe
  • Iv(AB)=Iv(A)(Iv(B))Iv(A)Iv(B)Iv(AB)=0
  • Iv(λx:A.B)aIv(A)Iv[x:=a](B)
  • Iv(Πx:A.B)=aIv(A)Iv[x:=a](B)

AIv(A)U3vA:BvA:BIv(A)Iv(B)ΓA:Bvvx:C(x:C)ΓvA:B

ΓA:BΓA:Bx,yy:x:yy

β

Morgan Thomas
la source
2
Afe(x)Φe(x)ιββfe(x)ιβ
Je pense que tu as raison. Ce n'est pas mon domaine, donc je suis un peu maladroit. :-) Je pense que votre preuve fonctionne, et une conséquence intéressante, si j'ai raison, est que cette théorie n'a pas beaucoup de cohérence. Cela ressemble à une théorie potentiellement très puissante, car elle a des types et des nombres naturels, ce qui devrait vous permettre d'interpréter la théorie des ensembles; mais apparemment, vous ne pouvez pas, car vous pouvez prouver sa cohérence sans utiliser une puissante théorie des ensembles!
Morgan Thomas