Theorie der Informatik (CS206) Turingmaschine, LOOP-Programme, primitiv-rekursive Fkt, GOTO-Prog



Ähnliche Dokumente
Theorie der Informatik (CS206) Fortsetzung LOOP-Programme, primitiv-rekursive Funktionen

Turing-Maschinen: Ein abstrakes Maschinenmodell

Theorie der Informatik (CS206) Kellerautomat, Postfix-Notation, Turing-Maschine, Busy Beaver

LOOP-Programme: Syntaktische Komponenten

Syntax von LOOP-Programmen

Einführung in die Theoretische Informatik

Mächtigkeit von WHILE-Programmen

Mitschrift BFS WS 13/14

LOOP-Programme: Syntaktische Komponenten

GOTO simuliert Turingmaschinen

Typen von Programmiersprachen

1.5 Turing-Berechenbarkeit

1.2 LOOP-, WHILE- und GOTO-Berechenbarkeit

1.5 Turing-Berechenbarkeit

Einführung in die Theoretische Informatik

Primitiv rekursive und µ-rekursive Funktionen

Primitiv rekursive und µ-rekursive Funktionen

2. Imperative Programmierung und Berechenbarkeit - Registermaschinen -

Berechenbarkeit. Script, Kapitel 2

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

Theoretische Informatik SS 03 Übung 4

Theorie der Informatik

Mächtigkeit von WHILE-Programmen

1.3 Primitiv rekursive und µ-rekursive Funktionen

Einführung in die Theoretische Informatik

Theorie der Informatik

Theoretische Informatik SS 03 Übung 5

Berechenbarkeit. Script, Kapitel 2

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

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

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

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

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

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

Theoretische Informatik 1

Rekursive Funktionen Basisfunktionen

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

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

ALP I Primitiv-Rekursive Funktionen

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

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

Nachklausur zur Vorlesung

Berechenbarkeit und Komplexität

Theoretische Informatik SS 03 Übung 3

Die primitiv rekursiven Funktionen

Universelle Rechner und Church sche These

Informatik III. Arne Vater Wintersemester 2006/ Vorlesung

Mehrband-Turingmaschinen

Grundlagen der Theoretischen Informatik

Berechenbarkeits- und Komplexitätstheorie

11.1 Kontextsensitive und allgemeine Grammatiken

THEORETISCHE INFORMATIK UND LOGIK

Theorie der Informatik

Primitiv rekursive Funktionen

Theoretische Informatik 1

Einführung in die Theoretische Informatik

Berechenbarkeit und Komplexität Vorlesung 11

10. Der Äquivalenzsatz

2.4 Kontextsensitive und Typ 0-Sprachen

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

Berechenbarkeit und Komplexität: Probleme, Sprachen, Maschinen

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

Grundlagen der Theoretischen Informatik

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

Berechenbarkeit und Komplexität Vorlesung 10

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

Sprachen und Grammatiken

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

Deterministische und nichtdeterministische Turing-Maschinen, Typ1- und Typ0-Sprachen

1.4 Die Ackermannfunktion

Universelle Maschinen und universelle Funktionen

THEORETISCHE INFORMATIK UND LOGIK

Grundlagen der Theoretischen Informatik: Übung 10

Komplexitätstheorie WiSe 2011/12 in Trier. Henning Fernau Universität Trier

Theoretische Informatik II

Mächtigkeit von WHILE-Programmen

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

Grundlagen der Theoretischen Informatik

Alternative Berechnungsmodelle

1 falls n ein Anfangsabschnitt der Dezimalbruchentwicklung von π ist, f(n) = 0 sonst

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

8. Turingmaschinen und kontextsensitive Sprachen

Einführung in die Theoretische Informatik

Halteproblem/Kodierung von Turing-Maschinen

Definition 98 Eine Turingmaschine heißt linear beschränkt (kurz: LBA), falls für alle q Q gilt:

ALP I Turing-Maschine

