2. Imperative Programmierung und Berechenbarkeit - Registermaschinen -

Ähnliche Dokumente
Theorie der Informatik Einleitung. Theorie der Informatik Basisfunktionen und Einsetzung Primitive Rekursion. 14.

Typen von Programmiersprachen

LOOP-Programme: Syntaktische Komponenten

ALP I Primitiv-Rekursive Funktionen

1.2 LOOP-, WHILE- und GOTO-Berechenbarkeit

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

Syntax von LOOP-Programmen

Mächtigkeit von WHILE-Programmen

Wiederholung. Organisatorisches. VL-11: LOOP und WHILE Programme I. (Berechenbarkeit und Komplexität, WS 2017) Gerhard Woeginger

VL-11: LOOP und WHILE Programme I. (Berechenbarkeit und Komplexität, WS 2017) Gerhard Woeginger

LOOP-Programme: Syntaktische Komponenten

ALP I Rekursive Funktionen

Theorie der Informatik

Theoretische Informatik II. WS 2007/2008 Jun.-Prof. Dr. Bernhard Beckert Ulrich Koch. 1. Teilklausur Vorname:... Nachname:...

Turing-Maschinen: Ein abstrakes Maschinenmodell

8. Rekursive und primitiv rekursive Funktionen

Mächtigkeit von WHILE-Programmen

Berechenbarkeit und Komplexität Vorlesung 11

GOTO simuliert Turingmaschinen

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

Berechenbarkeitsmodelle

Grundlagen der Theoretischen Informatik: Übung 10

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

Dank. Theoretische Informatik II. Teil II. Registermaschinen. Vorlesung

Theoretische Informatik II

Berechenbarkeit. Serie 4. Die Seminaraufgaben werden in den Übungen vom bis besprochen.

1.3 Primitiv rekursive und µ-rekursive Funktionen

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

Theoretische Informatik II

Grundlagen der Informatik Kapitel 19. Harald Krottmaier Sven Havemann

Rekursive Funktionen Basisfunktionen

Primitiv rekursive und µ-rekursive Funktionen

Mächtigkeit von WHILE-Programmen

Einführung in die Theoretische Informatik

Primitiv rekursive und µ-rekursive Funktionen

Einführung in die Informatik I

Theorie der Informatik

Theoretische Informatik für Wirtschaftsinformatik und Lehramt

Primitiv rekursive Funktionen

Berechenbarkeit und Komplexität: Mächtigkeit von Programmiersprachen: WHILE- und LOOP-Programme

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

Einführung in die Berechenbarkeitstheorie

Theorie der Informatik

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

Berechenbarkeit. Script, Kapitel 2

Proseminar Theoretische Informatik - WS07/08 - Prof. Helmut Alt. I. Einleitung Berechnungsmodelle LOOP, WHILE, GOTO, rekursive Funktionen

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

Theoretische Informatik 1

Theoretische Informatik SS 03 Übung 3

Primitiv rekursive Codier- und Decodierfunktionen

THEORETISCHE INFORMATIK UND LOGIK

Nachklausur zur Vorlesung

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

1.4 Die Ackermannfunktion

Theoretische Informatik 1

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

Theoretische Informatik II

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

6.2 µ-rekursive Funktionen R p (N) (partiell rekursive Funktionen)

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

Theoretische Informatik 1

6. REKURSIVE FUNKTIONEN Ein maschinenunabhängiges formales Berechnungsmodell auf den natürlichen Zahlen

Berechenbarkeit und Komplexität: Mächtigkeit von Programmiersprachen: WHILE- und LOOP Programme

THEORETISCHE INFORMATIK UND LOGIK

Theoretische Informatik II

Ausgewählte Kapitel Diskreter Mathematik mit Anwendungen

Einführung in die Theoretische Informatik

Theoretische Informatik SS 03 Übung 5

Berechenbarkeit und Komplexität Vorlesung 10

1.5 Turing-Berechenbarkeit

