Typen von Programmiersprachen

Ähnliche Dokumente
Theoretische Informatik II

ALP I Rekursive Funktionen

Primitiv rekursive und µ-rekursive Funktionen

Primitiv rekursive und µ-rekursive Funktionen

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

Syntax von LOOP-Programmen

Die Church-Turing-These

Zusammenfassung Grundzüge der Informatik 4

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

Berechenbarkeits- und Komplexitätstheorie

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

Theoretische Informatik SS 03 Übung 3

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

Theorie der Informatik

1.2 LOOP-, WHILE- und GOTO-Berechenbarkeit

Berechenbarkeit. Script, Kapitel 2

Kapitel III. Aufbau des Zahlensystems

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

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

LOOP-Programme: Syntaktische Komponenten

Rekursive und primitiv-rekursive Funktionen

Algorithmen und Programmierung

Referat rekursive Mengen vs. rekursiv-aufzählbare Mengen

11. Woche: Turingmaschinen und Komplexität Rekursive Aufzählbarkeit, Entscheidbarkeit Laufzeit, Klassen DTIME und P

Mitschrift BFS WS 13/14

Mächtigkeit von WHILE-Programmen

Einführung in die Informatik I

Rekursive Funktionen Basisfunktionen

Theoretische Informatik 1

13. Funktionen in einer Variablen

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

Einführung in die Theoretische Informatik

Primitive Rekursion. Alexander Hölzle

Turing-Maschine. Berechenbarkeit und Komplexität Turing-Maschinen. Turing-Maschine. Beispiel

Formale Sprachen. Grammatiken und die Chomsky-Hierarchie. Rudolf FREUND, Marian KOGLER

Theoretische Informatik Kap 2: Berechnungstheorie

Programmieren lernen mit Groovy Rekursion Rekursion und Iteration

3. Turingmaschinen FORMALISIERUNG VON ALGORITHMEN. Turingmaschinen Registermaschinen Rekursive Funktionen UNTERSCHEIDUNGSMERKMALE DER ANSÄTZE:

Deterministische Turing-Maschinen (DTM) F3 03/04 p.46/395

Stefan Schmid TU Berlin & T-Labs, Berlin, Germany. Reduktionen in der Berechenbarkeitstheorie

Theoretische Informatik: Berechenbarkeit und Formale Sprachen

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

Surjektive, injektive und bijektive Funktionen.

Die Ackermannfunktion

Beispiel: Fibonacci-Zahlen

Deterministischer endlicher Automat A ohne Ausgabe (deterministischer endlicher Akzeptor)

Turing-Maschinen. Definition 1. Eine deterministische Turing-Maschine (kurz DTM) ist ein 6- Dem endlichen Alphabet Σ von Eingabesymbolen.

Einführung in Berechenbarkeit, Komplexität und formale Sprachen

Theoretische Grundlagen der Informatik

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Berechenbarkeits- und Komplexitätstheorie

WS 2009/10. Diskrete Strukturen

Brückenkurs Mathematik 2015

Diskrete Strukturen Kapitel 2: Grundlagen (Relationen)

1 Potenzen und Polynome

Kongruenz modulo g definiert auf K[x] eine Äquivalenzrelation g : h g f h f ist durch g teilbar, und [f] g ist die Äquivalenzklasse von f.

Repetitorium zur Informatik IV

Formale Sprachen und Automaten

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

2.4 Kontextsensitive und Typ 0-Sprachen

Lösung zur Klausur zu Krypographie Sommersemester 2005

Klausur zur Vorlesung Mathematische Logik

Einführung in die Informatik 1

Theoretische Informatik

Einführung in die Informatik I

(P3 ) Ist M D mit d M und S(M) M, dann gilt M = D.

Einführung. Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Vorlesungen zur Komplexitätstheorie. K-Vollständigkeit (1/5)

Kapitel 1. Grundlagen Mengen

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Theoretische Informatik SS 03 Übung 4

Theoretische Informatik

31 Polynomringe Motivation Definition: Polynomringe

Einführung in die Programmierung

GTI. Hannes Diener. 6. Juni Juni. ENC B-0123, diener@math.uni-siegen.de

DLP. Adolphe Kankeu Tamghe ALZAGK SEMINAR. Bremen, den 18. Januar Fachbereich Mathematik und Informatik 1 / 27

Der λ-kalkül. Frank Huch. Sommersemester 2015

Vorlesung. Funktionen/Abbildungen 1

