Zur Vereinfachung betrachten wir nun nur noch Funktionen f, die einen Funktionswert f nµberechnen. Sie werden alle in einer Tabelle dargestellt:



Ähnliche Dokumente
Programmierkurs Java

Informationsblatt Induktionsbeweis

Primzahlen und RSA-Verschlüsselung

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Grundlagen der Theoretischen Informatik, SoSe 2008

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Was meinen die Leute eigentlich mit: Grexit?

Zeichen bei Zahlen entschlüsseln

Professionelle Seminare im Bereich MS-Office

7 Rechnen mit Polynomen

a n auf Konvergenz. Berechnen der ersten paar Folgenglieder liefert:

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse Lösung 10 Punkte

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer

Zahlen und das Hüten von Geheimnissen (G. Wiese, 23. April 2009)

Berechnungen in Access Teil I

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen

Kapiteltests zum Leitprogramm Binäre Suchbäume

1 Mathematische Grundlagen

Skript und Aufgabensammlung Terme und Gleichungen Mathefritz Verlag Jörg Christmann Nur zum Privaten Gebrauch! Alle Rechte vorbehalten!

Überblick. Lineares Suchen

Einführung in die Algebra

Übung Theoretische Grundlagen

Tourist Town. wenn Computer ins Schwitzen geraten. Prof. Dr. Isolde Adler IT-Girls Night

Also kann nur A ist roter Südler und B ist grüner Nordler gelten.

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Übungen Programmieren 1 Felix Rohrer. Übungen

infach Geld FBV Ihr Weg zum finanzellen Erfolg Florian Mock

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Austausch- bzw. Übergangsprozesse und Gleichgewichtsverteilungen

Was man mit dem Computer alles machen kann

Theoretische Informatik SS 04 Übung 1

Geld Verdienen im Internet leicht gemacht

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Zahlenwinkel: Forscherkarte 1. alleine. Zahlenwinkel: Forschertipp 1

Info zum Zusammenhang von Auflösung und Genauigkeit

Lineare Gleichungssysteme

Grundbegriffe der Informatik

Gleichungen Lösen. Ein graphischer Blick auf Gleichungen

EINFACHES HAUSHALT- KASSABUCH

Access [basics] Rechnen in Berichten. Beispieldatenbank. Datensatzweise berechnen. Berechnung im Textfeld. Reporting in Berichten Rechnen in Berichten

Eine Logikschaltung zur Addition zweier Zahlen

Speicher in der Cloud

Einführung. Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Vorlesungen zur Komplexitätstheorie. K-Vollständigkeit (1/5)

Der Zwei-Quadrate-Satz von Fermat

Betragsgleichungen und die Methode der Fallunterscheidungen

Approximation durch Taylorpolynome

Die Post hat eine Umfrage gemacht

Bevor lineare Gleichungen gelöst werden, ein paar wichtige Begriffe, die im Zusammenhang von linearen Gleichungen oft auftauchen.

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Übungsbuch für den Grundkurs mit Tipps und Lösungen: Analysis

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Einführung in die Java- Programmierung

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Modellbildungssysteme: Pädagogische und didaktische Ziele

Mathematik: Mag. Schmid Wolfgang Arbeitsblatt 3 1. Semester ARBEITSBLATT 3 RECHNEN MIT GANZEN ZAHLEN

sondern alle Werte gleich behandelt. Wir dürfen aber nicht vergessen, dass Ergebnisse, je länger sie in der Vergangenheit

Übungsblatt 3: Algorithmen in Java & Grammatiken

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Grundlagen der Informatik

2A Basistechniken: Weitere Aufgaben

Alle gehören dazu. Vorwort

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Jenseits der Endlichkeit. Eine Einführung in die cantorsche Unendlichkeitslehre. Diplom-Informatiker Peter Weigel

Bin Packing oder Wie bekomme ich die Klamotten in die Kisten?

Das große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten

1 topologisches Sortieren

Persönliche Zukunftsplanung mit Menschen, denen nicht zugetraut wird, dass sie für sich selbst sprechen können Von Susanne Göbel und Josef Ströbl