ALP I Turing-Maschine

Logik und Beweisbarkeit

Problem: Gegeben Spezifikation (P,Q) und Implementierung S Gesucht formaler (automatisierbarer?) Beweis, dass S (P,Q) erfüllt.

Einführung in die Programmierung

1.5 Turing-Berechenbarkeit

6.4 Entscheidbarkeit. nein sein müssen, ist klar. THEO 6.4 Entscheidbarkeit 205/307 c Ernst W. Mayr

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

Die primitiv rekursiven Funktionen

Berechenbarkeit und Komplexität

Inhalt Kapitel 2: Rekursion

Der Satz von Rice. Dann ist C(S) eine unentscheidbare Menge.

Einführung in die Informatik I

Von der Programmiersprache WHILE zum ersten Einstieg in Java

Mitschrift BFS WS 13/14

Einführung in die Theoretische Informatik

Zahlen in Haskell Kapitel 3

Logik und Beweisbarkeit

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Theoretische Informatik

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Grundlagen der Programmierung

Mächtigkeit von LOOP-Programmen. Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität RWTH Aachen

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

Einführung in die Theoretische Informatik

Transkript:

2. Imperative Programmierung und Berechenbarkeit - Registermaschinen - 2.1 Definition 2.2 Loop-Programme 2.3 While Programme 2.4 While Programme und rekursive Funktionen Im Wesentlichen: Tafel!

Maschinenmodell Registermaschine - Register x1, xn -- endlich viele Speicherregister - Ein Befehlsregister b Operationen werden durch die "Programmiersprache" festgelegt. Befehlssatz einer LOOP-RM: xi = xj + c xi = xj c LOOP xi {<Befehlsfolge>} Konstanten c : natürliche Zahlen Semantik: - Addition wie üblich - Subtraktion: xi erhält den Wert xj c, wenn xj c 0 sonst 0 hs / fub - alp2-2 2

Beispiel: einfache Programme Multiplikation: x i = x j *x k LOOP x i {x i = x i -1} LOOP x j {x i = x i +x k } Und wie definiert man x i = x j + x k?? Welche Funktionen lassen sich mit LOOP-Programmen berechnen? hs / fub - alp2-2 3

LOOP-Programme Satz: Mit LOOP-Programmen kann man genau die primitiv rekursiven Funktionen f k :: N k N berechnen. aber das sind bekanntlich nicht alle berechenbaren Funktionen. Loop Programme terminieren immer! Warum? hs / fub - alp2-2 4

Primitiv rekursive Grundfunktionen (I) 1. Konstante 0 Wiederholung aus ALP1 2. Nachfolgerfunktion succ succ (0), succ(succ(0)),... succ(x) = x+1 (*) 3. Projektionen proj m,i : N m -> N, m N proj m,i (x 1,,x i,,x m ) = x i, i m (*) Funktionen in math. Schreibweise: f (x,y,z) hs / fub - alp2-2 5

II. Einsetzungsschema (Komposition) g : N r -> N, h i : N k -> N, i=1..r, primitiv rekursiv, dann auch Wiederholung aus ALP1 f(x 1, x k ) = g(h 1 (x 1,..,x k ),,h r (x 1,..,x k )) Beachte: typisches nichtrekursives Definitionsschema, z.b quad (x ) = x*x = (*) (proj 1,1 (x), proj 1,1 (x)) Aber bisher nicht bewiesen, dass '*' primitiv rekursiv definierbar. hs / fub - alp2-2 6

III Rekursionsschema g : N k -> N, k 0 h i : N k+2 -> N primitiv rekursiv, dann auch f : N k+1 -> N f(0,x 1, x k ) = g (x 1,..,x k ) f(m+1,x 1, x k ) = h ( f(m,x 1,..,x k ), m, x 1,..,x k ) Wiederholung aus ALP1 Bsp.: fak 0 = 1 fak (m+1) = h (fak (m), m) mit h(x,y) = x * (y+1) Schreibweise: oft x statt x 1,...,x k Bemerkung: In der Literatur oft f(m+1,x 1, x k ) = h (x 1,..,x k,m,f(m,x 1,..,x k )). Es gibt viele äquivalente Rekursionsschemata. hs / fub - alp2-2 7