Theoretische Informatik II

Theoretische Informatik für Wirtschaftsinformatik und Lehramt

Ausgewählte Kapitel Diskreter Mathematik mit Anwendungen

Einführung in die Informatik I

Theoretische Informatik für Wirtschaftsinformatik und Lehramt

Einführung in die Berechenbarkeitstheorie

Zuverlässige Software mit GoTo Ludwig Suski

Theorie der Informatik

5. Algorithmen. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Kontextsensitive und Typ 0 Sprachen Slide 2. Die Turingmaschine

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Transkript:

Theorie der Informatik (CS206) Turingmaschine, LOOP-Programme, primitiv-rekursive Fkt, GOTO-Prog 25. März 2013 Proff Malte Helmert und Christian Tschudin Departement Mathematik und Informatik, Universität Basel Wiederholung/Einstieg 1. Was ist ein Keller-Automat (Push-Down Automaton) 2. Aus was besteht eine Turing-Maschine? Welcher Teil ist endlich, welcher nicht? 3. Was ist ein Transducer? Wie kann damit eine TM dargestellt werden? 4. Was ist die Konfiguration einer TM? c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 2/46

Definition Turing-Maschine (informell) Unendliches Speicherband, beweglicher Lesekopf Endliche Kontrolleinheit: interner Zustand Transitionsfunktion Lesekopf Kontroll einheit c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 3/46 TM Terminologie (Konfiguration etc) Darstellung der Ränder des bisher benutzen Bandes:... Bandinhalt... Schreibweise für Konfiguration : αzβ TM im Zustand z, Lesekopf steht auf erstem Symbol von β Startkonfiguration: z 0 w ( αz end β) TM im Zustand z 0, Lesekopf auf erstem Symbol von w Zahlen : z.b. Unärdarstellung: #xxx... xx# Anzahl x-symbole hält die Zahl fest Zahl wird durch # begrenzt c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 4/46

TM Bezug zu Sprache und Wortproblem Als Wort dient die Start-Konfiguration Sprache T zur Maschine M: T (M) = {a 1... a n Σ z 0 a 1... a n αz e β} wobei α, β Σ, z e E Wortproblem ausgehend von allen möglichen Startkonfigurationen (Eingabewerte): Bei welchen hält die Maschine an? (Dies definiert eine Sprache) Oder auch: Wort von M akzeptiert M hält an c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 5/46 Mehrband Turingmaschine Einfacher, mit mehreren Bändern (=Variablen) zu arbeiten? TM-Maschine hätte mehrere Leseköpfe, die unabhängig voneinander bewegt werden können. Neue Transitions-Funktion: δ : Z Γ k Z Γ k {L, R, N} k Satz: Zu jeder Mehrband-TM M gibt es eine 1-Band-Maschine-TM M, die die selbe Sprache definiert (T (M) = T (M )). D.h. wir könnten uns auf 1-Band-TM beschränken, k-band-maschinen einsetzen falls nützlich. c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 6/46

Grundidee der Abbildung Mehrband 1-Band Simulation (1-Band TM berechnet was die k-band-tm macht) Neues (erweitertes) Arbeitsalphabet Γ = Γ (Γ { }) 2k Stern markiert jeweile Lesekopf-Position D.h. neues Symbol ist Vektor aus alten Symbolen + Position Konkret: neues Arbeitsalphabet, dass alle möglichen Wert- und Position-Kombinationen abdeckt. siehe Figur nächste Seite c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 7/46 Abbildung Mehrband 1-Band, Schema a1 a2 a3 a4 M b1 b2 b3 b4 b5 b6 b7 c1 c2 c3 c4 c5 a1 a2 a3 a4 M * b1 b2 b3 b4 b5 b6 b7 * c1 c2 c3 c4 c5 * c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 8/46

