Funktionale Programmierung ALP I. µ-rekursive Funktionen WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Ähnliche Dokumente
LOOP-Programme: Syntaktische Komponenten

ALP I Rekursive Funktionen

Funktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

GTI. Hannes Diener. 18. Juni. ENC B-0123,

Theorie der Informatik Einleitung. Theorie der Informatik Basisfunktionen und Einsetzung Primitive Rekursion. 14.

Theoretische Informatik SS 03 Übung 3

Theoretische Informatik SS 03 Übung 5

Grundlagen der Theoretischen Informatik II

8. Rekursive und primitiv rekursive Funktionen

LOOP-Programme: Syntaktische Komponenten

Primitiv rekursive Funktionen

1.2 LOOP-, WHILE- und GOTO-Berechenbarkeit

Primitive Rekursion. Basisfunktionen: Konstante Funktion: const 3 3 (1,1, pr 1,3(g,h) (1,1)) Projektion: proj 3 (1,1, pr. Komposition: comp 3,2

Theorie der Informatik

Theoretische Informatik II

Rekursive und primitiv rekursive Funktionen. Ein maschinenunabhängiges formales Berechnungsmodell auf den natürlichen Zahlen

Grundlagen der Informatik Kapitel 19. Harald Krottmaier Sven Havemann

Grundlagen Theoretischer Informatik 2 WiSe 2011/12 in Trier. Henning Fernau Universität Trier

Syntax von LOOP-Programmen

Mächtigkeit von WHILE-Programmen

Primitiv rekursive und µ-rekursive Funktionen

Def.: Die Menge der LOOP-Programme ist induktiv wie folgt definiert:

Einführung in die Theoretische Informatik

Wir suchen Antworten auf die folgenden Fragen: Was ist Berechenbarkeit? Wie kann man das intuitiv Berechenbare formal fassen?

( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

Einführung in die Theoretische Informatik

Berechenbarkeits- und Komplexitätstheorie

Automaten, Formale Sprachen und Berechenbarkeit I Wichtige Begriffe

Informatik I: Einführung in die Programmierung

WS 2009/10. Diskrete Strukturen

Primitiv rekursive und µ-rekursive Funktionen

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Rekursion

Theorie der Informatik

2. Algorithmenbegriff

(Prüfungs-)Aufgaben zur Berechenbarkeits- und Komplexitätstheorie

Berechenbarkeitsmodelle

Komplexität von Algorithmen

Einführung in die Informatik I

Ausgewählte Kapitel Diskreter Mathematik mit Anwendungen

Einführung in die Informatik I

Übung zur Vorlesung Berechenbarkeit und Komplexität

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 14/15

Einführung in die mathematische Logik

Rekursive Funktionen Basisfunktionen

Algorithmen & Programmierung. Rekursive Funktionen (1)

Lösungsvorschlag Serie 2 Rekursion

Die Ackermannfunktion

Algorithmen und Programmierung

LOOP-Programme 1. Def (Meyer/Ritchie). LOOP-Programme werden induktiv aufgebaut aus den (Basis-) Anweisungen. Führe P X-mal aus ) LOOP-Programme 2

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Funktionale Programmiersprachen

Syntax von Programmiersprachen

Theoretische Informatik: Berechenbarkeit und Formale Sprachen

Prof. Dr. Margarita Esponda

Teil III. Komplexitätstheorie

1.4 Die Ackermannfunktion

Übung zu Einführung in die Informatik # 11

Einführung in die mathematische Logik

JAVA-Datentypen und deren Wertebereich

6. Rekursive und primitiv rekursive Funktionen. Ein maschinenunabhängiges formales Berechnungsmodell auf den natürlichen Zahlen

Programmieren für Fortgeschrittene

Einführung in die Informatik 1

Vorkurs Mathematik und Informatik Mengen, natürliche Zahlen, Induktion

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS Prof. Dr. Margarita Esponda. Prof. Dr.

Modellierung verteilter Systeme Grundlagen der Programm und Systementwicklung

Funktionen höherer Ordnung

WS 2009/10. Diskrete Strukturen

3. Grundanweisungen in Java

GTI. µ-rekursive Funktionen. Hannes Diener. 20. Juni 2. Juli. ENC B-0123,

C++ - Einführung in die Programmiersprache Schleifen

Theoretische Informatik: Berechenbarkeit und Formale Sprachen

Mitschrift BFS WS 13/14

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Der erste Gödelsche Unvollständigkeitssatz

Elementare Konzepte von

Komplexität. G. Zachmann Clausthal University, Germany Leistungsverhalten von Algorithmen

Wertebereich und Genauigkeit der Zahlendarstellung

Theoretische Informatik Kap 2: Berechnungstheorie

3.4 Struktur von Programmen

Berechenbarkeit/Entscheidbarkeit

Berechenbarkeit. Script, Kapitel 2

EINFÜHRUNG IN DIE THEORETISCHE INFORMATIK 0. ORGANISATORISCHES UND ÜBERBLICK

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Einschub: Anweisungen und Bedingungen für PAP und Struktogramme (1)

Unvollständigkeit der Arithmetik

Einführung in die Informatik Algorithms

Programmierkurs Python I

1 Syntax von Programmiersprachen

Theoretische Informatik II

Inhaltsverzeichnis. Einführende Bemerkungen 11. Das Fach Informatik 11 Zielsetzung der Vorlesung Grundbegriffe

Praktische Informatik I Der Imperative Kern Rekursive Funktionen

Rekursion und Induktion

Berechenbarkeit und Komplexität: Rekursive Aufzählbarkeit und die Technik der Reduktion

2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung:

Abschnitt 3: Mathematische Grundlagen

Programmierkurs Java

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Sin-Funktion vgl. Cos-Funktion

Transkript:

ALP I µ-rekursive Funktionen WS 2012/2013

Primitiv-rekursive Funktionen Jede primitiv-rekursive Funktion ist Loop-berechenbar. Das bedeutet, dass jede PR-Funktion in der Loop-Programmiersprache formuliert werden kann. Jede Loop-berechenbare Funktion ist auch eine PR-Funktion. Loop-Sprache: - stark beschränkte Programmiersprache nur Addition, Zuweisungen und loop-schleifen sind erlaubt - Loop-Programme terminieren immer. - Die Laufzeit kann genau berechnet werden.

Loop-Sprache Syntaktische Komponenten: 3 Schlüsselwörter: Loop, Do, End 4 Sondersymbole: +, -, ;, := Beliebige Variablennamen: x 1, x 2, x 3,... Beliebige Konstanten: 0, 1, 2,... Syntax in BNF: P := x i := x j + c x i := x j c P;P LOOP x i DO P END Wertzuweisungen sequentielle Komposition endliche Schleife

Zusammengefast: Primitiv-rekursive Funktionen Jede primitiv-rekursive Funktion kann mit Hilfe einer Loop-Schleife berechnet werden und umgekehrt. Addition x 1 + x 2 x 3 x3 := x1 + 0 LOOP x2 DO x3 := x3 + 1 END Berechnet die n-te Fibonacci-Zahl (Eingabe in x n und Ausgabe in x fib ) x 2 := 0; x 1 := x 2 +1; x fib := 0; x n := n; LOOP x n DO END x 2 := x fib + 0 LOOP x 1 x fib := x fib + 1 END x 1 := x 2 + 0

Ackermann-Funktion Bis 1926 vermutete Hilbert, dass jede totale berechenbare Funktion primitiv rekursiv ist, bis zwei von seinen Schülern, Ackermann (1928) und Sudan (1927), Funktionen entdeckten, die nicht primitiv rekursiv aber total berechenbar sind. Ackerman-Péter-Funktion ack :: Integer -> Integer -> Integer ack 0 n = n + 1 ack (m+1) 0 = ack m 1 ack (m+1) (n+1) = ack m (ack (m+1) n)

Ackerman-Péter-Funktion ack 0 n = n + 1 ack (m+1) 0 = ack m 1 Reduktionsverlauf: ack (m+1) (n+1) = ack m (ack (m+1) n) ack 2 3 => ack 1 (ack 2 2) => ack 1 (ack 1 (ack 2 1)) m+1 n+1 (m+1) rekursive Aufrufe von (n-1) => ack 1 (ack 1 (ack 1 (ack 2 0))) 4 rekursive Aufrufe von 1 => ack 1 (ack 1 (ack 1 (ack 1 1))) => ack 1 (ack 1 (ack 1 (ack 0 (ack 1 0)))) => ack 1 (ack 1 (ack 1 (ack 0 (ack 0 1)))) => ack 1 (ack 1 (ack 1 (ack 0 2))) => ack 1 (ack 1 (ack 1 3)) => ack 1 (ack 1 (ack 0 (ack 1 2))) => ack 1 (ack 1 (ack 0 (ack 0 (ack 1 1)))) => ack 1 (ack 1 (ack 0 (ack 0 (ack 0 (ack 1 0))))) => ack 1 (ack 1 (ack 0 (ack 0 (ack 0 (ack 0 1))))) => ack 1 (ack 1 (ack 0 (ack 0 (ack 0 2)))) => ack 1 (ack 1 (ack 0 (ack 0 3))) => ack 1 (ack 1 (ack 0 4)) => ack 1 (ack 1 5) => ack 1 (ack 0 (ack 1 4)) => ack 1 (ack 0 (ack 0 (ack 1 3))) => ack 1 (ack 0 (ack 0 (ack 0 (ack 1 2)))) => ack 1 (ack 0 (ack 0 (ack 0 (ack 0 (ack 1 1))))) => ack 1 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 1 0)))))) =>...