Leichte-Sprache-Bilder

Lassen Sie sich dieses sensationelle Projekt Schritt für Schritt erklären:

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Konzepte der Informatik

Wir arbeiten mit Zufallszahlen

Kulturelle Evolution 12

Musterlösungen zur Linearen Algebra II Blatt 5

Datensicherung. Beschreibung der Datensicherung

Einkaufen im Internet. Lektion 5 in Themen neu 3, nach Übung 10. Benutzen Sie die Homepage von:

Anhand des bereits hergeleiteten Models erstellen wir nun mit der Formel

Gutes Leben was ist das?

Lineare Gleichungssysteme

Nachhilfe-Kurs Mathematik Klasse 13 Freie Waldorfschule Mitte

Das Leitbild vom Verein WIR

Woche 1: Was ist NLP? Die Geschichte des NLP.

Güte von Tests. die Wahrscheinlichkeit für den Fehler 2. Art bei der Testentscheidung, nämlich. falsch ist. Darauf haben wir bereits im Kapitel über

Basis und Dimension. Als nächstes wollen wir die wichtigen Begriffe Erzeugendensystem und Basis eines Vektorraums definieren.

Punkt 1 bis 11: -Anmeldung bei Schlecker und 1-8 -Herunterladen der Software

1 Vom Problem zum Programm

13 Öffentliche Güter

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

Dame oder Tiger (Nach dem leider schon lange vergriffenen Buch von Raymond Smullyan)

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

! " # $ " % & Nicki Wruck worldwidewruck

Plotten von Linien ( nach Jack Bresenham, 1962 )

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Nina. bei der Hörgeräte-Akustikerin. Musterexemplar

Transkript:

Informatik 13: Gierhardt Theoretische Informatik III Berechenbarkeit Nicht-berechenbare Funktionen Nach der Church-Turing-These kann alles, was berechenbar ist, mit einer Turing-Maschine oder einer While-Maschine programmiert werden. Das Programm muss natürlich nach endlich vielen Schritten anhalten. Eine solche Turing-Maschine können wir auch mit einer beliebigen Programmiersprache simulieren. Wir können jeden Algorithmus z.b. in Java programmieren. Für jeden Algorithmus gibt es also einen Quelltext in Java. Einen Quelltext betrachten wir jetzt als ein einzelnes Wort bestehend aus den erlaubten und endlich vielen Zeichen für die Java-Syntax. Alle diese Quelltexte ordnen wir nun nach der Größe beginnend mit den kleinsten Programmen. Z.B. gibt es dann viele Quelltexte mit der Länge 100. Es können aber nur endlich viele sein, da nur endlich viele verschiedene Buchstaben und Zeichen zur Verfügung stehen. Diese ordnen wir nun in alphabetischer Ordnung wie in einem Lexikon. Wir können alle möglichen Algorithmen als Java-Quelltexte schreiben und ordnen, d.h. nummerieren. 1 5µ Die Menge der berechenbaren Funktionen ist abzählbar. 2 5µ 3 5µ Zur Vereinfachung betrachten wir nun nur noch Funktionen f, die 4 5µ 5 aus einer natürlichen Zahl n¾in einen Funktionswert f nµberechnen. Sie werden alle in einer Tabelle dargestellt: 1 2 3 4 f 1 f 1 1µf 1 2µf 1 3µf 1 4µf f 2 f 2 1µf 2 2µf 2 3µf 2 4µf f 3 f 3 1µf 3 2µf 3 3µf 3 4µf f 4 f 4 1µf 4 2µf 4 3µf 4 4µf Diese Tabelle enthält alle Funktionen, und zwar in der ersten Zeile alle Funktionswerte der Funktion f 1, in der zweiten Zeile alle Funktionswerte der Funktion f 2 usw. Wir konstruieren nun eine Funktion g auf die folgende Art und Weise: g 1µ f 1 1µ 1. Damit unterscheidet sich g von der Funktion f 1. g 2µ f 2 2µ 1. Damit unterscheidet sich g von der Funktion f 2. g 3µ f 3 3µ 1. Damit unterscheidet sich g von der Funktion f 3. Dies machen wir für alle Funktionen f i. Damit unterscheidet sich g von allen Funktionen f i. Sie ist aber offensichtlich berechenbar, also müsste sie in der Folge f 1 f 2 f 3 schon vorkommen. Dies ist ein Widerspruch. Also muss die Annahme falsch sein, dass die Liste schon alle berechenbaren Funktionen enthält 1. Was haben wir damit bewiesen? 1 Das dargestellte Verfahren ist bekannt als Cantorsches Diagonalisierungsverfahren. Damit kann man z.b. zeigen, dass die Menge der reellen Zahlen zwischen 0 und 1 überabzählbar ist. Wie? Übung! 1