Grundidee der Abbildung Mehrband 1-Band Vorgehen: M muss zuerste alle Bänder lesen, um Transition δ zu wählen Dazu: positioniere Lesekopf links von allen Sternen Wischbewegung von links nach rechts bis alle Sterne gesehen notiere (durch Zustandswechsel in M ) alle mit Stern markierten Elemente Bewegung von rechts nach links: wende Transition (gemäss alter Regel von M) an c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 9/46 Verkettung von TMs Endzustand einer Maschine M 1 wird identifiziert mit Startzustand einer anderen Maschine M 2 Konstruktion einer Gesamtmaschine als Flussdiagramm: start M 1 M 2 stop als sequentielles Programm: M 1 ; M 2 Was wenn End-Zustandsmenge E > 1? Möglichkeit, dass TM M 1 zwei (oder mehr) verschiedenen Endzuständen hat: Entweder-Oder-Maschine, Fortsetzung mit zwei verschiedenen Maschinen möglich c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 10/46

Eine Test-auf-Null Turing-Maschine Zwei Endzustände ja, nein, wobei Endzustand ja angenommen wird, wenn ganz rechts eine Null (0) steht delta(z0,a) -> (nein,a,n) // fuer alle a <> 0 delta(z0,0) -> (z1,0,r) delta(z1,a) -> (nein,a,l) // fuer alle a <> [] delta(z1,[]) -> (ja,[],l) a / a,n nein a / a,l [] / [],L z0 0 / 0,R z1 ja c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 11/46 WHILE Maschine Jede TM M kann zu folgender Maschine erweitert werden: hält an, wenn das Resultat 0 ist. start "Band = 0?" nein ja stop M c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 12/46

WHILE-Maschine (Fortsetzung) Als Programm: WHILE (Band<>0) { M; } WHILE-Programme entsprechen unserem intuitiven Berechenbarkeitsbegriff: Alles kann durch ein (!) WHILE-Programm berechnet werden. Einfachere (= weniger mächtigere) Programme: LOOP-Programme Bevor wir die WHILE-Maschine weiterverfolgen, untersuchen wir LOOP-Programme und die Klasse der primitiv-rekursiven Funktionen c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 13/46 LOOP-Programme Definition: Variablen x 0,... x j Konstanten 0, 1, 2 Trennzeichen ; := Operationen + - Schlüsselwörter LOOP DO OD c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 14/46

LOOP-Programme (Forts) Rekursive Definition: Wertzuweisung: x i := x j + c x i := x j - c falls P1 und P2 ein LOOP-Programm ist, dann ist die Sequenz P1 ; P2 auch ein LOOP-Programm Falls P ein LOOP-Programm und x eine Variable ist, dann ist LOOP x DO P OD auch ein LOOP-Programm c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 15/46 LOOP-Programme, Beispiele (Resultat in x0) Addition zweier Variablen: ADD(x1, x2): x0 := x1 LOOP x2 DO x0 := x0 + 1 OD Multiplikation zweier Variablen: MULT(x1, x2): x0 := 0 LOOP x2 DO x0 := ADD(x0, x1) OD c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 16/46

LOOP-Programme, Beispiele (Forts) if (x == 0) then A y := 1 LOOP x DO y := 0 OD LOOP y DO A OD D.h. wir missbrauchen die numerische Variable y als Flag, die Berechnung dieses Flags wird auch testf orzero(x) genannt. c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 17/46 LOOP-Programme und Funktionen Welche Funktionen können mit LOOP-Programmen berechnet werden? Ziel des nun folgenden Abschnittes wird es sein, die LOOP-Funktionklasse zu charakterisieren. Vorgehen: Definition der Klasse primitiv-rekursiv später zeigen, dass dies der LOOP-Klasse entspricht c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 18/46