... => ack 1 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 1 0)))))) => ack 1 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 1)))))) => ack 1 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 2))))) => ack 1 (ack 0 (ack 0 (ack 0 (ack 0 3)))) => ack 1 (ack 0 (ack 0 (ack 0 4))) => ack 1 (ack 0 (ack 0 5)) => ack 1 (ack 0 6) ack 0 n = n + 1 => ack 1 7 ack (m+1) 0 = ack m 1 => ack 0 (ack 1 6) ack (m+1) (n+1) = ack m (ack (m+1) n) => ack 0 (ack 0 (ack 1 5)) => ack 0 (ack 0 (ack 0 (ack 1 4))) => ack 0 (ack 0 (ack 0 (ack 0 (ack 1 3)))) => ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 1 2))))) => ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 1 1)))))) => ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 1 0))))))) => ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 1))))))) => ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 2)))))) => ack 0 (ack 0 (ack 0 (ack 0 (ack 0 (ack 0 3))))) => ack 0 (ack 0 (ack 0 (ack 0 (ack 0 4)))) => ack 0 (ack 0 (ack 0 (ack 0 5))) => ack 0 (ack 0 (ack 0 6)) => ack 0 (ack 0 7)) => ack 0 8 => 9 Die Argumente bewegen sich nicht immer in Richtung der Abbruchbedingung.

