André Vratislavsky
Übungsgruppe vom 01.02.2000
SAT ist NP-vollständig
SAT ist die Menge der erfüllbaren Formeln der Aussagenlogik. Kennt
man noch kein NP-vollständiges Problem, welches man auf SAT reduzieren
kann, so muß man die NP-Vollständigkeit von SAT nachweisen,
indem man überprüft, ob SAT die Definition von NP-vollständig
erfüllt.
Dazu ist zu zeigen:
-
SAT ist aus NP (erfüllende Belegung raten und in polynomieller Zeit
verifizieren).
-
Für ALLE Sprachen L aus NP zeigen, daß sie sich auf SAT reduzieren
lassen.
Für den Beweis von Punkt 2 betrachten wir eine NTM, die L in polynomieller
Zeit entscheidet. Der Rechenweg einer akzeptierenden Rechnung dieser beliebigen
NTM für eine Eingabe x wird mit einem aussagenlogischen Ausdruck simuliert.
Es wird also für eine Eingabe x ein Boolescher Ausdruck konstruiert,
der genau dann erfüllbar ist, wenn x aus L ist.
Es muß nun noch nachgewiesen werden, daß dieser Ausdruck
polynomielle Länge hat.
(Alles weitere siehe Vorlesung.)
Grammatiken
Bisher hatten wir Sprachen L betrachtet und die Frage gestellt, ob ein
Element x in L enthalten ist. Wir haben untersucht, ob dieses Wortproblem
entscheidbar, bzw. in welcher Zeit es entscheidbar ist, und uns Maschinenmodelle
angesehen, die diese Entscheidung treffen sollten.
Dabei hatten wir verschiedene Sprachklassen unterschieden.
Jetzt wollen wir den Standpunkt verändern und eine Sprache L systematisch
erzeugen. Dies kann mit gewissen Regelsystemen, den sogenannten Grammatiken,
geschehen.
Eine Grammatik besteht im Wesentlichen aus gewissen Regeln (außerdem
aus einem endlichen Alphabet, einer endlichen Menge von Variablen und einer
Startvariable). (Genauer: Eine Grammatik ist ein Vierer-Tupel mit....)
Die Regeln geben im Prinzip an, wie eine Variable ersetzt werden kann.
Aus allen entstehenden Rechenwegen ergibt sich die Sprache.
Hat man die Grammatik gegeben, so kann man wieder das Wortproblem stellen:
Ist ein Wort x in der von einer Grammatik G erzeugten Sprache L(G) enthalten?
Chomsky-Hierarchie
Die Formalen Sprachen lassen sich in der Chomsky-Hierarchie wie folgt einteilen:
(Variablen sind GROSS geschrieben, Terminalzeichen klein geschrieben.)
| Typ |
Regeln l->r (Beispiele) |
Beispiel |
Sprachen |
Maschine |
| Typ0 |
keine Einschränkung |
|
rekursiv aufzählbare |
NTM, TM |
| Typ1 |
ABC->AxyC |
SAT, 3-SAT,
{anbncn|n>1} |
kontextsensitive |
NTM mit linearem Speicherbedarf |
| Typ2 |
A->AxyC |
{anbn|n>1},
Palindrome, {w|#0=#1} |
kontextfreie |
|
| Typ3 |
A->aB, A->epsilon |
|
reguläre |
NFA, DFA |
Genaueres siehe Vorlesung.