Primitiv-Rekursive Funktionen, Def Basisfunktionen: Konstante Funktionen sind primitiv-rekursiv Projektionen sind primitiv-rekursiv, z.b. π 3 2(a, b, c) == b (im Exponent zu π steht die Stelligkeit, Index: Auswahl) Nachfolgefunktion auf N ist primitiv-rekursiv: succ(n) == n + 1 Fortsetzung auf der nächsten Seite... c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 19/46 Primitiv-Rekursive Fkt, Fortsetzung Def Induktive Definition: Gleichzeitige Substitution (Komposition) von primitiv-rekursiven Funktionen ist auch primitiv-rekursiv, z.b. f(x, y) = g(x, h(y)) (neue Funktion f wird aus g gebildet, wobei zweiter Parameter durch h(y) ersetzt wird) Durch primitive Rekursion aus primitiv-rekursiven Funktionen definierte Funktion ist auch primitiv-rekursiv. Typisch: f(0,...) = g(...) f(n + 1,...) = h(...f(n,...), n,...) c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 20/46

Primitiv-Rekursive Funktionen Beispiele von primitiv-rekursiven Funktionen für die schon gesehenen LOOP-Programme, sowie neue Funktionen add(x, y) mult(x, y) testf orzero(x) Monus-Funktion monus(x, y) == x y falls x y monus(x, y) == 0 falls x < y Vergleichsfunktionen (>=, <) und Minimum c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 21/46 Primitiv-Rekursive Funktionen, Beispiele 1 Wie sehen die Funktionen aus zu den LOOP-Programmbeispielen? Addition (Bemerkung: + mit Const gehört zu LOOP- Programmen per Definition, die Addition selbst ist aber keine Basisfunktion primitiv-rekursiver Funktionen). Rekursive Definition der Funktion add(a, b): add(0, x) = x add(n + 1, x) = succ(add(n, x)) Vergleich mit Null (schon gesehen): testf orzero(0) = 1 testforzero(x + 1) = 0 c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 22/46

Primitiv-Rekursive Funktionen, Beispiele 2 Monus-Funktion Definition: monus(x, y) == x y falls x y monus(x, y) == 0 falls x < y Vergleichsfunktionen: ge(x, y) (greater or equal, ) ge(x, y) = testf orzero(monus(y, x)) lt(x, y) (less than, <) lt(x, y) = testf orzero(ge(x, y)) c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 23/46 Primitiv-Rekursive Funktionen, Beispiele 3 Minimum min(x, y): min(x, y) = mult(x, lt(x, y)) + mult(y, ge(x, y)) c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 24/46

