Theoretische Informatik Prof. Dr. Stefan Edelkamp Übersicht 1. Einleitung und Landau'sche O-Notation 1.1 Einleitung und Übersicht 1.2 Beweisprinzipien und die reelen Zahlen 1.3 O-Notation Übersicht 2. Turingmaschinen, churchsche These und Entscheidbarkeit 2.1 Registermaschinen und deterministische Turingmaschinen 2.2 Techniken zur Programmierung von Turingmaschinen 2.3 Simulationen zwischen Turingmaschinen und Registermaschinen 2.4 Universelle Turingmaschinen 2.5 Die churchsche These 2.6 Die Unentscheidbarkeit des Halteproblems 2.7 Eigenschaften rekursiver und rekursiv aufzählbarer Sprachen 2.8 Die Unentscheidbarkeit des postschen Korrespondenzproblems Übersicht 3. Die NP-Vollständigkeitstheorie 3.1 Die Komplexitätsklasse P 3.2 Nichtdeterministische Turingmaschinen und die Komplexitätsklasse NP 3.3 NP-Vollständigkeit 3.4 Die NP-Vollständigkeit wichtiger Probleme Übersicht 4. Endliche Automaten 4.1 Schaltwerke und endliche Automaten 4.2 Die Minimierung endlicher Automaten 4.3 Das Pumping-Lemma für endliche Automaten 4.4 Nichtdeterministische endliche Automaten 4.5 Effiziente Algorithmen für die Konstruktion endlicher Automaten und die Entscheidung von Eigenschaften regulärer Sprachen Übersicht 5. Grammatiken, die Chomsky-Hierarchie und das Wortproblem 5.1 Grammatiken und die Chomsky-Hierarchie 5.2 Chomsky-0-Grammatiken und rekursiv aufzählbare Sprachen 5.3 Chomsky-3-Grammatiken, reguläre Sprachen und Ausdrücke, lexikalische Analyse 5.4 Kontextsensitive Grammatiken und Sprachen Übersicht 6. Kontextfreie Grammatiken und Sprache 6.1 Beispiele kontextfreier Sprachen und Syntaxbäume 6.2 Die Chomsky-Normalform für kontext freie Grammatiken 6.3 Der Cocke-Younger-Kasami-Algorithmus 6.4 Das Pumping-Lemma und Ogdens Lemma für kontextfreie Sprachen 6.5 Effiziente Algorithmen für die Konstruktion kontextfreier Grammatiken und die Entscheidung von Eigenschaften kontextfreier Sprachen 6.6 Unentscheidbare Probleme 6.7 Eine inhärent mehrdeutige kontextfreie Sprache Übersicht Zusammenfassung Testfragen Schriftenverzeichnis Übersicht 1. Einleitung und Landau'sche O-Notation 1.1 Einleitung und Übersicht 1.2 Beweisprinzipien und die reelen Zahlen 1.3 O-Notation Motivation: Theoretische Informatik Die Inhalte der theoretischen Informatik sind nicht so direkt anwendbar wie viele Inhalte der Grundvorlesungen über Programmierung, Rechnerarchitektur, Hardware, Datenstrukturen und den Entwurf effizienter Algorithmen. Dafür sind die Erkenntnisse der theoretischen Informatik oft allgemeiner, umfassender und weitreichender als in den anderen Gebieten der Informatik. Motivation: Grenzen der Berechenbarkeit Andere Vorlesungen zeigen wie Probleme mit Rechnerhilfe gelöst werden können und wie gute Rechner konzipiert sind. Grenzen scheinen vor allem in der "noch nicht genügend großen" Rechengeschwindigkeit und den "noch nicht genügend leistungsstarken" Speichermedien zu liegen. Gibt es auch prinzipielle Grenzen? Gibt es also (wichtige, interessante) Probleme, die prinzipiell, fernab von physikalischen und elektrotechnischen Beschränkungen, nicht von Rechnern gelöst werden können? Motivation: Turingmaschinen, Registermaschinen und universelle Rechner Registermaschinen bilden ein stark vereinfachtes Modell realer Rechner; dienen daher als Basis für realistische Rechenzeitbetrachtungen. Turingmaschinen wirken dagegen wie Steinzeitrechner. Es stellt sich jedoch heraus, dass alle bekannten Modelle universeller Rechner, darunter auch die Modelle der Registermaschinen und Turingmaschinen, die gleiche Klasse von Problemen lösen können. Motivation: Optimierungsprobleme, Entscheidungsprobleme, Sprachen Optimierungsprobleme: Suche eine von eventuell vielen optimalen Lösungen (nicht eine bestimmte). Eingaben & Ausgaben werden dabei über einem endlichen Alphabet Σ = {0,1}, codiert. Problem: Relation R auf Σ* x Σ*, wobei Σ* = Menge aller endlichen Strings (Wörter, Folgen) über'm Alphabet Σ. (x, y) in R, wenn y zulässige Ausgabe zur Eingabe x ist. Entscheidungsprobleme lassen sich als Ja-NeinFragen formulieren und somit durch Funktionen f : Σ* → {0,1} und Sprachen L := f-1(1) ausdrücken. Motivation: Programme und Probleme Es isteinfach, die Existenz von Funktionen f : {0,1}* → {0,1} zu zeigen, die von keinem Rechner (und keinem Programm) berechnet werden können, selbst wenn Speicherplatz und Rechenzeit unbegrenzt sind. Erkenntnis: Programme Texte endlicher Länge über einem endlichen Alphabet sind. => es gibt nur abzählbar unendlich viele verschiedene Programe aber überabzählbar unendlich viele Funktionen f: {0,1}* → {0,1}. Motivation: Halteproblem Halteproblem. Entscheidung, ob ein Programm auf einer Eingabe nach endlicher Zeit stoppt. → Mit Rechnerhilfe nicht lösbar. Zudem verfolgen wir das Ziel, Methoden vorzustellen und einzuüben, so dass Sie für Sie interessierende Probleme in der Lage sind, selber Beweise für deren Nichtlösbarkeit zu führen. Praktischer Nutzen: Negative Erkenntnisse führen nicht zu neuen Programmen, aber dazu, die Arbeit an nicht erreichbaren Zielen aufzugeben. Motivation: Effiziente Lösbarkeit Optimierungsprobleme: lösbar, da für jede Eingabe nur unter endlich vielen Alternativen eine beste auswählen muss. Der naive Ansatz, alle Alternativen zu vergleichen, ist praktisch oft wertlos, da die Zahl der Alternativen exponentiell groß ist. Wir suchen daher nicht nur nach Algorithmen, sondern nach möglichst effizienten, zumindest aber polynomiellen Algorithmen. Motivation: NPVollständigkeitstheorie Entweder für alle Probleme dieser Klasse gibt polynomielle Algorithmen gibt oder für keines. Annahme: Für NPvollständige Probleme gibt es keine effizienten Algorithmen. Wenn diese so genannte NP≠P-Vermutung akzeptiert wird, dient der Beweis der NP-Vollständigkeit eines Problems als Nachweis für die Nichtexistenz effizienter Algorithmen. Auswege: effiziente Algorithmen für fast optimale Lösungen, Algorithmen, die für viele Eingaben effizient sind, probabilistische Algorithmen, die mit Zufallszahlen arbeiten und oft gute Resultate erzielen, oder heuristische Algorithmen. Motivation: Endliche Automaten Berechnungskraft äquivalent zu Schaltwerken. Bilden die nahe liegende Beschreibungsform von durch Kontaktschwellen und Druckknöpfe gesteuerten Ampelanlagen, automatischen Waschmaschinen u. ä. Für verschiedene Automatenmodelle wird gezeigt, dass sie die gleichen Probleme lösen, sich aber in ihrer minimalen Größe für ein Problem erheblich unterscheiden können. Erstaunlicherweise gibt es sogar effiziente Algorithmen, um aus einem Automaten einen Automaten minimaler Größe für das gleiche Problem zu konstruieren. Motivation: Grammatiken Neben Komplexitäts- und Automatentheorie zweiter Hauptzweig der theoretischen Informatik, Grammatiken sind Grundlage von Programmiersprachen, Syntaxanalyse, Semantik und Compilerbau umfasst, zu. Programmiersprachen werden durch Regelsysteme definiert, die in Analogie zu den Regelsystemen natürlicher Sprachen Grammatiken genannt werden. Frage: Wie können wir entscheiden, ob eine Klasse von Grammatiken geeignet ist, Programmiersprachen zu beschreiben? Motivation: Chomsky-Hierarchie 1. Klasse der von Turingmaschinen semientscheidbaren Sprachen. Wortproblem nicht einmal entscheidbar. 4. Klasse der von endlichen Automaten entscheidbaren Sprachen. Nicht einmal wohlgeformte Klammerausdrücke können erzeugt werden, 3. Klasse der kontextsensitiven Grammatiken. = Klasse der von geeignet speicherplatzbeschränkten Turingmaschinen erkannten Sprachen. => Wortproblem NP-vollständig, während wir für die Syntaxanalyse sehr effiziente Algorithmen brauchen. 2. Klasse der kontextfreien Grammatiken Geeignet für den Entwurf von Programmiersprachen Motivation: Pro und Contra Kontextfreie Sprachen + Syntaxanalysealgorithmus mit kubischer Laufzeit + effiziente Algorithmen, um aus kontextfreien Grammatiken kontextfreie Grammatiken für zusammengesetzte Sprachen zu erzeugen, + Hilfsmittel, um zu zeigen, dass Sprachen nicht kontextfrei sind. - Klasse der kontextfreien Sprachen nicht gegen Komplementbildung und Durchschnitt abgeschlossen - wichtige Probleme sind mit Rechnerhilfe gar nicht lösbar: Dazu gehört das Problem, für zwei kontextfreie Grammatiken zu entscheiden, ob sie die gleiche Programmiersprache beschreiben. Übersicht 1. Einleitung und Landau'sche O-Notation 1.1 Einleitung und Übersicht 1.2 Beweisprinzipien und die reelen Zahlen 1.3 O-Notation Beweis-Prinzipien ● Modus Ponens: A => B und A gibt B Alle Menschen sind sterblich. Sokrates ist ein Mensch. Sokrates is sterblich ● Direkter Beweis. (a + b)² = a² + 2ab + b² Geometrisch: Nächste Seite. ● Vollständige Induktion. A(n):1+...+n = n(n-1)/2 I.Voraussetzung A(1), I.Schluss A(n) → A(n+1): A(n+1):(1+...+n)+n+1 = n+1+n(n-1)/2 = n(n+1)/2 Fortsetzung ● Vollständige Induktion. A(n):1+...+2n-1 = n² I.Voraussetzung A(1), I.Schluss A(n) → A(n+1): A(n+1):(1+...+2n-1)+2n+1 = n²+2n+1 = (n+1)² Indirekter Beweis Annahme ¬A. Widerspruch. Also A. Satz. Unendlich viele Primzahlen. Beweis. Annahme. Endlich viele. Sei p aus p_1,...,p_n größte PZ. Demnach q:=(p_1*...*p_n)1>p auch PZ. Widerspruch. Satz.√2 keine rationale Zahl Beweis. Annahme: √2 = p/q (o.B.d.A. gekürzt) => 2 = p²/q² oder 2 q² = p². Widerspruch: Eindeutigkeit der Primfaktorzerlegung (Über)abzählbar unendlich Definition. Wir nennen eine Menge M abzählbar (unendlich), falls es eine Abbildung aus den natürlichen Zahlen IN in M gibt. ● IN_0 (Unendliches Hotel) ● Menge der ganzen Zahlen ● Menge der Bruchzahlen ● Menge der Primzahlen Satz. IR ist überabzählbar (unendlich). Cantor'scher Diagonalschluss Annahme: Es gibt eine Aufzählung mit a_1, a_2, ..., a_j, ..., von [0,1) in IR. Jedes a lässt sich als unendlicher Dezimalbruch 0,z_1z_2...z_i... darstellen (notfalls mit 0en auffüllen). Schreibt man alle Zahlen untereinander, ist die Diagonale 0,d_1d_2...d_i... eine weitere Zahl. Werden jetzt alle Ziffern d_i leicht pertubiert, erhält man eine Zahl 0,x_1x_2 ...x_i... mit x_i = (d_i +1) mod 10. => diese Zahl kommt in der Aufzählung nicht vor! Übersicht 1. Einleitung und Landau'sche O-Notation 1.1 Einleitung und Übersicht 1.2 Beweisprinzipien und die reelen Zahlen 1.3 O-Notation Landau'sche O-Notation Beschreibung für Funktionsklassen; dient zur Einordnung von Laufzeiten. Obere Schranken: - f(n) = O(g(n)) ↔ es existieren c in IR^+ und n_0 in IN, so dass für alle n ≥ n_0: f(n) ≤ c * g(n) - f(n) = o(g(n)) ↔ für alle c in IR^+ existiert ein n_0 in IN, so dass für alle n ≥ n_0: f(n) ≤ c * g(n) Erste Implikationen Bsp. n²/2 + 3n +4 = O(n²) 3n³ +2 n ln n + 5 = O(n³) 1/n = o(1) Weitere Implikationen Mit Grenzwerten kann man einfacher schließen: - es existiert c in IR^+ mit lim_{n→∞} f(n)/g(n) ≤ c → f(n) in O(g(n)) - lim_{n→∞} f(n)/g(n) = 0 → f(n) in o(g(n)) Sind die Funktionen f und g differenzierbar, dann gilt die Regel von L'Hospital: lim_{n→∞} f'(n)/g'(n) = c → lim_{n→∞} f(n)/g(n) = c Übersicht 2. Turingmaschinen, churchsche These und Entscheidbarkeit 2.1 Registermaschinen und deterministische Turingmaschinen 2.2 Techniken zur Programmierung von Turingmaschinen 2.3 Simulationen zwischen Turingmaschinen und Registermaschinen 2.4 Universelle Turingmaschinen 2.5 Die churchsche These 2.6 Die Unentscheidbarkeit des Halteproblems 2.7 Eigenschaften rekursiver und rekursiv aufzählbarer Sprachen 2.8 Die Unentscheidbarkeit des postschen Korrespondenzproblems Registermaschinen und deterministische Turingmaschinen Der Aufbau einer Registermaschine (RAM Random Access Machine) Befehle einer RAM LOAD i: c(0) := c(i), b:= b + 1. STORE i : c(i) := c(0), b:= b + 1. ADD i: c(0) := c(0) + c(i), b:= b + 1. SUB i : c(0) := max{c(0) - c(i),0}, b:= b + 1. MULT i: c(0) := c(0) * c(i), b:= b + 1. DIV i: c(0) := c(0)/c(i), b:= b + 1. GO TO j: b:= j. IF c(0)? l GO TO j: b := j falls c(0)? l wahr ist, und b := b + 1 sonst. (Dabei ist ? in {=, <,~, >,~}). END: b:= b. Präfix IND (für indirekte Adressierung): In den jeweiligen Zeilen wird c(i) durch c(c(i)) ersetzt. Kostenmaße uniformes Kostenmaß: Jede Programmzeile mit Ausnahme des Befehls END eine Kosteneinheit verursacht. → Dieses Maß ist gerechtfertigt, solange nicht mit sehr großen Zahlen gerechnet wird. logarithmisches Kostenmaß: Kosten eines Rechenschrittes entsprechen der Zahlenlänge der dabei benutzten Zahlen. → Rechenschritte mit sehr großen Zahlen können viele normale Rechenschritte in sich "verstecken". Deterministische Turingmaschine (DTM oder TM) Q: die endliche Zustandsmenge Σ: das endliche Eingabealphabet Γ: das endliche Bandalphabet B: das Leerzeichen q_0 in Q, der Anfangszustand δ, die Zustandsüberführungsfunktion (δ : Q x Γ → Q x Γ x {R, L, N}) (eventuell) F ⊆ Q, die Menge der akzeptierenden Endzustände. Berechenbar-, Entscheidbar- und Semientscheidbarkeit i) Funktion f : Σ* → Σ* ist total rekursiv (berechenbar), wenn es eine TM gibt, die aus der Eingabe x den Funktionswert f(x) berechnet. ii) Funktion f : IN^k → IN (beachte, dass IN kein endliches Alphabet ist) ist total rekursiv, wenn es eine TM gibt, die für Eingaben vom Typ bin(i_1)#bin(i_2)#bin(i_3)# ... #bin(i_k)# mit Ergebnis bin(m) stoppt, wenn m = f(i_1, ... ,i_k) ist iii) Sprache L in Σ* ist rekursiv (entscheidbar), wenn es eine TM gibt, die auf allen Eingaben stoppt und die Eingabe w genau dann akzeptiert, wenn w in List. iv) Sprache L in Σ* heißt rekursiv aufzählbar (semientscheidbar), wenn es eine TM gibt, die genau die Eingaben w aus L akzeptiert. TM für Sprache L = {0^n 1^n | n ≥ 1} Phase 1: Wir stellen fest, ob die Eingabe vom Typ 0^i 1^j mit j ≤ 1 ist. Im negativen Fall verwerfen wir die Eingabe. Phase 2: Wir testen, ob i = j ist. δ S=q_0 0 (q_0,0,R) 1 B (q_1,1,R) q_1 - (q_1,1,R) q_2 - (q_3,B,L) (q_2,B,L) - q_3 (q_3,0,L) (q_3,1,L) q_4 (q_5,B,R) - q_5 (q_6,0,R) (q_6,1,R) (q_7,B,R) q_6 (q_6,0,R) (q_6,1,R) (q_2,B,L) - - q_7 in F - (q_4,B,R) - Zustände und ihre Bedeutung q_0: Lesen der Eingabe, beim Finden einer 1 Wechsel in q_1. Wird keine 1 gefunden, Fehler. q_1: Lesen der Eingabe, solange 1en gefunden werden. Wird noch eine 0 gefunden, Fehler. Wird ein B gefunden, ist Phase 1 erfolgreich. Wechsel nach q_2 und zurück zum letzten Buchstaben. q_2: Falls letzter Buchstabe eine 0, Fehler. Ebenso, falls letzter Buchstabe ein B. Sonst Ersetzen der letzten 1 durch B, Schritt nach links, Wechsel in q_3. q_3: Überlaufen nach links zum ersten B, dort nach rechts, Wechsel in q_4. q_4: Wenn der linkeste Buchstabe eine 1 ist, gibt es mehr 1en als 0en, also Fehler, ebenso, wenn es keinen linkesten Buchstaben gibt, also ein B gefunden wird. Wenn jedoch eine 1 gefunden wird, wird diese durch B ersetzt, Wechsel nach q_5. Wir haben jetzt die linkeste und die rechteste 1 entfernt. q_5: Testen, ob das Restwort leer ist. Dann Wechsel in q_7. Sonst zu q_6. q_6: Überlaufen des Restwortes nach rechts, bis erstes B gefunden wird, dann wieder nach links und in den Zustand q_2. q_7: Akzeptierender Endzustand. Konfiguration i) Konfiguration einer TM ist String aqß mit a in Γ*, q in Q und ß in Γ* => Inschrift aß eingerahmt von lauter Leerzeichen, Maschine ist im Zustand q und Kopf zeigt auf Zelle, die ersten Buchstaben von ß enthält. ii) a' q' ß' direkte Nachfolgekonfiguration von aqß, wenn a' q' ß' in einem Rechenschritt aus aqß entsteht. Notation: aqß |- a' q' ß'. iii) a" q" ß" Nachfolgekonfiguration von aqß, wenn a" q" ß" in endlich vielen Rechenschritten aus aqß entsteht. Notation: aqß |-* a"q"ß". Es gilt stets aqß |-* aqß, da "kein Rechenschritt" in der Formulierung "endlich viele Rechenschritte" enthalten ist. Beispiel Eingabe: 0011. Rechnung: ε q_0 0011 |- 0 q_0 011 |- 00 q_0 11 |- 001 q_1 1 |0011 q_1 B |- 001 q_2 1 |- 00 q_3 1 |- 0 q_3 01 |- q_3 001 |- ε q_3 B 001 |- ε q_4 001 |- ε q_5 01 |- 0 q_6 1 |01 q_6 _ |- 0 q_2 1 |- ε q_3 0 |- ε q_3 _0 |- ε q_4 0 |- ε q_5 _ |- ε q_7 B. Hier stoppt die Rechnung. q_7 ist akzeptierend 0011 ist Element der Sprache {0^n 1^n | n ≤ 1} erkannt. Es gilt ε q_0 0011 |-* ε q_7 B. Übersicht 2. Turingmaschinen, churchsche These und Entscheidbarkeit 2.1 Registermaschinen und deterministische Turingmaschinen 2.2 Techniken zur Programmierung von Turingmaschinen 2.3 Simulationen zwischen Turingmaschinen und Registermaschinen 2.4 Universelle Turingmaschinen 2.5 Die churchsche These 2.6 Die Unentscheidbarkeit des Halteproblems 2.7 Eigenschaften rekursiver und rekursiv aufzählbarer Sprachen 2.8 Die Unentscheidbarkeit des postschen Korrespondenzproblems Techniken (1) 1.) Endlicher Speicher mit schnellem Zugriff. Sollen Daten aus einer endlichen Menge A, gespeichert werden, können wir diesen Speicher wie folgt in die Zustandsmenge Q integrieren: Q_neu := Q x A. 2.) Mehrspurenmaschinen. Wir ersetzen Γ durch Σ ∪ Γ^k, wobei B^k das neue Leerzeichen ist. Addition: – benutze drei Spuren (Eingabe besteht aus beiden Summanden). – schaffe unterhalb des ersten Summanden Platz für zwei weitere Zahlen. – kopiere den zweiten Summanden in die zweite Spur unterhalb des ersten Summanden. – Wende die Schulmethode für die Addition an. Techniken (2) 3.) Unterprogramme: Kopiere die zu übergebenden Daten auf einen weit rechts (oder links) liegenden Bereich von freien Speicherzellen => Das Ergebnis wird in den vorgesehenen Bereich des Speichers, das heißt des Bandes, geschrieben und es wird dann in den Zustand zurückgesprungen, in dem das übergeordnete Programm weiterarbeiten soll. 4.) Schleifen (Unterprogramme mit bestimmten Abbruchkriterien): – a) for-Schleife: vergrößere oder verkleinere entsprechende Zähler und vergleiche mit dem Abbruchwert. – b) while-Schleife überprüfe an passender Stelle das Abbruchkriterium. Techniken (3) Mehrbandmaschinen (k Rechenköpfe) => δ : Q x Γ^k → Q x Γ^k x {R, L, N} => keine TM im Sinne obiger Definition. Simulation einer Maschine M durch eine Maschine M': Maschine M', die das Verhalten von M nachahmt. Der einfachste Simulationstyp ist die Schritt-für-Schritt-Simulation, bei der jeder Rechenschritt von M nachgeahmt wird. Zur Beurteilung der Effizienz berücksichtigen wir die Ressourcen Zeit und Speicherplatz, wobei Speicherplatz bei TM die Zahl der Zellen ist, auf die irgendwann der Kopf der TM zeigt. Satz. Eine k-Band-Turingmaschine M, die mit Rechenzeit t(n) und Speicherplatz s(n) auskommt, kann von einer Turingmaschine M' mit Zeitbedarf O(t²(n)) und Speicherplatz O(s(n)) simuliert werden. Beweis Mehrband-TM Nutze TM M' mit 2k+ 1 Spuren. Nach Simulation des tten Schrittes (0 ≤ t ≤ t(n)) von M: ● ● Spuren 1,3, ... , 2k - 1 enthalten das, was die k Bänder von M enthalten. Spuren 2,4, ... ,2k enthalten jeweils genau eine Markierung # an der Position, wo der entsprechende Kopf von M steht. ● Letzte Spur: zwei Markierungen # und ##, wobei # die linkeste von einem Rechnerkopf von M erreichte Position angibt und ## die entsprechende rechteste Position bezeichnet. Initialisierung: in Zeit O(1) möglich Beweis Mehrband-TM Schritt t: Kopf von M' steht zuerst auf der Zelle, die in der letzten Spur # enthält und Zustand von M' erreichten Zustand von M. Kopf läuft nach rechts bis zur Markierung ## und merkt sich in einem endlichen Speicher, was die k Köpfe von M lesen würden => weiß, was M tun würde. Kopf von M' läuft nach links und verändert Bandinschriften so, wie es M auf den k Bändern machen würde (Markierungen für Kopfpositionen sowie # und ## werden ggf. verschoben). M' merkt sich Zustand, in den M wechselt. Am Ende steht Kopf von M' auf Position, die in letzter Spur # enthält => Ausgangssituation für Simulation von Schritt (t + 1). Abstand zwischen # und ## durch t(n) und s(n) beschränkt => jeder Schritt von M kann durch M' in O(t(n)) simuliert werden. Techniken (4) 6.) Unbeschränkter Speicher. Für Adressen kann ein weiteres Band zur Verfügung genutzt werden. Information mit Adresse 0 wird auf einer Extraspur markiert, und nach rechts (ähnl. links) gesucht. Informationen sind durch bestimmte Markierungen voneinander getrennt. Beim Überlaufen einer Markierung wird 1 von der Adresse subtrahiert. Bei 0 ist die gesuchte Information gefunden. 7.) Sortieren. Offensichtlich ist das Zwei-Phasen-DreiBand-Sortieren gut geeignet für TM. 8.) Datenstrukturen. Es ist eine gute Übung, sich zu überlegen, dass wir alle uns bekannten Datenstrukturen auch in der Umgebung von TM einsetzen können. Übersicht 2. Turingmaschinen, churchsche These und Entscheidbarkeit 2.1 Registermaschinen und deterministische Turingmaschinen 2.2 Techniken zur Programmierung von Turingmaschinen 2.3 Simulationen zwischen Turingmaschinen und Registermaschinen 2.4 Universelle Turingmaschinen 2.5 Die churchsche These 2.6 Die Unentscheidbarkeit des Halteproblems 2.7 Eigenschaften rekursiver und rekursiv aufzählbarer Sprachen 2.8 Die Unentscheidbarkeit des postschen Korrespondenzproblems Simulation TM ↔ RAM Satz. Jede logarithmisch t(n)-zeitbeschränkte Registermaschine kann für ein Polynom q durch eine O(q(n + t(n))) -zeitbeschränkte Turingmaschine simuliert werden. Satz. Jede t(n)-zeitbeschränkte Turingmaschine kann durch eine Registermaschine simuliert werden, die uniform O(t(n) + n) und logarithmisch O((t(n) + n) log(t(n) + n)) zeitbeschränkt ist. Übersicht 2. Turingmaschinen, churchsche These und Entscheidbarkeit 2.1 Registermaschinen und deterministische Turingmaschinen 2.2 Techniken zur Programmierung von Turingmaschinen 2.3 Simulationen zwischen Turingmaschinen und Registermaschinen 2.4 Universelle Turingmaschinen 2.5 Die churchsche These 2.6 Die Unentscheidbarkeit des Halteproblems 2.7 Eigenschaften rekursiver und rekursiv aufzählbarer Sprachen 2.8 Die Unentscheidbarkeit des postschen Korrespondenzproblems Universelle Rechner Soweit: "special purpose Rechner". Für eine Aufgabe fest programmiert, sie konnten einen programmierten Rechner simulieren. Nun: "general purpose Rechner". Eingabe: Programm und eine spezielle Eingabe, auf der das Programm arbeitet. In diesem Sinn sind Rechner universell. Codiere δ(q_i,X_j) = (q_k,X_l,D_m) durch 0^i10^j10^k10^l10^m. Sei s die Länge der Funktionstabelle und code(z) obige Codierung der z-ten Zeile. Dann ist die Gödelnummer der TM gegeben durch 111 code(1) 11 code(2) 11 ... 11 code(s) 111. Die Gödelnummer der TM M wird mit (M) bezeichnet und beschreibt das Programm von M. Übersicht 2. Turingmaschinen, churchsche These und Entscheidbarkeit 2.1 Registermaschinen und deterministische Turingmaschinen 2.2 Techniken zur Programmierung von Turingmaschinen 2.3 Simulationen zwischen Turingmaschinen und Registermaschinen 2.4 Universelle Turingmaschinen 2.5 Die churchsche These 2.6 Die Unentscheidbarkeit des Halteproblems 2.7 Eigenschaften rekursiver und rekursiv aufzählbarer Sprachen 2.8 Die Unentscheidbarkeit des postschen Korrespondenzproblems Turing-Berechenbarkeit Sprachen L in Σ* lassen sich auf zwei Weisen durch Funktionen ausdrücken: - Die charakteristische Funktion χ_L : Σ* → {0, 1} ist definiert durch χ_L(x) = 1, falls x in L und =0, falls x nicht in L. Die Sprache L ist rekursiv, falls χ_L Turing-berechenbar ist. - Sei χ*_L(x) = 1, falls x in L und = undefiniert, falls x nicht in L. Die Sprache L ist rekursiv aufzählbar, falls χ*_L Turing-berechenbar ist. Intuitive Berechenbarkeit Churchsche These. Die durch die formale Definition der Turing-Berechenbarkeit erfasste Klasse von Funktionen stimmt mit der Klasse der intuitiv berechenbaren Funktionen überein. Erweiterte churchsche These. Heutzutage gehen wir noch einen Schritt weiter und glauben, dass Turingmaschinen sogar die Rechenzeit bis auf polynomielle Faktoren "richtig" erfassen. Ein Problem heißt also genau dann effizient lösbar, wenn es von Turingmaschinen in polynomieller Zeit gelöst werden kann. Übersicht 2. Turingmaschinen, churchsche These und Entscheidbarkeit 2.1 Registermaschinen und deterministische Turingmaschinen 2.2 Techniken zur Programmierung von Turingmaschinen 2.3 Simulationen zwischen Turingmaschinen und Registermaschinen 2.4 Universelle Turingmaschinen 2.5 Die churchsche These 2.6 Die Unentscheidbarkeit des Halteproblems 2.7 Eigenschaften rekursiver und rekursiv aufzählbarer Sprachen 2.8 Die Unentscheidbarkeit des postschen Korrespondenzproblems Die Diagonalsprache D Definition. Sei M_i die TM, deren Gödelnummer in der kanonischen Ordnung aller Gödelnummern an der i-ten Stelle steht und sei w_i das i-te Wort in der kanonischen Ordnung auf {0, 1}*. Dann ist die Diagonalsprache D die Menge aller Wörter w_i, so dass M_i das Wort w_i nicht akzeptiert. D ist nicht rekursiv Beweis. Falls D rekursiv, gibt es eine TM M_j, die stets hält und genau die Eingaben aus D akzeptiert. Wir wenden M_j auf w_j an. a) Falls w_j in D, müsste M_j nach Voraussetzung w_j akzeptieren, während M_j nach Defn von D das Wort w_j nicht akzeptieren darf, Widerspruch. b) Falls w_j nicht in D, dürfte M_j nach Voraussetzung w_j nicht akzeptieren, während M_j nach Defn von D das Wort w_j akzeptieren muss, Widerspruch. Korollar: Komplement von D nicht rekursiv Beweis. Eine TM, die stets hält und entscheidet, ob w im Komplement von D ist, kann leicht in eine entsprechende TM für ¬D abgeändert werden, indem die getroffene Entscheidung negiert wird. Also folgt die Aussage des Korollars direkt. Definition. Das Halteproblem H ist definiert durch H := {(M)w | M hält auf w}. H nicht rekursiv Annahme. Es gibt eine stets haltende TM M gibt, die genau die Wörter aus H akzeptiert. Wir konstruieren daraus eine stets haltende TM M', die genau die Wörter aus ¬D akzeptiert, im Widerspruch zu Korollar. Sei w eine Eingabe, Wollen wissen, ob w in ¬D ist. Wir berechnen das i, so dass w das i-te Wort aus {0,1}* in der kanonischen Reihenfolge ist, und daraus die Codierung (M_i). Wir wenden M auf die Eingabe (M_i)w an. Wird diese Eingabe verworfen, hält M_i nicht auf w, und nach Defn ist w nicht in ¬D. Ansonsten hält M_i auf w, und wir können mit Hilfe der universellen TM M_i auf w simulieren. M_i akzeptiert w genau dann, wenn w in ¬D ist. Satz von Rice und Konsequenzen Satz. Sei R die Menge der von TM berechenbaren Funktionen und S eine Teilmenge von R mit S ≠ {} und S ≠ R, das heißt S ist eine nicht triviale Teilmenge aller berechenbaren Funktionen. Dann ist die Sprache L(S) := {(M) | M berechnet eine Funktion aus S} nicht rekursiv. => Es ist für Programme nicht entscheidbar, ● ● ob diese eine konstante Funktion, die Nullfunktion, die nirgends definierte Funktion, eine an nur endlich vielen Stellen definierte Funktion, die Fakultätsfunktion, usw. berechnen. ob die durch sie definierte Sprache endlich, leer, unendlich oder ganz Σ* ist. Übersicht 2. Turingmaschinen, churchsche These und Entscheidbarkeit 2.1 Registermaschinen und deterministische Turingmaschinen 2.2 Techniken zur Programmierung von Turingmaschinen 2.3 Simulationen zwischen Turingmaschinen und Registermaschinen 2.4 Universelle Turingmaschinen 2.5 Die churchsche These 2.6 Die Unentscheidbarkeit des Halteproblems 2.7 Eigenschaften rekursiver und rekursiv aufzählbarer Sprachen 2.8 Die Unentscheidbarkeit des postschen Korrespondenzproblems Abgeschlossenheit Satz. Es seien L, L_1 und L_2 rekursiv. Dann auch ¬L, L_1 ∪ L_2 und L_1 ∩ L_2. (Die Klasse der rekursiven Sprachen ist abgeschlossen gegenüber den Operationen Komplement, Vereinigung und Durchschnitt) Beweis. ¬L Sei M eine stets haltende TM, die genau die Wörter aus L akzeptiert. Sei q* ein neuer Zustand und M* die Erweiterung von M, in der nach dem Stoppen in einem nicht akzeptierenden Zustand in den Zustand q* gewechselt wird. Wenn wir definieren, dass q* der einzige akzeptierende Zustand von M* ist, hält M* stets und akzeptiert L_1 ∪ L_2 und L_1 ∩ L_2 L_1 ∪ L_2: M_1 und M_2 seien stets haltende Turingrnaschinen, die L_1 bzw. L_2 akzeptieren. Stets haltende Turingmaschine M, die L_1 ∪ L_2 akzeptiert, arbeitet auf zwei Bändern und schreibt zunächst eine Kopie der Eingabe auf Band 2. Dann wird M_1 auf Band 1 simuliert. Falls M_1 die Eingabe akzeptiert, akzeptiert auch M. Ansonsten wird M_2 auf Band 2 simuliert. M akzeptiert nun genau dann, wenn M_2 akzeptiert. L_1 ∩ L_2 da L_1 ∩ L_2 = ¬ (¬(L_1) ∪ ¬(L_2)) Abgeschlossenheit Satz. Es seien L_1 und L_2 rekursiv aufzählbar. Dann auch L_1 ∪ L_2 und L_1 ∩ L_2.. (Die Klasse der rekursiv aufzählbaren Sprachen ist abgeschlossen gegenüber Vereinigung und Durchschnitt). Beweis. Es seien M_1 und M_2 TM, die für Eingaben aus L_1 bzw. L_2 in endlicher Zeit stoppen und nur diese Eingaben akzeptieren. Wenn w in L_1 ∪ L_2 ist, wird M_1 oder M_2 (oder beide) nach endlicher Zeit w akzeptieren, und M kann w akzeptieren. Wenn w nicht aus L_1 ∪ L_2 ist, akzeptiert weder M_1 noch M_2 und damit auch nicht M. Für den Durchschnitt gilt für w in L_1 ∩ L_2, dass M_1 und M_2 nach endlicher Zeit akzeptieren und damit auch M. Für w nicht aus L_1 ∩ L_2 akzeptiert mindestens eine der Maschinen M_1 und M 2 die Eingabe w nicht und damit auch M nicht. Komplement Lemma. Sind L und ¬L rekursiv aufzählbar, ist L rekursiv. Beweis. Es seien M und ¬M Turingmaschinen, die für w in L bzw. w in ¬L in endlicher Zeit stoppen und nur diese Eingaben akzeptieren. Nun lassen wir M und ¬M parallel laufen. Genau eine der beiden Maschinen akzeptiert w in endlicher Zeit. Wir wissen dann, ob w in L oder w in ¬L gilt, und können die entsprechende Antwort geben. Konsequenz Satz. Die Klasse der rekursiv aufzählbaren Sprachen ist nicht gegen Komplementbildung abgeschlossen. Korollar. Für jede Sprache L gilt genau eine der folgenden drei Eigenschaften. (1) L und ¬L sind rekursiv (und damit auch rekursiv aufzählbar). (2) L und ¬L sind nicht rekursiv aufzählbar (und damit auch nicht rekursiv). (3) Genau eine der beiden Sprachen L und ¬L ist rekursiv aufzählbar, aber nicht rekursiv, die andere ist nicht rekursiv aufzählbar. Übersicht 2. Turingmaschinen, churchsche These und Entscheidbarkeit 2.1 Registermaschinen und deterministische Turingmaschinen 2.2 Techniken zur Programmierung von Turingmaschinen 2.3 Simulationen zwischen Turingmaschinen und Registermaschinen 2.4 Universelle Turingmaschinen 2.5 Die churchsche These 2.6 Die Unentscheidbarkeit des Halteproblems 2.7 Eigenschaften rekursiver und rekursiv aufzählbarer Sprachen 2.8 Die Unentscheidbarkeit des postschen Korrespondenzproblems Postsches Korrespondenzproblem (PKP) Gegeben ist eine endliche Folge von Wortpaaren {(x_1,y_1), ... ,(x_k,y_k)) über einem endlichen Alphabet wobei x_i und y_i nichtleere Wörter sind. Aufgabe: Entschiede, ob es eine Folge von Indizes i_1 , i_2 , ... ,i_n in {1,...,k}, n ≥ 1, gibt, mit x_{i_1} x_{i_2} ... x_{i_n} = y_{i_l} y_{i_2} ... y_{i_n}. Beispiele a) PKP {(1,111), (10111, 10), (10,0)} hat die Lösung (2,1,1,3) – Ausprobieren! b) PKP {(10,101), (011,11), (101,011) hat keine Lösung. Offensichtlich müsste eine Lösung mit i_1 = 1 beginnen. Dann hat die y-Folge eine 1 Vorsprung. Als Fortsetzung ist nur i_2 = 3 möglich. Weiterhin hat die y-Folge eine 1 Vorsprung und dieses Problem bleibt bis in alle Ewigkeit erhalten. c) Das PKP {(001,0), (01,011),(01,101),(10,001)) hat eine Lösung i_1 , ... , i_n. (Kleinstmögliches n = 66) Reduktionskonzept Definition. Seien L_1 und L_2 Sprachen über Σ*. L_1 auf L_2 reduzierbar, Notation L_1 < L_2, wenn es eine überall definierte und total rekursive Funktion f: Σ* → Σ* gibt, so dass für alle w in Σ* gilt: w in L_1 ↔ f(w) in L_2 Interpretiere < als "nicht schwieriger" oder genauer, aber sprachlich schlechter, als "nicht unberechenbarer". Schluss Lemma. Falls L_l < L_2 und L_2 rekursiv, so ist L_1 rekursiv. Beweis. Sei f die zu der Reduktion L_1 < L_2 gehörende Funktion. Sei M_2 eine stets haltende TM, die genau die Wörter aus L_2 akzeptiert. Eine stets haltende TM M_1, die genau die Wörter aus L_1 akzeptiert: ● ● ● Auf die Eingabe w wendet M_1 die Funktion f an und berechnet f(w). Dann simuliert M_1 auf f(w) die TM M_2 und akzeptiert w genau dann, wenn M_2 das Wort f(w) akzeptiert. Nach obiger Definition ist diese Entscheidung korrekt. PKP In dem Beweis für die Unentscheidbarkeit des PKP geht man einen Umweg über das modifizierte postsche Korrespondenzproblem MPKP, bei dem für die Lösung zusätzlich i_1 = 1 gefordert wird. Lemma. MPKP < PKP. Lemma. H < MPKP. Satz. Das postsche Korrespondenzproblem PKP ist nicht rekursiv. Beweis. Wir wissen, H ist nicht rekursiv. Somit folgt, dass MPKP und schließlich PKP nicht rekursiv sind. Übersicht 3. Die NP-Vollständigkeitstheorie 3.1 Die Komplexitätsklasse P 3.2 Nichtdeterministische Turingmaschinen und die Komplexitätsklasse NP 3.3 NP-Vollständigkeit 3.4 Die NP-Vollständigkeit wichtiger Probleme 3.5 Pseudopolynomielle Algorithmen und starke NP-Vollständigkeit 3.6 Turing-Reduzierbarkeit, NP-schwierige, NP-einfache und NPäquivalente Probleme 3.7 Eine Komplexitätstheorie für Approximationsprobleme 3.8 Eine Komplexitätstheorie für probabilistische Algorithmen 3.9 Die Struktur von NP und die polynomielle Hierarchie