Überblick. 1 Vorbemerkungen. 2 Algorithmen. 3 Eigenschaften von Algorithmen. 4 Historischer Überblick. Einführung

Funktionale Programmiersprachen

Informatik. Teil 1 Wintersemester 2011/2012. Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik

EINFÜHRUNG IN DIE THEORETISCHE INFORMATIK 1. ALPHABETE, WÖRTER, SPRACHEN. Prof. Dr. Klaus Ambos-Spies. Sommersemester 2011

Einführung in die Theoretische Informatik

4.4.1 Statisches perfektes Hashing. des Bildbereichs {0, 1,..., n 1} der Hashfunktionen und S U, S = m n, eine Menge von Schlüsseln.

18 Höhere Ableitungen und Taylorformel

Diskrete Mathematik. Sebastian Iwanowski FH Wedel. Kap. 4: Zahlentheorie

Rekursive Funktionen

Fachschaft Mathematik und Informatik (FIM) LA I VORKURS. Herbstsemester gehalten von Harald Baum

3. Ziel der Vorlesung

Kapitel 1. Grundlagen

Minimalismen in der. Informatik

Grundlagen der Theoretischen Informatik Musterlösungen zu ausgewählten Übungsaufgaben

In diesem Abschnitt betrachten wir nur quadratische Matrizen mit Komponenten aus einem Körper K, also A K n n für ein n N. Wenn (mit einem n > 1)

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

Algorithmen und Datenstrukturen Laufzeitabschätzung

Transkript:

Typen von Programmiersprachen Berechenbarkeitstheorie: Formalisierung des intuitiven Berechenbarkeitsbegriffs man kann vier Typen von Programmiersprachen zum Berechnen von Zahlenfunktionen unterscheiden: Programmiersprache LOOP: enthält als wesentliches Element Schleifen mit fester Durchlaufzahl Programmiersprache WHILE: enthält als wesentliches Element Schleifen mit bedingungsabhängiger Durchlaufzahl Programmiersprache GOTO: enthält als wesentliches Element bedingte Sprungbefehle Programmiersprache RECUR: enthält als wesentliches Element rekursive Funktionsdefinitionen offensichtlich sind diese Sprachen unterschiedlich mächtig Mächtigkeit der Sprachen drückt sich durch die Funktionen aus, die man mit ihnen berechnen kann Welche Funktionen sind das? Berechenbarkeit 1

