Je donnerai une réponse partielle, j'espère que d'autres rempliront les blancs.
Dans les -calculi typés, on peut donner un type aux représentations habituelles des données ( N a t pour les entiers d'église (unaires), S t r pour les chaînes binaires, B o o lλNatStrBool pour booléens) et je me demande quelle est la complexité des fonctions / problèmes représentables / décidables par des termes dactylographiés. Je ne connais une réponse précise que dans certains cas, et dans le cas simplement tapé, cela dépend de la convention utilisée lors de la définition de "représentable / décidable". Quoi qu'il en soit, je ne connais aucun cas où il existe une limite supérieure doublement exponentielle.
Tout d'abord, un bref récapitulatif sur le Lambda Cube. Ses 8 calculs sont obtenus en activant ou désactivant les 3 types de dépendances suivants au-dessus du -calculus (STLC) simplement typé :λ
- polymorphisme : les termes peuvent dépendre des types;
- types dépendants : les types peuvent dépendre de termes;
- ordre supérieur : les types peuvent dépendre des types.
(La dépendance des termes aux termes est toujours là).
Ajout des rendements polymorphisme système F. Ici, vous pouvez taper les nombres entiers avec l' Église , et de même pour les chaînes binaires et les booléens. Girard a prouvé que les termes du système F de type N a t → N a t représentent exactement les fonctions numériques dont la totalité est prouvable dans l'arithmétique Peano du second ordre. C'est à peu près les mathématiques de tous les jours (mais sans aucune forme de choix), donc la classe est énorme, la fonction Ackermann est une sorte de microbe minuscule, sans parler de la fonction 2Nat:=∀X.(X→X)→X→XNat→Nat . Je ne connais aucune fonction numérique "naturelle" qui ne peut pas être représentée dans le système F. Les exemples sont généralement construits par diagonalisation ou par codage de la cohérence du PA de second ordre, ou d'autres astuces auto-référentielles (comme décider de l'égalitéβdans le système F lui-même). Bien sûr, dans le système F, vous pouvez convertir entre des entiers unairesNatet leur représentation binaireStr, puis tester par exemple si le premier bit est 1, donc la classe des problèmes décidables (en termes de typeStr→Bool) est tout aussi énorme.22nβNatStrStr→Bool
Les 3 autres calculs du Lambda Cube qui incluent le polymorphisme sont donc au moins aussi expressifs que le système F. Ceux-ci incluent le système F ω (polymorphisme + ordre supérieur), qui peut exprimer exactement les fonctions prouvées totales dans l'ordre supérieur PA, et le calcul de Constructions (CoC), qui est le calcul le plus expressif du Cube (toutes les dépendances sont activées). Je ne connais pas la caractérisation de l'expressivité du CoC en termes de théories arithmétiques ou de théories des ensembles, mais cela doit être assez effrayant :-)ω
Je suis beaucoup plus ignorant des calculs obtenus en activant simplement les types dépendants (essentiellement la théorie des types de Martin-Löf sans égalité et nombres naturels), les types d'ordre supérieur ou les deux. Dans ces calculs, les types sont puissants mais les termes ne peuvent pas accéder à ce pouvoir, donc je ne sais pas ce que vous obtenez. Sur le plan informatique, je ne pense pas que vous obteniez beaucoup plus d'expressivité qu'avec les types simples, mais je peux me tromper.
Il nous reste donc le STLC. Pour autant que je sache, c'est le seul calcul du Cube avec des limites supérieures de complexité intéressantes (c'est-à-dire pas monstrueusement grandes). Il y a une question sans réponse à ce sujet sur TCS.SE, et en fait la situation est un peu subtile.
XNat:=(X→X)→X→XNat→NatXNat[A]→NatANat[A]→Nat[A′]→Nat
MNat[A]→BoolAMnM
22⋮2n,
StrMM
CSTStr[A]→BoolACSTCST⊊LINTIMELINTIME∖CST
CST
CST=REG{0,1}
(Ceci est le théorème 3.4 dans leur article).
CSTLINTIMEλCST
(Soit dit en passant , j'ai partagé ma surprise dans cette réponse à une question de MO sur les "théorèmes inconnus").