IFT Théorème PCP: Aperçu et applications à linapproximabilité
Vérificateurs faibles Dans le chapitre précédent, on est parti des systèmes de preuve qui caractérisent NP et lon a augmenté la puissance du système de preuve pour définir des classes de complexité potentiellement plus grandes que NP. Ici, on veut faire le raisonnement inverse. À quel point peut-on affaiblir le vérificateur tel que la classe de complexité capturée demeure exactement NP?
Vérificateurs probabilistes Soit r,q: N N. Un (r(n),q(n))-vérificateur de preuve probabiliste est un algorithme V de temps polynomial. Pour une entrée x et une preuve P {0,1}*, lalgorithme V reçoit x et un vecteur r {0,1} O(r(|x|)) de bits aléatoires. V calcule alors un total de O(q(|x|)) positions et reçoit les valeurs de P à ces positions précises. Avec cette information, V décide ou non daccepter le triplet x,r,P. (note: on dénote cette décision V(x,r,P) )
Remarques On peut supposer que r et q sont bornés par des polynômes puisque V sexécute en temps polynomial. Il sera pratique de considérer le cas où r = 0 (et donc aucun bit aléatoire nest utilisé) et le cas où q = 0 (donc la preuve nest pas consultée du tout). La surprise de ce modèle est quun vérificateur probabiliste ne lit pas nécessairement toute la preuve P!
PCP Un langage L appartient à la classe PCP(r(n),q(n)) sil existe un (r(n),q(n))- vérificateur probabiliste V tel que 1. Si x L alors il existe une preuve P(x) telle que Pr[V(x,r,P(x)) = 1] = Si x L alors pour toute preuve P Pr[V(x,r,P) = 0] ½.
Remarques On dénote PCP(poly,q(n)) lunion de toutes les classe PCP(n k,q(n)) et PCP(r(n),poly) lunion de toutes les classes PCP(r(n),n k ). Notez bien que la preuve est potentiellement exponentiellement longue. Par contre, on peut toujours supposer que la preuve est de longueur au plus O(q(n) 2 O(r(n)) ) car pour chacun des 2 O(r(n)) vecteurs de bits aléatoires possibles, au plus O(q(n)) bits sont consultés. Notez aussi que le choix de ½ est plus ou moins arbitraire.
Plusieurs classes usuelles peuvent être définies comme des classes PCP. Théorème Théorème: P = PCP(0,0) NP = PCP(0,poly) co-RP = PCP(poly,0)
Démonstration Démonstration: P = PCP(0,0) Soit L PCP(0,0). Puisque q = 0, la preuve est complètement ignorée. Par ailleurs, pour tous les x L on a Pr[V(x,r,P) = 0] ½ mais puisquaucun bit aléatoire nest utilisé on a Pr[V(x,r,P) = 0] = 1. Donc L PCP(0,0) si et seulement si L P.
Démonstration Démonstration: NP = PCP(0,poly) Soit L PCP(0,poly). Puisque r = 0, les positions que V consulte dans P sont toujours les mêmes. Donc on peut supposer que P est de longueur polynomiale. Par ailleurs, puisquaucun bit aléatoire nest utilisé on a pour tous les x L et pour toutes les preuves P: Pr[V(x,r,P) = 0] = 1. Donc L PCP(0,poly) si et seulement si il existe une preuve de longueur polynomiale qui peut être validée par un algorithme déterministe en temps polynomial. Cest exactement une des définitions de NP.
Démonstration Démonstration: co-RP = PCP(poly,0) Soit L PCP(poly,0). Puisque q = 0, la preuve est complètement ignorée. Donc L PCP(poly,0) si et seulement sil existe un algorithme probabiliste V sexécutant en temps polynomial et utilisant un nombre de bits aléatoires possiblement polynomial tel que 1. si x L alors Pr[V(x) = 1] = Si x L alors Pr[V(x) = 0] ½. Cest précisément la définition de la classe co-RP.
Théorème Théorème: Si L PCP(r(n),q(n)) alors L NTIME(2 O(r(n)+log n) ). Donc les PCP peuvent peut-être capturer de nombreuses classes de complexité intéressantes mais toutes contenues dans NEXP.
Démonstration Démonstration: Supposons L PCP(r(n),q(n)). Pour décider si x L, notre machine non-déterministe va simplement choisir non-déterministement une preuve P et simuler le comportement du vérificateur probabiliste pour les 2 O(r(n)) valeurs possibles des bits probabilistes r. Daprès nos remarques précédentes on peut supposer que la preuve est de longueur au plus q(n) 2 O(r(n)) elle peut donc être choisie dans la borne de temps spécifiée. Pour chaque valeur de r, la simulation de V se fait en temps p(n) 2 O(r(n)) = 2 O(r(n) + log n). Notre algorithme non déterministe accepte si pour la preuve choisie, tous les choix de r font que V accepte x. Si x L alors il existe une preuve telle que tous les choix probabilistes amènent V à accepter. Si x L alors pour chaque preuve au moins la moitié des r amènent V à rejeter.
Corollaire Corollaire: NP = PCP(log n,poly) À quel point peut-on diminuer r(n) et q(n) en conservant NP = PCP(r(n),q(n)? En dautres mots quel est le vérificateur le plus faible qui permet de caractériser NP? Il existe plusieurs choix optimaux, entre autres parce que NP = PCP(0,poly) mais le théorème PCP est le plus surprenant de ces résultats.
Théorème PCP Théorème PCP: [Arora, Lund, Motwani Sudan, Szegedy] NP = PCP(log n,1) Résultat absolument incroyable. On peut se contenter dun vérificateur qui choisit aléatoirement O(1) bits de la preuve et qui réussit à être convaincu de sa validité.
Remarques Attention, ne pas faire lerreur du New York Times. Contrairement aux preuves usuelles pour NP, la preuve utilisée ici doit contenir dans chacun de ses bits une information très délocalisée. Un des résultats les plus profonds, sinon le plus profond de toute la théorie de la complexité. Impact considérable sur la théorie de linapproximabilité. Liens étroits avec la théorie des codes correcteurs. La démonstration continue à être améliorée très régulièrement.
Démonstration du théorème PCP On va démontrer le résultat plus faible suivant 3-SAT PCP(n 3,1). Tout de même surprenant: il existe pour 3- SAT un vérificateur probabiliste qui consulte une preuve exponentiellement longue mais ne consulte à chaque fois quun nombre fixe des bits de preuve.
Observations préliminaires Quest-ce qui constitue une preuve que la formule x 1,..., x n ) est satisfiable? Le plus simple est de trouver un a {0,1} n tel que (a) = Positif: preuve courte et facilement vérifiable. 2. Négatif: seulement vérifiable avec un accès à tous les bits de preuve. Chaque bit de preuve contient une information excessivement locale. Les PCP représentent également un a {0,1} n qui satisfait la formule. Mais cette information est présenté de façon à ce que chaque bit de preuve contienne un peu dinformation à propos de chaque a i. Ainsi la lecture dun très petit nombre de bits de preuve permet de se convaincre que (a) = 1.
Observations préliminaires Une PCP pour la formule est lencodage P(a) dun a {0,1} n tel que (a) = 1. Il faut que P(a) soit construit de sorte que la lecture dun petit nombre de bits suffit à conclure (a) = 1. Le vrai problème est de sassurer que si est insatisfiable alors aucune preuve ne réussira à induire en erreur le vérificateur. 1. Si la preuve fournie est P(a) telle que (a) = 0, il faut que le vérificateur puisse conclure que la preuve est invalide. 2. Pire encore, si la preuve na rien à voir avec un quelconque encodage P(a) pour un a {0,1} n alors il faut aussi que le vérificateur puisse détecter un problème.
Observations préliminaires On va choisir un code-correcteur pour représenter P(a). Si aucun a ne satisfait on va considérer deux types de preuve que lon pourrait être tenté dutiliser pour induire le vérificateur en erreur. 1. La preuve est très différente de tous les encodages P(a) dun a {0,1} n. Alors le vérificateur aura une bonne chance de détecter que la preuve est invalide. 2. Il existe un a tel que la preuve est très semblable à P(a). Alors le vérificateur pourra facilement corriger la preuve pour agir comme si elle était réellement P(a). Il rejettera alors la preuve parce quil verra que (a) = 0.
Arithmétisation des formules Pour décrire le code et son fonctionnement, il est utile dassocier à chaque formule booléenne en 3CNF avec variables x 1,..., x n un polynôme p sur Z 2 avec variables x 1,...,x n. (x 1 2 x 3 ) (x 2 x 5 7 ) (1-x 1 )x 2 (1-x 3 ) + (1-x 2 )(1-x 5 )x 7 Le devient une multiplication, le devient une addition. x i devient (1-x i ) et i devient x i. Cette simple transformation associe un polynôme p à chaque formule.
Arithmétisation des formules Les polynômes p ont des propriétés intéressantes 1. Petit degré. (3) 2. Si a {0,1} n satisfait une clause C j alors le terme p j correspondant de p est 0. Sinon le terme correspondant est Si (a) = 1 alors p(a) = p(a) = 1 si et seulement si le nombre de clauses de qui ne sont pas satisfaites par a est impair.
Vérification à travers larithmétisation Supposons que nous avons trouvé une façon pour le vérificateur dobtenir la valeur p(a). 1. Si p(a) = 1 alors il sait que a ne satisfait pas. 2. Si p(a) = 0, il sait seulement quun nombre pair de clauses sont demeurées insatisfaites mais il voudrait savoir si ce nombre est 0. Pour régler le problème, on va choisir aléatoirement un sous-ensemble de clauses. Si (a) = 1 alors tous ces sous- ensembles contiennent un nombre pair de clauses insatisfaites. Sinon il y a une chance sur deux pour quun sous-ensemble de clauses insatisfaites!
Un test aléatoire Formellement, soit p j le terme de p correspondant à la clause C j. Pour un r {0,1} m, soit p r le polynôme p r = r j p j. Si a satisfait, on a p j (a) = 0 pour tous les j. Donc p r (a) = 0 pour tous les r. Si a ne satisfait pas et si C k est insatisfaite alors p k (a) = 1. Quelle est alors la probabilité quon choisisse un r tel que p r (a) = 0? On a p r (a) = ( j k r j p j (a)) + r k p k (a). Comme p k (a) = 1, il y a une probabilité ½ que ce dernier terme change la valeur de p r (a). Donc si a ne satisfait pas Pr r [p r (a) = 0] = Pr r [p r = 1] = ½.
Et alors? Super. Si le vérificateur reçoit une assignation a qui satisfait, le calcul dune valeur aléatoire p r (a) lui permet de conclure avec une bonne probabilité que a satisfait effectivement. Mais la preuve ne peut pas simplement fournir a parce que cela demanderait au vérificateur de lire n bits! La clé: construire une preuve qui permet au vérificateur de calculer p r (a) sans lire toute la preuve et donc sans savoir précisément la valeur de a.
Le code linéaire On peut maintenant décrire un peu mieux la preuve qui sera vérifiée. La preuve va encoder les valeurs de trois fonctions linéaires L 1 a, L 2 a, L 3 a qui dépendent de a. L 1 a : {0,1} n {0,1} L 2 a : {0,1} n 2 {0,1} L 3 a : {0,1} n 3 {0,1} On peut écrire entièrement les tables de valeur de ces trois fonctions en utilisant 2 n + 2 n n 3 bits. Si le vérificateur cherche à calculer L i a pour un point précis il peut le faire en consultant un seul point de cette liste de bits.
Le code linéaire Soit q un polynôme de degré au plus 3 sur Z 2. On peut développer q et lécrire comme une somme de 1. un terme constant c q {0,1} 2. des termes de la forme x i pour i I q des termes de la forme x i x j pour (i,j) I q des termes de la forme x i x j x k pour (i,j,k) I q 3. Puisque lon travaille sur Z 2 tous les coefficients sont 0 (terme napparaissant pas dans la somme) ou 1 (terme apparaissant).
Le code linéaire On définit maintenant les L i a. L 1 a (y 1,..., y n ) := 1 i n a i y i L 2 a (y 1,1,..., y n,n ) := 1 i,j n a i a j y i,j L 3 a (y 1,1,1,..., y n,n,n ) := 1 i,j,k n a i a j a k y i,j,k. Notez que chacune de ces trois fonctions ont des valeurs excessivement corrélées. Elles sont linéaires en ce sens que L i a (y 1 y 2 ) = L i a (y 1 ) + L i a (y 2 ) pour tout y 1, y 2 {0,1} n i.
Utilisation du code pour la vérification Supposons que le vérificateur veut évaluer q(a) pour q de degré 3. Il peut développer q et calculer c q, I q 1, I q 2 et I q 3. Soient c q 1, c q 2 et c q 3 les vecteurs caractéristiques de I q 1, I q 2 et I q 3. Le vérificateur qui veut calculer q(a) va regarder les bits de la preuve donnant L 1 a (c q 1 ), L 2 a (c q 2 ) et L 3 a (c q 3 ) et obtenir q(a) = L 1 a (c q 1 ) + L 2 a (c q 2 ) + L 3 a (c q 3 ).
Quest-ce que nous offre ce code? On a donc le résultat partiel suivant. Si le vérificateur reçoit une formule et une preuve encodant les valeurs de L 1 a, L 2 a et L 3 a il peut choisir aléatoirement un r {0,1} m et calculer p r (a) en lisant 3 bits de preuve. 1. Si a satisfait alors le vérificateur constate que p r (a) = 0 peu importe son choix de r. 2. Si a ne satisfait pas alors le vérificateur constate p r (a) = 0 avec probabilité ½. Notez aussi que m = O(n 3 ) et donc ce processus utilise au plus n 3 bits aléatoires.
Se protéger des fausses preuves Le plus dur reste à faire. On sait ce que devrait être la preuve si est satisfiable mais il faut construire des mécanismes qui permettent de rejeter avec forte probabilité nimporte quelle preuve lorsque est insatisfiable. On peut supposer que toutes les preuves sont de longueur 2 n + 2 n n 3. Notre vérificateur va faire passer une batterie de tests à la preuve potentielle. On veut construire ces tests de façon à ce quune réelle preuve de la forme désirée passe tous ces tests avec probabilité 1.
Test de linéarité Les preuves sont censées représenter trois fonctions linéaires. Donc si on choisit au hasard deux points y 1, y 2 {0,1} n i. On devrait avoir L i a (y 1 y 2 ) = L i a (y 1 ) + L i a (y 2 ). Bonne nouvelle: si la preuve représente effectivement des fonctions linéaires tous ces tests seront passés sans problème. Mauvaise nouvelle: si la preuve contient des fonctions qui sont presque linéaires alors la probabilité de détecter un problème est excessivement faible.
Test de linéarité On va être obligé de faire avec des preuves qui représentent des fonctions quasi- linéaires, cest à dire des fonctions qui diffèrent dune réelle fonction linéaire sur un tout petit nombre de points. Les fonctions qui ne sont pas quasi-linéaires vont échouer notre test avec une probabilité suffisamment forte. Les fonctions quasi-linéaires vont être suffisamment proches dune fonction linéaire pour que lon corrige les erreurs!
Évaluateur de fonction Supposons que le vérificateur a en main une preuve qui est constitué de trois fonctions f 1, f 2, f 3 quasi-linéaires. On va montrer quil existe des fonctions linéaires uniques l 1, l 2 et l 3 qui sont très proches des trois fonctions de la preuve. Lorsque le vérificateur voudra calculer L i a sur un point donné y il utilisera un évaluateur de fonction qui lui fournira non pas f i (y) mais plutôt l i (y).
Le dilemme de ladversaire Notez le problème auquel fait face un prouveur malicieux qui essaie de convaincre le vérificateur daccepter une formule insatisfiable. 1. Sil donne des fonctions qui encodent réellement L 1 a, L 2 a et L 3 a, il a perdu car le vérificateur verra probablement que a ne satisfait pas. 2. Sil donne des fonctions qui ne sont pas quasi- linéaires il a perdu car le vérificateur va probablement sen apercevoir. 3. Sil donne des fonctions qui sont quasi-linéaires alors le vérificateur peut contourner le problème en simulant une preuve où les fonctions données sont linéaires.
Test de cohérence Il reste une possibilité de confondre le vérificateur. Si les trois fonctions fournies comme preuve sont linéaires mais ne sont pas des fonctions de la forme L 1 a, L 2 a et L 3 a pour un même a alors le vérificateur peut se faire prendre. Le test de cohérence va précisément sassurer que les trois fonctions fournies en preuve sont reliées. Cest à dire quelles proviennent dun même a. Si trois fonctions linéaires ne sont pas de la forme L 1 a, L 2 a et L 3 a alors le test de cohérence sera échoué avec une probabilité < 1.
Placer les morceaux ensemble En combinant tous ces éléments, on obtiendra Si est satisfiable alors toute preuve de la forme (L 1 a,L 2 a,L 3 a ) pour (a) = 1 est acceptée avec probabilité 1. Si est insatisfiable alors une preuve (f 1,f 2,f 3 ) est accepté seulement si 1. Les tests de linéarité ne permettent pas de détecter quune des fonctions nest même pas quasi-linéaire. 2. Le test de cohérence ne réussit pas à détecter que les fonctions l 1, l 2 et l 3 ne sont pas cohérentes. 3. Tous les p r (a) calculés sont Une des évaluations de fonction est incorrecte.
Les paramètres à atteindre Dans un premier temps, on va sassurer que la probabilité quune fonction qui nest pas quasi-linéaire passe le test de linéarité est au plus 1/18. Ainsi la probabilité que les trois fonctions passent le test est au plus 1/6 si elles ne sont pas toutes quasi-linéaires. On pourra ensuite supposer que f 1, f 2 et f 3 sont quasi-linéaires. De la même façon, on va sassurer que le test de cohérence laisse passer trois fonctions quasi-linéaires qui sont incohérentes avec probabilité au plus 1/6. On pourra maintenant supposer que l 1, l 2 et l 3 sont cohérentes. Le coût de cette générosité: il ne reste plus que 1/6 de jeu pour le reste de la vérification.
Test de linéarité (détails) Pour tester si f i est quasi-linéaire on choisit aléatoirement x et y {0,1} n i. f i passe le test de linéarité si et seulement si f i (x y) = f i (x) + f i (y) Notez que ce test requiert au plus O(n 3 ) bits aléatoires et la lecture de trois bits de preuve.
Test de linéarité (détails) On dit que deux fonctions sont -proches si Prob x [f(x) g(x)]. On va montrer que 1. Si f est linéaire alors le test de linéarité est toujours un succès. 2. Si pour un <1/3 on a que f i nest pas -proche dune fonction linéaire l i alors la probabilité de passer le test est au plus 1- /2. La propriété 1 est évidente. Pour montrer la propriété 2, on va établir que si Prob x,y [f(x y) f(x) f(y)] /2 alors il existe une fonction linéaire l qui est -proche de f.
Test de linéarité (détails) Construisons la fonction l. Comment définir l(x)? Pour chaque y on devra avoir l(x) = l(x y) – l(y). Regardons plutôt f(x y) – f(y). Cette valeur nest pas toujours la même si f nest pas linéaire mais définissons l(x) comme étant la valeur la plus fréquente. Il faut montrer 1. l est -proche de f. 2. l est linéaire.
Test de linéarité (détails) Supposons que l nest pas -proche de f. Pr x [f(x) l(x)] > Par construction de l, on a aussi pour chaque x Pr y [l(x) = f(x y) – f(y)] ½. On peut écrire: Pr x,y [f(x y) – f(y) f(x)] Pr x,y [f(x y) – f(y) = l(x) l(x) f(x)] Analysons cette dernière probabilité.
Test de linéarité (détails) Pr x,y [f(x y) – f(y) = l(x) l(x) f(x)] = Pr x [l(x) f(x)] Pr y [f(x y) – f(y) = l(x) l(x) f(x)] + Pr x [l(x) f(x)] Pr y [f(x y) – f(y) = l(x) l(x) f(x) l(x) f(x)]. La dernière probabilité est 0. Comme on suppose que l et f ne sont pas proches Pr x [l(x) f(x)] > et lautre terme est ½. Donc Pr x,y [f(x y) – f(y) f(x)] > /2 ce qui est en contradiction avec lhypothèse.
Test de linéarité (détails) Il faut aussi montrer que l est linéaire. Considérons la probabilité p(x) = Pr y [l(x) = f(x y) – f(y)] Notre construction garantit p(x) ½ mais en fait on va montrer que p(x) > 1- grâce au fait que f est quasi-linéaire et donc que Pr x,y [f(x y) f(x) + f(y)] /2
Test de linéarité (détails) On peut conclure que pour tout x Pr y,z [f(x y) + f (z) f(x y z)] /2 et Pr y,z [f(y) + f(x z) f(x y z)] /2 La probabilité que lun de ces deux évenements se produise est donc au plus. Ainsi Pr y,z [f(x y) + f(z) f(y) + f(x z)]
Au lieu décrire f(x y) + f(z) f(y) + f(x z), il est plus pratique décire f(x y) - f(z) f(x z) – f(y). 1 - · Pr y,z [f(x y) - f(y) f(x z) – f(z)] = t 2 {0,1} Pr y,z [f(x y) - f(y) t Æ f(x z) – f(z) = t] = t 2 {0,1} Pr y,z [f(x y) - f(y) t] ¢ Pr y,z [f(x z) – f(z) = t] = t 2 {0,1} (Pr y [f(x y) - f(y) t]) 2 Prenons maintenant t = l(x). On a alors Pr y [f(x y)-f(y) t] = p(x) et Pr y [f(x y)-f(y) 1-t] = 1 - p(x) Finalement comme p(x) · ½, on a 1 - · p(x) 2 + (1 – p(x)) 2 · p(x) 2 + p(x)(1-p(x)) = p(x)
Test de linéarité (détails) On a donc pour tout x, x 1. Pr y [l(x) = f(x y) – f(x)] = p(x) Pr y [l(x) = f(x x y) – f(x y)] Pr y [l(x x) = f(x x y) – f(y)] 1-. La probabilité que ces trois choses surviennent est au moins 1-3. Et donc avec probabilité 1-3 on a l(x) + l(x) = l(x x). Cela est vrai pour tous les x, x. De plus si l(x) + l(x) = l(x x) avec probabilité > 0 alors en fait cela est vrai et donc l est linéaire.
Évaluateur de fonction (détails) Lévaluateur de fonction reçoit la table de valeurs dune fonction f i et un certain x. Son but est de retourner en consultant O(1) bits de la table une valeur E(x) de telle façon que pour < 1/3 1. Si f i est linéaire alors E(x) = f i (x). 2. Si f i est -proche dune fonction linéaire l i alors Pr[E(x) = l i (x)] 1-2. Notez bien que E ne cherche pas à évaluer f i (x) mais plutôt l i (x)!
Évaluateur de fonction (détails) Algorithme pour lévaluateur: choisir un y aléatoirement et retourner E(x) = f i (x y) – f i (y). Cela requiert la lecture de deux bits de la table de f i. Il est clair aussi que si f i est linéaire alors E(x) = f i (x). Si f i est proche dune fonction linéaire l i alors 1. Pr y [f i (y) = l i (y)] Pr y [f i (x y) = l i (x y)] 1- Donc Pr y [f i (x y) = l i (x y) f i (y) = l i (y)] 1-2 Dans ce cas on aura E(x) = f i (x y) – f i (y) = l i (x y) – l i (y) = l i (x).
Test de cohérence (détails) Le test de cohérence reçoit les tables de f 1, f 2 et f 3 qui sont linéaires ou -proches de fonctions linéaires l 1, l 2 et l 3. Le test est effectué en lisant un nombre fixe de positions des tables. Pour < 1/24 ce test a les propriétés: 1. Si f 1,f 2 et f 3 sont du type L 1 a, L 2 a et L 3 a pour un même a {0,1} n alors le test est passé avec probabilité Sil nexiste aucun a {0,1} n tel que l 1, l 2 et l 3 sont du type L 1 a, L 2 a et L 3 a alors le test détecte cela avec une probabilité > 0.
Test de cohérence (détails) Algorithme: 1. Choisir aléatoirement x, x et x {0,1} n et y {0,1} n Définir x ± x {0,1} n 2 par (x ± x) i,j = x i x j et x ± y {0,1} n 3 par (x ± y) i,j,k = x i y j,k. 3. Utiliser lévaluateur de fonctions pour calculer avec bonne probabilité l 1 (x), l 1 (x), l 1 (x), l 2 (x ± x), l 2 (y) et l 3 (x ± y). 4. Accepter si l 1 (x)l 1 (x) = l 2 (x ± x) et si l 1 (x)l 2 (y) = l 3 (x ± y).
Test de cohérence (détails) Vérifions dabord que le test de cohérence est positif lorsque les fonctions sont de la forme L 1 a, L 2 a, L 3 a. Dans ce cas on a L 1 a (x) L 1 a (x) = ( i a i x i )( j a j x j ) = i,j a i a j x i x j = L 2 a (x ± x). et L 1 a (x) L 2 a (y) = ( i a i x i )( j,k a j a k y j,k ) = i,j,k a i a j a k x i y j,k = L 2 a (x ± y)
Test de cohérence (détails) Que se passe-t-il si f 1, f 2 et f 3 sont -proches de l 1, l 2 et l 3 ? Dabord comme < 1/24 et comme lévaluateur de fonction est utilisé six fois, la probabilité que toutes les évaluations soient correctes est au moins ½. La fonction l 1 est linéaire et elle peut donc être écrite comme l 1 (x) = i a i x i. De même la fonction l 2 est linéaire et peut être écrite comme l 2 (y) = i,j b i,j y i,j. Ces deux fonctions sont cohérentes si et seulement si b i,j = a i a j pour tout i,j.
Test de cohérence (détails) Supposons que nous avons b i,j a i a j pour au moins un (i,j). Notre test compare i,j a i a j x i x j et i,j b i,j x i x j Considérons les matrices A = (a i a j ) et B = (b i,j ). Notre test compare x T Ax et x T Bx. Si A B à cause de la colonne j alors on a x T A x T B avec probabilité ½. De plus si x T A x T B alors avec probabilité ½ x T Ax x T Bx. Donc le test de cohérence échoue avec probabilité au moins ¼.
La preuve du théorème PCP Le résultat que lon vient de démontrer est une version simplifié de ce qui est requis pour démontrer le théorème NP = PCP(log n,1). Pour réduire le nombre de bits aléatoires utilisés et la longueur de la preuve fournie au vérificateur on utilise un meilleur code. La preuve la plus connue utilise des polynômes de petit degré plutôt que des fonctions linéaires. La partie la plus corsée de la preuve est celle qui établit le test de petit degré qui est lanalogue de notre test de linéarité.
PCP et inapproximabilité Rappel: il existe pour MAX-3-SAT un algorithme dapproximation avec un ratio 8/7. On veut maintenant obtenir un résultat dinapproximabilité pour MAX-3-SAT grâce à la technique du fossé.
Technique du fossé Rappel: sil existe > 0, un problème NP- complet K et une réduction f de K vers 3-SAT telle que x K f(x) est une formule satisfiable. x K au plus (1- ) m clauses de f(x) sont satisfiables. Alors si P NP, MAX-3-SAT nest pas approximable en temps polynomial avec un ratio meilleur que 1/(1- ), car sinon, la combinaison de f et de lalgorithme dapproximation pour MAX-3-SAT forme un algorithme de temps polynomial pour K.
Comment choisir un problème NP-complet A et une réduction f vers 3-SAT avec ces belles propriétés? Le théorème de Cook-Levin nous donne une réduction de nimporte quel problème NP- complet vers 3-SAT. Malheureusement, si w K, alors on peut quand même satisfaire toutes les clauses de f(w) sauf une! Cest la construction de réductions créant des plus grand fossés qui ont originellement motivé les recherches qui ont amené au théorème PCP.
Lemme Lemme: Pour un certain > 0, il existe une réduction f de 3-SAT vers 3-SAT telle que 1. Si est une formule satisfiable alors f( ) est aussi satisfiable. 2. Si est insatisfiable alors une fraction au plus (1- ) des clauses de sont satisfiables simultanément. Donc f aggrandit le fossé entre satisfiable et insatisfiable. Même si on peut simultanément satisfaire presque toutes les clauses de, cela sera impossible pour f( ).
Démonstration Démonstration: Le théorème PCP est la clé. Puisque 3-SAT est dans NP, on sait que pour des constantes c,k N il existe un vérificateur probabiliste pour 3-SAT qui utilise au plus c log n bits probabilistes et consulte au plus k bits de la preuve. Soit N = 2 c log n n c. Il existe au plus N choix de bits probabilistes et chacun dentre eux mène à la consultation de k bits de la preuve. On peut donc supposer que la preuve est de longueur kN et que {0,1} kN est lensemble des preuves possibles.
Soit C lensemble des 3-clauses de et n le nombre de variables booléennes. Pour chaque 0 r N- 1, on construit la fonction f r : {0,1} kN {0,1} telle que 1. f r (p) = 1 si la preuve p est acceptée par le vérificateur lorsque r est le choix de ses bits probabilistes et 2. f r (p) = 0 si la preuve p est rejetée par le vérificateur lorsque r est le choix de ses bits probabilistes. À noter que pour un r fixé, la fonction f r ne dépend que de k bits de son entrée! Nous dénoterons ces positions j r (1) < j r (2) <... < j r (k).
Par définition des PCP, on a que 1. Si est satisfiable, alors il existe une preuve {0,1} kN telle que f r ( ) = 1 pour tous les r. 2. Si est insatisfiable, alors pour toutes les {0,1} kN on a que f r ( ) = 1 pour au plus la moitié des r.
Chaque fonction f r ne dépend que de k bits dentrée. On peut donc écrire une formule en forme normale conjonctive de taille au plus k 2 k décrivant f r. Les variables booléennes utilisées ici sont j r (1),..., j r k ). De plus on a vu comment transformer une clauses de longueur k en k* clauses de longueur 3 pour k* = max{1,k-2}. Ici de nouvelles variables booléennes sont introduites. Donc on peut pour chaque f r construire k* 2 k clauses de trois litéraux telles que 1. si f r ( ) = 1 alors toutes ces clauses sont simultanément satisfiables. 2. Si f r ( ) = 0, alors au moins une clause est insatisfaite.
En construisant ces clauses pour chaque f r, on obtient un ensemble dau plus k* 2 k N clauses de longueur 3 telles que: 1. Si est satisfiable alors toutes ces clauses sont satisfiables. 2. Si est insatisfiable alors au moins N/2 de ces nouvelles clauses sont insatifiables pour toute assignation (au moins une pour au moins la moitié des f r.) Choisissons = 1/(k* 2 k+1 ). Si est insatisfiable la proportion de nos nouvelles clauses qui sont simultanément satisfiables est 1 – (N/2)/(N k* 2 k ) = 1-.
Corollaire Corollaire: MAX-3-SAT APX – PTAS. À noter que si on a un PCP pour 3-SAT avec k = 3 alors on peut montrer que MAX-3-SAT nest pas approximable avec un ratio meilleur que le 8/7 que nous avons montré. Les mêmes techniques ont permis de montrer des résultats dapproximation souvent très forts. En particulier si P NP alors MAX-CLIQUE nest même pas approximable avec un ratio n 1/2- et MIN-GC nest pas approximable avec un ratio meilleur que n 1/7-.