700 likes | 976 Views
Grenzen der Berechenbarkeit. Klaus Becker 2004. Die Möglichkeiten von Software . Herausgeber einer Software-Zeitschrift:.
E N D
Grenzen der Berechenbarkeit Klaus Becker 2004
Die Möglichkeiten von Software Herausgeber einer Software-Zeitschrift: „Geben Sie einem Computer die richtige Software, und er wird tun, was immer Sie wünschen. Die Maschine selbst mag Grenzen haben, doch für die Möglichkeiten von Software gibt es keine Grenzen.“ (zitiert nach D. Harel: Das Affenpuzzle und weitere bad news aus der Computerwelt)
Teil 1 Nicht-berechenbare Funktionen
Das Problem Ist jede Funktion f: N N auch berechenbar? ? Menge der Funktionen von N nach N n prim(n) n 2n n s(n) Menge der berechenbaren Funktionen von N nach N ?
Präzisierung von Berechenbarkeit Definition: Eine Funktion f: N N heißtTuringmaschinen-berechenbar, gdw gilt: Es gibt eine Turingmaschine T mit der folgenden Eigenschaft: AZ: Auf dem Band befindet sich n dargestellt als Strichzahl. ZZ: Fall 1: f(n) ist definiert: T hält und hat f(n) dargestellt als Strichzahl erzeugt. Fall 2: f(n) ist undefiniert: T hält nicht. I I z0 I I I I Analog für f: N x N x ... x N N
Abzählverfahren Turingmaschinen kann man abzählen (d. h. durchnummerieren). Es gibt nur endlich viele Turingmaschinen mit 1 Zustand. Diese können der Reihe nach abgezählt werden. 0 1 2 3 4 Z000 ' ' ' ' R Z000Z000 'I' ' ' R Z000 Z000 ' ' ' ' L Z000Z000 'I' ' ' L Z000 Z000 ' ' ' ' S Z000Z000 'I' ' ' S Z000 Z000 ' ' 'I' R Z000Z000 'I' ' ' R Z000 Z000 ' ' 'I' L Z000Z000 'I' ' ' L Z000 ...
Übung Ergänzen Sie die begonnene Abzählung um weitere Turing-maschinen mit genau einem Zustand. Wie viele gibt es insgesamt? 0 1 2 3 4 Z000 ' ' ' ' R Z000Z000 'I' ' ' R Z000 Z000 ' ' ' ' L Z000Z000 'I' ' ' L Z000 Z000 ' ' ' ' S Z000Z000 'I' ' ' S Z000 Z000 ' ' 'I' R Z000Z000 'I' ' ' R Z000 Z000 ' ' 'I' L Z000Z000 'I' ' ' L Z000
Abzählverfahren Turingmaschinen kann man abzählen. Es gibt nur endlich viele Turingmaschinen mit 2 Zuständen. Diese können ebenfalls der Reihe nach abgezählt werden. 0 Z000 ' ' ' ' R Z000Z000 'I' ' ' R Z001Z001 ' ' ' ' R Z000Z001 'I' ' ' R Z000 ...
Abzählverfahren Turingmaschinen kann man abzählen. Die gesamte Menge der Turingmaschinen kann abgezählt werden, indem man zunächst die mit 1 Zustand durchnummeriert, dann die mit 2 Zuständen u.s.w.. 0 1 .. 36 Z000 ' ' ' ' R Z000Z000 'I' ' ' R Z000 Z000 ' ' ' ' L Z000Z000 'I' ' ' L Z000 ... Z000 ' ' ' ' R Z000Z000 'I' ' ' R Z001Z001 ' ' ' ' R Z000Z001 'I' ' ' R Z000 ...
Abzählbarkeit Definition:Eine Menge M heißt abzählbar genau dann, wenn es eine Abbildung von den natürlichen Zahlen N in M gibt, bei der alle Elemente aus M als Bildelemente natürlicher Zahlen erfasst werden. D. h., die Elemente von M können durchnummeriert werden. Alle Elemente aus M müssen bei der Nummerierung erfasst werden. Wiederholungen sind bei der Nummerierung zugelassen. SatzDie Menge der Turingmaschinen (über dem Eingabealphabet {'I'}) ist abzählbar. D. h., die Turingmaschinen lassen sich durchnummerieren: T0; T1; T2; ...
Übung Überprüfen Sie, ob die aufgelisteten Turingmaschinen Funktionen f: N N berechnen. Wenn ja, welche? 0 1 2 3 .. x Z000 ' ' ' ' R Z000Z000 'I' ' ' R Z000 Z000 ' ' ' ' L Z000Z000 'I' ' ' L Z000 Z000 ' ' ' ' S Z000Z000 'I' ' ' S Z000 Z000 ' ' 'I' R Z000Z000 'I' ' ' R Z000 ... Z000 ' ' ' ' R Z000Z000 'I' 'I' R Z001Z001 ' ' ' ' R Z000Z001 'I' ' ' S Z000
Lösung Überprüfen Sie, ob die aufgelisteten Turingmaschinen Funktionen f: N N berechnen. Wenn ja, welche? 0 1 2 3 .. x Z000 ' ' ' ' R Z000Z000 'I' ' ' R Z000 Z000 ' ' ' ' L Z000Z000 'I' ' ' L Z000 Z000 ' ' ' ' S Z000Z000 'I' ' ' S Z000 Z000 ' ' 'I' R Z000Z000 'I' ' ' R Z000 ... Z000 ' ' ' ' R Z000Z000 'I' 'I' R Z001Z001 ' ' ' ' R Z000Z001 'I' ' ' S Z000 f: n f: n f: 0 0 n n-1 (n > 0) f: n ... Keine Funktion
Abzählverfahren Berechenbare Funktionen kann man abzählen. Wir streichen all die Turingmaschinen, die keine Funktion f: N N berechnen. Die verbleibenden Turingmaschinen entsprechen genau den Turing-berechenbaren Funktionen. 0 1 2 .. x Z000 ' ' ' ' R Z000Z000 'I' ' ' R Z000 Z000 ' ' ' ' L Z000Z000 'I' ' ' L Z000 Z000 ' ' ' ' S Z000Z000 'I' ' ' S Z000 ... Z000 ' ' ' ' R Z000Z000 'I' 'I' R Z001Z001 ' ' ' ' R Z000Z001 'I' ' ' S Z000 f0: n f1: n f2: 0 0 n n-1 (n > 0) ... Keine Funktion
Abzählverfahren SatzDie Menge der Turingmaschinen-berechenbaren Funktion f: N N ist abzählbar. 0 1 2 .. x Z000 ' ' ' ' R Z000Z000 'I' ' ' R Z000 Z000 ' ' ' ' L Z000Z000 'I' ' ' L Z000 Z000 ' ' ' ' S Z000Z000 'I' ' ' S Z000 ... Z000 ' ' ' ' R Z000Z000 'I' 'I' R Z001Z001 ' ' ' ' R Z000Z001 'I' ' ' S Z000 f0: n f1: n f2: 0 0 n n-1 (n > 0) ... Keine Funktion
Zwischenstand Die Menge der berechenbaren Funktionen ist abzählbar. ? Menge der Funktionen von N nach N f0, f1, f2, f3, ... Menge der berechenbaren Funktionen von N nach N ?
Existenz nicht-berechenbarer Funktionen Definition einer neuen Funktion f: N N f(0) = f0(0)+1, falls f0(0) definiert ist, sonst f(0) = 0 f(1) = f1(1)+1, falls f1(1) definiert ist, sonst f(1) = 0 f(2) = f2(2)+1, falls f2(2) definiert ist, sonst f(2) = 0 f(3) = f3(3)+1, falls f3(3) definiert ist, sonst f(3) = 0 ... f(n) = fn(n)+1, falls fn(n) definiert ist, sonst f(n) = 0 ... f f0 f f1 f f2 f f3 ... f f0 ... Die Funktion f: N N unterscheidet sich von allen berechenbaren Funktionen, kann also selbst nicht berechenbar sein.
Existenz nicht-berechenbarer Funktionen SatzEs gibt Funktionen f: N N, die nicht (Turingmaschinen-) berechenbar sind. Menge der Funktionen von N nach N f f0, f1, f2, f3, ... Menge der berechenbaren Funktionen von N nach N ?
Teil 2 Rado´sche Sigma-Funktion
Geht es auch konkreter? Ziel ist es, eine Funktion, die nicht berechenbar ist, expliziter zu beschreiben. Rado´sche -Funktion Menge der Funktionen von N nach N f0, f1, f2, f3, ... Menge der berechenbaren Funktionen von N nach N ?
Biber-Turingmaschinen Eine Biber-TM ist eine eindimensionale TM, die in jedem Arbeitsschritt genau eine Rechts- oder Linksbewegung macht und nur einen „Baumstamm“ erzeugt. Eine Biber-TM startet in einer leeren Welt, erzeugt „Baumstämme“ und hält nach endlich vielen Arbeitsschritten. Vorher: Biber-TM: Nachher:
Übung Biber-Wettbewerb: Gesucht ist eine Biber-TM mit genau 2 Zuständen (außer dem Stop-Zustand), die möglichst viele Baumstämme erzeugt, bevor sie hält. Eine solche TM heißt „fleißiger Biber“ (mit 2 Zuständen) bzw. „busy beaver TM“. Gesucht ist eine Biber-TM mit genau 3 (bzw. 4) Zuständen (außer dem Stop-Zustand), die möglichst viele Baumstämme erzeugt, bevor sie hält. Eine solche TM heißt „fleißiger Biber“ (mit 3 bzw. 4 Zuständen) bzw. „busy beaver TM“.
Fleißige Biber Fleißiger Biber mit 2 Zuständen: alter gelesenes geschrieb. Kopf- neuer Zustand Zeichen Zeichen bewegung Zustand Z0 I I L Z1Z0 ' ' I R Z1 Z1 I I S Z0Z1 ' ' I L Z0 Fleißiger Biber mit 3 Zuständen: alter gelesenes geschrieb. Kopf- neuer Zustand Zeichen Zeichen bewegung Zustand Z0 I I L Z2Z0 ' ' I R Z1 Z1 I I S Z1Z1 ' ' I L Z0 Z2 I I S Z2Z2 ' ' I L Z1
Rado´sche Sigma-Funktion Definition (Tibor Rado, 1962):Die Funktion : N N ist wie folgt festgelegt: (n) bezeichne die maximale Anzahl von Baumstämmen, die eine Biber-TM mit genau n Zuständen (außer dem Stop-Zustand) erzeugen kann. n 0 1 2 3 4 5 6 ... (n) 0 1 4 6 13 4098 1,2910865 ...
Rado´sche Sigma-Funktion SatzDie Rado´sche -Funktion ist nicht Turingmaschinen-berechenbar. • Beweis: • Der Beweis benutzt die folgenden (leicht zu zeigenden) Eigenschaften der -Funktion: • (n) n für alle n N, • (n) < (n+1) für alle n N (Monotonie von ). • Der Beweis wird durch Widerspruch geführt. Annahme: Es gibt eine Turingmaschine T, mit der berechnet werden kann. Die Anzahl der Zustände von T bezeichnen wir mit k. AZ: I I z0 T : ZZ: I I I I
Rado´sche Sigma-Funktion Man zeigt zunächst, dass es eine Turingmaschine Tn mit n Zuständen gibt, der auf einem leeren Band eine Baumstammreihe mit genau n Baumstämmen erzeugt: AZ: z0 T2: ZZ: I I Man zeigt anschließend, dass es eine Turingmaschine TV mit 5 Zuständen gibt, der eine gegebene, beliebig lange Baumstammreihe verdoppelt: AZ: I I z0 TV: ZZ: I I I I
Rado´sche Sigma-Funktion Wir verknüpfen die 3 Turingmaschinen jetzt wie folgt zu einer neuen Turingmaschine Tn,V, : z0 AZ: Tn: erzeugt eine Baumstammreihe der Länge n ZZ: I I TV: erzeugt eine Baumstammreihe der Länge 2n ZZ: I I I I T : erzeugt eine Baumstammreihe der Länge (2n) I I I I I I I I ... ZZ: Beachte: Tn,V, hat n+5+k Zustände und erzeugt eine Baumstammreihe der Länge (2n).
Rado´sche Sigma-Funktion • Wir vergleichen jetzt diese zusammengesetzte Turingmaschine Tn,V, mit einem fleißigen Biber TFB(n+5+k) mit n+5+k Zuständen: • Tn,V, hat n+5+k Zustände und erzeugt (2n) Baumstämme. • TFB(n+5+k) hat n+5+k Zustände und erzeugt (n+5+k) Baumst. • Da ein fleißiger Biber die maximal mögliche Anzahl von Baumstämmen erzeugt, gilt (für alle n N): (n+5+k) (2n). • Sei n = 2(5+k). Dann gilt: • n+5+k = 3(5+k) • 2n = 4(5+k), also n+5+k < 2n. • Aus der Monotonie von folgt: (n+5+k) < (2n). • Es ergibt sich also ein Widerspruch. Da alle Schlüsse korrekt sind, muss die Annnahme falsch sein.
Teil 2 Entscheidbarkeit
Textverarbeitungsprogramme eingabe: TStringList function verarbeiten(s: TStringList): string ausgabe: string
Ein einfaches Beispiel Mit Hilfe eines Textverarbeitungsprogramms soll entschieden werden, ob ein eingegebener Text mit einem Punkt endet. Name des Programms: function verarbeiten(s: TStringList): string uPunkt:verarbeiten ja, falls der Text mit einem Punkt endet Text nein, sonst
Ein einfaches Beispiel procedure TForm1.BVerarbeitenClick(Sender: TObject); var eingabe: TStringList; ausgabe: string; function verarbeiten(s: TStringList): string; var a: string; h: string; begin h := s.Strings[s.Count-1]; if h[length(h)] = '.' then a := 'ja' else a := 'nein'; result := a; end; begineingabe := TStringList(MEingabe.Lines);ausgabe := verarbeiten(eingabe);PAusgabe.Caption := ausgabe;end;
Selbstanwendung Das Textverarbeitungsprogramms kann man auch auf den Quelltext des Textverarbeitungsprogramms selbst anwenden.
Selbstanwendung Das Textverarbeitungsprogramms kann man auch auf den Quelltext des Textverarbeitungsprogramms selbst anwenden. uPunkt:verarbeiten uPunkt.~pas ja
Hilfe, mein Rechner hängt! Jeder hat schon einmal die Erfahrung gemacht, dass der Rechner aus irgendwelchen Gründen nicht mehr reagiert. Die Ursache kann eine Endlosschleife sein. x0 := x1; WHILE x2 0 DO x0 := x0 + 1 END
Übung Erstellen Sie ein Textverarbeitungsprogramms, mit dem man entscheiden kann, ob der eingegebene Text die Zeichenkette ‘while‘ enthält. uWhile1:verarbeiten ja, falls der Text die Zeichenkette ‘while‘ enthält Text nein, sonst
Übung Erstellen Sie zunächst ein Textverarbeitungsprogramms, mit dem man entscheiden kann, ob der eingegebene Text die Zeichenkette ‘while‘ enthält. Das Textverarbeitungsprogramm soll mindestens eine while-Schleife enthalten. Ändern Sie es anschließend so ab, dass folgendes Verhalten auftritt: uWhile2:verarbeiten Gerät in eine Endlosschleife, falls der Text die Zeichenkette ‘while‘ enthält Text nein, sonst
Das (spezielle) Halteproblem Kann man eine Funktion programmieren, mit der man entscheiden kann, ob ein Textverarbeitungsprogramm bei der Analyse des eigenen Quelltextes hält? halten ja, falls uProgramm:verarbeiten bei Eingabe von uProgramm.~pas hält uProgramm.~pas nein, sonst Annahme: Man kann diese Funktion programmieren.
Das (spezielle) Halteproblem Annahme: Man kann die Funktion „halten“ programmieren. Dann ergänzen wir das Programm wie folgt: procedure TForm1.BVerarbeitenClick(Sender: TObject); var eingabe: TStringList; ausgabe: string;function halten(s: TStringList): string; begin ... end;function verarbeiten(s: TStringList): string; begin if halten(s)='ja' then while true do; result := 'haelt'; end;begineingabe := TStringList(MEingabe.Lines);ausgabe := verarbeiten(eingabe);PAusgabe.Caption := ausgabe;end; uSeltsam
Ein seltsames Programm Seltsam dreht den Spieß um. keine Ausgabe, wenn uProgramm:verarbeiten bei Eingabe von uProgramm.~pas hält, da Endlosschleife uSeltsam:verarbeiten uProgramm.~pas ‘haelt‘, wenn uProgramm:verarbeiten bei Eingabe von uProgramm.~pas nicht hält
Ein seltsames Programm Seltsam analysiert sein eigenes Halteverhalten. keine Ausgabe, wenn uSeltsam:verarbeiten bei Eingabe von uSeltsam.~pas hält, da Endlosschleife uSeltsam:verarbeiten uSeltsam.~pas ‘haelt‘, wenn uSeltsam:verarbeiten bei Eingabe von uSeltsam.~pas nicht hält
Ein seltsames Programm Hält uSeltsam:verarbeiten bei Eingabe von uSeltsam.~pas? hält nicht, wenn uSeltsam:verarbeiten bei Eingabe von uSeltsam.~pas hält uSeltsam:verarbeiten uSeltsam.~pas hält, wenn uSeltsam:verarbeiten bei Eingabe von uSeltsam.~pas nicht hält Man kann es nicht klären, ohne sich in Widersprüche zu verwickeln.
Ein seltsames Programm Woran liegt es, dass man widersprüchliche Ergebnissen erhält? hält nicht, wenn uSeltsam:verarbeiten bei Eingabe von uSeltsam.~pas hält uSeltsam:verarbeiten uSeltsam.~pas hält, wenn uSeltsam:verarbeiten bei Eingabe von uSeltsam.~pas nicht hält Die Annahme, dass man eine Funktion programmieren kann, mit der man entscheiden kann, ob ein Textverarbeitungsprogramm bei der Analyse des eigenen Quelltextes hält, muss falsch sein.
Entscheidbarkeit Definition:Eine Sprache über einem Alphabet heißt (Delphi-) entscheidbar, wenn es einen (Delphi-) Algorithmus gibt, der für jedes Wort über dem Alphabet feststellt, ob es zur Sprache gehört oder nicht. Algorithmus ja, falls das Wort zur Sprache gehört Wort nein, falls das Wort nicht zur Sprache gehört Beachte: Der Algorithmus muss für jede Eingabe halten und eine der beiden Ausgaben ´ja´ bzw. ´nein´ erzeugen.
Entscheidbarkeit Beispiel: Die Sprache der ASCII-Texte, die die Zeichenkette ‘while‘ enthalten, ist (Delphi-) entscheidbar. uWhile:verarbeiten ja, falls der Text die Zeichenkette ‘while‘ enthält Text nein, sonst
Unentscheidbarkeit des Halte-Problems SatzDie Sprache der Delphi-Textverarbeitungsprogramme, die bei Eingabe des eigenen Quelltextes halten, ist nicht (Delphi-) entscheidbar. ja, falls uProgramm:verarbeiten bei Eingabe von uProgramm.~pas hält uProgramm.~pas nein, sonst Kurz: Das spezielle Halteproblem (Hält ein ein Programm, wenn es seinen eigenen Quelltext bearbeitet?) ist nicht entscheidbar.
Unentscheidbarkeit des Halte-Problems SatzDas allgemeine Halteproblem (Hält ein ein Programm, wenn es Daten bearbeitet?) ist nicht entscheidbar. ja, falls uProgramm:verarbeiten bei Eingabe der Daten hält uProgramm.~pas +Daten nein, sonst Fazit: Es gibt keinen Algorithmus, mit dem man allgemein vorab testen kann, ob ein Programm bei der Verarbeitung von Daten hält.
Teil 3 Semi-Entscheidbarkeit
Das 10. Hilbert`sche Problem Diophantische Gleichungen: Hat eine Polynomgleichung (in der verschiedene Variablen mit verschiedenen Exponenten vorkommen können) mit ganzzahligen Koeffizienten eine ganzzahlige Lösung? x3 + 5x2y2z – xz + 37 = 0 ja: x = 1; y = 2; z = -2 x2 +1 = 0 nein!