Le calcul lambda affine peut-il résoudre tous les problèmes de P?

10

Dans les rubriques avancées sur les types et les langages de programmation, il est mentionné, dans le chapitre sur les systèmes de types sous-structurels, qu'un calcul lambda affiné "soigneusement conçu" avec un combinateur de récursivité pour les listes ne peut taper que des termes qui ont un temps d'exécution polynomial (il ne présenter la preuve en raison de la complexité). Ce serait super intéressant si nous pouvions également résoudre tous les problèmes de P. Je pourrais essayer de trouver une solution à un problème P-complet en utilisant le calcul présenté par Je ne suis pas sûr que cela prouverait quoi que ce soit. Cela ne me semble pas signifier qu'il peut effectuer toutes les réductions nécessaires pour utiliser une solution à un problème P-complet (même si cela semble probable).

Si un calcul lambda affine n'est pas connu pour être en mesure de résoudre exactement les problèmes de P, existe-t-il un calcul connu qui peut résoudre exactement les problèmes de P?

Jake
la source
1
Excusez mon ignorance, mais quel est un exemple d'un problème complet, et plus important encore, quelle notion de réduction utilisez-vous? P
Andrej Bauer
J'en ai trouvé sur wikipedia: en.wikipedia.org/wiki/P-complete#P-complete_problems . Le problème de la valeur du circuit et du klaxon-SAT est intéressant. La programmation linéaire est également apparemment complète. Ces diapositives décrivent le problème de valeur de circuit du puits de précarité cs.cornell.edu/courses/CS6820/2012sp/Handouts/cvp.pdf . Il semble que l' on utilise soit des réductions de L soit du N C , les réductions de L étant plus faibles que les réductions de N C. Je serais satisfait de l'un ou l'autre; Je ne sais pas quelles sont les conséquences de l' utilisation de la L vs N C sont exactement. PLNCLNCLNC
Jake
6
Il existe des langages linéaires qui sont complets pour P. Fait intéressant, ils sont généralement complets pour les problèmes, mais pas pour les algorithmes. Autrement dit, vous pouvez écrire un programme de temps poly pour chaque problème dans P, mais tous les algorithmes de temps poly ne sont pas exprimables.
Neel Krishnaswami
Cette déclaration serait-elle à peu près équivalente à "ils sont généralement complets pour P mais pas pour FP"? De plus, si vous pouviez fournir quelques exemples, ce serait une réponse étonnante.
Jake
3
Neel Krishnaswami, pouvez-vous fournir une référence? Cela semble intéressant.
Mateus de Oliveira Oliveira

Réponses:

12