Elementare Funktionen Nullfunktion Z: N 0 mit n N 0 (Z(n) := 0) Nachfolgerfunktion S: N 0 mit n N 0 (S(n) := n'=n+1) Projektionsfunktion m,k N, k m (P k m : N 0 m ) mit x 1,...,x m N 0 (P k m (x 1,...,x m ) := x k ) Berechenbarkeit 2

Primitiv rekursive Funktionen primitiv rekursive Funktionen sind eine induktiv definierte Teilmenge aller Funktionen N 0 n mit n N elementare Funktionen sind primitiv rekursiv Nullfunktion, Nachfolgerfunktion, Projektion Komposition sind für m, n N die Funktionen g: N 0 m f i : N 0 n i=1,..., m primitiv rekursiv, dann ist auch die Funktion r: N 0 n r(x 1 ) := g(f 1 (x 1 ),..., f m (x 1 )) primitiv rekursiv primitive Rekursion sind für n N 0 die Funktionen g: N 0 n h: N 0 n+2 primitiv rekursiv, dann ist auch die Funktion r: N 0 n+1 r(x 1, 0) := g(x 1 ) r(x 1, y+1) := h(x 1, y, r(x 1, y)) primitiv rekursiv Berechenbarkeit 3

Primitiv rekursive Funktionen Fall n=0: g N 0 eine Konstante, h: N 02 primitiv rekursiv, dann ist r: N 0 primitiv rekursiv r(0) = g r(y+1) = h(y, r(y)) Beispiel g=0, h(x,y) =x r(0) = g = 0 r(y+1) = h(y, r(y)) = y d.h. r(y) = y-1 (Vorgängerfunktion für y>0) folgende weitere Funktionen sind primitiv rekursiv Addition Subtraktion Multiplikation Exponentialfunktion Signumfunktion Fakultät Funktionen sind genau dann primitiv rekursiv, wenn sie durch ein LOOP Programm berechnet werden können Sind alle Funktionen primitiv rekursiv? Berechenbarkeit 4

Ackermann Funktion Ackermann Funktion A: N 0 2 A(0, 0) = 1 A(0, 1) = 2 A(0, y+2) = y+4 A(x+1, 0) = A(x, 1) A(x+1, y+1) = A(x, A(x+1, y)) verschiedene Autoren definieren leicht abweichende Versionen der Ackermann Funktion Ackermann Funktion ist anders als die primitiv rekursiven Funktionen rein rekursiv definiert Ackermann Funktion ist nicht primitiv rekursiv, sondern gehört in die Klasse der partiell rekursiven Funktionen Berechenbarkeit 5

Partiell rekursive Funktionen partiell rekursive Funktionen sind eine induktiv definierte Teilmenge aller partiellen Funktionen N 0 n mit n N elementare Funktionen sind partiell rekursiv Nullfunktion, Nachfolgerfunktion, Projektion Komposition Komposition partiell rekursiver Funktionen ist partiell rekursiv primitive Rekursion primitive Rekursion partiell rekursiver Funktionen liefert wieder partiell rekursive Funktionen Minimierung ist für n N die Funktion f: N 0 n+1 partiell rekursiv, dann auch die Funktion µ(f) : N 0 n Dabei gilt: [µ(f)](x 1 ) = x wobei x die kleinste Lösung von f(x 1, x) = 0 ist; sonst ist [µ(f)](x 1 ) undefiniert Berechenbarkeit 6

Church These Funktionen sind genau dann partiell rekursiv, wenn sie durch ein WHILE oder durch ein GOTO oder durch ein RECUR Programm berechnet werden können. in keiner Programmiersprache kann man mehr Funktionen berechnen als die partiell rekursiven These von Church Eine Funktion kann genau dann "nach vorgegebenen Regeln" berechnet werden, wenn sie partiell rekursiv ist, d.h. es gibt keine weiteren berechenbaren Funktionen. These von Church verbindet den intuitiven Begriff der Berechenbarkeit mit einer formalen Definition. Berechenbarkeit 7

Programmiersprachen WHILE, GOTO und RECUR Programmiersprachen sind gleich mächtig Grundlage für strukturierte Programmierung Substituierung von (bedingten) Sprüngen durch strukturierte Konstrukte für Sequenz, Iteration und Selektion Grundlage für die Substituierung von Rekursion durch Iteration Speicherplatz wird eingespart: Rekursion braucht für jeden Schritt zusätzlichen Speicherplatz, während Iteration Speicherplatz wieder verwenden kann neben der Mächtigkeit gibt es aber noch weitere Kriterien für die Wahl einer Programmiersprache, z.b. Ausdrucksfähigkeit: wie direkt kann man die Konzepte des Anwendungsbereiches in Konstrukten der Programmiersprache ausdrücken, wie lesbar ist das Programm? Strukturierungsmöglichkeiten, Wiederverwendung effiziente Implementierung Berechenbarkeit 8

Turingmaschinen Beispiel zeigte, dass Turingmaschinen zur Berechnung verwendet werden können partielle Funktion f: (A * ) n (A * ) m heisst Turingberechenbar, wenn es eine Turingmaschine mit dem Eingabealphabet A {%,#} gibt, die mit dem Bandinhalt w 1 % w 2 %...%w n startet, genau dann hält, wenn (w 1, w 2,..., w n ) im Definitionsbereich von f liegt und den Bandinhalt u 1 %u 2 %...%u m schreibt. Es gilt dann f(w 1,w 2,...,w n ) = (u 1,u 2,...,u m ) Funktionen sind genau dann Turing-berechenbar, wenn sie partiell rekursiv sind Berechenbarkeit 9

Berechenbarkeit und formale Sprachen Theorie der Berechenbarkeit kann von natürlichen Zahlen auf formale Sprachen ausgedehnt werden Gödelisierung: Wörter einer formalen Sprache werden als natürliche Zahlen kodiert A endliches Alphabet Gödelisierung über A ist eine linkseindeutige (injektive) Turing-berechenbare Funktion G: A * Standard-Gödelisierung: A endliches Alphabet α: A {1, 2,..., #A} eine linkseindeutige Funktion p n sei die n-te Primzahl (p 1 = 2, p 2 =3, p 3 =5,...) Gödelisierung : A * mit G(ε) :=0 G(a 1 a 2..a k ) := p 1 α(a 1 ) p 2 α(a 2 )... p k α(a k ) Beispiel: G(ende) = 2 5 * 3 14 * 5 4 * 7 5 Berechenbarkeit 10