Il y a déjà de bonnes réponses, mais je voudrais ajouter quelques petits points.
Supposons que nous avons une technique pour résoudre les problèmes, par exemple la diagonalisation . Supposons que nous voulons montrer que la technique ne peut pas résoudre un problème spécifique, par exemple vs . Comment peut-on montrer cela?PNP
Avant d'aller plus loin, notons qu'une technique comme la diagonalisation n'est pas un concept formel ici (bien que nous puissions le faire). De plus, le fait que la technique ne puisse pas résoudre le problème en elle-même ne signifie pas qu'elle n'est pas du tout utile pour résoudre le problème, nous pourrions être en mesure de le modifier et / ou de le combiner avec d'autres techniques pour résoudre le problème.
Maintenant, revenons à la question. Une façon de montrer qu'une technique ne peut pas résoudre un problème spécifique est de montrer que si elle le pouvait, elle fonctionnerait également dans un cadre différent pour résoudre une autre question, et la réponse que nous obtiendrions dans ce cas serait fausse. C'est ce qui se passe ici. Si la diagonalisation pourrait séparer de alors le même argument pourrait être utilisé pour séparer de pour tous . Mais nous savons qu'il existe un oracle tel que celui-ci est faux (prenez tout problème comme l'oracle). La diagonalisation ne peut donc pas séparer de .NPPNPAPAPSpaceNPP
Le point essentiel de cet argument est une sorte de principe de transfert :
nous pouvons transférer un argument de diagonalisation pour les MT sans oracle vers les TM avec oracles.
Ceci est possible ici car les arguments de diagonalisation sont basés sur la simulation de machines, de plus la simulation ne dépend pas des internes des machines mais uniquement des réponses finales de ces simulations. Ce type de diagonalisation est appelé diagonalisation simple . Dans une simulation, peu importe le fonctionnement de la machine, nous nous soucions uniquement de la réponse finale de la machine. L'ajout d'un oracle ne changera pas cela, donc la simulation et l'argument fonctionneront également dans le cadre où nous avons des oracles.
Plus formellement, nous pouvons penser à un argument de diagonalisation comme une fonction d'une classe de machines (disons ) à des instances montrant que la machine ne peut pas résoudre un problème (disons ). Cette fonction de contre-exemple est la fonction de diagonalisation. Une diagonalisation est simple si les contre-exemples qu'elle donne ne dépendent pas des internes des machines, c'est-à-dire si deux DTM à temps polynomial ont le même langage, alors le contre-exemple montrant qu'ils ne peuvent pas résoudre le donné par la fonction de diagonalisation est le même.P
Vous vous demandez peut-être si c'est une grosse restriction? Pourquoi le contre-exemple devrait-il dépendre de la structure interne de la machine? Peut-on prouver des séparations en utilisant la diagonalisation qui ne peuvent pas être prouvées en utilisant une simple diagonalisation? La réponse est oui. En fait, Kozen montre dans son article de 1978 "Indexation des classes subrécursives" (3 ans après le résultat BGS) que si peut être séparé de alors il y a un argument général de diagonalisation pour cela. Et dans la pratique, de tels arguments ont été trouvés. Par exemple, les bornes inférieures de l'espace-temps de Fortnow et van Melkebeek pour SAT (2000) utilisent une technique appelée diagonalisation indirecte qui donne une diagonalisation non simple.NPP
Donc, l'affirmation selon laquelle la diagonalisation ne peut pas résoudre vs incorrecte? Eh bien, en général, ce que les experts entendent par diagonalisation ici est une simple diagonalisation et il y a une bonne raison à cela.PNP
Les arguments généraux de diagonalisation sont si généraux que cela n'a pas vraiment de sens de les appeler une technique, vous pouvez facilement transformer n'importe quel argument de séparation en argument de diagonalisation sans beaucoup d'informations: si nous avons déjà un moyen de séparer deux classes de complexité, nous peut choisir une fonction dans la plus grande classe et non dans la plus petite. Prenez toute énumération des machines dans la classe plus petite. Soit n'importe quelle machine dans l'énumération. Nous devons définir le contre pour . Mais nous savons déjà que ne peut pas résoudre le problème, donc il existe une instance le montrant, définissons la valeur de la fonction de diagonalisation surM M Mêtre cet exemple. C'est la vue d'ensemble, si vous voulez voir les détails, vérifiez le papier de Kozen.
Estival:
- Quand les experts disent que "la diagonalisation ne peut pas résoudre contre " ce qu'ils veulent dire est " la diagonalisation simple ne peut pas résoudre contre " pas le général.N P P N PPNPPNP
- La raison pour laquelle la diagonalisation simple ne peut pas séparer de est qu'elle se transfère au cadre avec des oracles (dans la littérature, elle est dite "diagonalisation relativisée") et la séparation ne s'y tient pas.PNPP
- La raison pour laquelle ce transfert d'un framework sans oracle à un framework avec oracles fonctionne est que la diagonalisation simple est basée sur une simulation de boîtes noires des MT et peu importe le fonctionnement des machines, qu'elles aient ou non un oracle.
Deux bons articles pour en savoir plus sur la diagonalisation sont
- Document d'enquête de Lance Fortnow «Diagonalization», 2001, et
- Russell Impagliazzo, Valentine Kabanets et l'article d'Antonina Kolokolova "An Axiomatic Approach to Algebrization", 2009. (Notez que l' algèbre est une extension de la diagonalisation simple .)