P/poly
# P/poly

En informatique théorique, plus précisément en théorie de la complexité, P/poly est la classe de problèmes de décision décidés par une famille de circuits booléens de tailles polynomiales. Cette classe a été introduite par Karp et Lipton en 1980. Cette classe est importante, car comme P est incluse dans P/poly, si on démontre que NP ⊈ P/poly, alors on résout le problème ouvert P est différent de NP.

## Définitions

Il y a deux définitions équivalentes, la première donnée avec le modèle de calcul des circuits booléens, l'autre avec des machines de Turing.

### Définition par circuits

Une famille de circuits ${\mathcal {C}}$ est une suite infinie ${\mathcal {C}}_{0}$, ${\mathcal {C}}_{1}$, ..., ${\mathcal {C}}_{n}$, ... où ${\mathcal {C}}_{n}$ est un circuit booléen $n$ bits d'entrée. Lorsque $x$ est une chaîne de bits de longueur $n$, on notera ${\mathcal {C}}_{n}\left[x\right]$ le résultat de l'évaluation du circuit ${\mathcal {C}}_{n}$ lorsque le $i$ème bit d'entrée de ${\mathcal {C}}_{n}$ est affecté à la valeur du $i$ème bit de $x$, pour tout $i\in \{1,2,...,n\}$.

La classe P/poly est la classe des langages $L\subseteq \{0,1\}^{*}$ tels qu'il existe une famille de circuits ${\mathcal {C}}$ et un polynôme $p$ tels que :

* la taille de ${\mathcal {C}}_{n}$ est au plus $p(n)$ ;
* pour tout $x\in \left\{0,1\right\}^{*}$, $x\in L$ si et seulement si ${\mathcal {C}}_{n}[x]$ est vrai, où $n$ est la taille de $x$.

On dit d'un langage satisfaisant cette propriété qu'il a des circuits polynomiaux.

### Définition par machine de Turing avec conseils

On peut définir P/poly de manière équivalente en utilisant des machines de Turing déterministes qui prennent conseil. Une telle machine, a le droit d'utiliser un mot fini $c_n,$ qui sert de conseil pour traiter toutes les instances x de taille n. Un problème est dans P/poly s'il existe une machine de Turing M en temps polynomial et une suite de mots finis $c_0,$ $c_1,$ $c_2,...$ où $c_n$ est de taille polynomiale en n, tels que pour tout mot x de longueur n, x est une instance positive ssi M(x, $c_n)$ = 1. Les mots finis $c_0,$ $c_1,$ $c_2,...$ s'appellent des conseils.

## Propriétés

### P/poly et P

La classe P est incluse dans la classe P/poly (P peut être définie comme P/poly sauf avec des familles de circuits uniformes en temps polynomial). P/poly contient des problèmes décidables et hors de P.

### P/poly contient des langages indécidables

Remarquons qu'il n'est pas nécessaire que le circuit correspondant à une entrée de taille $n$ puisse être construit en temps polynomial, ni même de façon déterministe. Cela a une conséquence étrange : il existe des langages indécidables qui ont des circuits polynomiaux. En effet, soit $L$ un langage indécidable sur l'alphabet $\{0,1\}$, et $U$ le langage des mots $1^{n}$ (autrement dit, $n$ écrit en unaire) tels que $n$, écrit en binaire, est dans $L$. Il est clair que $U$ est indécidable, pourtant il a des circuits polynomiaux : si $n$ est dans $L$, alors ${\mathcal {C}}_{n}$ est la conjonction des $n$ bits d'entrée ; sinon ${\mathcal {C}}_{n}$ est juste le booléen faux.

### Théorème d'Adleman

Le théorème d'Adleman, démontré par Leonard Adleman (Adleman 1978), énonce que BPP est inclus dans P/poly.

### Importance de P/poly

P/poly a une place importante en théorie de la complexité : plusieurs propriétés importantes s'expriment à l'aide de P/poly :

* Si NP est inclus dans P/poly, alors la hiérarchie polynomiale s'effondre au niveau 2 (c'est le théorème de Karp-Lipton (Karp et Lipton 1980)), et de plus, on a AM = MA.
* Si NP n'est pas inclus dans P/poly, comme P l'est, on en déduit que P est différent de NP.
* Si PSPACE est inclus dans P/poly, alors PSPACE $=\Sigma _{2}^{\rm {P}}$, et on a même PSPACE = MA
* Si EXPSPACE est inclus dans P/poly, alors EXPSPACE $=\Sigma _{2}^{\rm {P}}$ (c'est le théorème de Meyer), et on a même EXPSPACE = MA.

## Caractérisation

Il y a équivalence entre :

* Un langage A est dans P/poly
* il existe un langage creux S tel que A est réductible au sens de Turing en temps polynomial à S,
* il existe un langage unaire T tel que A est réductible au sens de Turing en temps polynomial à T.

L'équivalence entre 1 et 2 est attribué à A. Meyer selon (comme indiqué dans) et l'équivalence entre 2 et 3 est montré dans.

## Référence

* ↑ Richard M. Karp et Richard J. Lipton, « Some Connections Between Nonuniform and Uniform Complexity Classes », Proceedings of the Twelfth Annual ACM Symposium on Theory of Computing, ACM, sTOC '80,‎ 1980, p. 302–309 (ISBN 9780897910170, DOI 10.1145/800141.804678, lire en ligne, consulté le 12 mars 2019)
* ↑ (en) Sanjeev Arora et Boaz Barak, Computational Complexity : A Modern Approach, Cambridge University Press, 2009 (ISBN 0-521-42426-7), chap. 6 (« Boolean circuits »), p. 6.5
* ↑ (en) Sanjeev Arora et Boaz Barak, Computational Complexity : A Modern Approach, Cambridge University Press, 2009 (ISBN 0-521-42426-7), chap. 6 (« Boolean circuits »), p. 108, Def. 6.5
* ↑ (en) Sanjeev Arora et Boaz Barak, Computational Complexity : A Modern Approach, Cambridge University Press, 2009 (ISBN 0-521-42426-7), chap. 6 (« Boolean circuits »), p. 6.3, Th. 6.18
* ↑ Sylvain Perifel, Complexité algorithmique, Ellipses, 2014, 432 p. (ISBN 9782729886929, lire en ligne), chap. 625 (« Circuits et algorithmes probabilistes »), p. 163
* 1 2 (en) Ronald V. Book, « On Sets with Small Information Content », dans Kolmogorov Complexity and Computational Complexity, Springer Berlin Heidelberg, coll. « EATCS Monographs on Theoretical Computer Science », 1992 (ISBN 9783642777356, DOI 10.1007/978-3-642-77735-6_3, lire en ligne), p. 23–42
* ↑ L. Berman et J. Hartmanis, « On Isomorphisms and Density of $NP$ and Other Complete Sets », SIAM Journal on Computing, vol. 6, $n^o$ 2,‎ 1er juin 1977, p. 305–322 (ISSN 0097-5397, DOI 10.1137/0206023, lire en ligne, consulté le 15 juillet 2019)
* ↑ (en-GB) José Luis Balcázar, Josep Díaz et Joaquim Gabarró, Structural Complexity I, coll. « EATCS Monographs on Theoretical Computer Science Series », 1988 (DOI 10.1007/978-3-642-97062-7, lire en ligne)