Beispiele Es gibt arithmetische Funktionen, die nicht berechenbar sind. Es gibt überabzählbar viele arithmetische Funktionen, von denen aber nur abzählbar viele berechenbar sind. Das, was ein Computer kann, ist im Vergleich zu dem, was er nicht kann, vernachlässigbar. Einige bekannte mathematische Probleme haben sich hartnäckig einer algorithmischen Lösung widersetzt. Kandidaten für Probleme, die nicht berechenbar sind, könnten die dargestellten klassischen mathematischen Probleme sein. Die Vermutung von FERMAT (1601-1665): Es gibt keine natürlichen Zahlen n 3, für die positive ganze Zahlen x, y und z mit x n y n z n existieren. Diese Vermutung konnte erst 1994 von dem genialen Mathematiker ANDREW WILES bestätigt werden. Der Beweis geht über ca. 100 Seiten 2. Die Vermutung von GOLDBACH (1690-1764): Jede gerade Zahl n 4 lässt sich als Summe 1µ von zwei Primzahlen darstellen. Die Vermutung ist bis heute weder bewiesen noch widerlegt worden. Man konnte bis jetzt nur beweisen, dass jede gerade Zahl die Summe von nicht mehr als 800 000 Primzahlen ist. Vollkommene Zahlen: Eine natürliche Zahl heißt vollkommen, wenn ihre Teiler addiert die Zahl selbst ergeben. 6 ist teilbar durch 1, 2 und 3 und 6 1 2 3. 28 ist teilbar durch 1, 2, 4, 7, 14 und 28 1 2 4 7 14. In den letzten Jahrtausenden hat man nur 30 vollkommene Zahlen entdeckt. Die bisher größte vollkommene Zahl hat über 840 000 Stellen und ergibt sich aus dem Term 2 1398268 2 1398269 1. Behauptung: Alle vollkommenen Zahlen sind gerade. 2. Behauptung: Es gibt unendlich viele vollkommene Zahlen. Beide Behauptungen konnten bis heute weder bewiesen noch widerlegt werden. Primzahlzwillinge sind zwei Primzahlen, die sich nur durch 2 unterscheiden. Bis heute ist nicht entschieden, ob es unendlich viele davon gibt. Hätte Hilberts Entscheidungsproblem eine Lösung, so könnte man alle dargestellten Probleme einem Algorithmus als Eingabe anbieten und auf die Antwort richtig oder falsch endliche Zeit warten. 2 Ein sehr schönes Buch dazu ist: Simon Singh, Fermats letzter Satz - die abenteuerliche Geschichte eines mathematischen Rätsels, dtv, ISBN 3-446-19313-8 2

