Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Das Halteproblem. Gibt es einen Algorithmus, mit dem man für jedes beliebig vorgegebene Programm R und für jede beliebig vorgegebene Eingabe E entscheiden.

Ähnliche Präsentationen


Präsentation zum Thema: "Das Halteproblem. Gibt es einen Algorithmus, mit dem man für jedes beliebig vorgegebene Programm R und für jede beliebig vorgegebene Eingabe E entscheiden."—  Präsentation transkript:

1 Das Halteproblem

2 Gibt es einen Algorithmus, mit dem man für jedes beliebig vorgegebene Programm R und für jede beliebig vorgegebene Eingabe E entscheiden kann, ob das Programm R für dieses E anhält oder nicht (d.h. sich in einer Endlosschleife befindet)?

3 Dann könnte man ein Programm schreiben, das von einem beliebigen Programm feststellen kann, ob es eine Endlosschleife besitzt.

4 Antwort: Es gibt keinen Algorithmus, der diese Aufgabe lösen kann!

5 Frage: Kann man erkennen, ob ein Programm abstürzt (d.h. eine Endlosschleife besitzt), indem man das Programm laufen lässt (startet)?

6 Antwort: Nein, da man selbst nach 1 000 000 000 000 000 000 000 000 Jahren Laufzeit nicht entscheiden kann, ob das Programm eine Sekunde später doch anhält. Es wird eine CPU vorausgesetzt, die unendlich viel Speicher ansprechen kann.

7 Beweis (indirekt): D.h. wir nehmen an, dass es so einen Algorithmus gibt und zeigen, dass dies zu einem Widerspruch führt.

8 Zuerst aber ein paar Definitionen und Bezeichnungen...

9 1) Ein mögliches Programm (eventuell mit Eingabe) besteht aus einer Nullen/Einsenfolge des Programms und einer Nullen/Einsenfolge der Eingabe. Ein tatsächliches Programm besteht genauso aus einer Nullen/Einsenfolge und kann von der CPU ausgeführt werden (weil die Nullen und Einsen als Maschinenbefehle interpretiert werden). 2) Die Länge eines Programms P ist anschaulich die Größe der ausführbaren exe-Datei und wird mit | P | bezeichnet

10 3) Es wird eine CPU vorausgesetzt, die unendlich viel Speicher ansprechen kann. 4) Eine positive Zahl n, die man als Dualzahl abspeichert braucht trunc(log 2 n) + 1 Speicherplatz Die Zahl 9 dual dargestellt ist: 1001 und belegt 4 Stellen. trunc(log 2 9) + 1 = trunc (3.17) + 1 = 3 + 1 = 4 Bemerkungen: trunc bedeutet truncate (deutsch abschneiden des Nachkommateils). Statt log 2 n schreibt man hier auch ld n (d wie dual oder binär).

11 Aufgabe: Zählen Sie die möglichen Programme mit maximaler Länge 10 auf. Wie viele gibt es ?

12 Antwort: 0 1 00 01 10 11... 0000000000... 1111111111 Es gibt 2 11 - 2 Programme (allgemein: 2 n+1 -2)

13 Zurück zu unserem "Beweis": Wir nehmen an, dass es so einen Algorithmus gibt und nennen ihn den Halt-Algorithmus.

14 Halt-Algorithmus Dualzahl D D ist ein/kein Programm. D hält an/ hält nicht an. Halt-Algorithmus wird mit einer Dualzahl "gefüttert" Halt-Algorithmus "spuckt aus", ob diese Eingabe ein Programm ist und wenn ja, ob es anhält.

15 Wir basteln nun Programme X_1, X_2, X_3,..., X_n,... die u.a. den Halt-Algorithmus als "Unterprogramm" enthalten. Wir nehmen nun ein beliebiges Programm X_n, das folgendes macht:

16 Halt-Algorithmus 0 Jage alle möglichen Programme P, die keine Eingabe und maximale Länge n haben (also max. 2^(n+1)-2) Programme durch den Halt-Algorithmus. Wie sieht das kleinste, bzw. größte aus? 1... 111...111 P1P2... Pm n- mal Speichere alle tatsächlichen, und dazu noch anhaltenden Programme in der Datei1 ab. Starte diese anhaltenden Programme und speichere die Ausgaben in der Datei2 ab. A1A2 Am... Füge an das Ende der Datei2 die Zeichenkette "MS" (steht für Microschrott) an. MS Die Länge der Datei2 bezeichnen wir nun mit b. Damit haben wir den Algorithmus (=Programm) X_n vorgestellt.

17 Halt-Algorithmus 0 1... 111...111 P1P2... Pm n- mal A1A2 Am... MS Bemerkung: X_n hat keine Eingabe (über Tastatur) Nebenbei: Die Zeichenkette "MS" hat die Länge 2.

18 Warum muss der Algorithmus (Programm) X_n anhalten?

19 Wir überlegen uns dazu, wo theoretisch eine Endlosschleife auftreten könnte.

20 Halt-Algorithmus 0 Beim "Durchjagen" der 2^(n+1)-2 Programme durch den Halt-Algorithmus kann keine Endlosschleife auftreten, da der Halt-Algorithmus anhält. 1... 111...111 P1P2... Pm Keines der Programme aus Datei1, die alle hintereinander gestartet wurden, kann endlos laufen, da diese Programme (laut Voraussetzung) anhalten. A1A2 Am... MS

21 Frage: Gilt | X_n | <= n wobei mit | X_n | die Programmlänge bezeichnet wird

22 Annahme: Es gilt | X_n | <= n

23 Was folgt daraus? Denken Sie an eine Selbstbezüglichkeit, wie etwa eine Kamera die "alles" aufnimmt, auch sich selbst (wie sie gerade photografiert).

24 Da |X_n| <= n gilt, muss sich das Programm unter den Programmen befinden, die durch den Halt-Algorithmus gejagt werden!!! Für z.B. n = 8 könnte X_n z.B. wie folgt aussehen: X_n = 10101010

25 Halt-Algorithmus 0 Es wird also u.a. auch X_n selbst durch den Halt-Algorithmus (hier wird z.B. n=8 angenommen). gejagt. Was passiert, wenn X_n durch den Halt-Algorithmus gejagt wird?... 10101010 11111111 P1P2...X_n...Pm Da X_n anhält (siehe frühere Folie), muss X_n in der Datei1 abgespeichert werden. A1A2 Am... MS... X_n Frage: Was gibt aber X_N aus, wenn es gestartet wird? A1A2... AmMS Die Datei2! Hier nochmals anders dargestellt...

26 A1A2... AmMS A1A2... AmMS A1A2... A1A2... AmMS...AmMS Dies anders dargestellt ergibt: Diese Länge ist aber b. Die Datei2 hat also mindestens die Länge b+2 (weil am Ende ja noch MS steht). Dies ist ein Widerspruch zur Aussage: "Datei2 hat die Länge b". Also ist die Annahme: |X_n| n

27 Im Programm von X_n müssen die 2^(n+1)-2 möglichen Programme durch den Halt- Algorithmus gejagt werden. Deshalb muss in diesem Programm die Zahl n gespeichert sein. Außerdem ist auch noch der Programmcode gespeichert. Die Länge des Programmcodes ist eine Konstante (man braucht z.B.nur eine begrenzte Menge Papier, um diesen zu notieren). Allerdings benötigt das Notieren der Zahl n (als Dualzahl) einen nicht konstanten Speicherplatz (siehe frühere Folie).

28 Fassen wir zusammen: |X_n| > n, also n < |X_n| Damit: n < |X_n| = Speicherplatz für n + Speicherplatz für Programmcode Etwas formaler: n < |X_n| = trunc (ld n) + 1 + Konstante Dafür führen wir die Bezeichnung k ein. also: n < trunc (ld n) + k also: n < |X_n| = trunc (ld n) + k

29 Da trunc (ld n) <= ld n gilt: n < trunc (ld n) + k < = ld n + k Also gilt: n < ld n + k Also gilt: n - ld n < k Betrachten Sie im Display des Taschenrechners die Werte von n – ld n für immer größer werdende n. Da n – ld n "für große n gegen unendlich strebt", wird n – ld n ab einem bestimmten n größer als die Konstante k. Dies ist ein Widerspruch. Also ist die Annahme: "Es gibt diesen Halt- Algorithmus..." falsch!!!


Herunterladen ppt "Das Halteproblem. Gibt es einen Algorithmus, mit dem man für jedes beliebig vorgegebene Programm R und für jede beliebig vorgegebene Eingabe E entscheiden."

Ähnliche Präsentationen


Google-Anzeigen