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.

Slides:



Advertisements
Ähnliche Präsentationen
Randomisierte Algorithmen Präfix Suche und Konsistentes Hashing
Advertisements

Christian Scheideler SS 2009
Hier einige Hieroglyphen:
Motivation Bisher: Codes mit möglichst kurzer Codelänge.
Rekursion: Rekurrenz: Algorithmen rufen sich selbst (rekursiv) auf.
Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
Eine dynamische Menge, die diese Operationen unterstützt,
Polynomial Root Isolation
Schnelle Matrizenoperationen von Christian Büttner
Das LCA – Problem in Suffixbäumen
3. Berechenbarkeit Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar? Intuitiv: Wenn es einen Algorithmus gibt, der sie berechnet! Was heißt,
Einführung in Berechenbarkeit und Formale Sprachen
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen und Komplexität Universelle Turingmaschinen Eine universelle Turingmaschine.
Datentyp- umwandlung. Literale sind: Bezeichner mit einem festen Wert wie z.B:
Widersprüche in Gesprächen, im Leben, im Menschen in Systemen,...
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Der Präprozessor. Bevor der Compiler das Programm in Maschinencode übersetzt (nur dieser kann von der CPU, dem Herz des Computers, bearbeitet werden)
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (17 –Turingmaschinen) Prof. Dr. Th. Ottmann.
Kapitel 5 Stetigkeit.
Kapitel 1 Das Schubfachprinzip
Kapitel 1 Die natürlichen und die ganze Zahlen. Kapitel 1: Die natürlichen und die ganzen Zahlen © Beutelspacher/Zschiegner April 2005 Seite 2 Inhalt.
Christian Schindelhauer
(Ron Rivest, Adi Shamit, Leonard Adleman , 1977)
Situationen Verteilte Anwendungen Wintersemester 06/07 © Wolfgang Schönfeld.
Zahlen mit Zahlen ausmessen
Punktbeschriftung mit vier Rechtecken gleicher Höhe (Anzahlmaximierung) Julia Löcherbach.
oder warum Sven kein Star wird sondern schon einer ist
Effiziente Algorithmen
Willkommen bei Sycarus – dem Mathematikprogramm, das neue Wege geht.
„Was steht eigentlich hinter dem Roten Kreuz?“
Grenzen der Regularität
Schau dir das folgende Bild zuerst einmal genauer an
Computational Thinking Suchen und Sortieren [Ordnung muss sein…]
Effiziente Algorithmen
Zeichnen linearer Funktionen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Powerpoints bestellen-Mail an Blondinen- ausbildung bei der.
Bereit ???? Nimm dir 10 Minuten Zeit. Ich versuche es dir zu erklären.
Wilhelm Söhne, Klasse 8b, Januar 2009
Die Fehlermeldung. Hast du dich nicht auch schon immer mal gefragt – Was ist eigentlich eine Fehlermeldung?
Blondinen- ausbildung bei der.
ENDLICHE KÖRPER RSA – VERFAHREN.
Eine Liebe im Frühling.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Arne Vater Wintersemester 2006/ Vorlesung
Vom graphischen Differenzieren
Station 8 EVA- Prinzip.
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Gehe in Arbeitsplatz company Schuljahr 15/16 Klasse 6 Aufgaben Ganze umrechnen.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
 Präsentation transkript:

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 kann, ob das Programm R für dieses E anhält oder nicht (d.h. sich in einer Endlosschleife befindet)?

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

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

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

Antwort: Nein, da man selbst nach 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.

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

Zuerst aber ein paar Definitionen und Bezeichnungen...

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

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 = = 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).

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

Antwort: Es gibt Programme (allgemein: 2 n+1 -2)

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

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.

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:

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? 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.

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

Warum muss der Algorithmus (Programm) X_n anhalten?

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

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 P1P2... Pm Keines der Programme aus Datei1, die alle hintereinander gestartet wurden, kann endlos laufen, da diese Programme (laut Voraussetzung) anhalten. A1A2 Am... MS

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

Annahme: Es gilt | X_n | <= n

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

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 =

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? 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...

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

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).

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) Konstante Dafür führen wir die Bezeichnung k ein. also: n < trunc (ld n) + k also: n < |X_n| = trunc (ld n) + k

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!!!