Berechenbarkeit Das Halteproblem Gibt es ein Programm (Methode) H, welches feststellt (entscheidet), ob ein beliebiges Programm P mit seinen Eingabedaten E nach endlich vielen Schritten endet oder nicht ? → Entscheidungsverfahren! Wir führen hier einen Beweis für JAVA-Programme. Ein allgemeiner Beweis ist ebenfalls möglich. Ein Programm mit seinen Eingabedaten lässt sich als (sehr lange) Binärzahl interpretieren. Programm & Eingabe E = Eingabedaten, darstellbar als Binärzahl Terminierung? Programm P Ausgabe? P = Folge von Anweisungen, auch als Binärzahl darstellbar ⇒ Ein Programm P mit Eingabe E lässt sich als Binärzahl schreiben: P, E ⇒ P, E = 01001101 11011111 01010011 01101111 11101101 11000011 01100000 00011100 ....... Seite 13 /09.10 Berechenbarkeit Halteproblem Gibt es ein universelles Programm H, welches bei Eingabe von (P , E) false oder true liefert? Eingabe (P , E) = Binärzahl aus P und der Haltetester true: P hält mit Eingabe E an H false: P terminiert nicht, d.h. P gerät in eine Endlosschleife H(Binaerzahl P, Binaerzahl E) { ?!?? Ausgabe: true; // terminiert ??!!? Ausgabe: false; // terminiert nicht } Eingabe E Das Programm H könnte in das gegebene Betriebssystem integriert werden, um 'schlechte' Programme zu erkennen. Seite 14 /09.10 Berechenbarkeit Wir formulieren mit Hilfe von H( ) ein Programm Seltsam( ): Die Eingabe y ist wieder als Binärzahl zu verstehen. Seltsam(Binaerzahl y) { if ( H(y,y) ) { while (true) { ; } } else Ausgabe: “Fertig“; } // Endlosschleife !! Wir rufen jetzt das Programm Seltsam auf und übergeben den eigenen Quelltext als Eingabe: Seltsam( Seltsam ); Fall 1 H(Seltsam, Seltsam) = true H sagt, dass Seltsam terminiert Laut Quelltext gerät aber Seltsam in die Endlosschleife und terminiert deshalb nicht! Widerspruch Fall 2 H(Seltsam, Seltsam) = false Der else-Teil wird ausgeführt und Seltsam terminiert, obwohl H(Seltsam, Seltsam) besagt, dass Seltsam nicht terminiert. Widerspruch → Die Annahme, dass H existiert ist falsch. Satz von Turing (1936) Das Halteproblem ist unentscheidbar. Es gibt keinen Algorithmus, der entscheiden kann, ob ein beliebiges Programm P mit seiner Eingabe E in eine Endlosschleife gerät oder nicht. Seite 15 /09.10 Berechenbarkeit Bemerkungen • Die Halte-Eigenschaft für Programme ist nicht entscheidbar. Ob ein beliebiges Programm P nach endlich vielen Schritten anhält, lässt sich nur feststellen, indem man P mit den Eingaben E startet und abwartet............. • Nicht entscheidbare Probleme sind algorithmisch, d.h. mit Hilfe von Computern unlösbar. • Die Verantwortung für die Terminierung von Programmen kann niemals einer Maschine übertragen werden, sie bleibt beim Menschen. • Die Unentscheidbarkeit des Halteproblems ist unabhängig von der Programmiersprache (ohne Beweis). • Das Halteproblem bedeutet, dass es Aufgabenstellungen gibt, die nicht mit Computern gelöst werden können. Es gibt weitere unlösbare Probleme: Es gibt kein sicheres Virenprüfprogramm! Satz von Dowling (1989) Es ist unmöglich ein Programm zu formulieren, das selber sicher ist (keinen Virus verbreitet) und von jedem beliebigen Programm entscheiden kann, ob dieses virenfrei ist oder nicht. Navigationsprogramme Es gibt kein Programm, das für jedes mögliche Navigationsprogramm dessen Korrektheit überprüft. Grammatiken Das Problem, ob für eine kontextfreie Grammatik L(G) = { } gilt, ist entscheidbar. Das Problem, ob für eine beliebige Grammatik L(G) = { } gilt, ist nicht entscheidbar. Unvollständigkeitssatz von Gödel (1931) Es gibt korrekt gebaute Formeln der Zahlentheorie, die weder beweisbar, noch widerlegbar sind. Wahrheit und mathematische Beweisbarkeit sind unterschiedliche Kategorien: Der Unvollständigkeitssatz besagt, dass mathematische Theorien niemals alle wahren Aussagen erfassen können. Achtung: Der Unvollständigkeitssatz sagt nichts über einen Mangel des menschlichen Denkens aus! Seite 16 /09.10
© Copyright 2024 ExpyDoc