Kapitel 3: Berechnungstheorie Gliederung 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie 3.1. Einordnung 3.2. Berechenbarkeitsmodelle 3.3. Churchsche These 3.4. Algorithmisch unlösbare Probleme 3/1, Folie 1 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Ein einführendes Beispiel ! Das Collatz-Problem • ein relativ altes mathematisches Problem, bei dem es um die Konvergenz von bestimmten Folgen natürlicher Zahlen geht ... für uns interessant, weil es belegt, daß man selbst einfachen Programmen nicht ansehen kann, was sie eigentlich „tun“ ! Anmerkung • 3/1, Folie 2 eine Folge f = (a0,a1,a2,...) von natürlichen Zahlen konvergiert gegen eine natürliche Zahl a, falls für fast alle n gilt: an = a (/* d.h. es gibt ein n0 ∈ N, so daß an = a für alle n ≥ n0 gilt */) © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Ein einführendes Beispiel ! Das Collatz-Problem (cont.) • • es sei m ∈ N dann definieren wir die zu m gehörende Folge natürlicher Zahlen cfm = (am,0,am,1,am,2,...) wie folgt: 1. 2. am,0 = m für alle k ≥ 1 gilt: • • • am,k = 1, falls am,k-1 = 1 am,k = 1/2*am,k-1, falls am,k-1 gerade ist am,k = 3*am,k-1 + 1, sonst ... cf0 = (0,0,0,...); cf1 = (1,1,1,...); cf2 = (2,1,1,...) ... cf3 = (3,10,5,16,8,4,2,1,1,...); cf4 = (4,2,1,1,...) ... cf5 = (5,16,8,4,2,1,1,...) 3/1, Folie 3 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Ein einführendes Beispiel ! Das Collatz-Problem (cont.) • • es sei m ∈ N die interessierende Frage: Konvergiert die zur Zahl m gehörende Folge natürlicher Zahlen cfm = (am,0,am,1,am,2,...) ? • eine einfache Beobachtung Es sei m > 0. Dann konvergiert die zur Zahl m gehörende Folge natürlicher Zahlen cfm = (am,0,am,1,am,2,...) genau dann, wenn es ein Element am,k in der Folge cfm mit am,k = 1 gibt. ... offenbar konvergiert die Folge cfm (/* wenn überhaupt */) gegen die Zahl 1 3/1, Folie 4 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Ein einführendes Beispiel ! Das Collatz-Problem (cont.) • bisher ist nur folgendes bekannt (Stand 2008) ... für alle Zahlen von 0 verschiedenen Zahlen m mit m ≤ 3 * 261 weiß man, daß die zur Zahl m gehörende Folge natürlicher Zahlen cfm = (am,0,am,1,am,2,...) gegen die Zahl 1 konvergiert (/* d.h. es gibt ein Element am,k in der Folge cfm mit am,k = 1 */) ... das hat man rausbekommen, indem man versucht hat, die Zahlenfolgen cfm mit Hilfe eines Computerprogramms zu berechnen, bis man ein Element am,k in der Folge cfm gefunden hat, für welches am,k = 1 gilt Anmerkung: Im Juni 2011 hat G. Opfer einen ernstzunehmenden Beweis vorgelegt, der zeigen soll, daß jede Folge konvergiert. Ob der Beweis korrekt ist, wird zur Zeit noch verifiziert. 3/1, Folie 5 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Ein einführendes Beispiel ! Das Collatz-Problem aus Sicht der Informatik • die folgende C++-Funktion kann verwendet werden, um für jedes m ∈ N herauszubekommen, ob die zur Zahl m gehörende Folge natürlicher Zahlen cfm = (am,0,am,1,am,2,...) ein Element am,k mit am,k = 1 besitzt bool test( nat m ) { if ( m == 0 ) return(true); else { while( m != 1 ) { if ( m%2 == 0 ) m = m/2; else m = 3m+1; } return(true); } } ... es sollen beliebige große natürliche Zahlen als Eingabe zulässig sein (/* deshalb wird der „Nicht-Standard-Datentyp“ nat verwendet */) 3/1, Folie 6 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Ein einführendes Beispiel ! Abgeleitete interessierende Fragen • • Berechnet die C++ Funktion test(.) für jede zulässige Eingabe m einen Rückgabewert? (/* ... aus Sicht eines Informatikers */) Leisten die beiden C++-Funktionen test(.) und trivial(.) dasselbe? (/* aus Sicht eines Mathematikers und eines Informatikers */) bool test( nat m ) { if ( m == 0 ) return(true); else { while( m != 1 ) { if ( m%2 == 0 ) m = m/2; else m = 3m+1; } return(true); } } bool trivial( nat m ) { return(true); } ... Antworten auf diese Fragen gibt es bisher nicht 3/1, Folie 7 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Einordnung ! Zwischenfazit • • es gibt einfache „algorithmische Probleme“, die man bis heute nicht „in den Griff bekommt“ es ist eigentlich noch schlimmer ... ... es gibt „algorithmische Probleme“, von denen man nachweisen kann, daß man sie nie „in den Griff bekommen“ wird • • solcherart Probleme wollen wir genauer studieren dazu sind folgende Begriffe zu präzisieren • • 3/1, Folie 8 © 2013 Prof. Steffen Lange „algorithmische Problem“ ein algorithmisches Problem „in den Griff zu bekommen“ - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Einordnung ! Illustration alle algorithmischen Probleme alle lösbaren algorithmischen Probleme alle Computerprogramme ... ein algorithmische Problem „in den Griff zu bekommen“ bedeutet, ein Computerprogramm zu seiner Lösung anzugeben 3/1, Folie 9 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Algorithmische Probleme ! ... ein Algorithmisches Problem Π besteht aus • • • einer Beschreibung einer Menge X zulässiger Eingaben einer Beschreibung einer Menge Y zulässiger Ausgaben einer Beschreibung der Funktion, welche jeder zulässigen Eingabe eine ggf. leere Menge der korrekten Ausgaben (/* Antworten, Ergebnisse */) zuordnet ... kann man als Relation (/* Π ⊆ X × Y */) auffassen 3/1, Folie 10 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Algorithmische Probleme ! Beispiele • Membership-Problem für eine gegebene kontextsensitive Grammatik G über einem Alphabet Σ ... X = Σ* ... Y = { 0,1 } ... Π = { (x,1) | x ∈ L(G) } ∪ { (x,0) | x ∉ L(G) } • Collatz-Problem ... X = N ... Y = { false,true } ... Π = { (m,true) | die Folge cfm konvergiert } ∪ { (m,false) | die Folge cfm konvergiert nicht } 3/1, Folie 11 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Algorithmische Probleme ! lösbare algorithmische Probleme • ein algorithmisches Problem Π ist lösbar, wenn es ein Computerprogramm gibt, das zu jeder zulässigen Eingabe x ∈ X ein y ∈ Y (/* oder alle y ∈ Y ? */) mit (x,y) ∈ Π berechnet (/* sofern es überhaupt ein y mit dieser Eigenschaft gibt */) ! unlösbare algorithmische Probleme • ein algorithmisches Problem Π ist unlösbar, wenn es kein Computerprogramm gibt, das zu jeder zulässigen Eingabe x ∈ X ein y ∈ Y (/* oder alle y ∈ Y ? */) mit (x,y) ∈ Π berechnet (/* sofern es überhaupt ein y mit dieser Eigenschaft gibt */) ... es macht keinen Unterschied, ob ein y oder alle y mit dieser Eigenschaft berechnet werden sollen (/* de facto reicht es, die Menge Y geeignet „umzudefinieren“ */) 3/1, Folie 12 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Algorithmische Probleme ! Beispiele • Membership-Problem für eine gegebene kontextsensitive Grammatik G über einem Alphabet Σ ... wir wissen, das dieses algorithmische Problem lösbar ist • Collatz-Problem ... es ist offen, ob dieses algorithmische Problem lösbar ist 3/1, Folie 13 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Algorithmische Probleme ! von uns gewählte Einschränkungen • • • zu jeder zulässigen Eingabe existiert (/* wenn überhaupt */) genau eine zulässige Ausgabe jede zulässige Eingabe / Ausgabe ist als Zeichenkette über einem endlichen Alphabet Σ ⊆ { 0,1 } kodiert alle Wörter aus Σ* sind als Eingabe zulässig ... zusammen genommen bedeutet das • wir betrachten ausschließlich algorithmische Probleme Π, für die es eine partielle Funktion f(.) von Σ* nach Σ* gibt, so daß für alle x,y ∈ Σ* gilt: • 3/1, Folie 14 (x,y) ∈ Π gdw. y = f(x) © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Algorithmische Probleme ! Anmerkung (/* partielle Funktionen */) • eine Funktion von Σ* nach Σ* heißt vollständig, wenn es zu jedem x ∈ Σ* ein y ∈ Σ* mit y = f(x) gibt • eine Funktion von Σ* nach Σ* heißt partiell, wenn es x ∈ Σ* geben kann, für die es kein y ∈ Σ* mit y = f(x) gibt ... in der Praxis interessieren uns eigentlich nur vollständige Funktionen (/* man unterscheidet zwischen relevanten und irrelevanten Eingaben; falls x relevant ist, soll es ein y mit y = f(x) geben; falls x irrelevant ist, soll für eine Fehlermeldung y* dann y* = f(x) gelten */) ... warum es trotzdem wichtig ist, über partielle Funktionen zu reden, sehen wir später 3/1, Folie 15 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Algorithmische Probleme ! Einordnung • ein algorithmisches Problem Π (/* beschrieben durch die zugehörige partielle Funktion f(.) von Σ* nach Σ* */) ist unlösbar, wenn es kein Computerprogramm gibt, welches die Funktion f(.) berechnet ... eine solche Erkenntnis sollte unabhängig von der gewählten Programmiersprache und der zugrunde liegenden „Hardware“ sein ... suchen ein möglichst umfassendes und leicht „handhabbares“ Modell zur Beschreibung der Menge der mit Computerprogrammen berechenbaren Funktionen von Σ* nach Σ* ... solche Modelle nennt man Berechenbarkeitsmodelle 3/1, Folie 16 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Berechenbarkeitsmodelle ! Anforderungen an ein Berechenbarkeitsmodell • Präzisierung einer Sprache zur Beschreibung von Computerprogrammen, wobei unter anderem die folgenden Fragen zu klären sind: • • • • • 3/1, Folie 17 Welche elementare Operationen stehen zur Verfügung? (/* nicht zu wenige, nicht zu schwache ...; aber auch keine unrealistisch starken, wie etwa erfolgreiches „Hellsehen“ */) Wie viel Speicher steht zur Verfügung und wie geht man damit um? Wie wird die Eingabe eingegeben? Wie wird die Ausgabe bestimmt? Festlegung der Semantik, d.h. es ist zu festzulegen, welche partielle Funktion f(.) von Σ* nach Σ* ein Computerprogramm (/* in dem zugrunde liegenden Berechenbarkeitsmodell */) eigentlich berechnet © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Einordnung ! einige bekannte „leistungsfähigste“ Berechenbarkeitsmodelle • • • • • • • • Turing-Maschinen partiell-rekursive Funktionen Markov-Algorithmen Random-Access-Maschinen Kellerautomaten mit „zwei“ Kellern Quantencomputer DNA-Computer ... ! ... die zentrale Beobachtung Für jede partielle Funktion f(.) von Σ* nach Σ* gilt entweder (1) oder (2): (1) f(.) ist in jedem dieser Berechenbarkeitsmodelle berechenbar. (2) f(.) ist in keinem dieser Berechenbarkeitsmodelle berechenbar. 3/1, Folie 18 © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Kapitel 3: Berechnungstheorie Zwischenfazit ! Konsequenzen • • um nachzuweisen, daß es algorithmische Probleme gibt, die unlösbar sind, ist es de facto egal, welches „hinreichend vernünftige“ Berechenbarkeitsmodell zugrunde gelegt wird um zu zeigen, daß es algorithmische Probleme gibt, die unlösbar sind, muß man ein Berechenbarkeitsmodell definieren und „ausreichend gut“ verstehen ! Vorgehensweise • • • 3/1, Folie 19 schauen uns zwei Berechenbarkeitsmodelle genauer an vergleichen die Leistungsfähigkeit der beiden Modelle lernen Beispiele für unlösbare algorithmische Probleme kennen © 2013 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik