Grundlagen der Informatik Kapitel 19 Harald Krottmaier Sven Havemann Agenda • Begriffe • Turingmaschine – Beispiele • Berechenbarkeit – Hilfsmittel – Beispiele WS2007 2 Motivation • Sind Computer „allmächtig“? • Präziser: Ist alles von einem Computer berechenbar? WS2007 3 1937… • Alan Turing – Engl. Mathematiker, Gigant! • Berechnung von Funktionen: • Partielle Funktion: Nur eine Teilmenge aller möglichen Eingaben wird akzeptiert: WS2007 4 Berechenbare Funktion • “Eine Funktion heißt berechenbar, wenn ein Algorithmus gefunden werden kann, der die Funktion berechnet.” – Eine Funktion ist eine Abbildung – Ein Algorithmus ist eine endliche Berechnungsvorschrift WS2007 5 Bsp. Berechenbare Funktion • f(n) = 2n • g(n) = (4n) * 0.5 • f und g sind gleiche Funktionen, aber mit unterschiedlichen Berechnungsvorschriften • h(n)=100/(n-1) ist partielle Funktion, undefiniert für n=1 WS2007 6 Eine nicht berechenbare Funktion • Sei f(i,j) eine Funktion, die alle möglichen Folgen natürlicher Zahlen enthält, also f(i,j) { 0,..,9 } – Eigentlich Liste von Ziffernfolgen! • f(i): i-te Folge, entspricht den nichtabbrechenden Dezimalzahlen zwischen 0.0 und unter 1.0 –0 . 9 1 3 9 1 3 0 1 3 2 9 7 2 3 2 3 4 … WS2007 7 Eine nicht berechenbare Funktion • Konstruiere nun eine neue Funktion die sich von jeder Funktion in der Liste unterscheidet: – g(j) sei 0 wenn f(j,j) 0 – g(j) sei 1 wenn f(j,j) = 0 • g unterscheidet sich von allen Funktionen in der Liste! • Also enthält f nicht alle Folgen! WS2007 8 Nicht berechenbare Funktionen • Diagonalverfahren nach Cantor (1873) • Georg Cantor: Begründer der Mengenlehre – Gigant! WS2007 9 Bsp.: Diagonalverfahren WS2007 10 Nicht durch Algorithmus berechenbare Funktionen • Potenzmenge P(IN) – Das ist die Menge aller möglichen Teilmengen von IN – Es gibt mehr Teilmengen als es Elemente von IN gibt • P(IN) ist überabzählbar • Die Menge aller Funktionen f: IN IN ist auch überabzählbar WS2007 11 Wieviele Algorithmen gibt es? • Ein Algorithmus besteht aus einem endlichen Wort aus ∑* • Es gibt nur abzählbar viele Algorithmen! – Wirklich? Wie zählt man sie ab?? • Es gibt daher auch nur abzählbar viele berechenbare Funktionen! • Es gibt also sehr viele Funktionen, die nicht durch einen Algorithmus berechnet werden können! WS2007 12 Die Church'sche These • "Die Klasse der Turing-berechenbaren Funktionen ist genau die Klasse der intuitiv berechenbaren Funktionen." • Die Church´sche These ist nicht beweisbar – Problem: "intuitiv berechenbar.." • Satz: "Die Menge der berechenbaren Funktionen ist die Menge aller Funktionen, die sich mit einer Turingmaschine berechnen lassen." WS2007 13 Berechenbarkeitskonzepte WS2007 14 Die Turingmaschine • Alan Turing: allgemeines Konzept einer „rechnenden Maschine" – – – – WS2007 unbegrenztes Arbeitsband, in Felder unterteilt Lese-/Schreib-Kopf an aktueller Position Maschine selbst hat endlich viele Zustände Maschine kann Zeichen in Arbeitsfeld lesen und abhängig vom aktuellen Zustand • Neues Zeichen in Arbeitsfeld schreiben • Nach rechts oder links gehen und dann • In einen neuen Zustand übergehen 15 Die Turingmaschine formal 7-Tupel: WS2007 16 Wichtiger Satz in der Informatik: • Jedes Problem, das überhaupt maschinell lösbar ist, kann auch von einer Turingmaschine gelöst werden • Problem nur im Einzelfall: Finde die richtige Überführungsfunktion…. – (schreibe das richtige C-Programm) WS2007 17 Bsp Turingmaschine: Paritätsprüfung • Ungerade Anzahl von Strichen (I, III, IIIII, ...) akzeptieren, sonst nicht! – Leere Bandfelder enthalten ein # • Zustandsgraph: WS2007 18 Tätigkeit der Turingmaschine: • Liste von 5-Tupeln: – Aktueller Zustand – Eingabezeichen – Ausgabezeichen – Kopfbewegung – Folgezustand aus Z aus Σ Γ aus Γ aus {L,N,R} aus Z • Praktischerweise als Tabelle angeben, „Turingtabelle“ WS2007 19 Für Paritätsprüfungsbeispiel: • Braucht drei 5-Tupel, Schreibweise: – 1I#R2 „liest die Maschine in Zustand 1 ein I, so schreibt sie ein #, geht nach rechts und geht in Zustand 2“ – 2I#R1 – 2##N3 • Zustand 1: gerade, 2: ungerade Anz • Zustand 3: Maschine hat ungerade Anzahl von "I" gelesen. WS2007 20 WS2007 21 Bsp.: Duale Addition von 1 • z.B. – Eingabe: #1100# – Ausgabe: #1101# • oder: – Eingabe: #11011# – Ausgabe: #11100# WS2007 22 Turingmaschine: Binärinkrement WS2007 23 Bsp.: Erkennen einer Sprache • Wörter aus der formalen Sprache L={anbncn | n≥0} werden akzeptiert – abc – aabbcc – aaabbbccc – aaaabbbbcccc – ... WS2007 24 L={anbncn | n≥0} „Finde den Fehler“ WS2007 25 Weitere Ideen… • Verdopplungsmaschine: Aus n Strichen mache 2n Striche • Multipliziermaschine: aus III#IIII mache xxx#IIII#IIIIIIIIIIII – Mit x-en mitzählen, wie oft schon addiert worden ist • Unterprogramme: Sub-Tabellen… – Sequenzielle Ausführung von TMs WS2007 26 Viele Varianten von TMs... • Varianten von Turingmaschinen: – mehrere Eingabebänder – einseitig begrenztes Band – Grosses Eingabealphabet –… • Aber: Alle TMs sind gleichwertig! – jedes Alphabet lässt sich beispielsweise auf {#, 0, 1} reduzieren WS2007 27 Turing-berechenbare Funktionen • Partielle Funktion f: INk IN berechnen – Argumente (n1, n2, ..., nk) auf Band kodieren z.B. als #n1# n2# ... #nk# – L/S-Kopf ganz links, dann starte TM • Wenn TM anhält: – Ergebnis ist ab dem Zeichen unter dem L/SKopf ablesbar – Wird Eingabe akzeptiert, ist das Ergebnis f (n1, n2, ..., nk), sonst: • TM hält nicht an oder • unter L/S-Kopf ist keine Zahl WS2007 28 Registermaschine • Speicher – Datenspeicher – Programmspeicher • Prozessor – Akkumulator – Befehlsregister – Befehlszähler • Ein/Ausgabe-Einheit WS2007 29 Registermaschine WS2007 30 Registermaschine • Einfaches, abstrahiertes Modell eines von-Neumann-Rechners • RM kann alles berechnen, was auch ein realer Rechner berechnen kann. • RM kann TM simulieren! • TM kann RM simulieren! • Äquivalente Berechnungsmodelle WS2007 31 Modell-Sprachen • Einfache modellhafte Sprachen: – GOTO-Sprache – WHILE-Sprache – LOOP-Sprache • Satz: Jede Turing-berechenbare Funktion ist auch GOTO und WHILE-berechenbar – LOOP ist schwächer… WS2007 32 GOTO-Programmiersprache • Wie RM, aber statt Registern Variablennamen, und einfache Syntax: • Jede numerierte Zeile enthält entweder – Zuweisung eines berechneten Terms an eine Variable • x := 2*a + 4*b – Bedingten oder unbedingten Sprungbefehl • IF bedingung GOTO zeile • GOTO zeile WS2007 33 GOTO: Addition • Addition zweier natürlicher Zahlen x = a + b wenn Prozessor nur succ und nicht + beherrscht: WS2007 34 WHILE-Programmiersprache • Programm besteht aus einem von: – Zuweisung – bedingte Anweisung – WHILE-Schleife – Sequenz von Programmen WS2007 35 WHILE-Sprache: Addition • x=a+b WS2007 36 WHILE-Sprache: Multiplikation • e=a*b WS2007 37 WHILE durch GOTO • WHILE-Schleife wird durch bedingten Sprung nachgebildet WS2007 38 GOTO durch WHILE WS2007 39 Kleene'sches Theorem • Äquivalent: Jedes GOTO-Programm lässt sich in ein WHILE-Programm umwandeln und umgekehrt • Kleene'sches Normalformentheorem: "Jede berechenbare Funktion kann mit einer einzigen WHILE-Schleife programmiert werden." WS2007 40 LOOP-Programme • auch FOR-Programme genannt… • WHILE-Schleife durch FOR-Schleife ersetzt, aber: Durchlaufanzahl fest! WS2007 41 Eigenschaften LOOP-Prog. • Endlicher Durchlauf aller Schleifen – Schleifenvariable i darf im Body der Schleife nicht geändert werden! • Konsequenz: – LOOP-Programme terminieren immer! – Start-/Endwert ist immer angegeben • LOOP nicht so mächtig wie WHILE – Kein TM-Simulator mit LOOP möglich WS2007 42 Primitive Rekursion • Funktion durch Rekursion berechnet, kommt ohne Zuweisung/Schleifen aus – z.B. in funktionalen Programmiersprachen • Definition Primitive Rekursion: WS2007 43 Primitive Rekursion • Erlaubt sind dazu noch: – Funktions-Komposition – Vertauschen von Argumentpositionen – Projektion • Eine Funktion heisst primitiv rekursiv, wenn sie aus 0, succ() und den Projektionen von Verkettung und primitiver Rekursion gebildet werden kann WS2007 44 Primitive Rekursion • Projektion: ist definiert durch pk,i : INk → IN pk,i(x1,…, xk) = xi • Verkettung: Ist f n-stellige und g1,…, gn k-stellige Funktion, so ist die Verkettung f ◦ (g1,…, gn) : INk → IN definiert durch: (f ◦ (g1,…, gn))(x1,…, xk) = f (g1(x1,…, xk),…, gn(x1,…, xk)) WS2007 45 Bsp.: Primitive Rekursion WS2007 46 Bsp. LOOP-Programm WS2007 47 Primitive Rekursion als LOOP-Programm • Satz: Jede primitiv-rekursive Funktion ist LOOP-berechenbar • Jede „vernünftig“ total berechenbare Funktion ist primitiv rekursiv, wobei „vernünftig“ bedeutet, dass man die maximal möglichen Schleifendurchläufe vorab bestimmen kann. • Das ist weniger als TM-Berechenbarkeit! WS2007 48 µ-Rekursion • Es gibt Probleme, die sich nicht mehr primitiv-rekursiv lösen lassen • z.B. Suchprobleme: Suche für (k+1)stellige Funktion f das kleinste z, für das f(z, x1, ..., xk) = true ist • Argument wird beim rekursiven Aufruf nicht kleiner, sondern größer! WS2007 49 µ-Rekursion • Mögliches Problem: Suche bricht niemals ab – z.B. wenn es kein z gibt, für das f true liefert WS2007 50 µ-Rekursion versus WHILE-berechenbar • Beide Klassen stimmen überein: • Alle µ-rekursiven Funktionen sind WHILE-berechenbar (und damit auch GOTO- und Turing-berechenbar) • Nach Kleene kommt man mit einer einzigen WHILE-Schleife aus! • Also gilt: Jede berechenbare Funktion lässt sich als µ-rekursive Funktion schreiben WS2007 51 µ-Rekursion durch WHILE • Ziemlich offensichtlich: WS2007 52 Bisher: • Jede LOOP-berechenbare Funktion ist total (d.h., terminiert immer!) • Jede total berechenbare Funktion, für die mit LOOP-Programmen eine Abschätzung der max. möglichen Schleifendurchläufe möglich ist, ist auch LOOP-berechenbar. • LOOP-berechenbare Funktion sind genau die primitiv rekursiven Funktionen. WS2007 53 Frage: • Ist jede total berechenbare Funktion immer durch ein LOOP-Programm berechenbar? WS2007 54 Ackermann-Funktion • totale, berechenbare Funktion • nicht primitiv rekursiv! • [Ackermann-Péter] • = m+1 wenn n=0 a(m,n) = a(n-1,1) wenn m=0 = a(n-1,a(n,m-1)) sonst WS2007 55 Ackermann-Funktion • Wächst sehr stark an • Kann von keiner primitiv rekursiven Funktion nach oben beschränkt werden WS2007 56 Ackermann-Funktion • Verallgemeinerung der Grundrechenarten: – a(0,y) = y+1 – a(1,y) = y+2 – a(2,y) = 2y + 3 – a(3,y) = 2y+3-3 – a(4,y) = 2X-3 WS2007 wobei X=2^…^2 mit „Turmhöhe“ y+2 57 Unlösbare Probleme Prinzipiell unlösbare Probleme • Ein Algorithmus kann angegeben werden, aber ein Computer kann das Problem nicht lösen. • Probleme, die niemals durch menschliche Erfindungskraft und technisch-wissenschaftlichen Fortschritt zu lösen sein werden WS2007 59 Entscheidbare Menge • „Eine Menge M heißt rekursiv entscheidbar oder entscheidbar, wenn es einen Algorithmus gibt, der nach endlicher Zeit terminiert und entscheidet, ob die Eingabe zur Menge gehört oder nicht." WS2007 60 Bsp: Entscheidbare Menge: Goldbach-Vermutung • "Jede gerade Zahl größer als 2 kann als Summe zweier Primzahlen geschrieben werden.„ – Nun als „Goldbach-Eigenschaft“ • [für alle Zahlen bis 1018 überprüft...] • [Satz von Euklid: es gibt unendlich viele Primzahlen...] WS2007 61 Semi-entscheidbare Menge • Frage: Element in Menge? – Ja – Nein • Eine der beiden Antworten muss in endlicher Zeit gegeben werden – Die andere darf unendlich dauern… WS2007 62 Bsp. (3n+1)-Problem • „Collatz-Folge“ • Startzahl heißt "wundersam", wenn Folge mit Zahl 1 endet • Startzahl 6: Folge 3, 10, 5, 16, 8, 4, 2, 1 • Folge kann sehr, sehr lang werden! • Wundersamkeit ist semi-entscheidbar! WS2007 63 Bsp. "Game of Life" • Drei Regeln: – Geburt: Tote Zelle wird lebendig, wenn 3 der 8 Nachbarn leben – Überbevölkerung: Zelle stirbt, wenn 4 oder mehr Nachbarn leben – Vereinsamung: Zelle stirbt, wenn sie weniger als 2 lebende Nachbarn hat • Semi-entscheidbar? WS2007 64 Das Halteproblem • "Gibt es ein Programm, das als Eingabe den Quelltext eines zweiten Programms sowie dessen Eingabewerte erhält, und dann entscheiden kann, ob das zweite Programm terminiert, d.h. nicht endlos weiterläuft?" WS2007 65 Halteproblem • Angenommen, es gibt so eine Fkt: WS2007 66 Halteproblem • Dann kann man ein fiese Funktion test() bauen, die nur dann nicht terminiert, wenn haltetest JA gibt: WS2007 67 Halteproblem • Wende nun test auf sich selber an, also berechne test(test) – haltetest(test,test) liefert JA weil test(test) terminiert: Aber dann kann das WHILE in test() nicht terminieren! – Widerspruch. – haltetest(test,test) liefert NEIN: Dann terminiert das WHILE sofort – Widerspruch. WS2007 68 Halteproblem • Beide Fälle führen zum Widerspruch, es gibt aber nur die beiden Fälle, also kann es die Funktion haltetest nicht geben! • Halteproblem semi-entscheidbar: TM simulieren und JA ausgeben, wenn sie anhält. WS2007 69 Konsequenzen des Halteproblems • „In jedem System, das Turingmächtig ist, lassen sich Aussagen formulieren, die weder bewiesen noch widerlegt werden können. Solche Systeme sind grundsätzlich unvollständig“ • Die Arithmetik ist solch ein System. WS2007 70 Konsequenzen des Halteproblems • Auswirkung auf die Software-Entwicklung: • Es kann kein Computerprogramm geben, das generell überprüft, ob andere Computerprogramme für alle Eingaben das korrekte Ergebnis liefern WS2007 71 Zusammenfassung • Turingmaschine – Simulator ausprobieren! • GOTO, WHILE, LOOP • Unlösbare Probleme WS2007 72 Organisatorisches... • Prüfung – Termine – Prüfungsfragen WS2007 73 Quellen • "Grundlagen der Informatik", Herold, Lurz, Wohlrab; Pearson Studium • Wikipedia WS2007 74