• Keine Ergebnisse gefunden

6 Kontextfreie Grammatiken und Sprachen

Studienbrief 7: PCP Theorie

6.3 PCP-Theorem

Die Klasse PCP für probabilistically checkable proofs verbindet die Klasse NP in der logischen Charakterisierung mit der Klasse RP (randomized polynomial time). NP hat als Eingabe des

Verifizierers die initiale Bandmitschrift x und einen Beweis w und sagt entweder “Ja” (accept) oder

“Nein” (reject). RP hingegen hat als Eingabe des Verifiziers x und eine Zufallsfolge r, bei gleicher Ausgabe. PCP besitzt nun sowohl x, w als auch r als Eingabe. PCP(poly(n),poly(n)) ist jedoch mit NEXP = NTIME(2poly(n)) sehr groß. (Balbai, Fortnow und Lund).

Wir erläutern und beschränken deshalb nun die Möglichkeiten des Verifizierers.

Definition. Ein Verifizierer ist ein randomisierter polynomieller Algorithmus V mit Zugriff auf eine

binäre Zeichenkette w (die einem Beweis für x in L entspricht). V kann auf jedes Bit von w zugreifen.

Der Verifizierer arbeitet dabei in zwei Phasen. Zunächst betrachtet er randomisiert eine Folge von Adressen für w und liest die Bits unter den Adressen von w. In der zweiten Phase entescheidet sich der Verifizierer deterministisch in Abhängigkeit von x und den gelesenen Bits von w für 0 (falsch) oder 1 (wahr).

Ein Verifizierer heißt (r(n),q(n))- beschränkt, wenn V bei Eingaben x der Länge n nur O(r(n)) Zufallsbits benutzt und O(q(n)) Anfragen an den Beweis B stellen darf. Es its V(x,w,r) = 1, falls V akzeptiert x mit Beweis w und Zufall r, V(x,w,r) = 0, sonst.

Definition. Eine Sprache L ist in PCP(r(n),q(n)) genau dann, wenn es einen (r(n),q(n))-beschränkten Verifizierer V gibt so dass für alle x gilt.

1. Wenn x in L, dann gibt es einen Beweis w(x) mit Prob_r(V(x,w(x),r) = 1) = 1 V akzeptiert beim korrekten Beweis immer.

2. Falls x nicht in L liegt, dann gilt für alle Beweise w: Prob_r(V(x,w(x),r) = 0) >= ½ jeder (dann falsche) Beweis wird mit Wahrscheinlichkeit >= ½ abgelehnt.

Satz. Sei O(0) = {}.

a) PCP(0,0) = P,

b) PCP (poly(n),0) = coRP, und c) PCP (0,poly(n)) ) = NP.

Beweis. a) Jeder polynomielle Algorithmus kann als Verifizierer ohne Zugriff auf Zufall und einem Beweis aufgefasst werden. Umgekehrt ist jeder (0,0)-beschränkter Verifizierer ein polynomieller Algorithmus.

b) Ist A: {0,1}n x {0,1}p(n) → {0,1} ein coRP Algorithmus für eine Sprache L, dann ist p(n) durch ein Polynom beschränkt. Desweiteren für alle x in L: Prob(A(x,y) = 1) = 1 und für alle x nicht in L:

Prob(A(x,y) = 0) >= ½. Also ist A ein polynomieller Verifizierer ohne Beweis. Umgekehrt ist jeder polynomieller Verifizierer ohne Beweis ein coRP Algorithmus.

c) Sei A: {0,1}n x {0,1}p(n) → {0,1} ein NP Algorithmus für eine Sprache L. Dann gilt - für alle x in L existiert ein w(x) in {0,1}p(|x|) A(x,w(x)) = 1.

- für alle x nicht in L, für alle w in {0,1}p(|x|) A(x,w) = 0.

Damit ist A ein polynomieller Verifizierer ohne Zufall. Umgekehrt, falls V ein polynomieller Verifizierr für L ohne Zugriff auf Zufall ist, dann gilt

- für alle x in L existiert ein w(x) in {0,1}p(|x|) V(x,w(x), .) = 1.

- für alle x nicht in L, für alle w in {0,1}p(|x|) V(x,w, .) = 0.

Also ist V ein NP Algorithmus.

Satz. Für alle Funktionen r, q :IN → IN gilt:

PCP(r(n),q(n)) NTIME(poly(n) * 2⊆ O(r(n)))

Beweis. Angenommen P ist ein Problem in PCP(r(n),q(n)). Dann gibt es einen (r(n),q(n))-