Edit: ma supposition dans le premier paragraphe ci-dessous est fausse! Ugo Dal Lago m'a fait remarquer un article ultérieur de Martin Hofmann (paru dans POPL 2002), dont je n'étais pas au courant, montrant (comme corollaire de résultats plus généraux) que le système du livre ATTPL est en fait complet pour ( bien qu'il ne soit pas en mesure de calculer toutes les fonctions dans F P ). À ma grande surprise, la réponse à la question principale est donc oui.PFP


En ce qui concerne le système dont vous parlez (du livre de ATTPL), je suis sûr qu'il ne peut pas décider de toutes les langues . Il ne peut certainement pas calculer toutes les fonctions dans F P : comme mentionné dans les notes de ce chapitre, ce système est tiré de l'article LICS 1999 de Martin Hofmann ("Types linéaires et calcul du temps polynomial sans augmentation de taille"), dans lequel il est montré que les fonctions représentables sont polytemporaires et n'augmentent pas la taillePFP, ce qui exclut de nombreuses fonctions de polytime. Cela semble également limiter sérieusement la taille de la bande des machines Turing que vous pouvez simuler dans cette langue. Dans l'article, Hofmann montre que vous pouvez coder le calcul d'espace linéaire; je suppose que vous ne pourrez pas faire beaucoup plus, c'est -à- dire que la classe correspondant à ce système est à peu près les problèmes pouvant être résolus simultanément dans le polytemps et l'espace linéaire.

En ce qui concerne votre deuxième question, il y a plusieurs -calculi qui peut résoudre exactement les problèmes P . Certains d'entre eux sont mentionnés dans les notes du chapitre ATTPL auquel vous vous référez (Sect. 1.6): λ -calculus à plusieurs niveaux de Leivant (voir son article POPL 1993, ou l'article avec Jean-Yves Marion "Lambda Calculus Characterisations of Poly-Time ", Fundamenta Informaticae 19 (1/2): 167-184, 1993), qui est liée à la caractérisation de F P par Bellantoni et Cook ; et les λ -calculi dérivés de la logique linéaire légère de Girard ( Information and Computation , 143: 175–204, 1998) ou de la logique linéaire douce de Lafont ( Theoretical Computer ScienceλPλFPλ318 (1-2): 163-180, 2004). Les systèmes de types issus de ces deux derniers systèmes logiques et assurant la terminaison du polytime (tout en bénéficiant de l'exhaustivité) peuvent être trouvés dans:

Patrick Baillot, Kazushige Terui. Types de lumière pour le calcul du temps polynomial dans le calcul lambda. Information et calcul 207 (1): 41-62, 2009.

Marco Gaboardi, Simona Ronchi Della Rocca. Des logiques légères aux affectations de type: une étude de cas. Journal logique de l'IGPL 17 (5): 499-530, 2009.

Vous trouverez de nombreuses autres références dans ces deux articles.

Pour conclure, permettez-moi de développer la remarque de Neel Krishnaswami. La situation est un peu subtile. Tous les -calculi ci-dessus peuvent être considérés comme des restrictions de calculs plus généraux, dans lesquels vous pouvez calculer bien plus que les fonctions de polytime, par exemple le système F. En d'autres termes, vous définissez une propriété Φ des programmes du système F P : stringbool tel que:λΦP:chaînebool

solidité: implique que le langage décidé par P est en P ;Φ(P)PP

complétude: pour tout , il existe un programme F système P décidant L tel que Φ ( P ) .LPPLΦ(P)

L'intérêt est que la propriété exprimée par est purement syntaxique et, en particulier, décidable. Par conséquent, l'exhaustivité ne peut tenir que dans un sens extensionnel: si L est votre langue préférée dans P et si P est votre algorithme préféré pour décider de L exprimé dans le système F, il se peut que Φ ( P ) ne soit pas valide. Tout ce que vous savez, c'est qu'il existe un autre programme F du système P 'qui décide de L et tel que Φ ( P ' ) est vrai. Malheureusement, il peut arriver que P ΦLPPLΦ(P)PLΦ(P)Pest beaucoup plus que votre arrangé . En effet, l'exhaustivité est prouvée en codant les machines de Turing à synchronisation polynomiale en termes de système F satisfaisant Φ . Par conséquent, le seul moyen garanti de résoudre L en utilisant votre algorithme préféré consiste à implémenter cet algorithme sur une machine de Turing puis à le traduire dans le système F en utilisant l'encodage donné dans la preuve d'exhaustivité (votre propre encodage peut ne pas fonctionner!). Pas exactement la solution la plus élégante en termes de programmation ... Bien sûr, dans de nombreux cas, le programme "naturel" P satisfait Φ . Cependant, dans de nombreux autres cas, ce n'est pas le cas: dans l'article de LICS 1999 mentionné ci-dessus, Hofmann donne l'exemple du tri par insertion.PΦLPΦ

Il existe des systèmes de type intentionnellement complets , qui sont capables de taper exactement les programmes polytime du langage plus large (système F dans mon exemple ci-dessus). Bien sûr, ils sont indécidables en général. Voir

Ugo Dal Lago, Marco Gaboardi. Types dépendants linéaires et exhaustivité relative. Méthodes logiques en informatique 8 (4), 2011.

Damiano Mazza
la source
1
Je ne comprends pas ce que vous essayez de dire dans la seconde moitié. Sur la base de votre description, il existe une transformation syntaxique des machines de Turing synchronisées dans le temps vers des programmes F résolvant le même problème. Pour autant que je puisse voir, c'est le meilleur que l'on puisse espérer lors de la traduction d'un modèle de calcul à un autre.
Emil Jeřábek
3
@ EmilJeřábek: J'essaie de dire que est assez restrictif et qu'il rejette de nombreux programmes F polytemporaires "naturels". S'il y avait une telle chose comme un système F programmeur et vous étiez l' un, et si je vous ai demandé d'écrire un programme pour multiplier les entiers unaires (de type N a t : = X . ( X X ) X X ), vous écririez probablement λ m N a t . λ n N a t . Λ X . λ s X ΦNunet: =X.(XX)XX. Ensuite, vous pourriez être déçu de constater que votre mandat est rejeté et, au lieu de cela, vous devez programmer la multiplication en itérant l'addition. (Suite)λmNat.λnNat.ΛX.λsXX.mX(nXs)
Damiano Mazza
3
(L'exemple ci-dessus est réel: dans tous les systèmes de types dérivés de logique linéaire pour le polytemps, le terme habituel pour la multiplication n'est pas typable). Vous pouvez être encore plus déçu si je vous ai dit que vous ne pouvez pas programmer, par exemple, tri par insertion en tant que telle ( ce qui est certainement polynomial) mais vous devez écrire la machine de Turing sa mise en œuvre , puis encode que dans le système F. Et je dirais vous auriez raison d'être déçu: ce programmeur dans quel langage de programmation de haut niveau serait heureux avec un contrôleur de type dit « Je ne peux pas taper vérifier votre emboîtée boucles, le code s'il vous plaît ceci dans l' ensemble »? :-)for
Damiano Mazza
Je pense que c'est ok. Je suis principalement intéressé par la recherche de fonctions (trouver des fonctions qui maximisent une certaine propriété) donc je n'ai pas besoin d'être le programmeur, l'ordinateur le fait. Ce soir, j'aurai un jour à regarder ces références. Merci!
Jake