Bezug LOOP-Programme prim-rek. Funktionen Richtung : Zu jeder prim-rek Funktion gibt es ein LOOP-Programm Basisfunktionen sind klar, zb succ(x): resultat = x + 1; Komposition f(x, y) = g(h(x, y), i(x, y)) wobei für g, h LOOP-Programme zur Verfügung stehen sollen: a = h(x,y); b = i(x,y); resultat = g(a,b); Rekursion? c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 25/46 LOOP-Programm-Konstruktion für prim. Rekursion Gegeben: f(0, x 1,... x r ) = g(x 1,... x r ) f(n + 1, x 1,... x r ) = h(f(n, x 1,... x r ), n, x 1,... x r ) Ausschreiben von h(f(n,...),... ): h(h(f(n 1,...), n 1,...), n,...... h(h(... h(f(0, x 1,... x r ), 0,... a = g(x1,..., xr); k = 0; LOOP n DO a = h(a, k, x1,..., xr); k = k + 1; OD c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 26/46

Bezug LOOP-Programme prim-rek. Funktionen Richtung : Zu jedem LOOP-Programm (für eine Funktion r) gibt es eine prim-rek Funktion R, die ebenfalls r berechnet. Problem: Was ist das Ergebnis der Ausführung eines LOOP-Programmes für eine Registermaschine? (Variabeln!) Ansatz: suche eine Abbildung Anfangskonfiguration Zahl a Endkonfiguration Zahl e so, dass R(a) = e gilt. c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 27/46 Einschub: 2-Tupel auf N abbilden Wie können mehrere Variablen-Werte auf einen Wert für die Anfangskonfiguration abgebildet werden? Genereller Rahmen auch als Gödelisierung bekannt. Grundidee: Jeder (Turing-)Maschine T eine Zahl n = G(T ) zuordnen so dass aus einer gegebenen Gödelzahl n die Maschine T = G 1(n) rekonstruiert werden kann Kodierung und Dekodierung kann mit LOOP-Programmen erfolgen! c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 28/46

Abbildung eines 2-Tupel auf N Zähle alle Zahlenpaare auf, d.h. weise jedem Paar eine Nummer (Index) zu: < x, y > c(x, y) Geschickter Index (Funktion c(x,y)): 0 1 2 3 0 0 2 5 9 14 x 1 1 4 8 13 19 2 3 7 12 3 6 11 y c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 29/46 Abbildung eines 2-Tupel auf N (Fortsetz.) c(x, y) = ( ) x + y + 1 + x = 2 Dies ist eine prim-rek. Funktion! (x + y + 1)(x + y) 2 Anwenden, um k-tupel zu kodieren: < n 0, n 1,..., n k > := c(n 0, c(n 1,... c(n k, 0))) + x Nächstes Problem: Wie sehen die Umkehrfunktionen e und f von c(x, y) aus? Wir wollen e(c(x, y)) == x f(c(x, y)) == y c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 30/46

Dekodierung eines gödelisierten Tupels Hilfsfunktion e e (n, m, k) := max{x n y k : c(x, y) = m} (Bestimme max Wert x im Feld n k mit c(x, y) = m) n x m k y Setze e(m) := e (m, m, m) c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 31/46 Dekodierung (Forts) Analoge Funktion f definieren für y, f(n) = f (n, n, n) Mit e(m) und f(m) erhält man die Werte x, y zurück. Man kann zeigen, dass e und f prim-rek. sind. Folgerung: - Zu jedem LOOP-Programm eine Anfangs-Konfig berechnen - Funktion zum Programm finden - aus Endkonfig kann das Result des LOOP-Prog geholt werden, - letzter Schritt ist auch primitiv-rekursiv. c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 32/46

Variante: Gödelisierung mit Primzahlen Gegeben: Register-Werte x 1,..., x r Gesucht Kodierung K(x 1,..., x r ) N, invertierbar Kodierung: K k (x 1,..., x r ) := i k p(i) x i, wobei p(i) die i-te Primzahl ist Beispiel: x 1 = 1, x 2 = 3, x 3 = 0, x 4 = 5 p(1) 1 p(2) 3 p(3) 0 p(4) 5 =... = 907578 Dekodierung: (aus Gödelzahl n die i-te Komponente extrahieren) D(n, i) := max{j n mod p(i) j = 0} c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 33/46 LOOP-Programme prim-rek. Funktionen Satz Die Klasse der primitiv rekursiven Funktionen stimmt genau mit der Klasse der LOOP-berechenbaren Funktionen überein. Bemerkungen: LOOP-Programme sind total, d.h. unabhängig von der initialen Belegung der Variablen bricht ein LOOP-Programm immer ab. Es gibt (intuitiv) berechenbare Funktionen, die nicht prim-rek. sind. ( WHILE-Programme, GOTO-Programme, volle TM) c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 34/46

Ackermann-Funktion Die Ackermann-Funktion war eines der ersten Beispiele (1928) einer arithmetischen Funktion, die nicht LOOP-berechenbar ist. Rekursive Definition: Siehe Demo: viele Berechnungsschritte, sehr schnelles Wachstum c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 35/46 Ackermann-Funktion (Forts) c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 36/46

Uebersicht Bisher: WHILE-Maschine, WHILE-Programm LOOP-Programme, und primitiv-rekursive Funktionen Folgend: GOTO-Programme, Aequivalenz zu WHILE-Programmen Anschliessend: µ-rekursion, Aequivalenz zu WHILE-Programmen c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 37/46 GOTO-Programm Definition Grundidee: Programmierung einer einfachen (Register)-CPU Programm = Sequenz von Zeilen mit MARKE : ANWEISUNG Anweisungen sind: Wert-Zuweisung x i := x j + c unbedingter Sprung: GOTO M i bedingter Sprung: IF x i == c THEN GOTO M i Stopanweisung: HALT Bemerkung Möglichkeit unendlicher Schleifen: M1 : GOTO M1 c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 38/46

GOTO-Programm Beispiel Berechnung der Fakultätsfunktion n! M0: n =... # Parameter n M1: f = 1 M2: IF (n <= 1) THEN GOTO M6 M3: f = f * n M4: n = n - 1 M5: GOTO M2 M6: HALT # Resultat f n =... f = 1 L1: IF (n <= 1) THEN GOTO L2 f = f * n n = n - 1 GOTO L1 L2: HALT (fakultät() kann durchaus als LOOP-Program formuliert werden) c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 39/46 WHILE- und GOTO-Programme Jedes GOTO-Programm kann als WHILE-Programm umgeschrieben werden Jedes WHILE-Programm kann als GOTO-Programm umgeschrieben werden c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 40/46

Ein WHILE-Prog in ein GOTO-Prog umformen Aus wird WHILE x <> 0 DO P OD M1 : IF x = 0 THEN GOTO M4 M2 : P M3 : GOTO M1 M4 :... c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 41/46 Ein GOTO-Prog in ein WHILE-Prog umformen Ein GOTO-Programm M1 : A1; M2 : A2;... Mk : Ak wird abgearbeitet durch count = 1 WHILE count <> 0 DO IF count = 1 THEN A1 ; IF count = 2 THEN A2 ;... OD wobei A i wie folgt definiert ist (siehe nächstes Slide) c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 42/46

GOTO WHILE (Forts) A i ist wie folgt definiert: falls A i die Form x j = x l + c hat: x j = x l + c; count = count + 1 falls A i die Form GOT O M n hat: count = n falls A i die Form IF x j = c T HEN GOT O M n hat: IF x j =c THEN count=n ELSE count=count+1 falls A i die Form HALT hat: count = 0 c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 43/46 Stellenwert von GOTO für die Programmierpraxis Heute gängige CPUs sind GOTO-Maschinen: Register (inkl Hauptspeicher) sequenzielles Abarbeiten von Maschinenbefehlen (Marke = Speicheradresse) explizite Sprungbefehle: jump, jump-conditional GOTO ist heute auf Assembler-Bereich beschränkt Programmier-Hochsprachen vermeiden GOTOs (siehe nächstes Slide) GOTO ist in C noch möglich... c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 44/46

Stellenwert von GOTO (Fortsetzung) Edsger W. Dijkstra: Go To Statement Considered Harmful (CACM 1968) Entwurf von Programmiersprachen bringt Einsicht, dass GOTO zu schlechten Programmen führt. ( strukturiertes Programme statt Spaghetti-Code ) Titel des Beitrags ist in Computer Science zu einer Redewendung geworden: XYZ Considered Harmful << For a number of years I have been familiar with the observation that the quality of programmers is a decreasing function of the density of go to statements in the programs they produce. More recently I discovered why the use of the go to statement has such disastrous effects, and I became convinced that the go to statement should be abolished from all higher level programming languages (i.e. everything except, perhaps, plain machine code). At that time I did not attach too much importance to this discovery; I now submit my considerations for publication because in very recent discussions in which the subject turned up, I have been urged to do so. >> c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 45/46 Uebersicht zum Abschluss für heute: LOOP primitiv-rekursiv LOOP ist weniger mächtig als WHILE GOTO WHILE?? µ-rekursion (siehe nächste Sitzung) c Helmert und Tschudin, Departement Mathematik und Informatik, Uni Basel CS206 - Theorie der Informatik, 2013-03-25, 46/46