dass diese Menge nicht mal mehr aufzählbar sein kann,
also nicht von einer Touring-Maschine akzeptiert werden kann.
Weil sie eine Teilmenge der natürlichen Zahlen ist,
wussten wir aber, dass sie wenigstens abzählbar bleibt.
Also gibt es tatsächlich irgendwo in dieser seltsamen Welt der
berechenbaren Sprachen etwas, was man zwar mathematisch charakterisieren kann.
Ja, ist ja hier in diesem großen roten Kasten,
eine eindeutige, mathematisch präzise Formulierung, was LD ist.
Das mathematische Objekt existiert also. Es gibt nur keine Touring-Maschine,
dass uns die Worte WI akzeptieren könnte. Ja,
und das liegt nicht daran, dass die Sprache so groß wäre.
Sie ist immer noch eine Teilmenge der natürlichen Zahlen.
Also immer noch abzählbar, so groß kann das also nach unserem Verständnis
gar nicht sein. Und die grundlegende Idee war sehr einfach,
wir konnten ja die Kodierungssprache, die ganze Menge G-Sternchen aufzählen,
Wir konnten aus diesen allen möglichen Worten herausfiltern,
was davon Kodierung von Touring-Maschinen sind.
Das konnte eine Touring-Maschine entscheiden. Und wir konnten damit anfangen,
uns so eine Tafel zu denken, eine so große Tabelle,
in der wir hier die Maschinen M0M1 und 2 und so weiter einmal auftragen.
Und rechts die Worte. Und immer schauen,
wird das entsprechende Wort von der Maschine des Eintrags akzeptiert.
Ja oder nein? Der charakteristische Wert ist in der Tabelle enthalten.
Also eins, wenn es in der Sprache enthalten ist,
null,
wenn nicht
Und jetzt betrachtet man für die Diagonalsprache ja diese Hauptdiagonale,
fragt sich also, ist das IT-Wort in der Sprache der Iton-Turing-Maschine drin?
Genau, wenn das nicht der Fall ist,
also wenn da eine Null steht,
dann packe ich es in die Menge hinein.
Das heißt, diese beiden Nullen, die wir hier sehen,
wie Null und W2, die werden in die Sprache LD
hinzugepackt und W1 und WN als Beispiel eben nicht.
So habe ich eine Diagonalsprache. Jetzt fragen wir uns,
ist LD irgendwie Sprache,
einer dieser Turing-Maschinen
Und da oben stehen ja im Prinzip alle Turing-Maschinen, die es sein können.
Denn LED ist wieder so eine Sprache, die hier Worte aus der gleichen Grundmenge akzeptiert.
Von daher müsste es, wenn es eine aufzählbare Sprache ist,
müsste es eine Turing-Maschine geben, die sie akzeptiert.
Da da oben alle Turing-Maschinen stehen hier an dieser Seite, müsste es irgendwo enthalten sein.
Und jetzt kriegen wir genau an dieser Stelle das Problem,
wenn das irgendwo in der Position vorkäme, meinetwegen am Index J,
dann haben wir genau den Widerspruch für das Wort WJ.
Denn genau an dieser Stelle für das Wort WJ Ist es
andersrum definiert? Das heißt, wenn wir annehmen,
dass unsere Diagonalsprache, die Sprache der Thuring-Maschine AJ wäre,
dann kriege ich einen Widerspruch, wenn ich annehme,
dass WJ wäre in der Sprache, dann kam mich heraus,
dass WJ es nicht in der Sprache.
Und andersherum ist es auch nicht besser, wenn WJ angenommen,
hypothetischerweise, es ist nicht in LD ist,
dann bekomme ich leider raus, dass es doch in der Idee ist.
Also ein Widerspruch zu der Annahme,
dass es überhaupt eine Thuring-Maschine gibt,
die diese Sprache LD akzeptieren kann
So, und was wir dann noch gesehen haben,
ist, dass aber der bestmögliche Fall eintritt,
bestmöglich heißt, dass das Kompliment immerhin noch aufzählbar ist.
Entscheidbar kann es nicht sein. Warum kann es nicht entscheidbar sein,
das kann nicht entscheidbar sein? Die Dioriginalsprache selbst ist ja
nicht aufzählbar, also erst recht nicht rekursiv. So,
und das Kompliment, das kann auch nicht rekursiv sein,
sonst wäre die Sprache selbst sehr rekursiv.
Das einzige, was theoretisch noch denkbar ist,
ist also aufzählbar,
das ist gerade noch möglich
Das liegt daran, wenn ich zwei,
eine nicht rekursive Sprache habe, dann ist das,
was passieren kann, eine aufzählbare Menge und das Kompliment nicht mehr aufziehbar.
Beide aufzählbar geht nicht, denn dann wäre die Menge ja sogar entscheidbar,
sagte Satz 20.1. Das Kompliment, wenn man es lang hinschreibt,
ist die Menge aller Worte wie I oder Kodierung davon,
sodass gilt, das Ite Wort ist in der Sprache der Iten, Maschine.
Und da haben wir gesehen, das kann man mit einer einfachen Simulation hinbekommen,
indem man anfängt, das Wort W als Eingabe zu betrachten,
dann den Index zu bestimmen, sodass WWI ist,
also der Index des Wortes VI wird bestimmt.
Wenn ich den Index i habe,
dann bestimme ich die Touring-Maschine mit dem Index i, MI.
Mit diesen beiden Informationen W-I- und M-I starte ich eine Simulation.
Und der Simulator simuliert jetzt M-I mit der Eingabe W-I.
Und jetzt gibt es mehrere Möglichkeiten.
Der Simulator erkennt eine Endkonfiguration und terminiert deswegen akzeptiert.
Das heißt, er akzeptiert das Wort WI
Oder Variante B. Er akzeptiert das Wort B nicht. Beispielsweise,
weil er hält, aber es ist keine Endkonfrontation oder
er akzeptiert nicht, weil er nicht terminiert.
In beiden Fällen terminiert er akzeptiert die Simulation nicht.
In einem Fall terminiert sie halt nicht. Im anderen erreicht sie
keine Endkonfrontation. Das heißt, es werden nur die Worte
akzeptiert, die auch MI akzeptiert hätte. Das heißt,
wir haben die Eigenschaft für alle Worte wie I,
die sind in der Sprache von MI enthalten, genau.
Das heißt, WI ist nicht in der Diagonalsprache.
Insgesamt hat hat diese Simulation also erbracht, dass ich
eine Touring-Maschine habe, die das Kompliment von LD akzeptiert.
Genau die Worte, die auch MI akzeptiert hätte.
Jetzt haben wir die eine Hälfte gewissermaßen der Komski-Herarchie,
da fehlt uns noch die Inklusion,
dass die aufzählbaren abzählbar sind und was fehlt uns noch?
Uns fehlte noch, dass die Entscheidbaren echt enthalten sind in den Aufzählbaren.
Entscheidbar hieß ja, ich verfeinere aufzählbar um die Eigenschaft,
dass die Touring-Maschine dazu immer halten muss
Dass sie bei einer akzeptierenden Eingabe immer hält, war billig,
aber für nicht akzeptierte Eingaben war das nicht so einfach.
Und jetzt gucken wir uns an, gibt es tatsächlich ein Problem,
bei dem es keine Touring-Maschine geben kann,
die immer garantiert hält oder praktischer formuliert?
Gibt es eine Fragestellung, die zwar von der Touring-Maschine positiv
beantwortet werden kann in den positiven Fällen, aber bei den negativen Fällen nicht?
Ja, in der Logik kennt man dann schon Probleme,
da haben wir mich genau gesehen bei Prädikatenlogik,
tritt so etwas ein, dass eine Formel allgemeingültig ist oder gültig ist,
das kann man nachweisen durch einen Beweis.
Es gibt nur kein immer terminierendes Verfahren dafür,
das also auch bei nicht gültigen Formeln das sagen würde.
So, für den Turing-Maschinen-Kontext kann man das jetzt noch ein bisschen einfacher strukturiert beweisen.
Und da lautet das klassische Problem, das wir jetzt betrachten wollen, das Halteproblem.
Das ist erstmal eine sehr einfache Frage. Wir haben hier
die Menge Haar und das sind Kodierungen von Turing-Maschinen und Eingabeworten,
jetzt irgendwie kodiert. Und was uns interessiert ist,
wir möchten nur solche Pärchen AW haben, für die gilt,
die Touring-Maschine A auf der Eingabe weh, anhält.
Also Termination ist für die Eingabe weh garantiert.
Und wenn wir jetzt das algorithmisch überprüfen wollen, also wir fragen uns,
ob diese Sprache H entscheidbar ist, dann heißt,
das kann ich für gegebenes A und gegebenes weh,
dieses Anhalten tatsächlich entscheiden, ja oder nein?
Ja und ein bisschen praktischer heutzutage ist, eine Touring-Maschine ist
ein Programm und die Programmeingabe ist eben das Eingabewort der Maschine.
Da heißt das denn, Kann ich Termination von Programmen erkennen?
Was jetzt gilt, ist, die Haltesprache ist aufzählbar.
Das ist so das Erste. Warum ist sie aufzählbar?
Da muss ich gar nicht viel machen, um festzustellen,
dass die Fälle, dass ein Pärchen AW zur Sprache gehört,
also dass eine Touring-Maschine auf eine Eingabe weh terminiert.
Das kann ich sehr einfach feststellen. Irgendjemanden Vorschlag?
Exikant ist von meiner Touring-Maschine
Der letzten Falschen, wo ich wahrscheinlich noch runterlade.
Da steht das Wort. Völlig eins. Ich habe ja
schon eine Touring-Maschine und ein Wort. Die Haltesprache,
Aufziehbar heißt ja, ich kann natürlich aufzählen, ja,
das haben wir schon mal gemacht, Aufzählen ist gleich akzeptieren.
Ihr könnt also Bremen wenden, wie ihr wollt,
aber für das Problem selbst kann ich auch sagen,
eine Touring-Maschine A gegeben,
ein Wort Wege geben und der Kern das Problem ist,
kann ich an dieser Stelle sagen, A,
We wird das akzeptiert.
Wenn ich das kann,
dann kann ich auch noch mit viel Schleifen drumherum
das Ganze
tatsächlich aufzählen
Aber der Kern des Problems ist, ich muss wissen,
für eine Eingabe A, für eine Eingabe weh,
hält die Turing-Maschine AfW.
Es kommt uns ein bisschen zu Pass an dieser Stelle,
dass die Turing-Maschine, die wir konstruieren müssen,
nur auf den zu akzeptierenden Eingaben halten muss.
Nur da muss ich
eine Endkonfiration erraten
Das hilft uns enorm. Was machen wir einfach? Und festzustellen,
ob ein terminierendes Programm terminiert, um das festzustellen?
Wir lassen laufen. Ja, wir lassen die Kiste loslaufen und warten.
Wenn das Programm, das wir da bekommen haben, terminieren wird,
dann werden wir nur endlich lange warten müssen und sagen, hab's gefunden.
Wenn das Programm nicht terminiert, dann sagen wir nie was.
Sagen also auch nichts Falsches. Bei Naturing-Maschinen ist das genau das,
was verlangt ist. Wir müssen für die zu akzeptierenden,
also die positiven Instanzen, irgendwann mal Ja sagen.
Für Nein ist gar nichts gefordert. Wenn ein Wort das nicht akzeptiert werden soll,
in der Sprache eine Naturing-Maschine, dann kann das bedeuten,
dass wir in eine ablehnende Konfiration kommen oder dass wir einfach unendlich lange laufen.
Beides ist möglich. Also einfach laufen lassen,
heißt ein bisschen genauer, wir nehmen die universelle Turing-Maschine.
Das ist eine Turing-Maschine, die bekommt A und W als Eingabe,
geeignet, kodiert und simuliert dann A auf der Eingabe weh.
Und das hat jetzt zur Folge Diese Touring-Maschine simuliert, simuliert,
simuliert, wenn ihr Eingabe in der Sprache drin ist,
mit die Simulation irgendwann anhalten.
Und dann wird das akzeptiert werden, diese Eingabe.
Das heißt, ein Wort aus Haar wird von dieser Simulation akzeptiert.
Und ein Wort, was nicht in Haar ist,
wird nicht akzeptiert. Denn entweder komme ich in eine Finale,
aber nicht akzeptierende Konfirmation oder ich bin in einer Endlosschleife.
In beiden Fällen wird die Eingabe nicht akzeptiert.
Also akzeptiert diese universelle Touring-Maschine genau die Menge Haar
Und jetzt kommt noch raus, dass diese Menge Haar nicht entscheidbar ist.
Wir können also nicht feststellen, ob zu einer
gegebenen Touring-Maschine und gegebene Eingabe die Touring-Maschine irgendwann halten wird.
Das heißt also, wir haben erst mal ein sehr einfaches
Problem und stellen fest, das kann man nicht entscheiden.
Und zweitens ist es gleich das, was wir gesucht haben,
wir haben mich jetzt eine Menge, die zwar aufziehbar,
aber nicht mehr entscheidbar ist,
also trennen wir gerade entscheidbar aufzählbar
So, das hat praktisch recht weitreichende Konsequenzen. Das führt mich dazu,
dass ich für eine universelle Programmiersprache, in meiner Entwicklungsumgebung,
sagen wir, ich habe eine Java-IDE,
da finde ich keinen Knopf, der mir sagt, terminiert dieses Programm.
Das wäre ein gewisses Qualitätskriterium, das meine Unterprozeduren terminieren.
Das ist im Allgemeinfall aber nicht möglich. Wenn ich das
dem Benutzer zur Verfügung stellen würde,
muss er entweder mit zwei Dingen leben,
entweder er will eine Antwort haben und die Maschine sagt,
manchmal ja und das stimmt dann auch oder sie sagt manchmal
gar nichts und dann muss ich den Reset-Knopf drücken
Weil ich keine Lust mehr abzuwarten. Vielleicht wäre auch
eine Sekunde später die Antwort gekommen. Oder nächste Variante,
sie sagt manchmal ja, manchmal nein,
manchmal sagt sie weiß nicht, ist mir noch nichts eingefallen.
Ja, aber das ist auch klar, solange sie
noch nichts gesagt hat, ist das genauso gut wie weiß nicht.
Das wusste ich auch vorher. Und deswegen werden solche Analysen
deutlich eingeschränkt zur Verfügung gestellt. So wie funktioniert das jetzt?
Könnte ich die Menge Haar jetzt wieder mit einem Diagonalisierungsbeweis entlarven,
dass ich also jetzt sage, Ich zähle einfach die entscheidbaren Sprachen auf,
da zähle ich die Worte auf, dann sage ich alle,
die die halten, ich nehme genau die,
die nicht halten, rein, Widerspruch.
Das klappt so einfach nicht. Es klappt aus dem Grunde nicht,
was bei aufzählbar so schön klappte, für die der Originalsprache,
da musste ich ja einfach nur eine Liste machen, aller Touring-Maschinen.
Jetzt müsste ich eine Liste machen von Touring-Maschinen, die immer terminieren.
So, leider sehe ich Touring-Maschinen nicht an,
ob sie auf allen Eingaben terminieren.
Deswegen kann ich diese Tabelle
schon mal nicht hinschreiben
Ja, wenn ich das den Dingern ansehen könnte,
hätte ich irgendwo auch gleich mit das Halteproblem entschieden.
Da dreht sich das Ganze irgendwie im Kreis.
Das heißt, so ein netter Diagonalisierungsbeweis wird nicht klappen.
Wir müssen das also anders lösen. Es wird wieder eine
Selbstanwendung sein. Sie sieht nur einen Tick anders aus.
Wir machen auf jeden Fall einen indirekten Beweis. Das heißt,
wir nehmen an, wir hätten eine Maschine M,
wie auch immer sie aussieht.
Und diese Maschine ist in der Lage, das Halteproblem zu lösen.
Was bekommt sie also? Sie bekommt eine Eingabe,
also ein Programm P und ein Eingabewort
Und sie liefert uns immer eine Antwort. Entweder ist die Antwort,
ja, das Programm stoppt bei der Eigenabe X oder sie
sagt nein, das stoppt eben nicht bei der Eigenabe.
Ja, das ist die Ausgangssituation. Bis hierhin ist alles
noch einfach. Da wir das Ganze kodiert haben,
Programme und Eingaben über dem gleichen Alphabet, hindert uns niemand,
das Eingabewort, sehr speziell zu wählen,
nämlich durch das Programm P selbst.
Dann habe ich hier zweimal die gleiche Eingabe.
Das sind ja im Zweifelsfall bei einer typischen Kodierung eh
nur Bit-Sequenzen
Also sage ich, warum nicht hier für das Eingabewort die gleiche Bit-Sequenz,
die zufällig auch die Touring-Maschine oder das Programm kodiert, wiederverwenden?
Ja, es ist wieder so eine Sache von der Bauart.
Kann man machen, stört nicht. Man sieht noch nicht ganz,
warum, aber ich behaupte, was ist zielführend.
Wenn man das gemacht hat,
dann kann man die Maschine noch ein bisschen weiter modifizieren,
indem man bei der Ja-Antwort jetzt das Ganze verschweigt.
Das heißt, wir bauen eine neue Touring-Maschinenhülle im Schlange
Und die hat die Eigenschaft, die Nein-Antwort,
gibt sie einfach raus. Die Ja-Antwort gewissermaßen verschweigt sie,
indem sie sich hier selbst so eine Endlosschleife begibt.
Also da kommen wir nicht mehr raus. Deswegen kommt auch
keine Ja-Antwort jetzt mehr aus der Kiste im Schlange.
Also eine Endlosschleife bei Ja. Gut, kann man auch machen.
Und jetzt kommt das Spannende. Wir verwenden jetzt als Eingabe
ein mehr spezielles Programm, nämlich diese Maschine im Schlange selbst.
Also wir geben mal im Schlange hier ein,
auch als Eingabewort
Und das wird hier verarbeitet und da kommt ja hypothetisch,
hatten wir angenommen, ja raus oder nein.
Und wenn nein rauskommt, dann heißt das,
Schlange stoppt nicht bei der Eingabe im Schlange.
Und dann stoppt die Maschine und sagt nein.
Also sie sagt, ich stoppe nicht auf mir selbst.
Wenn ich frage, ob ich selbst stoppe. Und das
soll bedeuten, ich stoppe nicht. Also sie stoppt,
wenn sie behaupten will, dass sie nicht stoppt.
So, und was macht sie
Wenn sie nicht stoppt, hier an dieser Stelle,
also angenommen, die Maschine M würde stoppen,
dann würde ich ja in ein Jahr 2 kommen.
Dann gerät diese Maschine aber in eine Endlosschleife. Das heißt,
wenn die Aussage von M ja ist, sie stoppt,
dann habe ich die Konsequenz, dass die Maschine nicht stoppt.
Also egal, wie ich es drehe oder wende,
wenn die Aussage ist, nein,
sie stoppt nicht, dann wird gestoppt.
Wenn die Aussage ist, ja, sie stoppt,
dann gerate ich in eine Endlosschleife.
Ja, ich habe, also das Ganze maximal ausgereizt
zum Hirnwiderspruch wieder zu konstruieren
Egal, was ich mache,
die Maschine stoppt genau dann, wenn sie nicht stoppt.
Das ist die Aussage. Und das ist ein offensichtlicher Widerspruch.
Und jetzt folgen wir der Kette bis zum Anfang zurück.
Die Annahme, dass es eine solche Maschine M gibt,
muss also falsch gewesen sein.
Denn alle anderen Konstruktionsschritte kann man offensichtlicherweise tun.
Die sind algorithmisch machbar. Das ist die Selbstanwendung.
Das Besondere an dieser Stelle ist,
es war eine universelle Maschine,
die sich auch selbst
als Codierung akzeptieren konnte
Das liegt dem Kern des Beweiss zugrunde,
dass ich hier als Eingabe Schlange verwenden kann.
Und das ist die Maschine selbst, die das tut.
Dass das klappt, liegt daran, dass die Maschine so mächtig ist,
dass sie mit Kodierung ihrer eigenen Maschinenklasse arbeiten kann.
Ja, und deswegen auch ihre eigene Kodierung akzeptieren können.
Das geht bei endlichen Automaten und Kellerautomaten nicht.
Da kriegen wir keine Kodierung hin, dass die Dinger
sich selbst simulieren könnten.
Da brauchen wir
ein mächtiges Maschinenmodell
Aber sobald man eine Maschinenklasse gezaubert hat,
die in der Lage ist, sich selbst zu simulieren,
kommt man immer auf solche Selbstdiagonalisierungstechniken, die dann Unentscheidbarkeiten bedeuten.
So, an dieser Stelle, ja. Wir haben jetzt
gerade ja bewiesen, dass das Halteproblem nicht gelöst war.
Es gibt eine Maschine von der Welt, auf alle Fälle
feststellen kann, ob ein Programm serviert oder nicht.
Ja. Das ist die Idee. Was ich feststellen kann, ist,
wenn ein Programm terminiert, kann ich das auch nachweisen.
Und ich kann auch für einige Fälle für nicht terminierende Programme
sagen, das Programm terminiert nicht.
Es ist nicht so, dass wir gar nichts mehr sagen können.
Schließlich können wir ja auch auf ein Programm drauf gucken und sagen,
while true do, das hat wenig Terminationspotenzial.
Es sei denn, da steckt ein Breakdown oder solche Sachen, wenn das erlaubt ist. Ja,
solche Sachen kann man natürlich durch einfaches Aufzählen hinkriegen,
aber generell, egal wie ich den Algorithmus stricke,
egal was für eine Annäherung an dieses Halteproblem ist,
dann wird es immer Fälle geben, bei denen es Nein-Antworten gibt,
wo die Maschine dann irgendwann sagt, ich gerate in eine Endlosschleife.
Das kann man herbei zwingen. Anders formuliert,
es gibt keinen Algorithmus, der dieses Problem immer terminierend,
immer mit Jan-Nein-Antwort versehen löst.
Gut, also das erste algorithmische Problem, was man nicht
im Griff kriegen kann. Was übrigens auch heißt,
dass es umgekehrt natürlich Funktionen gibt, die nicht berechenbar sind.
Entscheidbare Mengen hatten wir auch mal definiert,
als die charakteristische Funktion dieser Menge ist berechenbar
Also diese Funktion, die eins bei Eingabe ist in
der Menge drin, null bei ist nicht drin.
Diese Entscheidungsfunktion, die muss ja brechenbar sein, wenn die Menge entscheidbar ist.
Für eine entscheidbare Menge heißt es im Umkehrschluss, ja,
das kann ich machen von Unentscheidbare heißt es, das geht gar nicht.
Das heißt, wir haben dadurch implizit auch ein Beispiel kennengelernt
für eine Funktion, die nicht berechenbar ist.
Die charakteristische Funktion der Haltesprache ist eine Funktion,
die man nicht ausrechnen kann
Dass es gewissermaßen das, was wir den Mathematikern überlassen,
charakteristische Funktionen von der Haltesprache zu definieren,
aber aus Ecke der Algorithmik und auch der Logik sagt man,
das ist etwas, was man nicht mehr mit endlichen Beschreibungstechniken und Turing-Maschine ist die mächtigste,
endliche Beschreibungstechnik, die wir bislang gefunden haben,
mit einer solchen Technik in den Griff kriegen könnte.
Man kann diese Funktion damit nicht ausrechnen. Das heißt,
irgendwo gibt es eine große Lücke zwischen den Funktionen,
die man mathematisch definieren kann und den Funktionen,
die man tatsächlich ausrechnen kann
Da muss man keine Angst haben, die Lücke ist zwar riesig,
um nicht zu sagen, sie ist unendlich groß,
aber die ist soweit jenseits von Gut und Böse,
also da sind Funktionen drin, die eigentlich niemand ernsthaft ausrechnen will.
Von daher ist das eigentlich erstmal nicht so das
schlimmste Problem für uns. Also was wissen wir,
wenn wir uns in diesem Komplex umschauen wollten,
wir wissen jetzt, die Entscheidbaren sind eine echte Teilmenge der Aufzählbahn,
denn wir haben ja gerade gesehen,
die Haltesprache ist unentscheidbar,
aber aufzählbar
Und wir haben gesehen, die Diagonalsprache, die ist nicht mehr aufzählbar, aber abzählbar.
Also haben wir festgestellt, dass diese beiden Inklusionen echt sind.
So, also sind wir mit dieser Komski-Herarchie,
die die echten Inklusionen hat, einmal komplett durch.
Für alles haben wir jetzt Beispiele und wir haben auch die Inklusionen bewiesen.
Die Beispiele sagten uns, dass die Inklusion echt sind.
Das ist die komplette Hierarchie, wie sie uns vor uns liegt.
Wenn Wir machen ein bisschen weiterschauen wollen,
denn es ist vielleicht nicht so wichtig,
jedes Mal wieder zu zeigen, dass Probleme unentscheidbar sind,
indem wir das durch Selbstanwendungstechnik machen,
sondern da gibt es jetzt schlaue Tricks.
Und ein Trick, der kommt erst mal ganz harmlos daher, das nennt sich Reduktion.
Reduktion ist, bevor man auf die mathematische Definition guckt,
das, was wir eigentlich ständig machen.
Wir kriegen die Aufgabe von unserem Chef, ein Problem zu lösen.
Natürlich haben wir keine Lust, das zu machen, es ist auch sehr kompliziert.
Wir denken kurz darüber nach und stellen fest,
Das ist das Problem, aber einfach dadurch zu lösen ist,
dass wir es ein bisschen umschreiben und mit Algorithmen,
die unser Kollege vor zwei Jahren mal programmiert hat, lösen.
Das heißt, irgendjemand anders hat sich viel schlaue Gedanken gemacht,
ein Programm geschrieben, tut es auch wunderbar und wir stellen fest,
auch ehe wir uns jetzt schlaue Gedanken machen,
schreiben wir doch lieber mal eben kurz jede Problemeingabe um und lösen es mit dem anderen Algorithmus.
So, man muss mal sagen, das ist sehr bequem,
faul, menschlich und daher dem Mathematiker sehr verwandt
Und B sind natürlich auch betriebswirtschaftlich genau das, was man will.
Denn typischerweise ist so eine Problem-Umform-Reduktion ja eine relativ einfache Sache.
Ja, da schraubt man das Problem ein bisschen um,
damit es anders aussieht und dann da reinpasst in diesen anderen Algorithmus.
Das heißt, es entzückt auch jeden BWLer. Ja,
da muss nur eine große Programmbibliothek mit einem ganz fetten,
super optimierten Algorithmus gepflegt werden.
Vielleicht kauft man die auch ein. Vielleicht hat man die
auch irgendwo in der Cloud gespeichert, was auch immer.
Was man selbst nur machen muss, ist,
die Daten in so ein passendes Format zu bringen.
Und dann ruft man den fremden Service auf
Also Mathematiker und BWLer sind entzückt, das hat man nicht häufig.
Von daher ein gutes Konzept. Wenn man das jetzt ein bisschen mathematisiert,
dann nennt man das Reduktion. Und Reduktion ist nichts weiter,
als dass man annimmt, wir wollen ein Problem P entscheiden.
Und wir nennen das ganze Problem P auf P-Strich reduzierbar,
wenn man schon eine Turing-Maschine A-Strich hat,
da eine Turing-Maschine A drumherum baut,
dass man dann das Problem lösen kann.
Also die Grundannahme ist, A-Strich wird als Unterprozedur
da irgendwo verbaut
Ich muss gar nicht wissen, wie die Turgenmaschine A-Strich aussieht.
Die löst mir aber irgendwie ein Problem-P-Strich. Und wenn ich
das als Baustein verwenden kann, dann kann ich da drumherum
eine Turingmaschine A bauen, die mir mein Problem-P löst.
Wenn das ganze Spiel so funktioniert, dann sage ich
das Problem, P kann ich auf P-Strich reduzieren.
Ja, ein beliebter Denkfehler an dieser Stelle ist Reduzieren,
heißt hier nicht kleiner machen.
Reduziert, das Problem wird ja nicht kleiner.
Typischerweise sogar, dass es größer wird.
Das liegt daran, ich habe ein Problem, ich will es lösen.
Der Algorithmus, der das löst, kann ja nicht kleiner
sein als der, den ich selbst hätte schreiben müssen.
Im Zweifelsfall ist der sogar viel fetter. Was mich aber nicht interessiert,
weil ich das nicht machen musste, das ist der Punkt.
Was hier sich also reduziert, ist nicht die Problemgröße,
sondern was reduziert wird, Altsprache, also ein Vorteil,
Redukere heißt zurückführen.
Wir führen die Lösung des Problems auf die Lösung eines
anderen Problems zurück. So, in dem Sinne,
P wird zurückgeführt auf die Lösung von Pischtrich
Kenne ich einen schönen Algorithmus für P. Strich, kenne ich jetzt auch
einen für P. So, und das kann man sich so
positiv formuliert vorstellen. Wir sind jetzt gerade im Unentscheidbarkeitsbereich.
Wir nutzen das jetzt andersherum auch mal aus.
Wir nehmen an, L lässt sich auf L-Strich reduzieren.
Ja, ich kann also L mit L-Strich unter Prozedur lösen.
Und jetzt ist L unentscheidbar. Dann weiß ich,
dass auch L- Strich unentscheidbar ist
Warum? Nee, angenommen L-Strich wäre entscheidbar.
Ich habe eine Reduktion von L auf L-Strich.
Damit kann ich dann also auch L entscheiden.
Ich habe aber angenommen, dass L ein unentscheidbares Problem ist.
Also ein Widerspruch. Das heißt, wenn ich weiß,
mit einer Hilfsprozedur kann ich ein unentscheidbares Problem lösen,
hypothetisch, dann weiß ich auch diese Hilfsprozedur,
kann es eigentlich nicht geben
So, und so werden wir das gerne mal benutzen.
Wir werden öfter mal feststellen, dass wir das Halteproblem lösen
könnten, wenn wir 11 Strich benutzen dürften.
Das wäre uns also eine große Hilfe, L-Strich zu haben.
Da wir aber eigentlich schon vorher wissen,
das kann gar nichts werden, haben, ist und bleibt unentscheidbar.
Haben wir eigentlich nur ausgesagt, dass diese Hilfsprozedur nicht existent
sein kann. So, dass dieser Satz hier wird,
dieser Reduktionssatz wird also unser Werkzeug sein,
um weitere Probleme als unentscheidbar zu erkennen
Wir können zum Beispiel jetzt einen anderen Beweis für die Unentscheidbarkeit
des Heiteproblems zaubern. Wir fangen erst mal an und kodieren
die Sprachen H und LD bei dem Alphabet 01, ja.
Klar, kann man machen. Und jetzt benutzen wir
eine Reduktion. Wir nehmen mal hypothetisch an,
wir hätten hier eine Entscheidungsprozedur für die Haltesprache.
Und jetzt basteln wir damit eine neue Kiste,
den gelben Block.
Und was macht die
Bei der Eingabe W wird dort das Wort WW draus.
Also, ein Pärchen, die erste Komponente soll jetzt
eine Turing-Maschine sein. Das heißt, die Eingabewort,
das Eingabewort W, Akts, betrachten wir gleichzeitig als Eingabe,
aber auch als Codierung der entsprechenden Turing-Maschine.
Kann ich ja machen. Ist ja auch nur ein Bitstream
. Das gebe ich jetzt dem Halte-Problem oder der Prozedur,
die das löst, einer Turing-Maschine. Und die sagt jetzt also,
weil das ein Entscheider sein soll, Ja oder nein?
Und dann überkreuze ich die Antwort, ja,
mache ich zu nein, nein, mache ich zu ja.
Was heißt das also? Das Wort www ist genau dann
in dieser Sprache, wenn wir in der Diagonalsprache ist.
Warum? Ja, was wird hier gesagt, www ist,
darauf halte ich, wunderbar,
wird es auch akzeptiert,
das kann ich in der Simulation
auch feststellen
Dadurch die Antwort kreuze, bekomme ich hier genau das Umgekehrte.
Also es ist in der Diagonalsprache drin, da weiß man,
genau, wenn es W akzeptiert für die Türenmaschine A,
die Eingabe nicht, das negiert, ergibt also,
es akzeptiert es, hier haben wir die Negation.
Also genau dann, wenn das Pärchen WW nicht in der
Haltesprache drin ist, dann ist es in der Diagonalsprache.
So, hier ist noch eine kleine Modifikation eben,
es ist nicht nur Halten, sondern ich gucke behalten auch gleich,
ob akzeptiert wird.
Das ist eine Mini-Variation
Das heißt also, wenn diese Haltesprache entscheidbar ist,
dann hätte ich hier in diesem gelben Kasten plötzlich einen Entscheidungsprozedur für die Diagonalsprache.
Für LD. Wir wissen LDs,
aber nicht mal mehr aufzählbar, geschweige denn entscheidbar.
Also schließen wir im Umkehrschluss, weil LD nicht entscheidbar ist,
kann erst recht nicht diese Hilfsprozedur, die hypothetische, entscheidbar sein.
Das heißt, auch auf diese Art und Weise
könnte man beweisen, dass die halbe Sprache Haar nicht mehr
entscheidbar ist
Und da gibt es eine ganze Menge weitere Probleme,
die einem über den Weg laufen und man wird feststellen,
sie sind alle unentscheidbar. Also das haben wir schon kennengelernt,
wir haben ihn kennengelernt, dass die Sprache LD nicht entscheidbar ist,
weil sie schon nicht mal mehr aufzählbar ist.
Wir haben gesehen, das Kompliment von LD ist auch nicht
entscheidbar und das Halteproblem auch nicht.
Und dann gibt es noch weitere Probleme, Karre-Probleme,
kennt jeder, der mal im Bad gefließt hat,
das zehnte Hilbertsche-Problem,
das kennt jeder,
der sich mit der Mathematik
voll Klo auseinandersetzt
Vorkommen einer Eins als Bild einer Funktion, das gucken wir
uns nochmal an. Und viertens ist der Hammer schlechthin.
Eigentlich ist es fast alles nicht entscheidbar.
Also jedes nicht triviale Problem über Turing-Maschinen ist unentscheidbar.
Was das heißt, gucken wir uns auch nochmal an.
Fangen wir am einfachsten an. Kachel oder auch Domino-Probleme.
Da habe ich so ein paar solcher Steinchen.
Und da sollen immer gleiche Farben aneinander liegen.
Und ich habe eine endliche Menge von diesen Dingern.
Ein Beispiel sind es drei verschiedene Kacheln,
aber allgemein können es eher
Stück sein
Und von jedem Typ habe ich beliebig viele Kacheln.
Das ist deswegen wichtig, weil meine Aufgabe besteht jetzt darin,
ganz eng Quadrat zu kacheln, also den ersten Quadranten der Ebene.
Ja, das soll ich komplett einmal vollkacheln. Von 0
-0 bis 0 und endlich und endlich null, also die gesamte Ebene.
Das ist so, die Frage stelle, A,
kann ich das machen? Das klingt jetzt so,
als würde das in einem normalen Hobby-Handwerker-Leben nicht auftreten, stimmt auch.
Das braucht man auch in der theoretischen Physik,
zum Beispiel, wenn man Kristallstrukturen betrachtet,
Das Problem dreidimensional analysiert, dann fragt man sich schon,
mit welchen Kristallstrukturen kann man einen kompletten Kristall aufbauen und den nun endlich weit.
Das liegt daran, weil manche Halbleiterträger sind für Quantenphänomene einfach,
so ein Chip halt unendlich groß.
Oder andere Sachen. Also in der theoretischen Physik,
in der modernen Physik spielt das eine große Rolle.
Und da gibt es dann auch Kachelungen,
die periodisch sind, nicht periodisch und so weiter.
Bisschen einfacher, hier ist das Bahnlitz im Problem.
Ihr habt ein quadratisches Badenzimmer und könnt ihr das nach
diesen ästhetischen Kriterium, also gleiche Farben,
wir sind benachbart,
Und ihr sollt antworten, ja oder nein, algorithmisch vorher.
Und wenn ich das mache, dann ist das in
der Allgemeinheit, also das Cachel-Problem aus A, unentscheidbar.
Das heißt, für gegebenen Kachel-Satz ist nicht entscheidbar,
ob ich damit die Ebene komplett vollpflastern kann.
Gut, schade. Für das endliche Endquadratfeld, das ist
natürlich entscheidbar. Das ist nur ein kombinatorisches Problem.
Das explodiert mir allerdings im Aufwand, wenn ich das naiv hinlege.
Einfach mal alles durchprobieren, mal wild drauf loskacheln und gucken,
ob es klappt. Der Punkt ist,
Dieses Problem wird sich als, das gucken wir nicht mehr,
aber es hat sich als NPV ständig erwiesen.
Das heißt, de facto weiß keiner einen schlaueren Weg,
als wild drauf los zu kacheln. Das heißt,
an dieser Stelle sehen wir da so einen netten Übergang zwischen unentscheidbar,
wenn ich da keine Grenzen mache.
Und algorithmisch eigentlich nicht mehr sinnvoll handhabbar. Es sei denn,
man sagt, alles ausprobieren ist algorithmisch ein schlauer Weg.
Das ist Komplexitätstheorie. So könnte man übrigens die 5x5
hübsch kacheln
Schön. Da hast du den Kacheln. Dann gibt es noch
ein Problem, das kommt sehr spröde daher. Ist aber,
sagen wir mal, auch eine Wunderwaffe der theoretischen Informatik.
Das sogenannte postische Korrespondenzproblem benannt nach E-Mail Post. Der Herr
ist auch schon so in der typischen Logik und Theorie der Informatikzeit aktiv gewesen,
also 30, 40, 50er, 60er.
Da waren die großen grundlegenden Sachen, die wir heute uns anschauen.
Und der hat ein ganz abstraktes, aber unheimlich universelles Problem.
Er hat sich gefragt, ich habe Eine endliche Anzahl von Paaren, U und V.
Und davon habe ich U1, V1, U2, V2 und so weiter.
Und jedes U und jedes V sind einfach Worte über einem Alphabetsigmann.
Also endlich viele solche Pärchen. Und jetzt habe ich gegeben,
eine solche Menge von Paaren, eine Frage,
kann ich mir da immer zwei rauspicken und die immer hintereinander legen,
also die erst irgendwie zwei, die zusammengehören,
nochmal zwei, nochmal zwei, das darf ich auch wiederholen,
sodass dann irgendwann gilt, dass erste Hälfte,
also nur die Us, die ich hintereinander gelegt habe und die Faust,
die ich hintereinander gelegt habe, dass da das gleiche Wort rausgekommen ist.
Ja, UNV sehen ja ungleich aus, haben ungleiche Länge.
Das heißt, ich habe angefangen, dann habe ich hier
so ein Stück und hier was ganz Kurzes.
Und da muss ich Tetris spielen und ich muss das immer aufeinander stapeln,
also die Worte so einmal der Länge nach.
Das ist ein Tetris, das halt nach rechts wächst.
Und die Zusatzbedingung hat, ich kann das Ganze nur abräumen,
wenn es die gleiche Höhe hat. Ja,
und das Ziel ist dann auch tatsächlich, ich gewinne nur,
wenn übereinander dann immer das Gleiche steht,
dann rattert das zurück und dann heißt es,
du hast gewonnen
Das ist so die Grundidee. Und die Frage ist,
wir sollen antworten, gibt es überhaupt eine Möglichkeit?
Das heißt, wenn euch präsentiert wird,
welche Bausteine sind da für unser Tetris?
Und das ganze Spiel legt los. Dann ist ja
interessant zu wissen, kann man das überhaupt gewinnen?
Ja oder nein? Und das ist genau die Frage.
Gibt es eine solche Index-Folge, dass es gleich wird?
Kann man das gewinnen, dieses Spiel? Und die Antwort ist,
kann man nicht, werden wir gleich sehen,
aber hier nochmal ein Beispiel.
Ich habe hier drei solche Pärchen,
also US1 ist A und V1
ist BA
U2 ist A und V2 ist A. Und dann haben wir hier
U3 AB und V3 A. Gibt es da eine Lösung?
Ich nehme Vorschläge an. Wenn es überhaupt
eine Lösung gibt, mit welchem Index muss ich anfangen
Musik Ja, zwei. Man kann mit der zwei anfangen.
Ich könnte, da habe ich schon mal eine Siegchance,
dann habe ich an der ersten Position A und A,
dann ist hier eine Lücke, die muss ich irgendwie füllen.
A, am besten. Warum kann ich erstens nicht nehmen?
Genau, wenn ich an der ersten Position schon A und
B habe, dann wird das nichts mehr.
Und wenn ich hier anfangen würde, dann habe ich A
und B stehen. Direkt an Position 2 habe ich,
also den Index,
wo es ungleich ist
Also muss ich mit drittens anfangen. Zweitens, gut,
wie muss ich dann weitermachen? Erstens wäre Blöde,
dann würde ich mich das B unter das freie A mogeln.
Dieses B ja da drunter legen. Ich schiebe dir ja
wie im Steckkasten aneinander. Und das wird also
auch schon nicht passen. Was ich machen könnte,
ich könnte auch zwei da drunter schieben, ja,
oder die drei, das wird auch passen,
weil das erste A schiebt sich dann hier und runter.
Und das zweite ist dann unter diesem
Nehmen wir mal Nummer 3, einfach mal aus Spaß.
Warum aus Spaß? Dann passt mich einzustöhnen.
Dann können wir das B unter jenes B schieben und haben
es dann zum Schluss nur noch A und A übrig.
Mit der Index-Folge 2, 3, 1 ergibt sich nämlich,
das passt. Da steht oben A, A,
B, A und unten genau das Gleiche auch.
Also für diese Index-Folge können wir das postische Korrespondenzproblem lösen.
Für dieses Problem haben es also geschafft,
die Antwort Ja zu geben. Für einen Instanz ist das
typischerweise auch nicht
so schwierig
Jetzt die spannende Frage, geht das im Allgemeinfall?
Nein, es geht nicht. Es gibt keinen Algorithmus,
der das kann. Es ist ein unentscheidbares Problem. Es
gibt da so Speziialfälle, die hat man sich angeguckt.
Also macht man immer. Wenn man das Problem in der Allgemeinheit nicht lösen kann,
guckt mal, welche trivialen Untergruppen kann ich lösen?
Oder wie einfach darf das Problem sein, dass es noch unentscheidbar bleibt?
Von unten approximiert, wenn das Alphabet nur ein Symbol hat,
dann ist das Ganze entscheidbar. Wenn ich nur zählen muss,
wie häufig etwas vorkommt, lässt sich dann auf Lösen linearer Gleichungssysteme reduzieren.
Das ist nicht so schwierig. Wer es gerne kompliziert mag,
kann sich sogar auf höchstens zwei Wortpaare einschränken.
Das kann man dann, wenn es höchstens zwei hat,
dann ist es entscheidbar. Und das Kleinste, PCP,
das wir reinstecken dürfen,
also wir dürfen es einschränken auf mindestens sieben Wortpaare,
wenn mindestens sieben da sind,
dann weiß man,
es ist unentscheidbar
Warum? Mit mindestens sieben kriegt man es hin,
eine Touring-Maschine letztendlich da reinzustopfen und deren Berechnung zu simulieren.
Und dann kommt raus,
dass das postische Korrespondenzproblem dieser Bauart genau dann eine Lösung hat,
wenn die Touring-Maschine, die ich damit kodiere, hält,
was unentscheidbar ist.
Also es geht irgendwie in den Beweis dieses Satzes ein,
dass das Halteproblem damit entschieden werden kann.
Also wieder die Reduktion angenommen, es gibt einen Algorithmus hierfür.
Wunderbar, dann nehme ich
meine Touring-Maschine
Und kodiert die Konfigurationsübergänge so rein,
dass es eine Lösung genau dann gibt, ja,
wenn ich eine Rechnung habe, die genauso funktioniert.
Also dass einander da liegen von Dingen, das wird dann eine Rechnung ergeben der Touring-Maschine.
Und da muss ich nur noch sagen, okay,
wenn es eine Indexfolge gibt, gibt es eine endliche Rechnung,
da muss ich nur noch gucken, dass sie akzeptieren ist,
das kann ich auch reinkodieren.
Also gibt es genau dann eine Lösung für das postische Korrespondenzproblem,
wenn ich das halte-Problem damit hinkriege
Oder was wir damit gezeigt haben, ist,
unter der Annahme, ich könnte das PCP lösen,
könnte ich damit auch das Halteproblem lösen.
Also weiß ich auch, PCP ist auch nicht entscheidend.
So. Typischerweise, so praktisch braucht man das nicht,
aber erstaunlicherweise lassen sich damit sehr viele praktische Probleme umkodieren.
Das ist gewissermaßen der Assembler unter allen Unentscheidbarkeitsproblemen.
Ein sehr mächtiges, aber frickeliges Werkzeug.
Das Nächste ist der Satz von Rise,
Bewiesen in der Doktorarbeit von Gordon Rice. Alles, was
ich gefunden habe, ist, dass er wohl noch lebt.
Also Todesdatum war nicht eruierbar. Und der hat folgenden
sehr weitreichenden Satz bewiesen. Er hat bewiesen,
dass jede nicht triviale Eigenschaft der aufzählbaren Sprachen unentscheidbar ist.
Sowas heißt nicht trivial und Eigenschaft. Nicht triviale Eigenschaften zeichnen
sich dadurch aus. Es gibt ein paar, die haben
diese Eigenschaft und ein paar, die haben es nicht.
Oder weniger Lachs formuliert, nicht alle haben diese Eigenschaft
Das wäre langweilig, wenn alle Sprachen die Eigenschaft hätten,
da hätte ich ja nur die aufzählbaren Sprachen wieder selbst.
Das ist langweilig. Ja, und wenn keine Sprache diese
Eigenschaft hätte, das ist vielleicht auch keine sehr spannende Eigenschaft.
Deswegen die spannenden Eigenschaften, die wir nicht trivial nennen,
das sind die, dass es Paar gibt,
die haben es, aber Paar haben auch die Eigenschaft nicht.
Das wird also irgendwo in der Mitte, in der echten Mitte,
mit die aufziehbare Menge zerlegt und zwei Teile.
Und jetzt frage ich mich, eine aufziehbare Sprache, hier ist sie,
kodiert als Turing-Maschine, Bist du in der Menge derjenigen,
die die Eigenschaft haben oder in derjenigen Menge,
die die Eigenschaft nicht haben?
Jede Touring-Maschine kodiert eine Sprache und die Sprache hat die Eigenschaft oder hat sie nicht?
Gehört also in diesen oder in jeden Topf?
Und der Punkt ist, das ist nicht entscheidbar.
Diese Fragestellung, welches Töpflein hätten Sie denn gern?
Das ist nicht mehr machbar. Dabei ist wichtig,
es handelt sich um Eigenschaften der Sprachen.
Das handelt sie nicht um Eigenschaften der Touring-Maschinen
Über Touring-Maschinen kann ich sehr einfache Fragen stellen. Die sind
sehr wohl entscheidbar. Zum Beispiel hat diese Tour Ringmaschine,
die als Eingabe kommt, mehr als fünf Endzustände.
Eins, zwei, drei, vier, fünf,
sechs, ja. Das ist nicht wirklich algorithmisch schwierig,
sondern der Punkt ist, es muss eine Fragestellung sein,
die sich auf die Sprachen beziehen, auf aufzählbare Sprachen.
Und der Punkt ist, wenn ich das einem Algorithmus geben soll,
eine Sprache, dann kann ich das ja nicht direkt machen.
Sie ist unendlich groß, also gebe ich eine endliche Beschreibung einer Aufziehbahnsprache.
Die naheliegstendste Beschreibung ist sie als Touring-Maschine oder eine Kodierung der Touring-Maschine,
dem Algorithmus zu geben und dann zu fragen,
hat die durch diese Turing-Maschine beschriebene Sprache, die Eigenschaft, ja oder nein?
So, mit diesem Satz folgen eigentlich unheimlich viele Resultate, die unentscheidbar sind.
Unter anderem auch die Eigenschaft, dass ich mich fragen kann,
ist auch wieder eine sehr einfache Frage, kommt harmlos herher.
Ich habe eine Menge M und das sei,
und MT sei die Menge aller Kodierungen von Turing-Maschinen. So,
und jetzt frage ich mich, Die Touring-Maschine, das weiß ich,
kodiert eine totale Funktion von Sigma Stern nach 0-1.
Und jetzt war es schon mal einfach,
ich gebe eine Touring-Maschine als Eingabe vor und weiß,
das muss schon vorher klar sein, wie auch immer,
sie hält immer.
Also es liegt daran, ich weiß,
es wird eine Funktion berechnet, sie ist total.
Wenn eine Funktion berechnet wird und sie ist immer definiert,
dann kommt ja immer 0-0 oder 1 raus.
In dem Sinne muss auch die Tugendmaschine
immer halten
So, diese Touri-Maschine M, die die Funktion FM kodiert, die ist die Eingabe.
Und da werden jetzt nur Nullen und Einzelnen als Ausgaben kommen.
Und die einfache Frage, die wir jetzt haben, ist,
dass die sehr langweilige Funktion, die da rauskommt, ja oder nein?
Und die langweilige Funktion ist die, die immer Null ausgibt.
Ich frage mich nur, ist, dass diese ständig Null antwortende Funktion?
Oder gibt es wenigstens eine Stelle, wo sie mal eins sagt?
Und das Erstaunliche ist, man kann nicht herausfinden,
ob eine Funktion kodiert als Touring-Maschine, obwohl ich schon weiß,
sie wird immer halten, also das kann nicht das Problem sein.
Ich kann nicht entscheiden, ob es nicht ein Argument gibt,
für das eins ausgegeben wird. Dieses Problem, das herauszufinden,
ob es die langweilige Nullfunktion ist oder eine andere,
das Problem, das zu entscheiden, ist unentscheidbar.
Also hier nochmal formuliert, es gibt keinen Algorithmus,
der für eine beliebige solche Funktionen entscheidet,
ob für mindestens eine Eingabe die eins rauskommt.
Und das ist sehr interessant, weil diese Funktion F und
M Die gibt ja immer null oder eins raus.
Solche Funktionen hatten wir schon mal kennengelernt, die charakteristische Funktion war eine Seuche.
Eine charakteristische Funktion gibt für jede Eingabe weh, null raus,
wenn das W nicht zur Menge gehört und eins,
wenn es zur Menge gehört.
Das heißt, wenn ich entscheiden könnte,
ob wenigstens einmal eine Eins bei einer charakteristischen Funktion ausgegeben wird,
dann habe ich ja wenigstens ein Element,
das zu dieser Menge gehört
Eine Eins, eine Zugehörigkeit. So da ich aber das
nicht entscheiden kann, ob da jemals eine Eins rauskommt oder ob
immer null gesagt wird, habe ich hier dieses Korolar.
Es ist unentscheidbar, ob eine Beliebige durch eine Touring-Maschine definierte Menge,
von der ich schon weiß, dass sie entscheidbar ist,
ob diese Menge leer ist.
Wenn ich das entscheiden könnte, dann könnte ich auch das damit lösen.
So, woran liegt das? Wir reduzieren das Problem jetzt
auf das Halteproblem. Also ich nehme die Menge P und
das soll es die Menge aller Touring-Maschinen
M sein
Die die Eigenschaft haben, es gibt mindestens ein Argument weh,
sodass da als Funktionswerten eins rauskommt. Also all diejenigen,
die für mindestens eine Eingabe mal die eins produzieren,
ausgeschlossen werden, also diejenigen Turing-Maschinen, die stets null ausgeben,
also die langweiligen. So, wenn das entscheidbar wäre,
diese Menge P, dann gäbe es doch,
müsste es eine Turing-Maschine geben, nennen wir sie AP,
die die charakteristische Funktion,
hier von
Ausrechnen kann. Ja, die charakteristische Funktion,
nochmal zur Erinnerung, gibt eins aus,
wenn die Thoring-Maschinen in der Menge P ist und null sonst.
Die Maschinen sind ja jetzt die Eingabe für diese Fragestellung.
Und jetzt machen wir Folgendes. Wir bauen uns
eine neue Thoring-Maschine, M, Index B und W.
Und die hat Folgendes, sie simuliert bei der Eingabe N,
genau Endschritte von B auf der Eingabe W.
Und wenn B dann nach Endschritten hält,
dann gibt sie eine Eins aus, sonst eine Null.
Was kann man nicht machen,
mit einer Simulation
Eine Schritte zu simulieren, da haben wir schon komplizierteres gemacht bislang.
Was gilt jetzt? Jetzt geht folgende Argumentationskette.
Wenn die charakteristische Funktion für MBW 1 ist,
dann ist das ja genau der Fall.
Das ist die charakteristische Funktion von P mit dieser Definition.
Heißt das nichts weiter als MBW, ist in dieser Menge P enthalten?
Wenn es in der Menge P enthalten ist,
ist es nach der Definition von P eine Touring-Maschine,
die mindestens bei einer Eingabe eine 1
auf ihr Ausgabeband schreibt,
Wenn es aber irgend so ein N gibt,
das eine Eins geschrieben wird, dann hält die ja auch an.
Das heißt, B, das haben wir links ja so definiert,
sie schreibt die Eins, wenn sie nach Endschritten hält.
Also B hält auf B nach Endschritten an.
Ein solches N gibt es, mindestens ein N. Und das
heißt nichts weiter als das W von B akzeptiert wird,
also in der Sprache. So was haben wir also gemacht
? Wir haben mit AP implizit auch das Halteproblem entschieden,
denn die Frage, ob hier eine Eins rauskommt,
ist identisch mit der Frage,
ist das in der Sprache enthalten
Ja oder nein? Das Halteproblem zu entscheiden,
das ist so eine Sache. Also die Frage,
ob es die ganz einfache Funktion ist oder nicht,
nur die Nullfunktion oder gibt es auch mal eine Eins,
ist nicht entscheidbar.
Und wenn man den Satz von Rice von Rice noch weiter treibt,
dann kann man damit jede Menge Sachen als unentscheidbar erkennen.
Zum Beispiel, wenn das Problem ist, ich soll wissen,
ob eine aufzählbare Sprache L, da soll ich gucken,
es ist eine endliche Menge.
Kann mich ja interessieren,
weil dann irgendwelche netten anderen Algorithmen greifen würden
Kann ich leider keinen Algorithmus für angeben. Das ist ein
nicht- triviales Problem, denn es gibt ein paar endliche Mengen.
Ja, ich kenne welche. Und ich kenne ein paar
auch nicht endliche Mengen. Genauso, ob Ellen eine
leere Menge ist, ist nicht trivial.
Es gibt ein paar leere Mengen auf eine, nämlich.
Und es gibt eine ganze Menge, nicht leere Mengen.
Okay. Unendlich auch, regulär. Es gibt eine ganze Menge
aufzählbare Sprachen, die sind regulär, nämlich alle regulären.
Und alle nicht regulären, da bleiben noch genügend übrig.
Die sind halt nicht.
Genauso kontextfrei entscheidbar
Mengen, die genau ein Element haben. Gibt es
auch eine Menge von, um eine Menge davon,
die die Eigenschaft nicht haben. All diese Probleme,
ja, wenn ich da als Eingabe von für Allen
eine Touring-Maschine mache und das irgendwie im Algorithmus vorgebe,
werde ich feststellen, klappt nicht.
Das ist keine algorithmisch entscheidbare Frage. Das sind also alles Probleme,
auf die der Satz von Rise zutrifft und damit sind sie sofort unentscheidbar.
Und die Liste lässt sich beliebig fortsetzen,
sobald ihr eine Frage stelle, die sich auf ein aufzählbares
Problem bezieht.
Also Eingabe ist immer
eine aufzählbare Menge
Und die Frage, diese aufzählbare Menge, hast du eine Eigenschaft XY?
Ja, wenn es welche gibt, die es haben,
XY, welche, die es nicht haben,
dann wird man das nicht entscheiden können.
Was hat das mit der Praxis zu tun? Ja,
kann man sich fragen, das ist die falsche Frage für
eine Theorieveranstaltung, aber ich stelle sie trotzdem mal.
Also Unentscheidbarkeit in der Praxis, da spielt das keine Rolle.
Warum? In der Praxis sind alle relevanten Fragen,
die man so begegnen kann, entscheidbar.
Woran liegt das
Das ist gut. Häufig ist es gut. Nee,
also das Problem muss er irgendwie auf deinen Festplattenpark
drauf und in den Hauptspeicherreihen und durch die CPU durch.
Probleme, die das nicht erfüllen, also Daten,
die nicht in meinen Festplattenschrank reinpassen, solche Datenmengen zu analysieren,
dieses Problem stellt sich dem Praktiker nicht.
Also nur das, was sie auf den Festplattenplatz,
den ich schon habe, speichern lässt,
das kann ich vielleicht
analysieren wollen
Wenn das mehr Platz brauchen würde, egal. Also liegt das daran,
ich habe das ja irgendwo physikalisch rumliegen und will damit rechnen.
Und das ist immer endlich. Einen unendlichen Speicher hat
noch keiner erfunden. Wird auch so schnell nicht passieren.
So, deswegen ist das eigentlich nur ein kombinatorisches Problem.
Ja gut, kann man sagen. Zwei hoch,
was weiß ich, vier Terabyte ist zwar eine endliche Zahl,
aber eine sehr große Zahl
Wenn ich da irgendwie meine Datenbank-Obbit-Ebene durchflöhen würde, ja,
das ist vielleicht schon nur die Frage, wie lange dauert das? Wie,
wenn ich da eine große Datenbank habe und mir vorstelle,
naja, ich fange mal naiv an,
jeden mit jedem mal zu vergleichen,
vor allem mir das gerade so in den Sinn kommt,
ich also quadratisch lange darauf rumrödeln will, das ist vielleicht nicht so schlau.
Es gibt aber jetzt die praktische Einschränkung,
und ich nenne das, ja,
sie sind im Prinzip entscheidbar
Was das in der Praxis bedeutet, im Prinzip,
das ist relativ einfach, wenn wir, sagen wir mal so,
zum Beispiel 10 und 42 Tage auf eine Antwort warten müssten.
Das ist ja okay, da kommt nach endlicher Zeit
die Antwort. Das ist nur die Frage,
sind wir da wirklich gewillt, so lange zu warten?
Manche Probleme, die man nicht bis zur Mittagspause gelöst kriegt,
sind vielleicht völlig außerhalb der Reichweite dessen, was man trachten möchte.
Kennt ihr auch. Alles, was ihr nicht bis zur
nächsten Woche gelöst habt, ist außerhalb der Reichweite,
euer Rechenkapazität, zum Beispiel in Hausaufgaben, diese Veranstaltung.
So, also es gibt so etwas,
das kann man mal salopp praktisch unentscheidbar nennen,
nämlich dann, wenn es außerhalb des Bereiches liegt,
was wir zu ertragen, gewillt sind.
Ja, und 10 noch 42 Tage ist definitiv außerhalb
des Bereiches, auf das man ein Ergebnis warten möchte.
Also entscheidend ist eher die Komplexität eines Problems.
Wir haben zwar alles endlich, aber trotzdem kann dabei rauskommen,
es dauert endlich lange, aber viel zu lange.
So, und deswegen Komplexitätstheorie ist das Spannende und Komplexität ist gewissermaßen
die Unentscheidbarkeit oder Entscheidbarkeit des Praktikers. Wir werden feststellen,
alles das, was es bei Komplexität gibt,
das sind so gewisse Ideen, die wiederholen sich jetzt,
die wir auch schon bei Unentscheidbarkeit hatten,
nur sagen wir mal, auf dem Level von,
ist zwar entscheidbar, aber und jetzt gucken wir mal,
jetzt ist unsere Frage nicht mehr.
Kann ich es machen, also entscheiden, ja oder nein,
gibt es einen Algorithmus, sondern die Frage ist,
kann ich es effizient machen, ja oder nein?
Und, Klammer auf, was heißt eigentlich effizient machbar?
So, ich überspringe jetzt ein Kapitel im Skript,
Berechenbarkeitsdefinition, alles, was damit zu tun hat,
schiebe ich an das Ende der Vorlesung und jetzt
hüpfen wir mal direkt
Zum Kapitel Komplexität. Was ist Komplexität? Naja,
dass so ganz grob die Frage, welche Rechenzeit und Speicherplatz
brauche ich, um ein Problem zu lösen?
Wenn ich weiß, da gibt es ein Minimum an Ressourcen
, dann habe ich eine untere Schranke.
Typischerweise ist aber der Nachweis von unteren Schranken
schon sehr schwierig
Zum Beispiel für Sortieren gibt es untere Schranken.
Da weiß man, wenn ich sortieren,
durch Vergleichen realisieren muss, dann ist N-Log-Ende untere Schranke.
Aber für manche Probleme kennt man gar keine untere Schranke.
Und deswegen betrachten wir anstatt direkter Komplexitäten relative Komplexitäten.
Also wir vergleichen Probleme, anstatt zu sagen,
du brauchst so und so lang und du so und so lange,
sortieren wir die Probleme lieber mal nach ihrer Güte.
Obere Schranken sind auch immer gut zu wissen,
die kriegen wir durch konkrete Algorithmen typischerweise
Was wir uns angucken ist, die strukturelle Komplexitätstheorie,
wir gucken uns also salopp an. Was ist in der
Struktur der Dinge, dass das Problem so kompliziert macht?
Wir befassen uns weniger mit konkreten Komplexitäten, von konkreten Algorithmen.
Und Algorithmik, die dann das vielleicht noch in Bezug auf Software-Libraries
und konkrete Hardware betrachtet, das machen wir auch nicht.
Den Punkt zwei, den überlassen wir der Veranstaltung,
Algorithmen und Datenstruktur.
Im Winter
Also die verschiedenen Zweige haben wir. Komplexitätstheorie, wir wollen hier
in der Mitte durch, strukturelle Probleme in Komplexitätsklassen gießen.
Und da interessiert uns, werden wir sehen,
Zeit und Platz, also Time and Space.
Konkrete Algorithmen verschieben wir auf nächstes Semester zu ARD.
Und ganz schicke andere Sachen, deskriptionale Beschreibungskomplexität oder Conmoggo auf Komplexität.
Das verschieben wir in Masterstudiengang. So nochmal zur Wiederholung.
Wir haben, hatten ja verschiedene Sprachklassen, Typ Null,
die Aufzählbahn. Da kannten wir auch unsere Typ Null-Grammatiken
Typ 1, Kontextsensitive Grammatiken. Und da wissen wir schon, dass es entscheidbar ist.
Aber um welchen Preis? Dafür gab es auch den LBA,
kontextfreie Sprachen mit den Kellerautomaten und reguläre mit den endlichen Automaten.
Und bei Turing-Maschinen, von denen wollen wir jetzt in Folge immer ausgehen,
da hatten wir ja, das nochmal zur Wiederholung, Konfigurationsrechnungen eingeführt.
Also wir kamen über eine Menge von Zwischenkonfigurationen zu einer Erfolgskonfigurationen,
die sich dadurch auszeichnete, dass wir einen Endzustand hatten im letzten,
in der letzten Konfiguration.
Da könnte ich noch weitermachen, ich könnte noch weiterrechnen,
muss es aber nicht. Ja, und die Sprache war,
die Menge aller Worte, die mich irgendwie in einen Endzustand führten,
wenn ich am Anfang das Wort W hatte und im Staatszustand Kunolva.
Und wir hatten auch schon angedeutet oder auch schon definiert,
was Platz ist. Wir hatten nämlich ein LBA definiert und gesagt,
seine Bandzellen sind Platz. Jetzt wollen wir aber für ein
konkretes Problem allgemein Zeit und Platz bedarf festlegen.
Erstmal Zeit, Zeit messen wir in Anzahl der Schritten,
die eine Touring-Maschine macht. Und wir nehmen jetzt zum Folgenden an,
was nicht notwendig ist, aber wir beschränken uns darauf,
dass die Touring-Maschine ihre Eingabe vollständig liest.
Und dann noch ein Feld weiter rückt, um festzustellen,
dass es auch tatsächlich alles gelesen hat.
Dann kommt sie mich auf das Blank und weiß,
alles ist gelesen worden
Und wir sagen jetzt, die Thuring-Maschine arbeitet mit der Zeitbeschränkung TN.
N ist eine Länge, eine natürliche Zahl, wenn das die kleinste Zahl,
der in einer wirakzeptierenden Rechnung benutzt, ein Konfirmationswechsel ist.
Das heißt, wenn ich ein Wort vorgebe,
dessen Länge betrachte, dann Tee von der Wortlänge ausrechne,
dann wird das Wort mit dieser Schrittzahl
beschränkt akzeptiert werden
Also Eingabe wie Teebetrag von W ist dann die Schrittzahl,
die eine Oberschranke für die Rechnung darstellt bis zum Akzeptieren.
Da wir angenommen haben, dass wir immer die Eingabe lesen,
nehmen wir dann das Maximum vom Endplus 1 und dieser TN-Funktion und sagen,
das ist jetzt das Maximum, was da rauskommt.
Und das ist unsere Zeitbeschränkung. So, diese Definition sagt,
ich nehme die kleinste Zahl für eine akzeptierende Rechnung.
Man könnte auch, ohne dass das große Auswirkungen hat,
wenn man ein bisschen Aufwand treibt, Da sagen alle Rechnungen,
haben die Zeitbeschränkung T von N. Nicht nur die Akzeptierenden,
sondern auch die, die nicht an einen Endzustand führen.
Das kann man im Wesentlichen dadurch machen, dass man
die Anzahl der Rechenschritte mitzählt. Und diesen Zähler überprüft,
ich lasse ihn bei TN starten, zähle ihn auf null runter.
Das ist ja eine Oberschranke dann. Wenn ich bei null angekommen bin
, würde ich aufhören. Das wäre also eine Simulationsmöglichkeit.
Es spielt also keine große Rolle, ob ich sage,
dass es die Schranke für die akzeptierten Worte,
oder ist es die Zeitschranke für alle Worte
Und analog mache ich das Ganze für Platz, platzmäßig in Bannfeldern.
Und ich gehe davon aus, dass ich mindestens
ein Band feld brauche. Eigentlich sollte man davon ausgehen,
dass ich mindestens das brauche, was am Anfang draufsteht.
Aber wenn man eine K-Band-Maschine mit Eingaben und Ausgabe hat,
damit davon ausgegangen, dass die Eingabe, das Eingabeband nicht mitzählt.
Das heißt, rein theoretisch könnte rauskommen,
dass Touring-Maschinen gar keinen Platz brauchen,
weil sie auf den Arbeitsbändern
nie was schreiben
So, wir gehen jetzt davon aus, damit da nicht
irgendwelche Nullen mal im Nenner stehen, in irgendwelchen Rechnungen.
Wird davon ausgegangen, dass sie mindestens ein Plätzchen auf dem Band gebraucht wird.
Also, er ist von N ist mindestens eins. Ja,
ein Feld auf jedem Arbeitsband hat sie, auf dem sie arbeitet.
So, und jetzt ist sinngemäß die gleiche Definition wie eben da.
Wir sagen, eine Touringmaschine arbeitet mit einer Platzbeschränkung,
er ist von N. Wenn die kleinste Zahl der besuchten Bandfällen,
es von Betrag von W ist, in einer Rechnung,
die W akzeptiert. Ja, das heißt,
ich betrachte ein Eingabewort, rechne es von Betrag von W
aus und bis zum Akzeptieren werden höchstens Essbetrag von W-Bandzellen besucht.
Also besucht heißt der Schreib Lesekopf war da. Ja,
und dann nenne ich das ganze Maximum von 1 und er ist von N. Platz beschränkt.
Und auch hier ist es nicht so wichtig,
ob ich fordere, dass es die akzeptierten Worte sind,
Oder alle Worte, ich kann auch sagen,
alle Rechnungen kommen mit diesem Platz aus.
Denn, was könnte ich machen? Ich könnte im Prinzip
Folgendes machen. Ich könnte sagen, wenn du mehr,
ich rechne am Anfang den Platz aus, den die Maschine haben dürfte.
Also rechne ich es vom Betrag von W aus,
bei der Eingabe W. Wenn ich das machen kann,
dann markiere ich den Platz und mache dann Endmarker.
Und wenn das Wort akzeptiert wird, dann reicht dieser Platz.
Sollte die Touringmaschine versuchen, außerhalb auszubrechen,
dann weiß ich genau,
die wird nicht akzeptieren
Wenn sie akzeptiert, dann auf jeden Fall in diesen Platz.
Alternativ könnte ich auch wieder Rechnungsschritte mitzählen. Denn wenn ich weiß,
wie viel Platz maximal da ist, kann ich
auch eine Oberschranke angeben, wie lange sie rechnen darf.
Das gucken wir uns aber noch an. Also wir haben
auf jeden Fall definiert Zeit und Platzschranken gibt es für Rechnungen.
Und es ist nicht so wichtig,
ob wir definieren für alle oder nur für die akzeptierten Rechnungen.
Ja, in kleingedruckten, da gibt es schon feine Unterschiede,
nur für das, was wir uns jetzt in Zukunft angucken werden,
an Zeit und Platzschranken.
Das werden immer die typischen handelsüblichen Funktionen sein.
Logarithmus, Polynome, Exponentialfunktionen
Und sowas. Diese Funktionen sind sehr gutmütig. Die sind mich,
das wird später Platz oder Zeit, konntest du ihr aber heißen.
Und für diese Funktionen spielt es keinen Unterschied.
Im Rahmen dieser Vorlesung ist es kein, wirklich kein Unterschied,
ob ich alle sage oder die akzeptieren.
So, wie definieren wir jetzt Komplexitätsklassen?
Wir wollen jetzt nicht nur eine Turing-Maschine charakterisieren und sagen,
du hast diese Zeitkomplexität oder diese Platzkomplexität S, sondern umgekehrt ist interessant.
Und wir interessieren uns für die Frage, ich sage,
du hast quadratisch viel Platz.
Was könntest du damit machen
Also die umgekehrte Frage, ich gebe also eine Zeitschranke vor
und betrachte jetzt die Touring-Maschinen, die dazu passen. So,
und jetzt nenne ich, wenn ich hier Funktionen habe,
meinetwegen von R nach R, für Space und Time,
dann sage ich, einen nicht-determistischen Touring-Maschinen ist zeitbeschränkt,
T-Zeit beschränkt,
wenn sie für jede akzeptierte Eingabe der Länge N mit dieser Zeitbeschränkung T von N arbeitet.
Und genauso S-Platz beschränkt, wenn sie für jedes
akzeptierte Wort mit dieser Platzbeschränkung arbeitet
Und solche Kategorisierungen interessieren uns also von der Beschränkung her gedachte Touring-Maschinen. Erstmal gilt da etwas,
das haben wir schon mal kennengelernt, wir können ja,
das steht hier, man erinnere sich,
beim LBA hatten wir gesagt, es ist egal,
ob ich konstante mal Wortlänge des Eingabewortes betrachte oder eins mal Wortlänge,
das konnte ich dadurch erreichen, dass ich immer Eingabefelder zu blöcken zusammenfasse,
dann habe ich neuere größere Symbole, Aber der Platz,
den ich dafür brauche,
den kann ich beliebig um einen konstanten Faktor schrumpfen lassen.
Und das, was wir da gemacht haben,
das können wir jetzt gewissermaßen hier nochmal neu umformulieren.
Der Beweis ist genau der gleiche. Wir können für jede
Touring-Maschine die S-Platz beschränkt ist und viele reelle Zahl C,
eine Touring-Maschine konstruieren die C, mal S-Platz beschränkt ist.
RBNC größer als eins ist, ist das klar.
Wenn die alte Maschine mit dem Platz S auskommt,
dann kommt die Maschine erst recht mit dem Platz zweimal oder dreimal S von N aus.
Herr Spannende ist also, wenn ich sage,
ich komme mit S von innen aus,
dann komme ich auch mit der Hälfte des Platzes aus.
Oder im Drittel. Das ist natürlich schon ganz interessant.
Warum ist das interessant? Das heißt, dass für unsere Touring-Maschinen die Aussagen,
die für einen konkreten Algorithmiker interessant sind, nicht so spannend sind.
Denn für einen konkreten Algorithmus zu sagen, ich schaffe das
Ganze im halben Plattenplatz. Das ist eine schöne Sache.
Wenn ich plötzlich doppelt so viele Daten auf meine Festplatte kriege,
Dieser Kompressionssatz sagt, ja, das kriegst du immer.
Du kriegst auch ein Viertel und so weiter und so fort.
Das heißt, unsere bisherigen Definitionen, die finden das gar nicht sehr toll.
Oder andersrum formuliert, wenn wir hier auf dem Band etwas komprimieren,
dann vergrößern wir an anderer Stelle, nämlich die Thuring-Tafel,
aber die wird hier nicht mitgezählt.
Die Thuring-Tafel spät bei denen Komplexitätsbetrachtung keine Rolle.
Wie groß das Programm ist, interessiert überhaupt nicht. So,
das vergrößert sich beim Komprimieren des Platzes auf dem Band natürlich ungemein.
Die Eingabe Größen, die Turing-Tafel, all das wird größer.
So, das heißt, weniger Platz zu brauchen,
wenn es nur konstant als Faktor hier vorne weniger ist,
die Hälfte ein Drittel.
Das ist Algorithmus schon mal völlig irrelevant. Also solche Optimierung
verschwinden völlig in der Betrachtung, wenn ich Turing-Maschinen als Modell habe.
Und genauso läuft das im Prinzip auch für zeitbeschränkte Turing-Maschinen.
Und da der Voraussetzung, dass T von N schneller wächst als linear. Ja,
also wenn die Laufzeit größer ist als linear,
dann ist das Infimum, also die kleinste,
Untere Schranke von Tee von N durch N. Unendlich,
also T von N. ist eigentlich immer größer als N,
wächst schneller als linear,
dann kann ich aus jeder Touring-Maschine die Teeschranke hat,
auch eine Zehmal-Tee von N zeitbeschränkte Touring-Maschine machen.
Das heißt, eine Beschleunigung im konstanten Faktor ist auch immer möglich.
Ja, was vorher in der Zeit Tee von N ging,
geht jetzt auch in der Zeit ein Vierteltee von N.
Wieder keine große Sache. In der Praxis, wenn ich die Sachen,
wenn der doppelten Geschwindigkeit berechnen kann, super, ja,
bei der Touring-Maschine in unseren Komplexitätsmaß ist das nichts,
was honoriert wird
Also die konstanten Faktoren bringen uns schon mal nichts.
Und was wir jetzt betrachten wollen, ist, sogar sehr grobe Betrachtung,
wir betrachten die Klasse P als die Klasse von Sprachen,
die die Eigenschaft haben, ich kann sie in Polynomzeit lösen.
Ja, das ist ja eine sehr grobe Betrachtung, also N,
N, Quadrat, N, noch 3, N,
noch 5. Oder meinetwegen auch N, noch 5 plus 3,
N, noch 4 plus 20 N hoch 2 plus 1 und solche Sachen.
Also alle Polynome, die ich als Zeitschranken vorgeben kann,
Und alle Probleme, die ich mit irgendeinem Polynom,
auch N hoch, einem Milliarde.
Alles, was ich damit lösen kann,
das packe ich in die Klasse P. Und im Peace-Space,
das Gleiche, nur dass ich pulmiell viel Platz vorgebe.
Das sind zwei riesige Klassen. Also man kann sich als praktischer veranlagter Programmierer vorstellen,
dass ich in N hoch eine Milliarde als Zeitschranke relativ viel programmieren kann.
Ja, das ist nicht wirklich eine Herausforderung. Aber ich
gucke mir auch nur ran, welche Probleme kann ich da reinstopfen.
Und stellt sich die Frage, warum betrachtet man eine so aberwitzig große Klasse?
Das Problem ist, Viel kleiner macht nicht Sinn.
Warum macht es keinen Sinn? Naja,
das klingt jetzt erstmal nicht sehr überzeugend,
denn wir sind es ja gewöhnt, zu sagen,
auf unserer Kiste wird uns ja eingebläut, naja,
quadratisch ist schon nicht besonders clever.
Also wenn etwas quadratische Laufzeit hat, ist nicht schön.
Kubisch ist rechtlich. Das Problem an dieser Betrachtungsweise ist,
wir sind zu sehr an unseren Hardware gewöhnt.
Ja, eine normale PC-Kiste, für die bedeutet Quadratzeit oder
kubische Zeit etwas. Für eine Tugendmaschine bedeutet das aber vielleicht
was ganz anderes
Ja, was bei Naturgenmaschine vielleicht quadratisch lange geht,
dauert auf dem PC vielleicht liegen jahrelange.
Oder es gibt vielleicht eine dritte Hardware, da ist das,
was auf dem PC quadratisch lange dauert, plötzlich nie ja geworden.
Und so weiter. Die Theoretiker waren ganz fleißig, sich
physikalisch inspirierte Rechenmodelle auszudenken. Von mehr oder weniger sequenziell arbeitenden
Maschinen. Und sie stellten fest, man kann gar nicht
so genau sagen, was jetzt eigentlich eine Laufzeit ist.
Wenn man Algorithmik macht, dann stellt man sich immer eine
von Neumann-Maschine vor, wenn wir mal einen Pascal-artigen Programmiersatz.
Wenn man das so fixiert, dann sind auch die Komplexitätsaussagen
halbwegs festgezirrt. Wenn ich aber sage,
mich interessiert nicht die Komplexität auf so einer Maschine,
sondern mich interessiert eigentlich nur die Komplexität des Problems.
Ich möchte überhaupt nicht über Maschinen reden. Hört man die Herausforderung zu sagen,
alle Hardware, die ich mir so vorstellen kann.
Oder strengen wir es mal ein. Alle sequenziell arbeitende Hardware,
die ich mir so vorstellen kann. Da hat man sich dann eine Maschinenklasse,
die heißt erste Maschinenklasse, das nur am Rande aus,
angesehen und da stecken die ganz große Menge von Maschinen drin
Die arbeiten alle unterschiedlich schnell. Und was auf dem einen
schnell geht, kann auf dem anderen auch simuliert werden,
ist entweder schneller oder langsamer und so weiter und so fort.
Und weil das so ist, ja,
es hängt ganz vorm Befehlssatz, ob ich eine Registermaschine,
eine Touring-Maschinen von Neumann-Rechner, eine RAM und solche Programmmodelle nehme.
All das hat Auswirkungen auf die konkrete Wahl des Polynoms.
Aber man hat, sagen wir mal, empirisch festgestellt,
dass alle Modelle, die man sich da so ausgedacht hatte,
die Eigenschaft haben,
dass sie
einen anderen Polynomzeit simulieren können
Und im Wesentlichen, bis auf eine Konstante den gleichen Platz brauchen.
Wenn die sich aber ein Polynom-Zeit simulieren können,
heißt das für uns, wenn es da immer ein Polynom gibt,
das sie gegenseitig simuliert, dann muss ich eine Klasse betrachten,
bei dem um ein Polynom vergrößern,
immer noch in der Klasse bleiben muss.
Und die einzige Klasse, die das erfüllt, ist die
Klasse aller Polynome. Wenn ich mich ein Problem habe,
ich kann es in Polynom-Zeit lösen, simuliere es,
habe ich Polynom von Polynom, ist wieder Polynom.
Also ist P als Klasse aller Sprachen, die ich deterministischen Polynom-Zeit lösen kann,
Für ein beliebiges Polynom, sehr clever gewählt.
Denn es macht mich unabhängig von dem Maschinenmodell, das ich betrachte.
Und wenn es mir nur um die Frage geht,
wie komplex ist ein Problem.
Ich will aber noch nicht an die Hardware denken.
Dann ist das die kleinste Klasse für Zeit und Determinismus.
Und ganz analog, guckt man sich aus ähnlichen Argumenten in diese Klasse an,
von Sprachen, die mit Polymiel 4 Platz auskommen.
Einfach nur, um unabhängig zu sein von der
konkreten Realisierung,
Und jetzt fangen wir schon mal an. Wir fassen das,
was ich eben gesagt hatte, jetzt zu Klassen zusammen.
Wir betrachten also die Time, also deterministisch Zeit mit
dem Index K. K steht für die Anzahl der Bänder,
die ich zur Verfügung habe.
Also ich betrachte eine K-Band-DTM. Deterministisch ist wichtig.
Das bezieht sich auf die deterministische Turing-Maschine.
Und was habe ich noch? Sie soll auf allen Eingaben
der Länge N halten
Und natürlich maximal diese Zeitschranke T von N und dann Maximum N plus 1,
das hatten wir als Konvention, Rechenschritte brauchen.
Und was ich deterministisch kann, kann ich auch nicht deterministisch formulieren.
Da kommt vielleicht noch ein bisschen was hinzu. Nicht deterministisch
kann ich jetzt vielleicht ein bisschen mehr. Also sage ich,
alles, was ich nicht deterministisch akzeptieren kann, mit der Zeitschranke Tee,
sodass ich auf allen Eingaben der Länge N höchstens T von N Schritte brauche.
Das packe ich jetzt in die Klasse
Endtime Tee
Und genauso gut kann ich das für deterministischen Platz machen,
sage ich eine Deterministrituring-Maschine, braucht für alle Eingaben der Länge N,
höchstens S von N, viele Arbeitsfelder.
Und nicht mehr aufgeführt, aber ihr könnt es euch denken,
Endspace gibt es auch. Das ist dann die Klasse,
da braucht eine NTM, höchstens so viel Platz.
Das ist jetzt im unteren Teil ausgeblendet. Damit weiß ich das
schon mal für K-Bänder. Und jetzt vereinige ich das,
weil mich interessiert gar nicht diese Touring-Maschinen,
ob die nun fünf Bänder oder sieben Bänder oder neun Bänder hat.
Da gibt es dann auch wieder schöne Sätze, die sagen nämlich,
Eine Sohn-So-Bandmaschine kann von einer Einbandmaschine mit solchen polemiellen Simulationsaufwand wieder betrachtet werden.
Und da wir ja auch polemiellen Aufwand eh hinaus wollen,
sagen wir, ach, was soll's,
wir betrachten jetzt die Klasse, die sich ergibt,
wenn wir über alle möglichen Casts vereinigen.
Also wir schmeißen alle möglichen Turing-Maschinen,
egal wie viele Bänder sie haben, auf einen Haufen und sagen,
was irgendeine Turing-Maschine mit der Zeitschranke Tee kann.
Und zwar eine deterministische Turing-Maschine. Das nennen wir jetzt
die Time Tea. Und das Gleiche können wir auch nicht
deterministisch machen, da haben wir
N-Time Tea
Und die Space und Endspace. So, und dann haben wir unser Hauptkomplexitätsklassen.
Da definieren wir relativ zu vorgegebenen Zeit- und Platzschranken, denn Problemklassen.
Und wenn wir dann noch anfangen zu sagen, naja,
wir wissen ja, wir wollten ja sagen, Detime über alle Polynome.
Wenn ich hier über alle Polynome vereinige und über alle Detimes,
über alle Polynome, das wollte ich P nennen.
Das ist auch P,
aber ich könnte es auch anders machen können aus dem einfachen Grund,
weil ich weiß,
in diesem Polynom spielt der konstante Faktor vorne
keine Rolle
Und ich kann das Ganze durch das oberste Glied abschätzen,
also die höchste Potenz, NOI. Deswegen kann ich es
auch anders definieren. Ich muss es nicht definieren über ein Polynom-Eatengrades,
sondern ich kann es auch durch ein Spezialpolynom abschätzen, nämlich durch NOI.
Und wenn ich das vereinige, also für einige De-Time,
NOI, oder ich vereinige über alle Polynome, De-Time,
über ein Polynom, das ist das Gleiche,
ist beides P. Also egal, was ihr findet in manchen Lehrbüchern,
das eine, manchen anderen Lehrbüchern, die andere Definition,
ist egal,
das ist das Gleiche
Und das steht hier einmal hier vereinigt über Enoi,
einmal runter und hier einmal über eine Polynome.
Und der Unterschied ist, P ist das, was ich deterministischen Polynotenzeit schaffe.
NP, das, was ich nicht deterministischen Polynomzeit schaffe,
Peacepace, alles, was ich deterministisch im Polynom Platz schaffe.
Und NP Space, alles, was ich nicht deterministisch in Polynom Platz mache.
So, und da gucken wir uns beim nächsten Mal an,
was in diesen Klassen so ist und wie diese vier Klassen,
die sollen uns jetzt im Folgenden interessieren,
wie die zusammenhängen.
Bis zur nächsten Woche