Das Entscheidungsproblem Wir betrachten wieder die abzählbare Menge aller Algorithmen in Java, die aus einer natürlichen Zahl irgendeine Zahl nach endlicher Zeit berechnen können. Die Programme werden wie oben nummeriert: Programm 1, Programm 2, Programm 3, usw. Z.B. gelte Programm 27 nµ n! Programm 28 nµ 2 n Programm 29 nµ n-te Primzahl n nµ Jedes Programm hat also eine Nummer, die man auch Gödel-Nummer nennt. Nun konstruieren wir ein neues NeuProgramm, das den Funktionswert NeuProgramm nµwie folgt berechnet: Suche das Programm mit der Nummer n in der Liste, füttere dieses mit n, also seiner eigenen Nummer, nimm seinen Funktionswert Programm und addiere 1 dazu. Also: NeuProgramm nµ Programm n nµ 1 Beispiel: NeuProgramm 28µ Programm 28 28µ 1 2 28 1 57 NeuProgramm müsste eigentlich schon in der Liste sein, weil es eine berechnete Zahl liefert. Weil wir seine Nummer nicht kennen, nehmen wir x als seine eigene Nummer an. Dann gilt also: NeuProgramm Programm x Nun füttern wir NeuProgramm mit seiner eigenen Nummer und erhalten: NeuProgramm xµ Programm x xµ 1 Programm x xµist aber wieder NeuProgramm xµ Also folgt zusammengefasst: NeuProgramm xµ NeuProgramm xµ 1, was offensichtlich ein Widerspruch ist. NeuProgramm liefert keine berechenbare Zahl. Also gehört es doch nicht zur Liste. Die Liste war demnach schon vollständig. Dennoch existiert dieses Programm und liefert als außenstehendes, nicht zur Liste gehöriges Programm, vernünftige Ergebnisse. Also ist die Liste doch nicht vollständig. Wir erhalten eine paradoxe Situation: Es gibt keine Möglichkeit, zu entscheiden, ob das neue Programm zur Liste gehört oder nicht. Andere Formulierung: Es gibt keinen Algorithmus, der zu jedem Text T, der die Berechnung einer Funktion f : IN IN beschreibt, nach endlich vielen Schritten das Ergebnis liefert, ob die Funktion f für alle Werte ein Ergebnis liefert oder nicht. Verallgemeinerung: Es gibt keinen Algorithmus, mit dem sich die Wahrheit einer mathematischen Aussage überprüfen lässt. Wir haben nicht bewiesen 3, dass wir einen solchen Algorithmus nicht kennen, sondern dass es niemals einen solchen geben wird! 3 In der theoretischen Informatik wird dieser Beweis natürlich viel exakter, und zwar mit Hilfe der Turing- Maschine, geführt. 3