... ack 4 2 => (19,729 Ziffern) Ackermann-Funktion

die Folge n+1, n+m, n*m, n m,...... ab hier reichen unsere bekannten arithmetischen Operationen nicht mehr Idee Up-Arrow-Notation von Knuth a b = a x a x x a b Wiederholungen von a a b = a a a b Wiederholungen von a = a ( a (a a) ) = a a b = a a a b Wiederholungen von a a a a... b Wiederholungen von a

Up-Arrow-Notation von Knuth m Wiederholungen von im allgemeinen: a m b = a b = a m-1 a m-1 m-1 a b Wiederholungen von a = a m-1 (a m-1 (a m-1 a) ) Beispiel: 2 3 = 2 x 2 x 2 = 8 2 3 = 2 2 2 = 2 4 = 2 x 2 x 2 x 2 = 16 2 3 = 2 2 2 = 2 4 = 2 2 4 = 2 16 = 65536

ack(0,n) = n+1 Ack(m,n) ack(1,n) = n+2 = 2 + (n+3) -3 ack(2,n) = 2n+3 = 2 x (n+3) -3 ack(3,n) = 2 (n+3) -3 = 2 "" (n+3) -3 ack(4,n) = = 2 (n+3) -3 ack(5,n) = = 2 (n+3) -3 ack(m,n) = = 2 m-2 (n+3) -3

Ackermann-Funktion - verschachtelte Rekursion. Das bedeutet, ein Argument des rekursiven Aufrufs muss selbst erst rekursiv berechnet werden - nicht primitiv rekursiv, aber berechenbar - wächst schneller als jede primitiv-rekursive Funktion - eine Komplexitätsanalyse wird unmöglich - der Verwaltungsaufwand des Ausführungsstapels ist extrem groß

Sudan-Funktion Definition: in Haskell: sud :: Integer -> Integer -> Integer -> Integer sud 0 x y = x+y sud n x 0 = x sud n x y = sud (n-1) (sud n x (y-1)) ((sud n x (y-1)) + (y-1) + 1) prelude> sud 2 2 2 15569256417 it :: Integer (3501.87 secs, 302851025060 bytes)

µ-rekursive Funktionen 1. Alle primitiv-rekursive Funktionen sind auch µ-rekursive Funktionen. 2. mit dem µ-operator als weiterem Konstruktionsoperator wird die Klasse der primitiv-rekursiven Funktionen auf die Klasse der partiellen µ-rekursiven Funktionen erweitert 3. und damit die Klasse der intuitiv berechenbaren Funktionen konstruiert.

Der unbeschränkte µ-operator Sei f : N m+1 N eine partielle Funktion, dann ist die partielle Funktion µf : N m N definiert durch: µf (x 1,...,x m ) = min M (f, x 1,...,x m ) falls M(f, x 1,...,x m ) θ undefiniert sonst wobei die Menge M ( f, x 1,..., x m ) als { n 0 f (x 1,...,x m, n ) = 0 und f (x 1,...,x m, k ) für alle n k definiert ist }

Der unbeschränkte µ-operator Sei b eine Funktion, die angewendet auf x, y (natürliche Zahlen) testet, ob y eine Primzahl und gleichzeitig größer als x ist. b (x, y) = 1 falls y eine Primzahl größer als x ist 0 sonst Folgende Funktion liefert die kleinste Primzahl, die größer als x ist: f(x) = µ y [ 1 - b(x, y) ] liefert das kleinste y, sodass die Bedingung erfüllt wird. Sei g (n, y) = 1 - b(n, y) y := 0; while g(n,y) 0 do y := y+1; f := y;

Äquivalenz vieler Berechnungsmodelle Effektiv Berechenbare Funktionen Mathematische Modelle Maschinelle Modelle Register Maschinen ALP II Turing-Maschine Theoretische Informatik I λ-kalkül Kombinatorische Logik µ-rekursive Funktionen Allgemein rekursive Funktionen

µ-rekursive Funktionen Effektiv Berechenbare Funktionen Primitiv Rekursive Funktionen Allgemein rekursive Funktionen Mathematische Modelle µ-rekursive Funktionen Loop- Berechenbar While- Berechenbar Maschinelle Modelle