Funktionale Programmierung ALP I Turing-Maschine Teil I WS 2012/2013 Prof. Dr. Margarita Esponda Prof. Dr. Margarita Esponda Funktionale Programmierung Äquivalenz vieler Berechnungsmodelle Alonzo Church λ-Kalkül Kombinatorische Logik Alan Turing Turing-Maschine Mathematische Präzisierung µ-rekursive Funktionen Effektiv Berechenbare Funktionen Register Maschinen Prof. Dr. Margarita Esponda GOTOBerechenbar WHILEBerechenbar Moderne Programmiersprachen mit unendlichem Speicher Funktionale Programmierung Turing-These (1930) "Any computation carried out by mechanical means can be performed by a Turing Machine" Prof. Dr. Margarita Esponda Funktionale Programmierung Definition von Algorithmus Ein Algorithmus für eine Funktion f(x) ist eine TuringMaschine, die die Funktion f(x) berechnet. Wir können sagen, dass ein Algorithmus für eine Funktion f(x) existiert, wenn eine Turing-Maschine existiert, die diese Funktion berechnet. Prof. Dr. Margarita Esponda Funktionale Programmierung Funktionale Programmierung vs. Imperative Programmierung Formale Modelle für die Funktionale Programmiersprachen Lambda-Kalkül und Kombinatorische Logik für die Imperative Programmiersprachen Turing-Maschine Prof. Dr. Margarita Esponda Funktionale Programmierung Turing-Maschine Unendliches Band ... ... Lese-Schreibe-Kopf Hardware Prof. Dr. Margarita Esponda Funktionale Programmierung Turing-Maschine Unendliches Band ... ... Lese-Schreibe-Kopf Jeder Berechnungsschritt besteht aus nur drei einfachen Operationen: • Ein Symbol lesen • Ein Symbol schreiben • Den Kopf nach links oder rechts bewegen Prof. Dr. Margarita Esponda Funktionale Programmierung Turing-Maschine Zeitpunkt ti ... 1 1 0 0 1 0 ... liest eine 0 ... 1 1 0 1 1 0 ... scheibt eine 1 ... 1 Zeitpunkt ti+1 Prof. Dr. Margarita Esponda 1 0 1 1 0 ... bewegt den Kopf nach rechts Funktionale Programmierung Turing-Maschine als endlicher Automat Das Programm, beziehungsweise die Steuerung der TuringMaschine, kann als endlicher Automat dargestellt werden. Endzustand Startzustand 0 Z2 Prof. Dr. Margarita Esponda Z1 1 Z0 1 0 1 Ze 0 Z3 1 Funktionale Programmierung Turing-Maschine als Zustandstabelle Das Programm kann auch in Form einer Zustandstabelle geschrieben werden. Zustand Eingabe Ausgabe Bewegung Neuer Zustand Z0 1 0 R Z1 Z0 0 0 R Z2 Z1 1 1 R Ze Z1 0 0 R Z3 Z3 1 1 R Ze Z3 0 0 R Z2 ... ... ... ... ... Prof. Dr. Margarita Esponda Funktionale Programmierung Start-Konfiguration 1 Eingabe-String ... 1 1 0 1 1 0 2 Kopfposition 3 Anfangszustand Prof. Dr. Margarita Esponda 1 ... Funktionale Programmierung Zustandsübergang Schreibt Symbol Liest Symbol Kopfbewegung a → b, L Z1 a a b Z1 Prof. Dr. Margarita Esponda Z2 a b Z2 b Funktionale Programmierung Zustandsübergang Der Übergang zwischen zwei Zuständen muss deterministisch sein. erlaubt a→b, L Z1 nicht erlaubt Z2 Z1 b→b, R Z3 Prof. Dr. Margarita Esponda a→b, L Z2 a→b, R Z3 Funktionale Programmierung Zustandsübergang a b c Z2 Nicht für alle Symboleingaben erlaubt a→b, L Z1 Z2 b→b, R Z3 Prof. Dr. Margarita Esponda muss ein Zustandsübergang existieren. Funktionale Programmierung Halt Die Turing-Maschine bleibt stehen, wenn ein Endzustand erreicht worden ist, d.h. kein Übergang mehr möglich ist. Endzustand 1 Z1 Ze 0 Z2 Prof. Dr. Margarita Esponda 1 Funktionale Programmierung Turing-Maschine Beispiel: Folgende Turing-Maschine erlaubt nur Einsen als Eingabe und bleibt stehen, wenn der Kopf etwas anderes liest. 1→1, R Endzustand 0→0, L Ze Z0 → ,L 1 1 Z0 Prof. Dr. Margarita Esponda 1 Funktionale Programmierung Turing-Maschine Beispiel: Folgende Turing-Maschine erlaubt nur Einsen als Eingabe und bleibt stehen, wenn der Kopf etwas anderes liest. 1→1, R Endzustand 0→0, L Ze Z0 → ,L 1 1 1 Z0 Prof. Dr. Margarita Esponda Funktionale Programmierung Turing-Maschine Beispiel: Folgende Turing-Maschine erlaubt nur Einsen als Eingabe und bleibt stehen, wenn der Kopf etwas anderes liest. 1→1, R Endzustand 0→0, L Ze Z0 → ,L 1 1 1 Z0 Prof. Dr. Margarita Esponda Funktionale Programmierung Turing-Maschine Beispiel: Folgende Turing-Maschine erlaubt nur Einsen als Eingabe und bleibt stehen, wenn der Kopf etwas anderes liest. 1→1, R Endzustand 0→0, L Ze Z0 → ,L 1 1 1 Ze Prof. Dr. Margarita Esponda Funktionale Programmierung Turing-Maschine Beispiel: Folgende Turing-Maschine erlaubt nur Einsen als Eingabe und bleibt stehen, wenn der Kopf etwas anderes liest. Zustandstabelle Zustand Eingabe Ausgabe Bewegung Neuer Zustand Z0 1 1 R Z0 Z0 0 0 L Ze L Ze Z0 Ende Start 1 1 Z0 Prof. Dr. Margarita Esponda 1 1 1 1 Ze Funktionale Programmierung Formale Definition von Turing-Maschinen Zustandsmenge Eingabe-Alphabet Alphabet des Bandes TM = (Q, A, B, F, z0, Übergangsfunktion Leeres Symbol Anfangszustand Prof. Dr. Margarita Esponda , Zf) Menge der Endzustände Funktionale Programmierung … weitere Beispiele von TM Zahlen in einem unären Zahlensystem addieren • Start-Konfiguration gleich End-Konfiguration bedeutet, dass sich am Ende der Berechnungen der Lese/SchreibeKopf am Anfang des Ergebnis-Strings befindet. ... 1 1 1 1 1 1 • Die Zahlen werden wie folgt dargestellt: 1 = "1" 2 = "11" . . . usw. Prof. Dr. Margarita Esponda 1 ... Funktionale Programmierung 1→1,R Start Z1 ... →1,L Z2 1 Start an dieser Position ... Diese Turing-Maschine inkrementiert eine unäre Zahl. 1→1,L → 1 1 1 1 ,R Z3 1 1 1 1 ... Z1 1 1 1 1 1 ... 1 Z2 ... 1 1 Z3 Prof. Dr. Margarita Esponda 1 1 1 1 1 1 ... Funktionale Programmierung 1→1,R Turing-Maschinen 1→1,L Hier werden zwei Zahlen addiert Z1 ... →1,L → Z2 1 ,R Z3 1 1 1 1 1→ ,R Z4 1 1 1 ... 1 1 1 ... 1 1 1 ... Z1 ... 1 1 Z2 ... Prof. Dr. Margarita Esponda 1 1 Z4 1 Funktionale Programmierung Turing-Maschinen In folgender Turing-Maschine wird ein Block von Einsen kopiert und ein Leerzeichen dazwischen gelassen. 1→A,S 1→1,R A→A,R Z1 Z2 1→1,R → ,R Z3 1→1,L →1 ,S A→A,R → ,L 1→1,L Z6 Z7 → A→1,S Prof. Dr. Margarita Esponda ,R Z4 1→1,L → ,L Z5 Funktionale Programmierung Turing-Maschinen ... 1 1 Z1 Prof. Dr. Margarita Esponda 1 1 1 1 ...