Das Halteproblem Gibt es Probleme, die für Informatiker von größerem Interesse und auch nicht-berechenbar sind? Ein allgemeines Problem bei Computerinstallationen auf der ganzen Welt ist, dass Programmierer beim Programmschreiben Fehler machen. Dadurch können Programme in eine Endlosschleife geraten und halten somit nicht an. Es wäre doch segensreich, wenn man durch ein Programm ein anderes Programm auf das Vorhandensein von Endlosschleifen untersuchen könnte, bevor das Programm ausgeführt wird. Dieses Problem ist als das Halteproblem bekannt geworden. Man könnte annehmen, dass Softwarefirmen weltweit beträchtliche Anstrengungen unternähmen, um das Halteproblem zu lösen. Glücklicherweise hat sich ein Ergebnis der theoretischen Informatik mittlerweile herum gesprochen: Das Halteproblem ist nicht berechenbar. Das Halteproblem für Java-Programme Gibt es ein Java-Programm, mit dessen Hilfe man für jedes beliebige Java- Programm entscheiden kann, ob es mit jeder beliebigen Eingabe nach endlich vielen Schritten abbricht oder nicht? Jedes Java-Programm (Quelltext) kann als eine einzige Zeichenkette (ein String) aufgefasst werden und kann als solches dann auch als Eingabe eines anderen Java-Programmes verwendet werden (Erinnerung: Wir haben schon einmal ein Java-Programm geschrieben, das andere Programme und auch sich selbst im Quelltext auf dem Bildschirm ausgeben konnte). Statt des oben angegebenen Halteproblems kann man auch folgendes Problem betrachten. Wir nennen es Selbstanwendbarkeitsproblem. Gibt es ein Java-Programm, das von jedem beliebigen Java-Programm, das sich selbst als Eingabe hat, entscheidet, ob es nach endlich vielen Schritten anhält oder nicht? Offensichtlich ist dies ein Spezialfall des zuerst angegebenen Problems. Wenn es sich aber für den Spezialfall herausstellen sollte, dass es ein solches Programm nicht gibt, dann gibt es ein solches Programm auch nicht für den allgemeineren Fall. Wir nennen ein Java-Programm selbststoppend, wenn es bei Anwendung auf sich selbst nach endlich vielen Schritten stoppt. Wir nehmen nun an, es gäbe ein Java-Programm, das entscheidet, ob ein anderes Java-Programm selbststoppend ist oder nicht. Wir nennen es Stopptester. Es könnte etwa so aussehen: class Stopptester { static boolean esstoppt; public static void main(string args[]) { // hier wird das eingegebene Programm // untersucht und je nach Ergebnis // die Variable esstoppt gesetzt. if (esstoppt) Out.println("Das Programm ist selbststoppend."); 4

else Out.println("Das Programm ist nicht selbststoppend."); Wenn ein solches Programm Stopptester existiert, dann existiert auch das folgende Programm, dass man Seltsam nennen könnte: class Seltsam { static boolean esstoppt; public static void main(string args[]) { // hier wird das eingegebene Programm // untersucht und je nach Ergebnis // die Variable esstoppt gesetzt. // Alles so wie in Stopptester. if (esstoppt) { Out.println("Das Programm ist selbststoppend."); while (1==1) { // Endlosschleife else Out.println("Das Programm ist nicht selbststoppend."); Der Unterschied zwischen den beiden Programmen besteht lediglich in der eingebauten Endlosschleife. Ist das Programm Seltsam nun selbststoppend? 1. Wir nehmen zuerst an, Seltsam sei selbststoppend. Zuerst wird der Testteil ausgeführt und die boolesche Variable erhält den Wert true, weil Seltsam ja laut Annahme selbststoppend ist. Dann wird der Text Das Programm ist selbststoppend. ausgegeben und das Programm läuft in eine Endlosschleife, was im Widerspruch zur Annahme ist. 2. Nun nehmen wir an, Seltsam sei nicht selbststoppend. Wieder wird der Testteil ausgeführt und die boolesche Variable erhält den Wert false, weil Seltsam ja laut Annahme nicht selbststoppend ist. Das führt aber dazu, dass der Text Das Programm ist nicht selbststoppend. ausgegeben und das Programm anschließend stoppt, was wiederum im Widerspruch zur Annahme ist. Das Programm Seltsam trägt seinen Namen zu recht, denn es kann nicht entschieden werden, ob es selbsstoppend ist oder nicht. Nach den Gesetzen der Logik kann es ein solches Programm nicht geben. Dann kann es aber auch das Programm Stopptester nicht geben, da Seltsam ja aus Stopptester konstruiert wurde. Damit ist dann vollständig bewiesen, dass es kein Java-Programm gibt, mit dessen Hilfe man für jedes andere Java-Programm entscheiden kann, ob es mit jeder beliebigen Eingabe anhält oder nicht. Der obige Beweis kann wie folgt zusammen gefasst werden: 1. Nehme an, es kann ein Programm Stopptester geschrieben werden. 5

2. Benutze es, um damit ein Programm Seltsam zu schreiben. 3. Zeige, dass das Programm Seltsam irgendeine undenkbare Eigenschaft (hier: es kann weder selbststoppend noch nicht-selbststoppend sein) hat. 4. Folgere, dass die Annahme in Schritt 1 falsch ist. Es ist alles noch viel schlimmer! Der Satz von RICE (1953) liefert ein noch viel vernichtenderes Ergebnis. Er besagt, dass wir nicht nur Programme nicht verifizieren können oder ihr Anhalteverhalten bestimmen, sondern dass wir im Grunde gar nichts über sie heraus finden können. Keine nichttriviale Eigenschaft der Berechenbarkeit kann algorithmisch entschieden werden. Um genauer zu sein: Angenommen, wir interessieren uns für eine Eigenschaft von Programmen, die 1. von einigen Programmen erfüllt wird und von anderen nicht, und die 2. syntaxunabhängig ist, d.h. eine Eigenschaft des zugrunde liegenden Algorithmus ist und nicht der speziellen Form, die er in einer Programmiersprache annimmt. Zum Beispiel könnten wir wissen wollen, ob ein Programm länger als eine gewisse Zeit braucht, jemals die Antwort ja liefert, ob es immer Zahlen ausgibt, ob es einem anderen Programm gleichwertig ist und so weiter. Der Satz von Rice sagt uns, dass keine solche Eigenschaft von Programmen entschieden werden kann. Wir können es vergessen, über Programme etwas auf maschinelle Weise aussagen zu wollen. Praktisch nichts, was Berechenbarkeit betrifft, ist berechenbar! Konsequenzen Nun könnte man meinen, dass es vielleicht doch gute Stopptester gibt, die viele Programme korrekt dahingehend untersuchen können, ob sie halten oder nicht. Für einfache Endlosschleifen mit offensichtlichen Fehlern ist dies sicherlich der Fall. Betrachtet man sich den Beweis, könnte man die Vermutung äußern, dass das Versagen erst durch die Anwendung des Programmes auf sich selbst auftritt. Dies ist aber nicht der Fall. Wir könnten z.b. ein Java-Programm schreiben, dass die natürlichen Zahlen nach dem Auftreten von Primzahlzwillingen untersucht, die gefundenen ausgibt und stoppt, wenn es keine weiteren mehr findet. Natürlich müssten wir Algorithmen entwickeln, um beliebig große Primzahlen untersuchen zu können. Dazu bräuchten wir auch einen unendlich großen Speicher (wie das unendlich lange Band bei der Turing-Maschine) oder zumindest einen Administrator, der bei Anforderung des Programmes neue Speicherchips in den Computer oder in ein externes Speichermodul einsteckt. Ein Betriebssystem müsste die Speichererweiterung während des Programmlaufes unterstützen. Das ist aber alles prinzipiell kein Problem. Wenn es ein Programm Stopptester gäbe, könnte dieses Programm das seit Jahrhunderten ungelöste Problem lösen, ob es unendlich viele Primzahlzwillinge gibt. Viele mathematische Probleme wären auf einen Schlag durch den Einsatz von Stopptester gelöst und viele Mathematiker arbeitslos. In diesem Sinne zeigt sich die enge Verwandschaft des Halteproblems mit dem Entscheidungsproblem. Vielen würde die Mathematik auch keinen Spass mehr machen, wenn alles durch eine Maschine gelöst werden könnte. 6

Tatsächlich kann man für viele andere Probleme zeigen, dass sie unlösbar sind, indem man sie auf das Halteproblem zurückführt. Die Informatiker (und allen voran Alan Turing) haben gezeigt, dass es Probleme gibt, die von Menschen durch Nachdenken gelöst, die aber von einem Computer niemals gelöst werden können. Computer können den aktuellen Schachweltmeister besiegen, aber niemals auch nur andeutungsweise das lösen, was mit einem menschlichen Gehirn lösbar ist. Irgendwie muss ein Gehirn ganz anders als ein Computer arbeiten. Das Irgendwie im letzten Satz ist die große Herausforderung der Zukunft, die uns Fragen zu der Art des menschlichen Denkens beantworten sollte. Ein pessimistischer Ausblick wäre der, dass man an die Probleme der Computerprogramme beim Anwenden auf sich selbst denkt, und daraus den Schluss zieht, dass das Gehirn beim Nachdenken über sich selbst und seine Arbeitsweise ebenso in paradoxe Situationen gerät und wir deshalb nie verstehen werden, warum wir verstehen und wie wir verstehen. Fragen zum Computer und zu dem, was ein Computer kann und was ihn vom Menschen unterscheidet, sind damit auch tiefgehende philosophische Fragestellungen. Mehr dazu in einem der nächsten Abschnitte: Können Computer denken?. 7