Beschränkter μ-operator Gesucht Operator, der kleinstes i < m findet, das eine Bedingung wahr macht. μ i < m (g(i,x)) = j < i 0 i 0, wenn g(i 0,x) = 0 g(j,x) 0 0 i 0 < m 0 falls m=0 0 j<m g(j,x) 0 Bsp: div (x,y): gesucht das kleinste z, das y*z x und y*(z+1) > g erfüllt Satz: Beschränkter μ-operator kann durch ein LOOP-Programm realisiert werden. hs / fub - alp2-2 8

Loop-Algorithmus: beschränkter μ-operator x res = 0; i = 0: x m =m-1; loop x m { wenn g(i,x) > 0 dann i=i+1; sonst {wenn schon i 0 mit g(i 0,x) gefunden dann ignoriere aktuelles i sonst x res = i} } hs / fub - alp2-2 9

μ-rekursion Erst mit dem unbeschränkten μ-operator erhält man alle berechenbaren Funktionen. Sei g: N k+1 -> N partielle Funktion. i 0, wenn g(i 0,x) = 0 j < i 0 ( g(j,x) 0 f(x) = μ (g(i,x)) = g(j,x) definiert) undefiniert sonst hs / fub - alp2-2 10

While-Programme Unbeschränkter μ-operator lässt sich nicht durch ein LOOP-Programm realisieren. Echte Spracherweiterung der Registermaschine erforderlich While-Befehl: WHILE (xi o) {P} Semantik: führe P solange aus bis x i den Wert 0 hat. hs / fub - alp2-2 11

Berechenbarkeit LOOP-Programme sind WHILE-berechenbar. Satz: Die Klasse der μ-rekursiven Funktionen ist gleich der durch WHILE-Programme berechenbaren Funktionen. Mit Church'scher These heißt das: Alle berechenbaren Funktionen können durch imperative Programme mit WHILE-Befehl und Zuweisung xi = xj+c, xi = xj -1 berechnet werden, sofern sie terminieren. hs / fub - alp2-2 12

GOTO-Registermaschine Befehle haben Marken: M i :B i Zuweisungen: xi = xj + c xi = xj c Sprungbefehle: if xi=c then GOTO Mj GOTO Mj bedingter Sprung: wenn Bedingung erfüllt nächster Befehl der mit Marke Mj, sonst der Folgebefehl. unbedingter Sprung, nächster Befehl ist der mit Marke Mj beendet Programm HALT Marken, die nie Sprungziel sind, können weggelassen werden. hs / fub - alp2-2 13

Satz: Die Klasse der GOTO-Programme ist gleich der Klasse der WHILE-Programme (und damit gleich der Klasse der μ-rekursiven Funktionen) Beweis (" ") Konstruktiv: Konstruiere für beliebiges GOTO-Programm P WHILE-Programm P', das P emuliert. P sei: M 1 :B 1,,M n :B n P': zaehl=1; while (zaehl 0) { if (zaehl = 1) then A 1 ' ;. if (zaehl = n) then A n '; } wobei Sie erst selbst versuchen sollten, die Ai' zu definieren und dann mit der Lösung auf der folgenden Folie vergleichen sollten. hs / fub - alp2-2 14

A i ' {x i =x j +/- c; count=count+1} wenn A i = x i =x j +/- c A i ' if x j =c then count=k else count=count+1 wenn A i if x j =c then GOTO M k Ai' if x j =x j then GOTO k wenn A i GOTO M k Ai' count=0 wenn A i HALT Beweis in Richtung " <= " einfacher, siehe VL hs / fub - alp2-2 15