beschränkten Verifizierer V für P. Aus V kann man nun eine nichtdeterministische Turingmaschine M für P wie folgt konstruieren. Sei x eine Eingabe der Länge n und w ein Beweis. Für jede der O(2^O(r(n))) vielen Zufallsfolgen der Länge O(r(n)) simuliert M in jeweils poly(n) vielen Schritten die Rechnung von V und akzeptiert x genau dann, wenn V die Eingabe x für jede Zufallsfolgt r akzeptiert. M ist somit eine O(poly(n) * 2O(r(n))) zeitbeschränkte Turingmaschine die w genau dann akzeptiert wenn w eine Lösung für P ist.

Wählt man r(n) = log n und berücksichtigt, dass NTIME (poly(n)) = NP gilt, NP = PCP (lg n, poly(n)) und PCP(lg n, 1) NP.⊆ Satz. (PCP-Theorem) (Arora, Lund, Motwani, Sudan, Szegedy)

NP = PCP (lg n, 1)

New York Times (7.4.1992): “In a discovery that overturns centuries of mathematical tradition, a group of graduate students and young researchers has discovered a way to check even the longest and most complicated proof by scruntizing it in just few spots [...] Using this new result the researchers have already made a landmark discovery in computer science. They showed that it is impossible to compute even aprooximate solutions for a large group of problems that have long foiled reserachers [...]”

Bellare et al. haben gezeigt: Nur 19 Beweisbits sind notwendig für ε = ½ und 3 für ε = 0.902.

Weiterhin reichen 2 Bits nicht, da dann PCP (lg n, 1) in P liegt für jedes ε < 1.

Übrigens, falls man für irgendein ε die Variante ε-ROBUST-3SAT als NP-vollständig nachweist (für das es entweder eine erfüllende Belegung gibt, oder der für jede Wahrheitsbelegung mindestens ein ε-Anteil nicht erfüllt sein muss), dann kann man das PCP-Theorem beweisen. Der Beweis würde aus der Belegung bestehen und der Verifizierer würde mit O(log m) zufälligen Bits eine Klausel raten, wobei m die Anzahl der Klauseln ist und die Wahrheitsbelegung der Variablen abfragen (3 Bits). Falls die Formel erfüllbar ist, ist jeder Test erfolgreich. Falls nicht, so kann der Verifizierer mit k = lg1-ε ½ Versuchen mit Wahrscheinlichkeit von 1 – (1- ε)k <= 1/2 mindestens einen der Tests verwerfen. Das Problem ε-ROBUST-3SAT ist tatsächlich NP-vollständig, allerdings beruht der einzig bekannte Beweis auf dem PCP-Theorem, so geht es also nicht.

Die entscheidende Idee ist die Beobachtung, dass es im Grunde gar nicht wichtig ist, den

eigentlichen Beweis (die Wahrheitsbelegung) zu lesen. Ob z.B. x10 in einer Belegung vorkommt, ist uninteressant. Wichtig ist nur, welche Klauseln sie erfüllt. Der Trick ist den eigentlichen Beweis zu kodieren, dass er möglichst viele Zusatzinformationen enthält.

Dass dies prinzipiell möglich ist, zeigt folgendes Beispiel. Ziel ist einen Bitvektor y der Länge n so zu kodieren, dass man durch Lesen von nur konstant vielen Bists mit einer Fehlerwahrscheinlichkeit von ½ prüfen kann ob x identisch mit einem anderen Bitvektor a. Betrachte das Skalarprodukt

<y,b> mit beliebigen b, dann ist <y,b> = <a,b> (in Z2), genau dann wenn b an einer geraden Anzahl dieser Stellen eine 1 enthält, es sind ja nur die Stellen erheblich, an denen a und y ungleich sind.

Sicher ist immer <y,b> = <a,b>, falls y und a identisch. Ansonsten <y,b> = <a,b> für genau die

Hälfte aller b, so dass

Prob_b[<y,b> = <a,b>] = 1 falls y=a und Prob_b[<y,b> = <a,b>] = ½ falls y <> a

Wir tabellieren alle Skalarprodukte <y,b> und stellen sicher, dass der Beweis die Tabellierung einer linearen Funktion <y,b> ist. Der Lineariäts-Test nutzt 6-malige Wiederholung.

Falls y' die Kodierung des richtigen Beweises ist, gilt Prob_r[y'(r) = <a,r>]

<= Prob_r[y'(r) = <a,r> und y'(r) = <a,r>] + Prob_r[y'(r) = <a,r> und y'(r) <> <a,r>]

<= Prob_r[<y,r> = <a,r> und y'(r) <> <a,r>] <= 1/2+1/4 <= ¾

und, dass bei 3-maliger Wiederholung der Test mit Wahrscheinlichkeit von (¾)³ < ½ keinen Fehler anzeigt.