1 Vollständige partielle Ordnungen, stetige Funktionen

Größe: px
Ab Seite anzeigen:

Download "1 Vollständige partielle Ordnungen, stetige Funktionen"

Transkript

1 TIDS 2, SS13, Kapitel 1, vom Vollständige partielle Ordnungen, stetige Funktionen Die Betrachtung vollständiger partieller Ordnungen soll eine einfache und verständliche Einführung in einen Ansatz zur denotationellen Semantik liefern. Die Sprache, die wir dazu betrachten werden, ist PCF, eine Variante einer funktionalen Programmiersprache. Polymorph getypte funktionale Programmiersprachen und deren denotationelle Semantik würden den Rahmen dieser Vorlesung sprengen. Definition 1.1 Eine partielle Ordnung auf einer Menge P ist definiert durch die Eigenschaften: reflexiv: x P : x x transitiv: x, y, z P : x y, y z = x z antisymmetrisch x, y, P : x y y x = x = y Definition 1.2 Sei X P. Sei p P. Wenn x X : x p dann ist p obere Schranke von X. p P ist eine kleinste obere Schranke (obere Grenze, lub, least upper bound) von X, wenn p obere Schranke von X und für jede andere obere Schranke q von X gilt p q. Bezeichnung: p = X. Analog kann man untere Schranken, glb, untere Grenze usw. definieren Definition 1.3 Eine Folge a 1 a 2 a 3... mit Elementen a i P heißt Kette (ω-kette). Die partielle Ordnung auf P ist vollständig, wenn jede aufsteigende Kette a 1 a 2 a 3... eine kleinste obere Schranke in P hat. Bezeichnung: i a i. Wenn die partielle Ordnung P ein kleinstes Element hat, dann sagt man, ist eine Ordnung mit kleinstem Element. Als Abkürzung sprechen wir bei einer vollständig partiellen Ordnung mit kleinstem Element von einer cpo mit. Wenn die Bezeichnung nicht eindeutig ist, indizieren wir das mit der zugehörigen cpo. Wir beschäftigen uns im folgenden mit vollständigen partiellen Ordnungen (cpo s). Beispiel 1.4

2 TIDS 2, SS13, Kapitel 1, vom Die Potenzmenge einer Menge mit ist eine cpo mit kleinstem Element. Für eine aufsteigende Kette M 1 M 2 M 3... gilt i M i = i M i. Die Menge der partiellen Funktionen: M M mit der Teilmengenbeziehung ist eine cpo mit kleinstem Element. Die zweielementige Menge {, } mit ist eine cpo. Eine diskrete (flache) cpo ist eine partielle Ordnung, in der nur x x für alle Elemente x gilt. Definition 1.5 Monotonie Eine Funktion f : D E, wobei D, E cpo s sind, ist monoton, gdw. für alle d 1 D d 2 gilt, dass auch f(d 1 ) E f(d 2 ). Stetigkeit Die Funktion f : D E ist stetig, wenn sie monoton ist und wenn für alle Ketten d 1 D d 2 D d 3 D... gilt, dass f( i d i) = i f(d i). Bemerkung 1.6 Die Intuition dahinter ist: stetig = algorithmisch sinnvoll Bei Anwendung auf eine Programmiersprache wird sich ergeben, dass alle berechenbaren Funktionen eine stetige Denotation haben. In manchen Semantiken kommt es vor, dass es stetige Funktionen gibt, die nicht Denotation einer Funktion sind. Im folgenden bezeichnen wir für eine Funktion f : D D. die mehrfache Anwendung f(... f(d) auch als f n (d). }{{} n Beispiel 1.7 Alle Funktionen, die auf einer diskreten cpo definiert sind, sind stetig. Eine wichtige Beobachtung, die in ähnlicher Form oft verwendet wird zur Konstruktion kleinster Fixpunkte, ist folgendes: In einer cpo mit sei eine monotone Funktion f gegeben. Dann ist f i ( ) eine Kette. Es gilt f( ) f(f( ))... f n ( ) f n+1 ( ).... Aussage 1.8 Die Identität auf einer cpo ist stetig Die Komposition von stetigen Funktionen ist stetig. D.h. f g ist stetig, wenn f, g stetig sind.

3 TIDS 2, SS13, Kapitel 1, vom Beweis. Die Identität ist monoton. Da eine Kette unter Id auf sich selbst abgebildet wird, gilt das auch für den lub der Kette(n). Der Rest ist eine Übungsaufgabe. Definition 1.9 Sei f : D D eine Funktion, wobei D eine cpo ist. Dann ist d D ein Fixpunkt von f, wenn f(d) = d ist. Präfix-punkt von f, falls f(d) d Postfix-punkt von f, falls d f(d). Satz 1.10 (Fixpunktsatz) Sei f : D D eine stetige Funktion, wobei D eine cpo mit kleinstem Element ist. Dann hat f einen Fixpunkt, insbesondere einen kleinsten Fixpunkt a. Zudem gilt a = f n ( ). a ist auch der kleinste Präfix-punkt von f. Diesen kleinsten Fixpunkt nennen wir fix(f). Beweis. Da D eine cpo ist, existiert f n ( )). Es gilt: f( f n ( )) = f n+1 ( )) (Stetigkeit von f und da f( )...f n ( )... aufsteigende Kette ist) = f n ( )) da f( ) und es bis auf die gleiche Kette ist. Damit haben wir gezeigt, dass f n ( )) ein Fixpunkt von f ist. Jetzt zeigen wir, dass dies auch der kleinste ist. Sei d irgendein Fixpunkt von f. D.h. f(d) = d. Dann gilt: d, also auch f( ) d = f(d), da f monoton ist. Mit Induktion nach n erhält man: f n ( ) d, also auch f n ( )) d, da f n ( )) kleinste obere Schranke der aufsteigenden Kette f( )...f n ( )... ist. Dieselbe Argumentation zeigt auch dass f n ( )) kleinster Präfixpunkt von f ist. Es gilt folgender allgemeinerer Satz (siehe z.b. Davey und Priestley) Satz 1.11 Sei f : D D eine monotone Funktion, wobei D eine cpo ist. Dann hat f einen kleinsten Fixpunkt. Allerdings ist der kleinste Fixpunkt in diesem allgemeinen Fall i.a. nicht als f n ( ) konstruierbar, auch wenn es ein kleinstes Element gibt. Beispiel 1.12 Für eine nicht-monotone Funktion. Gegeben sei die Boolesche cpo: {True, False, } mit True, False. Die Funktion, die Terminierung testet ist:

4 TIDS 2, SS13, Kapitel 1, vom f : False, True True, False True. Diese Funktion f ist nicht monoton. Denn: True, aber f = False True = f True. Beispiel 1.13 Für eine monotone, aber nicht stetige Funktion. Betrachte unendliche Strings (oder alternativ unendliche Listen). Wir wollen Eingabeströme modellieren, wobei diese endlich oder unendlich sein können, und nur aus 0, 1, bestehen. Modellierung: Als Menge benutzen wir (endliche und unendliche) Strings bestehend aus 0, 1 und $, wobei $ nur am Ende sein darf. Endliche Strings ohne $ am Ende betrachtet man als unvollständige Strings (bzw. Eingabe). Formal könnte man schreiben S := ({0, 1} + {0, 1} $) { alle unendlichen Folgen bestehend aus 0,1 }. ε bezeichne den leeren String. Als Ordnung verwenden wir s t, wenn s Präfix von t. Maximale Strings in S sind die unendlichen und mit $ beendete Strings. Die Menge S ist eine cpo mit kleinstem Element ε: Vollständigkeit: interessant sind nur die unendlichen (echten) Folgen. Deren lubs sind unendliche Strings. Wir betrachten eine Funktion auf S, die durch Durchlesen des Strings von links nach rechts feststellt, ob eine 1 in einem String ist oder nicht: hateins : S {True, False} Das Problem ist jetzt, dass diese Funktion zwar leicht ja sagen kann, aber nein nur, wenn sie bis zum $ keine 1 gefunden hat. Sind bis zu einem Zeitpunkt nur 0 en aufgetaucht, so gibt es noch keine Antwort. hateins(ε) bedeutet, dass im Moment auf weitere Eingabe gewartet werden muß. Im schlechtesten Fall gibt diese Funktion keine Antwort: wenn der unendlich lange String aus 0 en die Eingabe ist. Entweder ist dann unsere Funktion partiell oder wir brauchen einen Wert unbekannt. Da wir bereits festgestellt haben, dass partielle Funktionen auch als totale Funktionen auf einem mit erweiterten Bereich modelliert werden können, nehmen wir die zweite Alternative: {True, False, } mit True und False. Die Anforderungen an hateins sind: hateins(1s) = True hateins($) = False hateins(0s) = hateins(s) hateins(ε) = Diese bestimmen den Wert für den unendlichen String aus Nullen = 0 ω nicht eindeutig. Sinnvoll wären False oder. Der logisch richtige Wert wäre False, aber dieser läßt sich algorithmisch erst nach unendlich vielen Überprüfungen bestimmen.

5 TIDS 2, SS13, Kapitel 1, vom Betrachtet man das Verhalten der Funktionen bzgl. der cpo, dann korrespondiert das richtige Berechnungsverhalten zur Stetigkeit der Funktion hateins läßt sich approximieren durch die aufsteigende Folge: ε, 0, 00, 000,.... Der lub davon ist gerade 0 ω. Der jeweilige Wert von hateins(ε), hateins(0), ist. Stetigkeit bedeutet dann, dass hateins(0 ω ) =. Die Funktion hateins mit hateins (0 ω ) = False wäre nicht mehr stetig, da False nicht der lub der approximierenden Folge ist Vollständige Verbände, Knaster-Tarski Fixpunktsatz Wir erwähnen noch den Fixpunktsatz für vollständige Verbände. Definition 1.14 Eine Ordnung auf D ist ein Verband, gdw, für beliebige Elemente x, y D sowohl glb(x, y) als auch lub(x, y) in D existieren. Eine Ordnung auf D ist ein vollständiger Verband gdw. für beliebige Teilmengen A D sowohl glb(a) als auch lub(a) existiert (eindeutig). Ein vollständiger Verband ist insbesondere eine cpo mit, denn jeder vollständige Verband hat ein kleinstes und ein größtes Element. Die Potenzmenge P(M) einer Menge M ist immer ein vollständiger Verband bzgl. lub und glb sind durch {M i } bzw. durch {M i } definiert. In einem Verband genügt die Monotonie einer Funktion zur Existenz eines Fixpunktes. Der ist auch einfach zu konstruieren. Satz 1.15 (Knaster, Tarski) Sei D ein Verband und Φ : D D eine monotone Abbildung. Dann existiert ein kleinster und größter Fixpunkt von Φ: der kleinste Fixpunkt ist {x Φ(x) x}. Beweis. Sei H := {x D Φ(x) x} und sei α = H. Für alle x H gilt α x, also gilt Φ(α) Φ(x) x (Monotonie). Deshalb ist Φ(α) untere Schranke von H; somit Φ(α) α. Aus Φ(α) α folgt jetzt Φ(Φ(α)) Φ(α) und damit nach Definition von H auch Φ(α) H D.h. aber, α Φ(α) und somit folgt aus der Antisymmetrie: α = Φ(α). D.h. α ist ein Fixpunkt. Da alle Fixpunkte β per Definition in H sind, muß α kleinster Fixpunkt von Φ sein.

6 TIDS 2, SS13, Kapitel 1, vom Konstruktion neuer cpo s Wir konstruieren neue vollständige partielle Ordnungen, um aus einfachen semantischen Bereichen, wie z.b. dem der natürlichen Zahlen und der Booleschen Werte neue cpos, d.h. neue semantische Bereiche zu konstruieren. Wir werden sehen, dass den Konstruktionsverfahren jeweils bestimmte Programmkonstrukte entsprechen. Zunächst benötigen wir den Begriff der Isomorphie zweier cpo s: Definition 1.16 Seien D, E zwei cpo s. Eine stetige Funktion f : D E ist ein Isomorphismus, wenn sie eine Bijektion ist und wenn es eine stetige, bijektive Funktion g : E D gibt, so dass f g = Id E und g f = Id D ist. D und E heißen dann isomorph. I. a. unterscheiden wir isomorphe cpo s nicht, da sie im wesentlichen dasselbe Objekt sind. Aussage 1.17 Seien D, E zwei cpo s. Eine Funktion f : D E ist ein Isomorphismus, gdw. f eine Bijektion ist mit x D y gdw. f(x) E f(y). Beweis. Die eine Richtung ist offensichtlich. Sei f : D E eine Bijektion mit x D y gdw. f(x) E f(y). Sei g die inverse Funktion zu f. Aus der Voraussetzung folgt, dass g ebenfalls die Monotonie-Eigenschaft von f hat. Sei a 1 D a 2 D... eine aufsteigende Kette und sei a die kleinste obere Schranke zu a i. Dann existiert zu f(a 1 ) E f(a 2 ) E... eine kleinste obere Schranke e. Da f(a i ) E f(a) für alle i, gilt e f(a). Wegen der Voraussetzung ist a i g(e) für alle i, d.h. g(e) ist obere Schranke der a i mit g(e) a. Da a obere Grenze ist, gilt g(e) = a und damit auch e = f(a). D.h. f ist stetig. Die Funktion g ist ebenfalls stetig, da g die Voraussetzung der Proposition erfüllt. 1.2 Diskrete cpo s In diskreten cpo s gilt nur x x für alle x D. Jede Kette ist konstant: x x.... Diese cpo s kommen vor bei Booleschen Wahrheitswerten, oder der Menge der Zahlen. Die Zahlen sind bzgl. Informationsgehalt unvergleichbar, da sie jeweils den maximalen Informationsgehalt repräsentieren. Es gilt: Jede Funktion f : D E ist stetig, wenn D eine diskrete cpo ist. 1.3 Endliche Produkte. Seien D i, i = 1,..., k cpo s. Wir können immer annehmen, dass die Mengen disjunkt sind. D 1... D k ist das zugehörige cartesische Produkt (die Menge der k-tupel). Die Ordnung darauf ist punktweise definiert:

7 TIDS 2, SS13, Kapitel 1, vom (d 1,..., d k ) (d 1,..., d k ) gdw. d i d i für alle i. Es gilt für Ketten von Tupeln (d 1j,..., d kj ), dass j (d 1j,..., d kj ) = ( j d 1j,..., j d kj). (Übungsaufgabe) Die Projektionsfunktionen π i sind definiert durch π i (d 1,..., d k ) = d i. Diese Projektionsfunktionen sind stetig. Tupelbildung kann man für Funktionen ebenfalls verwenden: Seien f i : E D i, i = 1,..., k stetige Funktionen auf den cpo s E, D i. Dann ist die Funktion f 1,..., f k : E (D 1,..., D k ) definiert durch f 1,..., f k e := (f 1 (e),..., f k (e)). Die Funktion f 1,..., f k erfüllt π i f 1,..., f k = f i. Die Funktion f 1,..., f k ist offenbar monoton. Sie ist auch stetig: Sei e 0 e 1 e 2... eine Kette in E. f 1,..., f k ( i e i) = (f 1 ( i e i),..., f k ( i e i)) = ( i (f 1(e i ),..., i f k(e i )) da alle f i stetig sind = i ((f 1(e i ),..., f k (e i )) (Definition des Produktes) = i f 1,..., f k (e i ) Definition von... Die Produktbildung kann man für Funktionen und Kreuzprodukt von cpo s gemeinsam machen: Seien f i : D i E i stetige Funktionen auf cpo s. Dann ist f 1... f k : D 1... D k E 1... E k definiert durch f 1... f k (d 1,..., d k ) = (f 1 (d 1 ),..., f k (d k )). Dies kann man schreiben als f 1... f k = f 1 π 1,..., f k π k. Daraus kann man schließen, dass diese Funktion ebenfalls stetig ist. Lemma 1.18 Sei h : E D 1... D k eine Funktion auf cpo s. Dann ist h stetig gdw. π i h stetig ist für alle i. Beweis. = : Komposition ist stetig. : Nehme an, dass π i h stetig ist für alle i. Dann kann man h aus stetigen Operationen rekonstruieren: h(x) = (π 1 h(x),..., π k h(x)) = (π 1 h,..., π k h (x). Diese Funktion ist stetig, da π i h stetig ist, und... stetige Funktionen erzeugt. Wir zeigen auch eine analoge Aussage für eine Funktion h : D 1... D k E. Diese Aussage ist etwas schwerer zu zeigen. Dazu benötigen wir ein Lemma über lubs von aufsteigenden arrays. Lemma 1.19 Sei e i,j Elemente einer cpo E, so dass e i,j e i,j wenn i i und j j. Dann gilt: {e i,j i, j IN} hat eine kleinste obere Schranke und e i,j = ( e i,j ) = ( e i,j ) = e i,i i,j i j j i i

8 TIDS 2, SS13, Kapitel 1, vom Beweis. Es ist eine leichte Übung, zu zeigen, dass die Mengen {e i,j }, {e i,i }, { j e i,j}, { i e i,j} die gleichen oberen Schranken haben. Zunächst gilt, dass e i,j e k,k wenn k = max{i, j}. Sei a eine obere Schranke von { j e i,j}. Dann ist a auch obere Schranke von {e i,j }. Umgekehrt sei a obere Schranke von {e i,j }. Dann ist für jedes i: j e i,j a, denn das linke ist eine kleinste obere Schranke einer Teilmenge. Damit ist a auch obere Schranke von { j e i,j}. Lemma 1.20 Sei f : D 1... D k E eine Funktion auf cpo s D i, E. Dann ist f stetig gdw. f stetig in jedem Argument ist. Beweis. = : Sei f stetig: Für feste d j definiere die Funktion f i (x) := f(d 1,..., d i 1, x, d i+1,..., d k ). Diese ist stetig. : Sei der Einfachheit halber k = 2 und sei (x 0, y 0 ) (x 1, y 1 )... eine aufsteigende Kette. Dann gilt: f( i (x i, y i )) = f( i x i, j y j) lubs für kartesisches Produkt = i f(x i, j y j) da f stetig im ersten Argument = i ( j f(x i, y j ) da f stetig im zweiten Argument = i f(x i, y i ) wegen obigem Lemma 1.4 Funktionenräume Seien D, E cpo s. Mit [D E] bezeichnen wir die Menge der stetigen Funktionen D E. Die Ordnung auf [D E] sei f g gdw. d D : f(d) g(d). Wenn E ein bottom-element hat, dann hat [D E] das kleinste Element [D E], definiert durch: [D E] d = E für alle d D. Die Ordnung [D E] ist eine cpo: Betrachte eine Kette f 0 f 1 f 2... Für d D können wir f 0 (d) f 1 (d)... bilden. Deshalb existiert i f i(d). D.h die Funktion i f i ist so definiert, dass ( i f i)(d) := i f i(d). Es bleibt zu zeigen, dass ( i f i) stetig ist, d.h. [D E] ist. Sei d 0 d 1 d 2... eine Kette in D. Dann gilt: ( i f i)( j d j) = ( i f i( j d j) nach Definition der Funktion( i f i) = i j f i(d j ) da f i stetig ist = j i f i(d j ) nach dem Lemma über aufsteigende arrays = j (( i f i)(d j )) Definition von lub für Funktionen

9 TIDS 2, SS13, Kapitel 1, vom Beispiel 1.21 Wenn I eine Menge mit diskreter Ordnung ist, entspricht der Funktionenraum [I D] einem Produkt von zu D isomorphen Ordnungen, wobei I die Menge der Indizes ist. Wenn I endlich ist sind das gerade I -Tupel. 1.5 Operationen auf Funktionenräumen Anwendung einer Funktion auf das Argument: apply : [D E] D E wobei D, E cpo s sind. Die Definition ist: apply (f, d) = f(d). Die Funktion apply ist stetig: Sie ist stetig in jedem Argument: 1. stetig im ersten Argument: Sei f 0 f 1 f 2 eine Kette von Funktionen. Dann gilt: apply(( i f i), d) = ( i f i)d = i f i(d) (Definition des lubs von Funktionen) = i apply(f i, d) 2. Stetig im zweiten Argument: Sei d 0 d 1 d 2... eine Kette. apply(f, ( i d i)) = f( i d i) = i f(d i) da f stetig = i apply(f, d i) Beispiel 1.22 Currying macht aus einer Funktionen auf Tupeln eine Funktion, die man nacheinander auf die Elemente des Tupels anwenden kann. (Das ist eine Konstruktion, die zeigt, dass man mit einstelligen Funktionen im Prinzip auskommt) curry : [F D E] (F [D E]) curry(g) : F [D E] curry(g) = λv F.(λd D.g(v, d)) Wir argumentieren dass folgendes gilt: 1. curry ist korrekt definiert, d.h. das Bild liegt in (F [D E]) 2. curry (g) ist stetig. 3. curryselbst ist stetig Jetzt machen wir das mal von Hand. Man kann zeigen, dass alle diese Konstruktionen automatisch stetig sind. 1. curry(g) ist korrekt definiert: (λd D.g(v, d)) ist eine stetige Funktion [D E]. Die Behauptung gilt, denn g ist stetig in jedem Argument.

10 TIDS 2, SS13, Kapitel 1, vom curry(g) ist stetig für alle g: v 0 v 1 v 2... sei Kette in F. Sei d D beliebig. Dann betrachte curry(g)( i v i)d = g(( i v i), d) = i g(v i, d) = = i curry(g) v i d Also stimmt die Funktion curry(g)( i v i) mit ( i curry(g) v i ) überein. D.h. curry(g) ist stetig. 3. curryist stetig: Sei g 1 g 2 g 3... Dann gilt: i (curry(g i )) d e = i g i(d, e) = i g i(d, e) = ( i g i)(d, e) da g i [F D E] = curry( i g i) d e D.h. i curry(g i) und curry( i g i ) stimmen als Funktionen überein. Damit ist curry stetig. 1.6 Lifting Diese Konstruktion addiert ein neues Bottom-Element zu einer cpo. Der Zweck ist i.a., partiell definierte Funktionen handhabbarer zu machen, insbesondere diese auf bekannte Funktionen zurückzuführen. Man kann es auch sehen als Umwandlung einer mathematisch gegebenen Berechnungsmöglichkeit in eine algorithmische, wobei undefiniert und Nicht-terminierung mitbehandelt werden sollen. Die Konstruktion selbst ist einfach: Sei D eine cpo. Definiere D = D { }, wobei von allen Elementen von D verschieden ist. Die Ordnung auf D ist die Ordnung von D, zusätzlich gilt d für alle d D. Die Einbettung ι : D D ist die Funktion mit ι(d) = d. Lemma 1.23 Die Einbettung ist stetig. Sei E eine cpo mit kleinstem Element. Eine Funktion f : D E kann auf f : D E fortgesetzt werden. Diese Funktion nennen wir f. { f f(d) wenn d (d) = sonst. d.h. d = E f ist stetig: Sei d 1 d 2 : wenn d 2 =, dann ist d 1 =. wenn d 2, dann ist f (d 1 ) = f(d 1 ) oder f (d 1 ) = E f(d 2 ). Sei d 1 d 2... eine aufsteigende Kette. Wenn ein d i, dann ist lub f (d i ) = lub f(d i ) = f(lub d i ) = f (lub d i ) da (lub d i ). Wenn d i =, dann ist lub f (d i ) = lub = = f (lub d i ). Bemerkung 1.24 Wenn f durch eine Funktion λx.e beschrieben werden kann, dann schreiben wir statt (λx.e) (d) auch (slet x = d in e) (slet soll striktes let andeuten)! Das normale (let x = d in e) kann als (d e) übersetzt werden.

11 TIDS 2, SS13, Kapitel 1, vom Lemma 1.25 Die (Lifting-)Funktion (.) : [D E] [D E] ist stetig: Beweis. Sei f g. Sei d D. Wenn d =, dann ist f = = g. Wenn d, dann betrachte f d g d. Wegen f (d) = f(d) und g (d) = g(d) ist (.) monoton. Sei f 0 f 1... eine Kette in [D E] und d ein Element aus D. Wenn d =, dann ist ( i f i) =. Die Kette i f i ist konstant =, also ebenfalls =. Sei d. Dann gilt: ( i f i) d = i f i )d (denn so war (.) definiert) = i f i (d) = i f i (d) Stetigkeit von f i und Definition von (.) = ( i f i )(d) Da ( i f i ) punktweise definiert ist Mathematische Operationen auf Mengen können damit geliftet werden. Zum Beispiel kann man damit Multiplikation oder andere Funktionen auf Zahlen auch für Argumente verwenden, die möglicherweise undefiniert sind. Die Zahlen werden dann als geliftete Zahlen betrachtet, d.h. als ein flache cpo mit einem kleinstem Element. Diese Methode geht dann davon aus, dass diese neuen Operationen jeweils undefiniert liefern für undefinierte Argumente. D.h. man kann sie gemeinsam mit anderen Funktionen verwenden, die rekursiv definiert und möglicherweise für bestimmte Werte undefiniert sind. geliftete Multiplikation: := λa, b.(slet x = a, y = b in x y) Diese Definition liefert auch für das Produkt 0 =. geliftete Disjunktion (oder) := λa, b.(slet x = a, y = b in x y) Man sieht: dieses oder muß erst testen, ob die Argumente definiert sind. Z.B. False =. D.h. es hat eine andere Semantik als das in Haskell definierte oder ( ), das nur das erste Argument immer testet. Für die Untersuchung der Äquivalenzen im ungetypten (lazy) Lambda- Kalkül wird auch ein Lifting verwendet, das einen Funktionenraum (der bereits ein kleinstes Element hat) nochmals liftet und mit einem extra kleinsten Element versieht. Damit ist es möglich, die Funktionen λx. und das Element zu unterscheiden. Definition 1.26 Eine Funktion f : D E, wobei D, E cpo s mit sind, ist strikt gdw f =

12 TIDS 2, SS13, Kapitel 1, vom Dies ist eine Definition bzgl. Funktionen auf cpo s. Bei der Semantik von funktionalen Programmiersprachen hat dieser Begriff eine operationale Bedeutung: wenn [[f ] strikt ist, kann man die Optimierung verwenden, so dass f zuerst sein Argument auswertet, und dann weiter reduziert. Seien D, E cpos mit. Betrachte die Funktion strict : [D E] [D E], definert durch: { f(d) wenn d (strict f) d = wenn d = E Operational bedeutet dies, dass eine Funktion f verändert wird, indem zunächst das Argument ausgewertet wird. Es gilt: 1. (strict f) ist stetig, wenn f stetig ist. 2. strict ist stetig: Der Beweis geht analog zu (*), zusätzlich sind ein paar Fallunterscheidungen zu machen. 1.7 Summen von cpo s; Fallunterscheidungen Die Summen-Konstruktion ist die Grundlage der Semantik des case- Konstruktes. Definition 1.27 Seien D 1,..., D k (disjunkte) cpo s. Die Summe dieser cpo s ist einfach die (disjunkte) Vereinigung D i, wobei die Ordnung genau übertragen wird. Die Elemente aus verschiedenen cpo s sind unvergleichbar. Die Summe schreiben wir auch als D D k. Es gibt (injektive) Einbettungen ι i : D i D D k mit ι i (d i ) = d i Es gilt: Alle Einbettungen sind stetig. (offensichtlich) Oft wird diese Summe explizit mit Konstruktoren konstruiert, da die D i s möglicherweise nicht disjunkt sind: Wenn man c i als verschiedene Konstruktoren hat, dann definiert man D D k = {c i (d i ) i = 1,..., k}. Man kann stetige Funktionen in eine gemeinsame cpo E auch summieren : Sei f i : D i E stetige Funktionen auf cpo s. Dann definiert man [f 1,..., f k ] : D D k E folgendermaßen: [f 1,..., f k ]ι i (d i ) = f i (d i ). D.h. [f 1,..., f k ] ι i = f i. Hat man die Summe mit Konstruktoren c i definiert, dann definiert man: [f 1,..., f k ]c i (d i ) = f i (d i ). Es gilt: Die Operation [.,...,.] : ([D 1 E]... [D k E]) ((D D k ) E) ist stetig. Die Summe von cpo s kann zur Beschreibung des case-konstruktes dienen. Das einfachste ist if : Die diskrete cpo T = {True, False} kann man als Summe der cpo s True und False ansehen.

13 TIDS 2, SS13, Kapitel 1, vom Seien zwei Funktionen gegeben: λx 1.e 1 : True E λx 2.e 2 : False E Dann kann man definieren: cond 0 (t, e 1, e 2 ) := [λx 1.e 1, λx 2.e 2 ](t) Wenn t = True ergibt, dann erhält man (λx 1.e 1 )(True), im anderen Fall (λx 2.e 2 )(False). Da man i.a. die Situation hat, dass die Bedingung undefiniert sein kann, betrachtet man E mit, liftet {True, False} zu {True, False}, und definiert cond(t, e 1, e 2 ) := (slet t = b in cond 0 (t, e 1, e 2 )) Dies ist das cond mit folgendem Verhalten: wenn t =, dann ist cond(t, e 1, e 2 ) =, wenn t = True, dann e 1 (True) wenn t = False, dann e 2 (False) D.h., Die Summenkonstruktion gehört zu einem if. Das kann man ohne Probleme zu einem case verallgemeinern: D D k sei Summe von cpo s, die mit Konstruktoren c i konstruiert worden ist. Wenn Funktionen λx i.e i : D i E gegeben sind, dann entspricht [λx 1.e 1,..., λx n.e n ](d) einer Konstruktion mit case: case d of (c 1 (x 1 ) e 1 (x 1 ));... (c n (x n ) e n (x n )) Im allgemeinen ist das zu schwach, da dies voraussetzt, dass die Auswertung, die den Konstruktor erkennt, auch terminiert. Deshalb nimmt man i.a. die geliftete Summe (D D k ) als Summe von cpo s, die mit Konstruktoren c i konstruiert worden ist. Wenn Funktionen λx i.e i : D i E gegeben sind, dann entsprechen sich: (slet x = d in [λx 1.e 1,..., λx n.e n ](d)) und case d of (c 1 (x 1 ) e 1 (x 1 ));... c n (x n ) e n (x n ); 1.8 Stetigkeit von fix Sei D eine cpo mit. Der kleinste-fixpunkt-operator fix : [[D D] D] ist definiert als fix f = f n ( ) n

14 TIDS 2, SS13, Kapitel 1, vom Dies kann man auch schreiben als fix = n λf.f n ( ) Denn λf. λf.f( )... ist eine aufsteigende Kette in [[D D] D]. Da wir gezeigt haben, dass [[D D] D] eine cpo ist, existiert die kleinste obere Schranke, und diese ist auch in [[D D] D]. Diese kleinste obere Schranke ist gerade fix: denn fix f = n f n ( ) = ( n λx.x n ( ))f Also gilt: fix [[D D] D]. 2 Eine Metasprache und Stetigkeit Die Idee einer Metasprache ist eine allgemeine Möglichkeit, Funktionen auf cpos als stetig nachzuweisen, solange sie sich mittels Lambda-Ausdrücken darstellen lassen; und zwar ohne jedesmal einen expliziten Beweis führen zu müssen. Dies soll helfen, für verschiedene Varianten von Lambda-Notationen bzw. Lambda-Kalkülen die Stetigkeit von Ausdrücken aus allgemeineren Prinzipien herzuleiten, anstatt diese jeweils extra nachzurechnen. Damit kann man dann etwas leichter eine denotationale Semantik für eine gegebene Programmiersprache definieren, da man die Stetigkeit aller Ausdrücke nicht gesondert nachweisen muß. Wir nehmen an, dass es cpo s gibt, so dass wir auch die neu konstruierten cpo s verwenden dürfen. E ::= D i E 1... E n [E 1 E 2 ] [E 1,..., E n ] E 2.1 Syntax für die Lambda-Meta-Sprache Für Ausdrücke: c i Konstanten für (alle) Elemente in einer festen cpo. Konstruktoren c E für bestimme cpo s. Wir nehmen auch an, dass die Summen-cpo s aus cpo s gebildet werden, die mit Konstruktoren verkleidet sind. Funktionen, die fest an eine bestimmte cpo s gebunden sind: Projektionen, Einbettungen Generische Konstanten, wie apply, curry, fix, strict.

15 TIDS 2, SS13, Kapitel 1, vom e ::= x λx.e (e 1 e 2 ) (slet x = e 1 in e 2 ) (case e of(c E,1 (x 1 ) e 1 );... ; (c E,n (x n ) e n )) Analog zum Typcheck für die einfach getypte Lambda-Notation gilt auch hier, dass nur solche Ausdrücke sinnvoll sind, für die man eine sinnvolle Interpretation als Funktion auf einer (konstruierten) cpo herleiten kann. Diese ist analog zum hergeleiteten Typ. Die Bedingungen, die dann gelten müssen, sind: Variablen haben im Geltungsbereich stets die gleiche Zuordnung Konstanten haben ihre feste Zuordnung zur cpo, Jedes Vorkommen einer generische Konstanten hat ebenfalls eine zulässige Belegung. D.h. man kann so tun, als gäbe es für jeden (sinnvollen Typ) eine generische Konstante dieses Typs. (e 1 e 2 ): e 1 : [D E], e 2 : D und (e 1 e 2 ) gehört zur cpo E (slet x = e 1 in e 2 ): x gehört zur cpo D, e 1 zur cpo D ; e 2 und (slet x = e 1 in e 2 ) gehören zur gleichen cpo E (case e of(c E,1 (x 1 ) e 1 );... ; c E,n (x n ) e n ): Der Ausdruck e gehört zur cpo E, die Variable x i gehört zur E i, c E,i ist der Konstruktor, der E i versteckt. E = [E 1,..., E n ]. Der case-ausdruck gehört zur cpo E. Wir gehen davon aus, dass sinnvolle Ausdrücke genau diejenigen sind, für die man eine Belegung aller Unterausdrücke mit cpo s angeben kann, so dass obige Bedingungen erfüllt sind. Dies ist nicht nur zufällig genauso wie im einfach getypten Lambdakalkül. 2.2 Stetigkeit von Funktionen in der Metasprache Hier braucht man wieder die Begriffe wie freie Variablen, gebundene Variablen, die wir hier voraussetzen. Die Konstruktion von syntaktischen Ausdrücken ergibt i.a. Unterausdrücke, die freie Variablen enthalten. Dies muß in die Betrachtungen einfließen. Dazu benötigen wir eine angepaßte Definition der Stetigkeit eines Ausdrucks mit freien Variablen. Definition Sei e ein Ausdruck, und seien x 1,..., x n die freien Variablen in e. Sei x eine Variable. Dann ist e stetig in der Variablen x, wenn für alle zulässigen Belegungen x i : D i mit d i D i für x i x gilt, dass λx.e[d i /x i i = 1,..., n, x i x] stetig ist.

16 TIDS 2, SS13, Kapitel 1, vom Ein Ausdruck e ist stetig in seinen Variablen, wenn e stetig in allen freien Variablen ist. Dies ist unabhängig von der Reihenfolge der gewählten Variablen in der Definition, da wir einen Ausdruck e : E als Funktion mit den freien Variablen {x 1 : D 1,..., x n : D n } als Funktion von D 1... D n E ansehen können, und bereits gezeigt haben, dass eine Funktion stetig ist, gdw. sie in jedem Argument separat stetig ist. Wir gehen jetzt die Konstrukte einzeln durch und argumentieren, dass alle gebildeten Ausdrücke stetig sind: Variablen x ist stetig in x, denn für jede cpo D, die man x zuordnet, ist λx : D.x als Identität auf D stetig. x ist auch stetig in y für y x, da konstante Funktionen stetig sind. d.h ist stetig in seinen Variablen. Generische Konstanten apply : [[D E] D E], wobei D, E cpo s sind (polymorph) fix: [D D] D curry: (F D E) (F [D E]) Diese sind alle stetig, wie bereits gezeigt. Da diese Funktionen keine freien Variablen enthalten, gilt, dass sie stetig in allen Variablen sind. Tupelbildung (e 1,..., e n ): Wenn alle e i stetig in allen Variablen sind, dann ist (e 1,..., e n ) ebenfalls stetig in allen Variablen: Sei eine zulässige cpo-belegung für das Tupel gegeben. Diese ist auch eine für jedes e i. Da alle λx.e i [d y /y x y] stetig sind, gilt das auch für λx.(e 1,..., e n )[d y /y x y] (dies folgt aus den Betrachtungen über Tupelbildung von Funktionen Also ist (e 1,..., e n ) stetig in seinen Variablen Anwendung Sei e ein Ausdruck. Betrachte zunächst (apply(e 1, e 2 )) wobei apply eine generische Konstante ist. Dann gilt: wenn (e 1, e 2 ) stetig ist, dann auch (apply (e 1, e 2 )). Sei eine Belegung von (apply(e 1, e 2 )) gegeben. Dann ist dies auch eine gemeinsame Belegung von apply und (e 1, e 2 ). Sei außerdem (e 1, e 2 ) stetig in x. Die cpo von (e 1, e 2 ) wurde konstruiert als (D E) D. Dann ist λx.((e 1, e 2 )[dy/y y x]) stetig und in [F (D E) D] Dann ist auch apply λx.(e 1, e 2 )[d y /y] stetig. Offenbar gilt: apply λx.(e 1, e 2 )[d y /y] = λx.apply(e 1, e 2 )[d y /y]. Denn (apply λx.(e 1, e 2 )[d y /y](a) = (apply(e 1, e 2 )[d y /y, a/x] = (e 1, e 2 )[d y /y, a/x] = (λx.apply(e 1, e 2 )[d y /y])(a) Damit ist apply(e 1, e 2 ) stetig. Offenbar ist apply(e 1, e 2 ) = (e 1 e 2 ). Also ist Anwendung stetig.

17 TIDS 2, SS13, Kapitel 1, vom Abstraktion λz.e ist stetig in allen Variablen Dazu betrachte λx.λz.e[d y /y y x, z]. Diese Funktion ist stetig, wenn x keine freie Variable in λz.e ist. Wenn x eine freie Variable in λz.e ist, dann ist e[d y /y y x, z] als Funktion von D 1 D 2 E stetig, wobei x, z die Variablen sind mit x : D 1 und z : D 2. Dann können wir diese Funktion transformieren mit curry: curry(λ(x, z).e) = λx.λz.e[d y /y y x, z]. Da curry als stetig bereits nachgewiesen ist, ist damit die Funktion λx.λz.e[d y /y y x, z] stetig. Dies gilt für alle x, also ist λz.e stetig in seine Variablen slet: (slet x = e 1 in e 2 ): Bedingung an eine Belegung mit cpo s ist : e 1 : D, x : D, e 2 : E. e 2 ist stetig in allen Variablen, insbesondere ist (λx.e 2 ) stetig; damit auch die geliftete Funktion (λx.e 2 ). Dies haben wir bereits bei der Betrachtung zu lifting gesehen. Da Anwendung ebenfalls eine Konstruktion ist, die zu stetigen Funktionen führt, gilt: (λx.e 2 ) (e 1 ) ist stetig in allen Variablen. Denn es gilt: (slet x = e 1 in e 2 ) = (λx.e 2 ) (e 1 ) case: (case e of (c E,1 (x 1 ) e 1 );... ; (c E,n (x n ) e n )) Hier muss die Belegung mit cpo s so sein, wie oben beschrieben: (e gehört zur cpo E, die Variable x i gehört zur cpo E i, c E,i ist der Konstruktor, der E i versteckt. E = [E 1,..., E n ]. Diese Konstruktion ist stetig, da (case e of (c E,1 (x 1 ) e 1 );... ; (c E,n (x n ) e n )) als [λx 1.e 1,..., λx n.e n ] e definiert ist. Damit sind auch alle syntaktischen Konstruktionen wie (if a then b else c ) stetig. Fix : ist offenbar auch stetig, wie oben schon gezeigt. In Sprachen kommt das oft als expliziter Rekursions-Operator vor, manchmal in der Syntax µx.s Zusammenfassend gilt, dass alle mittels der Metasprache bildbaren Ausdrücke stetig sind, insbesondere alle geschlossenen Ausdrücke.

18 TIDS 2, SS13, Kapitel 1, vom PCF: Programming Language for Computable Functions Diese Sprache wurde von Dana Scott 1969 (LCF) eingeführt, um Grundlagenuntersuchungen an funktionalen Sprachen durchzuführen. PCF ist eine einfach getypte funktionale Sprache, für die wir mit unseren Mitteln eine denotationale Semantik mittels Konstruktionen über cpo s angeben können. PCF hat als Basisdatentypen natürliche Zahlen und die beiden Wahrheitswerte True, False. Einige wenige Funktionen sind schon vorhanden. 3.1 Syntax Typen: Ausdrücke: τ ::= num Bool τ τ E ::= True False pred E succ E, zero? E (if E then E else E ) x λx :: τ.e (E E) µx :: τ.e Alle zulässigen Ausdrücke sind einfach (monomorph) getypt. D.h. diese haben einen Typ, der keine Variablen enthält. Dieser Typ ist zudem eindeutig. In den Konstrukten λ, µ müssen die Variablen mit einem (monomorphen) Typ versehen sein, damit man den Typ der Ausdrücke angeben kann. Einige Typen von Ausdrücken: 0, 1, 2,...: num zero?: num Bool if then else :: Bool α α α für alle α. D.h. das if-then-else kann man als generisches Konstrukt ansehen, das für jeden Typ τ zu einem extra if-then-else τ instanziiert wird. Der neue Operator µ ist der Fixpunktoperator. Typregel für µ ist: λx.e : τ τ (µx : τ.e) : τ 3.2 Operationale Semantik von PCF Die operationale Semantik wird zunächst als big-step Semantik angegeben. Mit v bezeichnen wir einen Wert und mit w einen Wert, oder einen λ- oder µ-ausdruck. Die Regeln für die Reduktion op sind:

19 TIDS 2, SS13, Kapitel 1, vom e 1 op True; e 2 op v if e 1 then e 2 else e 3 op v s op (λx.e) e[a/x] op w (λx.e) a op w t op pred; e op n und n > 0 t e op (n 1) e 1 op False; e 3 op v if e 1 then e 2 else e 3 op v (e[(µx.e)/x]) op w (µx.e) op w t op succ; e op n t e op (n + 1) t op pred; e op 0 t e op 0 t op zero?; e op 0 t e op True t op zero?; e op n und n 0 t e op False Als Reduktionsrelation (d.h. small-step Semantik ) kann man das auch folgendermaßen definieren: if True then e 2 else e 3 e 2 if False then e 2 else e 3 e 3 pred n n 1 falls n > 0 pred 0 0 succ n n + 1 zero? 0 True zero? n False falls n > 0 (λx.e)a e[a/x] (µx.e) (e[µx.e/x]) Betrachten wir noch Reduktionskontexte in PCF: R ::= [] R E if R then E else E pred R succ R zero? R, und erlauben nur Reduktionen, die in einem Reduktionskontext stattfinden: d.h. nur R[s] R[t] ist zulässig. Diese Reduktion im Reduktionskontext bezeichnen wir auch als Normalordnungsreduktion. Die transitive Hülle von bezeichnen wir als. Es gilt, dass op. Die Sprache PCF ist zwar einfach und monomorph getypt, aber es ist leicht zu sehen, dass sie Turing-mächtig ist. D.h. man kann alle berechenbaren Funktionen definieren. Definition 3.1 Sei t ein PCF-Ausdruck. t ist in Normalform gdw. t nicht mehr reduzierbar ist.

20 TIDS 2, SS13, Kapitel 1, vom t ist in WHNF (schwache Kopfnormalform): gdw. t λx.t oder t ist ein Basiswert vom Typ num oder Bool. Definition 3.2 Sei t ein geschlossener PCF-Ausdruck. Wenn ein t existiert mit t t, wobei t eine WHNF ist, dann schreiben wir t. 3.3 Übersetzung PCF nach Haskell Bevor wir die Eigenschaften von PCF genauer betrachten, geben wir zunächst eine Übersetzung nach Haskell an. Wir wollen diese Übersetzung nicht formal verifizieren. Diese Übersetzung soll nicht dazu dienen, PCF semantisch zu fundieren, sondern soll illustrieren, wie man für PCF schnell einen Interpreter bauen kann. Außerdem kann man danach die Ausführung von PCF-Ausdrücken und die Unterschiede zu Haskell schneller sehen. Die übersetzten Funktionen sind zum Teil allgemeiner, d.h. in Haskell haben sie einen polymorphen Typ statt eines monomorphen in PCF; sie könnten Argumente zulassen, die in PCF verboten wären. Aber es soll folgendes erfüllt sein: 1. Übersetzte Ausdrücke sind wohlgetypt in Haskell. 2. Sei t ein Ausdruck in PCF und t n und n eine Zahl oder ein Boolescher Wert. Wenn wir die Übersetzung τ und die Reduktion in Haskell ebenfalls mit Index H andeuten, dann gilt für die Übersetzung: t H H n H Übersetzung nach Haskell: Typen: τ ::= num Bool τ τ Ausdrücke: Boolesche Werte und Zahlen kann man direkt übersetzen. if-then-else und pred, succ ebenfalls direkt. zero? H := iszero (λx : τ.e) H := \x E H (µx : τ.e) H = fix(\x E H ) Folgende Haskell-Definition werden für diese Übersetzung benötigt: pred n = if n > 0 then n-1 else 0 succ n = n+1 iszero x = x == 0 fix f = f (fix f) Man kann alternativ auch das let(rec)-konstrukt zur Übersetzung des µ verwenden: (µx : τ.e) H = let x = E H in x Die Fixpunktbildung entspricht offenbar der (einfachen) Rekursion.

21 TIDS 2, SS13, Kapitel 1, vom Beispiel 3.3 Addition mittels succ. Ein Versuch in funktionaler Notation: add s t := if zero?(s) then t else succ (add (pred s) t) In PCF sieht diese Funktion so aus: add := µa.(λs, t.if zero? (s) then t else succ (a(pred s) t) Die Haskell-Übersetzung dieser Funktion ist: 1. erste Variante add = fix (\a -> (\s t -> if iszero s then t else succ (a (pred s) t))) 2. Zweite Variante add = let a = (\s t -> if iszero s then t else succ (a (pred s) t)) in a Beispiel 3.4 Multiplikation: funktional: mult s t := if zero?(s) then 0 else add t (mult (pred s) t) in PCF: mult := µm.λs, t.if zero?s then 0 else add t (m(pred s)t) Haskell-Übersetzung: 1. mult = fix (\m -> (\s t -> if iszero s then 0 else add t (m (pred s) t))) 2. mult = let m = (\s t -> if iszero s then 0 else add t (m (pred s) t)) in m 4 Eigenschaften von PCF Definition 4.1 Eine Relation ist konfluent (bzw. Church-Rosser) gdw. für alle s, s 1, s 2 : wenn s s 1 und s s 2, dann existiert ein weiterer Term s 3, so dass s 1 s3 und s 2 s3. Satz 4.2 Die Reduktionsrelation ist konfluent.

22 TIDS 2, SS13, Kapitel 1, vom Beweis. Mit Methoden wie in (Barendregt) Ohne den Fixpunktoperator ist diese Sprache nicht Turingäquivalent: Es gilt, dass ohne Fixpunktoperator alle Reduktionen terminieren. Diese Aussage benötigen wir auch später für die Adäquatheit der denotationalen Semantik. Folgende Aussage entspricht einer Variante des Progress-Lemmas. Lemma 4.3 In PCF gilt: geschlossene Terme, die Normalformen vom Typ Bool bzw. num sind, können nur die Basiswerte selbst sein, d.h. Zahlen oder Wahrheitswerte. Beweis. Wir zeigen dies mit Induktion nach der Größe der Terme: Es gilt: Ein Term M in Normalform kann kein µ-ausdruck enthalten, denn jeder µ-term ist reduzierbar, also nicht in Normalform. Wir gehen die Konstruktionsmöglichkeiten durch. M 0, n, True, False: trivial. M pred M, succ M, zero? M : Das gilt mit Induktion, da M ebenfalls von Basistyp, und eine Ein-Schritt Reduktion ausreicht, um den Ausdruck ebenfalls in einen Basiswert zu überführen. M if M 0 then M 1 else M 2 : wenn dieser Term in Normalform ist, dann ist auch M 0 in NF, also True oder False. Dann kann man aber reduzieren. M λx.m : kann nicht sein, da dies vom falschen Typ ist. M (M 1 M 2 ): Dieser Term muß von der Form ((... (M n M n 1 ).....)M 2 ) sein. Der Term M n kann nur eine Abstraktion sein. If-then-else ist nicht möglich, da wegen der Induktionshypothese ein inneres if-then-else nicht in NF sein kann. Damit kann man aber β-reduzieren, und der Term ist nicht in Normalform. Wir betrachten jetzt das Fragment P CF µ : das ist die Sprache PCF ohne den µ-operator. Definition 4.4 Definiere eine Menge T trm von P CF µ -Termen als kleinste Menge, die folgendes erfüllt: 1. Wenn M geschlossen ist und vom Typ num oder Bool, und alle Reduktionen, die von M ausgehen, terminieren, dann ist M T trm. 2. Sei M : τ 1 τ 2. Dann ist M T trm, wenn für alle geschlossenen N : τ 1 T trm gilt: (M N) T trm.

23 TIDS 2, SS13, Kapitel 1, vom Jetzt definiere noch die Menge T trm,v folgendermaßen: Wenn M die freien Variablen x 1,..., x n hat, dann ist M T trm,v, wenn σ(m) T trm für alle σ = {x i N i i = 1,..., n} wobei N i T trm. Offenbar gilt: 1. Sei M T trm. Dann terminieren alle von M ausgehenden Reduktionen. 2. M T trm,v gdw. für alle σ, die T trm - Terme für freie Variablen einsetzen und für alle geschlossenen N 1... N k T trm, so dass σ(m) N 1... N k von Basistyp ist : σ(m) N 1... N k hat nur terminierende Reduktionen. Satz 4.5 Betrachte das Fragment P CF µ der Sprache PCF. Für die Ausdrücke dieser Sprache gilt, dass sie in T trm,v enthalten sind. D.h. Man kann jeden geschlossenen Term in P CF µ nur endlich oft reduzieren. Beweis. Mit Induktion nach der Größe der Terme. M x: trivial M 0, True, False, n: trivial, da alles in Normalform. M pred M, succ M, zero?(m ): Betrachte σ(m ). Nach Induktion terminiert σ(m ). Wegen der operationalen Definitionen von succ, pred, zero? gilt dies auch für σ(m). Also ist M T trm,v. M if M 0 then M 1 else M 2 Nehme an, dass N i T trm sind und σ Substitution, die nur Terme aus T trm einsetzt, so dass (σm) N 1... N n geschlossener Term vom Basistyp ist. Induktion zeigt, dass (σ M 0 ) terminierend ist, ebenso (σm 1 ) N 1... N n und (σm 2 )N 1... N n also ist auch (σm) N N 1... N n terminierend. Dies gilt für alle terminierenden, geschlossenen N i. Also gilt M T trm,v. M (L N): Da L, N T trm,v nach Induktionshypothese, gilt für alle Substitutionen σ die nur Terme aus T trm einsetzen, dass auch σl, σn T trm. Wegen der Definition von T trm ist auch (σl (σn)) terminierend, also ist (L N) T trm,v. M = λx.m : Zu zeigen ist: (λx.σm )N T trm ist terminierend für geschlossene N T trm,v und Substitutionen σ, die nur Terme aus T trm einsetzen. Da M T trm,v nach Induktionshypothese, gilt s[n/x]m T trm. Also gilt das auch für σ(m [N/x]). Damit ist M = λx.m T trm,v.

24 TIDS 2, SS13, Kapitel 1, vom Korollar Alle Terme des µ-freien PCF-Fragments haben nur terminierende Reduktionen. 2. Alle Terme vom Basistyp im µ-freien PCF-Fragment reduzieren zu einer Zahl, oder True, False. Korollar 4.7 Der µ-operator ist nicht im µ-freien PCF-Fragment definierbar. D.h dies ist eine echte Erweiterung. 5 Denotationale Semantik von PCF Für jedes Konstrukt müssen wir angeben, wie syntaktische Objekte denotiert werden: Da PCF-Unterterme freie Variablen enthalten können, benötigen wir eine Umgebungsvariable. Diese Umgebung ist eine partielle Funktion von Variablen in zugehörige Werte. Wir nehmen an, dass Variablen mit einem Typ markiert sind. Wir nehmen auch an, dass die Ausdrücke entsprechend dem einfach getypten Lambda-Kalkül getypt sind. Als Domains verwenden wir cpo s, die wir im Vorlesungsteil zu cpo s eingeführt und ausführlich behandelt haben. Die verwendeten Notationen sind dort erklärt. Die Denotationen der Typen ergeben sich rekursiv folgendermaßen: [num] = IN geliftete natürliche Zahlen [bool ] = {True, False} geliftete zweielementige Menge [τ 1 τ 2 ] = [[τ 1 ] [τ 2 ]] stetige Funktionen, geliftet Wir benutzen hier geliftete Funktionenräume, d.h. es gibt einen extra hinzugefügten Wert, der verschieden ist von der Funktion die stets liefert. Der Funktionenraum vor dem Liften hat bereits ein kleinstes Element: es ist die Denotation von λx.. Die Anwendung von als Funktion auf ein Argument ergibt in D stets ebenfalls. Das gleiche gilt für die Denotation von λx., d.h. die Extensionalität gilt nicht mehr in D: es gibt verschiedene Objekte, die als Funktionen gleich sind. Beachte, dass in anderen Artikeln auch stetige Funktionenräume benutzt werden ohne Lifting. Cartesische Produkte werden nicht benötigt, da es keine Datenkonstruktoren, insbesondere keine Tupel in PCF gibt. Diese kann man verwenden, wenn man PCF mit Tupeln erweitern will. Die zugehörigen Denotationen für geschlossene Terme M :: τ sind dann jeweils aus der Denotation [τ ] des Typs τ, d.h. [M ] [τ ]. Bei offenen

25 TIDS 2, SS13, Kapitel 1, vom Termen gilt das ganz ähnlich, nur muß man noch Einsetzungen für die freien Variablen hinzufügen. Im folgenden lassen wir die Typisierungsbezeichnungen teilweise weg. Trotzdem nehmen wir an, dass diese vorhanden sind. Definition 5.1 (denotationale Semantik von PCF) ρ ist eine Umgebung, die Variablen Werte aus der richtigen Menge zuordnet. ρ(x :: τ) [τ ] Diese Umgebung wird benötigt, damit man Unterausdrücke, die freie Variable enthalten, behandeln kann. Ausdrücke ohne freie Variablen (geschlossene Ausdrücke) haben eine denotationale Semantik, die unabhängig von einer Umgebung ist. Die Vorstellung ist: Für alle globalen Werte (die in ρ) gilt die Definition bereits. Wir benutzen λ auch auf der Seite der Denotationen, aber notieren es dort als λ [x] ρ = ρ(x) [n] ρ = n [pred M ] ρ = ([[M ] ρ) 1 wenn ([M ] ρ) > 0 = 0 wenn ([M ] ρ) = 0 = sonst [succ M ] ρ = ([[M ] ρ) + 1 wenn ([M ] ρ) 0 = wenn ([M ] ρ) = [if M then L 1 else L 2 ] ρ = wenn [M ] ρ = = [[L 1 ] ρ wenn [M ] ρ = True = [[L 2 ] ρ wenn [M ] ρ = False [(M N)] ρ = ([[M ] ρ) ([N ] ρ) [λx.m ] ρ = λy.([m ](ρ[y/x])) [µx.m ] ρ = fix(λy.([m ](ρ[y/x])) (hier müssen M und x gleichen Typ haben) Um zu sehen, dass die Definitionen alle stetig sind, wenden wir die Überlegungen zur Meta-Notation an. Die einfache Typisierung aller Ausdrücke stellt sicher, dass es jeweils zulässige Belegungen mit cpo s gibt. Alle Konstrukte sind stetig: succ, pred und zero? sind auf gelifteten, diskreten cpo s definiert Applikation, Abstraktion, Fixpunktbildung sind ebenfalls stetig als generische Konstanten. if-then-else ist als case - Konstrukt über der gelifteten Summe ebenfalls stetig. Satz 5.2 Seien M und N PCF-Ausdrücke. Wenn M [M ] ρ = [N ] ρ für alle ρ. N, dann gilt:

26 TIDS 2, SS13, Kapitel 1, vom Beweis. Wir zeigen dies für die Einschrittrelation. Dann gilt das auch für die transitive Hülle. Wir betrachten dabei jeweils den Unterausdruck, der unmittelbar reduziert wird (den Redex). pred n n 1: [pred n] ρ = ([n] ρ) 1 = n 1. Analog für pred 0, succ n, zero? n. (if True then L 1 else L 2 ) L 1 : [if True then L 1 else L 2 ] ρ = [L 1 ] ρ für alle ρ. Analog: False-Fall (λx.m)n M[N/x]: [(λx.m)n ] ρ = ([(λx.m)] ρ)([n ] ρ) = (λy.[m ] ρ[x y])([n ] ρ) = [[M ] ρ[x ([N ] ρ)] = [[M[N/x]] ρ( Induktion nach der syntaktischen Struktur von M) (µx.m) (M[(µx.M)/x]; [(µx.m)] ρ = fix(λy.([m ](ρ[x y]))) = (λy.([m ](ρ[x y]))(fix(λy.([m ](ρ[x y]))) = (λy.([m ](ρ[x y])))([(µx.m)] ρ) = ([[M ](ρ[x ([(µx.m)] ρ)]))) = [[(M[(µx.M)/x])] ρ Die andere Richtung, nämlich dass der semantische Wert etwas über die Reduktion aussagt, ist etwas komplizierter. Die gewünschte Aussage für geschlossene Ausdrücke M, N ist: Wenn [[M ] = [N ] und N eine WHNF ist, dann auch M N. Dies ist zuviel verlangt, es gilt für Konstanten wie Zahlen und die Booleschen Konstanten, aber nicht für Abstraktionen, denn Lambda-abstraktionen in WHNF sind nicht notwendig auch in Normalform. Beachte, dass durch das Liften der Funktioneräume [λx. ] [ ], was dazu passt, dass λx. eine WHNF hat, während keine WHNF hat. Das folgende werden wir nachweisen: Wenn [M ] = m ist, dann gilt M m. Zunächst zeigen wir, wie wir alle Fixpunktausdrücke approximieren können. Sei M = µx.m ein µ- Ausdruck, dann definiere:

27 TIDS 2, SS13, Kapitel 1, vom Semantische Seite: Betrachte d = fix(λy.([m ](ρ[x y])) Offenbar ist dies ein lub der Kette d n := e n wobei e = (λy.([m ](ρ[x y])) Syntaktische Seite: Lemma 5.3 Es gilt: [M k ] ρ = d k M 0 := µx.x M k+1 := (λx.m )M k Beweis. Induktion nach k: [M 0 ] ρ = = d 0. Angenommen, es gilt bereits für k. [M k+1 ] ρ = [(λx.m )M k ] ρ = ([(λx.m )] ρ)([m k ] ρ) = ([(λx.m )] ρ)d k = λy.([m ](ρ[x y]))d k = e(e k ) = e k+1 = d k+1. Lemma 5.4 Sei N ein geschlossener PCF-Term, so dass [N ] = n eine Zahl ist und alle µ-ausdrücke in N von der Form µx.x sind. Dann gilt N n. Beweis. Angenommen, das ist falsch. Dann gibt es einen Term N :: num mit [N ] = n, alle µ-ausdrücke in N sind von der Form µx.x und die Normalordnungsreduktion für N terminiert nicht. Da alle Reduktionen im µ-freien Fragment von PCF terminieren, muß die Normalordnungsreduktion irgendwann einen der Unterterme µx.x reduzieren. Wir nehmen einen Term, für den das gilt, und der eine kleinste Anzahl von Normalordnungsreduktion benötigt, bis das erste mal µx.x reduziert wird. Unter diesen wählen wir den kleinsten Term. Offenbar können wir annehmen, dass die erste Normalordnungsreduktion bereits einen Term µx.x reduziert. Da der Term µx.x ein Normalordnungsredex ist, kann er nur in folgendem Kontext auftauchen: pred(µx.x), succ(µx.x), zero?(µx.x), if (µx.x) then e 1 else e 2, ((µx.x)e). In jedem dieser Fälle können wir den Term verkleinern, indem wir den Redex durch µx.x ersetzen. Die denotationale Semantik des Terms bleibt gleich, da pred, succ, zero?, if then e 1 else e 2, ( x) jeweils als Denotation wieder haben. Die operationale Semantik bleibt ebenfalls gleich, d.h. die Normalordnungsreduktion terminiert auch für den neu konstruierten Term nicht. Der konstruierte Term ist jedoch kleiner geworden. D.h. der Term selbst muß µx.x sein. Dessen Denotation ist aber, im Widerspruch zur Annahme. Satz 5.5 Sei N ein geschlossener PCF-Term, so dass [N ] = n eine Zahl ist. Dann gilt N n. Beweis. Induktion nach der Anzahl der echten µ-ausdrücke in N, wobei wir die Ausdrücke µx.x nicht mitzählen.

28 TIDS 2, SS13, Kapitel 1, vom Basis. Wenn N keine echten µ-ausdrücke enthält, dann terminiert die Reduktion von N mit einem n nach obigem Lemma. Wir haben bereits gezeigt, dass dann n = n sein muß. Induktionsschritt. Wähle in N einen innersten echten µ-ausdruck M aus, der selbst keine echten µ-ausdrücke mehr enthält und definiere N k als die Terme, die entstehen, wenn für N jeweils M k (wie oben) eingesetzt wird. Wir übernehmen die Bezeichnungen wie oben. Da k d k = d (für alle ρ) ist, gilt somit auch k [N k ] = [N ] = n. Hierbei können wir die Stetigkeit verwenden, die wir für die Metasprache gezeigt haben. Da k [N k ] = [N ] = n, muß die Folge [[N k ] für k = 1, 2,... folgende Form haben:,,...,, n, n.... Also gibt es ein k 0, so dass [[N k0 ] = [N ] = n. N k0 hat einen µ-ausdruck weniger als N, dann gilt die Induktionshypothese, und wir können schließen, dass N k0 n. Somit gibt es auch eine Normalordnungsreduktion N k0 n. Da der Term M k 0 im Innern einen nichtterminierenden Term enthält, wurde für diesen die WHNF nicht berechnet. Damit gilt: Man kann den inneren Term wieder durch M ersetzen und erhält N k 0 mit N k 0 n. Da aber Nk 0 durch Reduktion aus N hergeleitet werden kann, d.h. N N k 0 n, gilt insgesamt N n. Korollar 5.6 Sei N ein geschlossener PCF-Term vom Typ num. Dann gilt [N ] = gdw. N keine terminierende Reduktion hat. Was hier noch zu zeigen ist, wäre die Aussage: Wenn N geschlossen ist und [[N ], dann gilt N 6 Volle Abstraktion und Gleichheit Gleichheit von Funktionen kann man jetzt auf zwei Arten definieren: Die denotationale Gleichheit: In dieser Semantik gilt: s = d t gdw. [[s] = [t]

PCF und denotationale Semantik

PCF und denotationale Semantik Kapitel 3 PCF und denotationale Semantik In diesem Kapitel soll ein Beispiel für eine denotationale Semantik vorgestellt und eingehend untersucht werden, die auf eine funktionale Programmiersprache mit

Mehr

Kapitel 6. Fixpunkte und semantische Bereiche

Kapitel 6. Fixpunkte und semantische Bereiche Kapitel 6 Fixpunkte und semantische Bereiche Sowohl bei der Definition der operationalen Semantik als auch bei der Definition der mathematischen Semantik haben wir mehr oder weniger explizit Fixpunkte

Mehr

Semantik von Programmiersprachen SS 2017

Semantik von Programmiersprachen SS 2017 Lehrstuhl für Programmierparadigmen Denis Lohner Sebastian Ullrich denis.lohner@kit.edu sebastian.ullrich@kit.edu Semantik von Programmiersprachen SS 2017 http://pp.ipd.kit.edu/lehre/ss2017/semantik Lösungen

Mehr

Grundlagen der Programmierung 2. Operationale Semantik

Grundlagen der Programmierung 2. Operationale Semantik Grundlagen der Programmierung 2 Operationale Semantik Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 29. April 2009 Semantik von Programmiersprachen Semantik = Bedeutung

Mehr

Einführung in die funktionale Programmierung

Einführung in die funktionale Programmierung Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 17. Oktober 2006 Einführung in Haskell: Syntax, Reduktionen, Kernsprachen Haskell,

Mehr

13 Auswahlaxiom und Zornsches Lemma

13 Auswahlaxiom und Zornsches Lemma 13 Auswahlaxiom und Zornsches Lemma Handout zur Funktionalanalysis I von H. Glöckner, 25.11.2008 Wichtige Teile der modernen Mathematik beruhen auf dem sogenannten Auswahlaxiom der Mengenlehre. Dieses

Mehr

Funktionale Programmierung - Grundlagen -

Funktionale Programmierung - Grundlagen - Funktionale Programmierung - Grundlagen - λ Logische und funktionale Programmierung - Universität Potsdam - M. Thomas - Funkt. Programmierung Gundlagen - IX.1 λ-ausdrücke 1) Variablen: x, y, z,...v,v 1,...

Mehr

2 Mengen, Abbildungen und Relationen

2 Mengen, Abbildungen und Relationen Vorlesung WS 08 09 Analysis 1 Dr. Siegfried Echterhoff 2 Mengen, Abbildungen und Relationen Definition 2.1 (Mengen von Cantor, 1845 1918) Eine Menge M ist eine Zusammenfassung von wohlbestimmten und wohl

Mehr

1. Typen 1.1 Typsicherheit 1.2 Typprüfung

1. Typen 1.1 Typsicherheit 1.2 Typprüfung 1. Typen 1.1 Typsicherheit 1.2 Typprüfung Ein Typsystem ist ein praktikables, syntaktisches Verfahren, mit dem man die Abwesenheit gewisser Laufzeit-Eigenschaften eines Programms beweisen kann, indem man

Mehr

Programmieren für Fortgeschrittene

Programmieren für Fortgeschrittene Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme Wintersemester 2011/12 Programmieren für Fortgeschrittene Rekursive Spezifikationen Die folgende

Mehr

Einführung in die Theoretische Informatik

Einführung in die Theoretische Informatik Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Sascha Böhme, Lars Noschinski Sommersemester 2011 Lösungsblatt 9 25. Juli 2011 Einführung in die Theoretische Informatik

Mehr

3 Exkurs: Der λ-kalkül

3 Exkurs: Der λ-kalkül 3 Exkurs: Der λ-kalkül Alonso Churchs λ-kalkül (ca. 1940) ist der formale Kern jeder funktionalen Programmiersprache. Der λ-kalkül ist eine einfache Sprache, mit nur wenigen syntaktischen Konstrukten und

Mehr

Kapitel 5. Mathematische Semantik. 1 Motivation

Kapitel 5. Mathematische Semantik. 1 Motivation Kapitel 5 Mathematische Semantik In diesem Kapitel werden wir nun eine weitere Technik zur Definition der Semantik einer Programmiersprache vorstellen: die mathematische bzw. denotationale Semantik. Außerdem

Mehr

8. Einfache Fixpunkttheorie

8. Einfache Fixpunkttheorie 8. Einfache Fixpunkttheorie Fragestellung: was unter einem (kleinsten) Fixpunkt zu verstehen ist t(x) = x y : D. t(y) = y x y wann ein Fixpunkt existiert monotone Funktionen über CPOs haben einen kleinsten

Mehr

Reduktion. 2.1 Abstrakte Reduktion

Reduktion. 2.1 Abstrakte Reduktion 2 Reduktion In diesem Kapitel studieren wir abstrakte Eigenschaften von Regeln. In den ersten beiden Abschnitten betrachten wir nicht einmal die Regeln selbst, sondern nur abstrakte Reduktionssysteme,

Mehr

Einführung in die Theoretische Informatik

Einführung in die Theoretische Informatik Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Dr. Werner Meixner, Dr. Alexander Krauss Sommersemester 2010 Lösungsblatt 11 15. Juli 2010 Einführung in die Theoretische

Mehr

Abschnitt 3: Mathematische Grundlagen

Abschnitt 3: Mathematische Grundlagen Abschnitt 3: Mathematische Grundlagen 3. Mathematische Grundlagen 3.1 3.2 Induktion und Rekursion 3.3 Boolsche Algebra Peer Kröger (LMU München) Einführung in die Programmierung WS 14/15 48 / 155 Überblick

Mehr

Grundbegriffe für dreiwertige Logik

Grundbegriffe für dreiwertige Logik Grundbegriffe für dreiwertige Logik Hans Kleine Büning Universität Paderborn 1.11.2011 1 Syntax und Semantik Die klassische Aussagenlogik mit den Wahrheitswerten falsch und wahr bezeichnen wir im weiteren

Mehr

Konstruktion der reellen Zahlen

Konstruktion der reellen Zahlen Konstruktion der reellen Zahlen Zur Wiederholung: Eine Menge K (mit mindestens zwei Elementen) heißt Körper, wenn für beliebige Elemente x, y K eindeutig eine Summe x+y K und ein Produkt x y K definiert

Mehr

Diskrete Strukturen 5.9 Permutationsgruppen 168/558 c Ernst W. Mayr

Diskrete Strukturen 5.9 Permutationsgruppen 168/558 c Ernst W. Mayr Bemerkung: Der folgende Abschnitt Boolesche Algebren ist (im WS 2010/11) nicht Teil des Prüfungsstoffs, soweit nicht Teile daraus in der Übung behandelt werden! Diskrete Strukturen 5.9 Permutationsgruppen

Mehr

8 Der Kompaktheitssatz und der Satz von Löwenheim und Skolem

8 Der Kompaktheitssatz und der Satz von Löwenheim und Skolem 8 Der Kompaktheitssatz und der Satz von Löwenheim und Skolem 8.1 Der Kompaktheitssatz Kompaktheitssatz Endlichkeitssatz Der Kompaktheitssatz ist auch unter dem Namen Endlichkeitssatz bekannt. Unter Verwendung

Mehr

Die Prädikatenlogik erster Stufe: Syntax und Semantik

Die Prädikatenlogik erster Stufe: Syntax und Semantik Die Prädikatenlogik erster Stufe: Syntax und Semantik 1 Mathematische Strukturen und deren Typen Definition 1.1 Eine Struktur A ist ein 4-Tupel A = (A; (R A i i I); (f A j j J); (c A k k K)) wobei I, J,

Mehr

Mengenlehre: Mächtigkeit (Ordnung) einer Menge

Mengenlehre: Mächtigkeit (Ordnung) einer Menge Mengenlehre: Mächtigkeit (Ordnung) einer Menge Def. Seien A, B Mengen. Wir sagen, dass A höchstens gleichmächtig zu B ist, falls es eine injektive Abbildung f : A B gibt. Schreibweise: A B. Wir sagen,

Mehr

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

GTI. Hannes Diener. 18. Juni. ENC B-0123, GTI Hannes Diener ENC B-0123, diener@math.uni-siegen.de 18. Juni 1 / 32 Als Literatur zu diesem Thema empfiehlt sich das Buch Theoretische Informatik kurzgefasst von Uwe Schöning (mittlerweile in der 5.

Mehr

Einführung in die Logik

Einführung in die Logik Einführung in die Logik Klaus Madlener und Roland Meyer 24. April 2013 Inhaltsverzeichnis 1 Aussagenlogik 1 1.1 Syntax................................. 1 1.2 Semantik............................... 3 1.3

Mehr

Elemente in Φ werden Wurzeln genannt. Bemerkung 3.2. (a) Zu einem Wurzelsystem können wir immer eine Spiegelungsgruppe definieren

Elemente in Φ werden Wurzeln genannt. Bemerkung 3.2. (a) Zu einem Wurzelsystem können wir immer eine Spiegelungsgruppe definieren 3. Wurzelsysteme Als erstes führen wir den Begriff eines Wurzelsystems ein. Definition 3.1 (Wurzelsystem). Eine endliche Teilmenge Φ V {0} heißt Wurzelsystem falls gilt: (R1) Φ Rα = {±α} für α Φ, (R2)

Mehr

Der untypisierte Lambda-Kalkül als Programmiersprache

Der untypisierte Lambda-Kalkül als Programmiersprache Der untypisierte Lambda-Kalkül als Programmiersprache November 29, 2006 betreut von Prof. Tobias Nipkow Einführung In den 1930er Jahren von Alonzo Church und Stephen Kleene eingeführt Der Lambda-Kalkül

Mehr

Lösungsmenge L I = {x R 3x + 5 = 9} = L II = {x R 3x = 4} = L III = { }

Lösungsmenge L I = {x R 3x + 5 = 9} = L II = {x R 3x = 4} = L III = { } Zur Einleitung: Lineare Gleichungssysteme Wir untersuchen zunächst mit Methoden, die Sie vermutlich aus der Schule kennen, explizit einige kleine lineare Gleichungssysteme. Das Gleichungssystem I wird

Mehr

3.6 Bemerkungen zur Umformung boolescher Formeln (NAND): doppelte Negation

3.6 Bemerkungen zur Umformung boolescher Formeln (NAND): doppelte Negation 3.6 Bemerkungen zur Umformung boolescher Formeln (NAND): Häufig verwendeten Umformungen sind: Idempotenz doppelte Negation De Morgan a = a a a = a a + b = a b ADS-EI 3.6 Bemerkungen zur Umformung boolescher

Mehr

Automaten und Coinduktion

Automaten und Coinduktion Philipps-Univestität Marburg Fachbereich Mathematik und Informatik Seminar: Konzepte von Programmiersprachen Abgabedatum 02.12.03 Betreuer: Prof. Dr. H. P. Gumm Referentin: Olga Andriyenko Automaten und

Mehr

Proseminar Analysis Vollständigkeit der reellen Zahlen

Proseminar Analysis Vollständigkeit der reellen Zahlen Proseminar Analysis Vollständigkeit der reellen Zahlen Axel Wagner 18. Juli 2009 1 Voraussetzungen Zunächst wollen wir festhalten, was wir als bekannt voraussetzen: Es sei (Q, +, ) der Körper der rationalen

Mehr

Topologische Aspekte: Eine kurze Zusammenfassung

Topologische Aspekte: Eine kurze Zusammenfassung Kapitel 1 Topologische Aspekte: Eine kurze Zusammenfassung Wer das erste Knopfloch verfehlt, kommt mit dem Zuknöpfen nicht zu Rande J. W. Goethe In diesem Kapitel bringen wir die Begriffe Umgebung, Konvergenz,

Mehr

Diskrete Strukturen Kapitel 2: Grundlagen (Mengen)

Diskrete Strukturen Kapitel 2: Grundlagen (Mengen) WS 2016/17 Diskrete Strukturen Kapitel 2: Grundlagen (Mengen) Hans-Joachim Bungartz Lehrstuhl für wissenschaftliches Rechnen Fakultät für Informatik Technische Universität München http://www5.in.tum.de/wiki/index.php/diskrete_strukturen_-_winter_16

Mehr

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird. Thomas Studer Relationale Datenbanken: Von den theoretischen Grundlagen zu Anwendungen mit PostgreSQL Springer, 2016 ISBN 978-3-662-46570-7 Dieser Foliensatz darf frei verwendet werden unter der Bedingung,

Mehr

Mengen. (Nicht-) Elemente einer Menge { 3, 4 } { 1, { 2 }, { 3, 4 }, { 5 } } 3 { 1, { 2 }, { 3, 4 }, { 5 } }

Mengen. (Nicht-) Elemente einer Menge { 3, 4 } { 1, { 2 }, { 3, 4 }, { 5 } } 3 { 1, { 2 }, { 3, 4 }, { 5 } } Mengen Definition (Intuitive Mengenlehre) Eine Menge ist die Zusammenfassung von Elementen unserer Anschauung zu einem wohldefinierten Ganzen. (Georg Cantor) Notation 1. Aufzählung aller Elemente: { 1,

Mehr

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 1 Einführung 2 Typ-0- und Typ-1-Sprachen 3 Berechnungsmodelle 4 Unentscheidbarkeit 5 Unentscheidbare Probleme 6 Komplexitätstheorie 139 Unentscheidbarkeit Überblick Zunächst einmal definieren wir formal

Mehr

Strukturelle Rekursion und Induktion

Strukturelle Rekursion und Induktion Kapitel 2 Strukturelle Rekursion und Induktion Rekursion ist eine konstruktive Technik für die Beschreibung unendlicher Mengen (und damit insbesondere für die Beschreibung unendliche Funktionen). Induktion

Mehr

2. Symmetrische Gruppen

2. Symmetrische Gruppen 14 Andreas Gathmann 2 Symmetrische Gruppen Im letzten Kapitel haben wir Gruppen eingeführt und ihre elementaren Eigenschaften untersucht Wir wollen nun eine neue wichtige Klasse von Beispielen von Gruppen

Mehr

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 1 Einführung 2 Typ-0- und Typ-1-Sprachen 3 Berechnungsmodelle 4 Unentscheidbarkeit 5 Unentscheidbare Probleme 6 Komplexitätstheorie WS 11/12 155 Überblick Zunächst einmal definieren wir formal den Begriff

Mehr

Kapitel 2. Mathematische Grundlagen. Skript zur Vorlesung Einführung in die Programmierung

Kapitel 2. Mathematische Grundlagen. Skript zur Vorlesung Einführung in die Programmierung LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE Kapitel 2 Mathematische Grundlagen Skript zur Vorlesung Einführung in die Programmierung im Wintersemester 2012/13 Ludwig-Maximilians-Universität

Mehr

Kardinalzahlen. Bemerkung. Eine unendliche Kardinalzahl α muss eine Limesordinalzahl sein. (Beweis zur Übung)

Kardinalzahlen. Bemerkung. Eine unendliche Kardinalzahl α muss eine Limesordinalzahl sein. (Beweis zur Übung) Kardinalzahlen Kardinalzahlen sollen die Größe von Mengen messen, daher suchen wir eine Aussage der Form, dass jede Menge bijektiv auf eine Kardinalzahl abgebildet werden kann. Um eine brauchbare Theorie

Mehr

Der einfach getypter Lambda-Kalkül

Der einfach getypter Lambda-Kalkül Der einfach getypter Lambda-Kalkül Typprüfung und Typinferenz Tobias Nipkow und Steffen Smolka Technische Universität München 1 Einleitung 2 Explizit getypter λ-kalkül 3 Implizit getypter λ-kalkül Statische

Mehr

Formale Grundlagen der Informatik 1 Kapitel 19. Syntax & Semantik

Formale Grundlagen der Informatik 1 Kapitel 19. Syntax & Semantik Formale Grundlagen der Informatik 1 Kapitel 19 & Frank Heitmann heitmann@informatik.uni-hamburg.de 23. Juni 2015 Frank Heitmann heitmann@informatik.uni-hamburg.de 1/25 Motivation Die ist eine Erweiterung

Mehr

Analysis für Informatiker

Analysis für Informatiker Analysis für Informatiker Wintersemester 2017/2018 Carsten.Schneider@risc.jku.at 1 Bemerkung: Dies ist kein Skript, welches den gesamten Inhalt der Vorlesung abdeckt. Es soll den Studierenden aber während

Mehr

9.A Kategorien, Limiten und Funktoren

9.A Kategorien, Limiten und Funktoren 9.A Kategorien, Limiten und Funktoren Die Sprache der Kategorien und Funktoren ist unabdingbar für viele Aussagen in der heutigen Mathematik. Sie ist formal und weniger als Selbstzweck anzusehen, sondern

Mehr

SS Juli Übungen zur Vorlesung Logik Blatt 11

SS Juli Übungen zur Vorlesung Logik Blatt 11 SS 2011 06. Juli 2011 Übungen zur Vorlesung Logik Blatt 11 Prof. Dr. Klaus Madlener Abgabe bis 13. Juli 2011 10:00 Uhr 1. Aufgabe: [Axiomatisierung, Übung] 1. Definieren Sie eine Formel A n der Prädikatenlogik

Mehr

8 1. GEOMETRIE DIFFERENZIERBARER MANNIGFALTIGKEITEN

8 1. GEOMETRIE DIFFERENZIERBARER MANNIGFALTIGKEITEN 8 1. GEOMETRIE DIFFERENZIERBARER MANNIGFALTIGKEITEN (vi) Konvergenz von Folgen ist in topologischen Räumen folgendermaßen definiert: Ist (a n ) M eine Folge, so heißt sie konvergent gegen a M, wenn es

Mehr

Substitution. Unifikation. Komposition der Substitution. Ausführung der Substitution

Substitution. Unifikation. Komposition der Substitution. Ausführung der Substitution Substitution Unifikation Ziel eines Widerspruchsbeweis: Widerspruch ja/nein Variablenbindung im Falle eines Widerspruchs Eine Substitution θ ist eine endliche Menge der Form {v 1 /t 1 v n /t n }, wobei

Mehr

5.9 Permutationsgruppen. Sei nun π S n. Es existiert folgende naive Darstellung: Kürzer schreibt man auch

5.9 Permutationsgruppen. Sei nun π S n. Es existiert folgende naive Darstellung: Kürzer schreibt man auch 5.9 Permutationsgruppen Definition 103 Eine Permutation ist eine bijektive Abbildung einer endlichen Menge auf sich selbst; o. B. d. A. sei dies die Menge U := {1, 2,..., n}. S n (Symmetrische Gruppe für

Mehr

Kapitel 1. Grundlagen Mengen

Kapitel 1. Grundlagen Mengen Kapitel 1. Grundlagen 1.1. Mengen Georg Cantor 1895 Eine Menge ist die Zusammenfassung bestimmter, wohlunterschiedener Objekte unserer Anschauung oder unseres Denkens, wobei von jedem dieser Objekte eindeutig

Mehr

22 KAPITEL 1. GRUNDLAGEN. Um zu zeigen, dass diese Folge nicht konvergent ist, betrachten wir den punktweisen Limes und erhalten die Funktion

22 KAPITEL 1. GRUNDLAGEN. Um zu zeigen, dass diese Folge nicht konvergent ist, betrachten wir den punktweisen Limes und erhalten die Funktion KAPITEL 1. GRUNDLAGEN Um zu zeigen, dass diese Folge nicht konvergent ist, betrachten wir den punktweisen Limes und erhalten die Funktion 1 für 0 x < 1 g 0 (x) = 1 1 für < x 1. Natürlich gibt dies von

Mehr

Reduktionssysteme und Termersetzungssysteme

Reduktionssysteme und Termersetzungssysteme Reduktionssysteme und Termersetzungssysteme Untersuchung von Berechnungen mittels Reduktionsregeln Simplifikation von: Datenstrukturen / Termen usw. Erkennen von gleichen Objekten durch Normalisierung

Mehr

Lösungen zu Kapitel 2

Lösungen zu Kapitel 2 Lösungen zu Kapitel 2 Lösung zu Aufgabe 1: Wir zeigen die Behauptung durch vollständige Induktion über n. Die einzige Menge mit n = 0 Elementen ist die leere Menge. Sie besitzt nur sich selbst als Teilmenge,

Mehr

Aufgabenblatt 1: Abgabe am vor der Vorlesung

Aufgabenblatt 1: Abgabe am vor der Vorlesung Aufgabenblatt 1: Abgabe am 17.09.09 vor der Vorlesung Aufgabe 1. a.) (1P) Geben Sie die Lösungsmenge der folgenden Gleichung an: 6x + y = 10. Zeichnen Sie die Lösungsmenge in ein Koordinatensystem. b.)

Mehr

Formale Sprachen und Automaten

Formale Sprachen und Automaten Mengen Eine Menge ist eine Gruppe von Elementen, die eine Einheit bilden (siehe z.b. Halmos 1976). Formale Sprachen und Automaten Mathematisches Rüstzeug Mengen können verschiedene Typen von Elementen

Mehr

Aufgaben zur Verbandstheorie

Aufgaben zur Verbandstheorie TU Bergakademie Freiberg WS 2005/06 Institut für Diskrete Mathematik & Algebra Prof. Dr. Udo Hebisch Aufgaben zur Verbandstheorie 1. Für ein beliebiges n IN sei X n die Menge aller Teiler von n. Definiert

Mehr

a) Sei [G : B] = n und [B : A] = m. Seien weiter X G,B = {g 1,..., g n } vollständiges Repräsentantensystem der Linksnebenklassen von A in G.

a) Sei [G : B] = n und [B : A] = m. Seien weiter X G,B = {g 1,..., g n } vollständiges Repräsentantensystem der Linksnebenklassen von A in G. 5. Übungszettel zur Vorlesung Geometrische Gruppentheorie Musterlösung WiSe 2015/16 WWU Münster Prof. Dr. Linus Kramer Nils Leder Cora Welsch Aufgabe 5.1 Sei G eine Gruppe und seien A, B G Untergruppen

Mehr

Universität Innsbruck WS 2013/2014. Brückenkurs. Formale Konzepte. 3. Auflage. Harald Zankl. 15. Januar 2014

Universität Innsbruck WS 2013/2014. Brückenkurs. Formale Konzepte. 3. Auflage. Harald Zankl. 15. Januar 2014 Universität Innsbruck WS 013/014 Brückenkurs Formale Konzepte 3. Auflage Harald Zankl 15. Januar 014 Institut für Informatik Innsbruck, Österreich Inhaltsverzeichnis 1 Definition, Satz, Beweis 1.1 Aufgaben................................

Mehr

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

Vorkurs Mathematik und Informatik Mengen, natürliche Zahlen, Induktion Vorkurs Mathematik und Informatik Mengen, natürliche Zahlen, Induktion Saskia Klaus 07.10.016 1 Motivation In den ersten beiden Vorträgen des Vorkurses haben wir gesehen, wie man aus schon bekannten Wahrheiten

Mehr

Analysis 1, Woche 2. Reelle Zahlen. 2.1 Anordnung. Definition 2.1 Man nennt eine Anordnung für K, wenn: 1. Für jeden a K gilt a a (Reflexivität).

Analysis 1, Woche 2. Reelle Zahlen. 2.1 Anordnung. Definition 2.1 Man nennt eine Anordnung für K, wenn: 1. Für jeden a K gilt a a (Reflexivität). Analysis 1, Woche 2 Reelle Zahlen 2.1 Anordnung Definition 2.1 Man nennt eine Anordnung für K, wenn: 1. Für jeden a K gilt a a (Reflexivität). 2. Für jeden a, b K mit a b und b a gilt a = b (Antisymmetrie).

Mehr

Der untypisierte Lambda-Kalkül

Der untypisierte Lambda-Kalkül Der untypisierte Lambda-Kalkül Fabian Immler 08.05.2008 1 Motivation und Einführung Der Lambda-Kalkül ist ein formales System zur Beschreibung von Funktionen, welches Funktionsdefinition sowie das Auswerten

Mehr

Mengen. Eigenschaften. Spezielle Mengen (1) Prominente Mengen. ! Mengenzugehörigkeit

Mengen. Eigenschaften. Spezielle Mengen (1) Prominente Mengen. ! Mengenzugehörigkeit Mengen! Definition (Intuitive Mengenlehre) Eine Menge ist die Zusammenfassung von Elementen unserer Anschauung zu einem wohldefinierten Ganzen. (Georg Cantor)! Notation 1. Aufzählung aller Elemente: {

Mehr

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Sommersemester

Mehr

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

Berechenbarkeit und Komplexität: Mächtigkeit von Programmiersprachen: WHILE- und LOOP-Programme Berechenbarkeit und Komplexität: Mächtigkeit von Programmiersprachen: WHILE- und LOOP-Programme Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität 29. November 2007 Turing-mächtige

Mehr

Diskrete Strukturen Kapitel 2: Grundlagen (Relationen)

Diskrete Strukturen Kapitel 2: Grundlagen (Relationen) WS 2016/17 Diskrete Strukturen Kapitel 2: Grundlagen (Relationen) Hans-Joachim Bungartz Lehrstuhl für wissenschaftliches Rechnen Fakultät für Informatik Technische Universität München http://www5.in.tum.de/wiki/index.php/diskrete_strukturen_-_winter_16

Mehr

LR: Syntax. Semantik und Analyse von Funktionalen Programmen (SAFP): LR: Reduktions-Regeln. LR: Reduktions-Regeln

LR: Syntax. Semantik und Analyse von Funktionalen Programmen (SAFP): LR: Reduktions-Regeln. LR: Reduktions-Regeln LR: Syntax Semantik und Analyse von Funktionalen Programmen (SAFP): KFPT mit Sharing und Striktheisanalyse: LR Prof. Dr. Manfred Schmidt-Schauß SAFP; WS 2014/15 E ::= V (c E 1... E ar(c) ) (seq E 1 E 2

Mehr

Mengen, Funktionen und Logik

Mengen, Funktionen und Logik Wirtschaftswissenschaftliches Zentrum Universität Basel Mathematik für Ökonomen 1 Dr. Thomas Zehrt Mengen, Funktionen und Logik Literatur Referenz: Gauglhofer, M. und Müller, H.: Mathematik für Ökonomen,

Mehr

Diskrete Strukturen und Logik WiSe 2007/08 in Trier. Henning Fernau Universität Trier

Diskrete Strukturen und Logik WiSe 2007/08 in Trier. Henning Fernau Universität Trier Diskrete Strukturen und Logik WiSe 2007/08 in Trier Henning Fernau Universität Trier fernau@uni-trier.de 1 Diskrete Strukturen und Logik Gesamtübersicht Organisatorisches Einführung Logik & Mengenlehre

Mehr

Semantik und Analyse von Funktionalen Programmen (SAFP):

Semantik und Analyse von Funktionalen Programmen (SAFP): Semantik und Analyse von Funktionalen Programmen (SAFP): KFPT mit Sharing und Striktheisanalyse: LR Prof. Dr. Manfred Schmidt-Schauß SAFP; WS 2014/15 Stand der Folien: 5. Februar 2015 LR: Syntax E ::=

Mehr

Bemerkungen zur Notation

Bemerkungen zur Notation Bemerkungen zur Notation Wir haben gerade die Symbole für alle und es gibt gebraucht. Dies sind so genannte logische Quantoren, und zwar der All- und der Existenzquantor. Die Formel {a A; ( b B)[(a, b)

Mehr

Berechenbarkeit und Komplexität Vorlesung 11

Berechenbarkeit und Komplexität Vorlesung 11 Berechenbarkeit und Komplexität Vorlesung 11 Prof. Dr. Wolfgang Thomas Lehrstuhl Informatik 7 RWTH Aachen 7. Dezember 2014 Wolfgang Thomas, Informatik 7 () Vorlesung Berechenbarkeit und Komplexität 7.

Mehr

Kapitel 1. Grundlagen

Kapitel 1. Grundlagen Kapitel 1. Grundlagen 1.1. Mengen Georg Cantor 1895 Eine Menge ist die Zusammenfassung bestimmter, wohlunterschiedener Objekte unserer Anschauung oder unseres Denkens, wobei von jedem dieser Objekte eindeutig

Mehr

3.4 Fixpunkttheorie auf Partialordnungen

3.4 Fixpunkttheorie auf Partialordnungen 3.4 Fixpunkttheorie auf Partialordnungen Definition 3.15 (Partialordnung) Sei L eine Menge und eine binäre Relation auf L. O = L, heißt Partialordnung, falls folgende Bedingungen erfüllt sind: Reflexivität:

Mehr

Diskrete Strukturen Kapitel 2: Grundlagen (Beweise)

Diskrete Strukturen Kapitel 2: Grundlagen (Beweise) WS 2014/15 Diskrete Strukturen Kapitel 2: Grundlagen (Beweise) Hans-Joachim Bungartz Lehrstuhl für wissenschaftliches Rechnen Fakultät für Informatik Technische Universität München http://www5.in.tum.de/wiki/index.php/diskrete_strukturen_-_winter_14

Mehr

6. Boolesche Algebren

6. Boolesche Algebren 6. Boolesche Algebren 6.1 Definitionen Eine Boolesche Algebra ist eine Algebra S,,,, 0, 1,, sind binäre, ist ein unärer Operator, 0 und 1 sind Konstanten. Es gilt: 1 und sind assoziativ und kommutativ.

Mehr

Abschnitt 3: Mathematische Grundlagen

Abschnitt 3: Mathematische Grundlagen Abschnitt 3: Mathematische Grundlagen 3. Mathematische Grundlagen 3.1 3.2 Boolsche Algebra 3.3 Induktion und Rekursion Peer Kröger (LMU München) Einführung in die Programmierung WS 16/17 46 / 708 Überblick

Mehr

Kapitel 1. Grundlagen

Kapitel 1. Grundlagen Kapitel 1. Grundlagen 1.1. Mengen Georg Cantor 1895 Eine Menge ist die Zusammenfassung bestimmter, wohlunterschiedener Objekte unserer Anschauung oder unseres Denkens, wobei von jedem dieser Objekte eindeutig

Mehr

Konstruktion reeller Zahlen aus rationalen Zahlen

Konstruktion reeller Zahlen aus rationalen Zahlen Konstruktion reeller Zahlen aus rationalen Zahlen Wir nehmen an, daß der Körper der rationalen Zahlen bekannt ist. Genauer wollen wir annehmen: Gegeben ist eine Menge Q zusammen mit zwei Verknüpfungen

Mehr

5. Äquivalenzrelationen

5. Äquivalenzrelationen 5. Äquivalenzrelationen 35 5. Äquivalenzrelationen Wenn man eine große und komplizierte Menge (bzw. Gruppe) untersuchen will, so kann es sinnvoll sein, zunächst kleinere, einfachere Mengen (bzw. Gruppen)

Mehr

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

Der λ-kalkül. Frank Huch. Sommersemester 2015 Der λ-kalkül Frank Huch Sommersemester 2015 In diesem Skript werden die Grundlagen der Funktionalen Programmierung, insbesondere der λ-kalkül eingeführt. Der hier präsentierte Stoff stellt einen teil der

Mehr

Lambda-Kalkül. Philipp Meyer. 28. April 2009

Lambda-Kalkül. Philipp Meyer. 28. April 2009 Lambda-Kalkül Philipp Meyer 28. April 2009 1 Einleitung Der λ-kalkül ist eine von Alonzo Church und Stephen Kleene in den 1930er Jahren eingeführtes Modell zur Beschreibung berechenbarer Funktionen. Es

Mehr

Einführung in das λ-kalkül

Einführung in das λ-kalkül Einführung in das λ-kalkül Max Wagner IPD Snelting 1 3.11.2017 Max Wagner - Einführung in das λ-kalkül IPD KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Syntax Abstrakte Syntax:

Mehr

Inhalt der Vorlesung Elemente der Algebra und Zahlentheorie Prof. Dr. Arno Fehm TU Dresden SS Grundlegende Definitionen (Wiederholung)

Inhalt der Vorlesung Elemente der Algebra und Zahlentheorie Prof. Dr. Arno Fehm TU Dresden SS Grundlegende Definitionen (Wiederholung) Inhalt der Vorlesung Elemente der Algebra und Zahlentheorie Prof. Dr. Arno Fehm TU Dresden SS2017 Kapitel I. Gruppen 1 Grundlegende Definitionen (Wiederholung) 1.1 Definition. Eine Gruppe ist ein Paar

Mehr

WS 2009/10. Diskrete Strukturen

WS 2009/10. Diskrete Strukturen WS 2009/10 Diskrete Strukturen Prof. Dr. J. Esparza Lehrstuhl für Grundlagen der Softwarezuverlässigkeit und theoretische Informatik Fakultät für Informatik Technische Universität München http://www7.in.tum.de/um/courses/ds/ws0910

Mehr

3 Topologische Gruppen

3 Topologische Gruppen $Id: topgr.tex,v 1.2 2010/05/26 19:47:48 hk Exp hk $ 3 Topologische Gruppen Als letztes Beispiel eines topologischen Raums hatten wir die Zariski-Topologie auf dem C n betrachtet, in der die abgeschlossenen

Mehr

Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen

Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen Teil IV Semantik imperativer Sprachen 201 1. Einführung Alternativen zur Beschreibung der Semantik: natürliche Sprache (bisher, unpräzise) operational Reduktionssemantik (vgl. Haskell-Semantik in Kap.

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Kapitel 21: Relationen Thomas Worsch KIT, Institut für Theoretische Informatik Wintersemester 2015/2016 GBI Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik

Mehr

4 Messbare Funktionen

4 Messbare Funktionen 4 Messbare Funktionen 4.1 Definitionen und Eigenschaften Definition 4.1. Seien X eine beliebige nichtleere Menge, M P(X) eine σ-algebra in X und µ ein Maß auf M. Das Paar (X, M) heißt messbarer Raum und

Mehr

Kapitel 5. Fixpunktoperatoren

Kapitel 5. Fixpunktoperatoren Kapitel 5 Fixpunktoperatoren Rekursion ist eine wichtige Definitionstechnik. Im Rahmen dieser Vorlesung haben wir bereits eine Vielzahl von rekursiven Definitionen gesehen. Dabei wurden überwiegend strukturelle

Mehr

Funktionen und sprachliche Bedeutungen

Funktionen und sprachliche Bedeutungen Einführung in die Semantik,4. Sitzung Mehr zu Funktionen / Mengen, Relationen, Göttingen 1. November 2006 Mengen und sprachliche Bedeutungen Abstraktion und Konversion Rekursion Charakteristische Funktionen

Mehr

WS 2009/10. Diskrete Strukturen

WS 2009/10. Diskrete Strukturen WS 2009/10 Diskrete Strukturen Prof. Dr. J. Esparza Lehrstuhl für Grundlagen der Softwarezuverlässigkeit und theoretische Informatik Fakultät für Informatik Technische Universität München http://www7.in.tum.de/um/courses/ds/ws0910

Mehr

Skript und Übungen Teil II

Skript und Übungen Teil II Vorkurs Mathematik Herbst 2009 M. Carl E. Bönecke Skript und Übungen Teil II Das erste Semester wiederholt die Schulmathematik in einer neuen axiomatischen Sprache; es ähnelt damit dem nachträglichen Erlernen

Mehr

Funktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation

Funktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation Grundlagen der Programm- und Systementwicklung Funktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation Technische Universität München Institut für Informatik Software &

Mehr

Große Mengen und Ultrafilter. 1 Große Mengen

Große Mengen und Ultrafilter. 1 Große Mengen Vortrag zum Seminar zur Analysis, 31.10.2012 Marcel Marnitz In diesem Vortrag wird das Konzept mathematischer Filter eingeführt. Sie werden in späteren Vorträgen zur Konstruktion der hyperreellen Zahlen

Mehr

Inferenzmethoden. Einheit 18. Logik höherer Stufe

Inferenzmethoden. Einheit 18. Logik höherer Stufe Inferenzmethoden Einheit 18 Logik höherer Stufe 1. Syntax und Semantik 2. Simulation mathematischer Konstrukte 3. Beweisführung in Logik höherer Stufe Logik höherer Stufe Logik erster Stufe hat nur einfache

Mehr

definieren eine Aussage A als einen Satz, der entweder wahr (w) oder falsch (f) (also insbesondere nicht beides zugleich) ist 1. Beispiel 1.1.

definieren eine Aussage A als einen Satz, der entweder wahr (w) oder falsch (f) (also insbesondere nicht beides zugleich) ist 1. Beispiel 1.1. 22 Kapitel 1 Aussagen und Mengen 1.1 Aussagen Wir definieren eine Aussage A als einen Satz, der entweder wahr w) oder falsch f) also insbesondere nicht beides zugleich) ist 1. Beispiel 1.1. 2 ist eine

Mehr

Formale Methoden der Softwaretechnik 1 Vorlesung vom : Grundlage von Isabelle

Formale Methoden der Softwaretechnik 1 Vorlesung vom : Grundlage von Isabelle 1 Formale Methoden der Softwaretechnik 1 Vorlesung vom 16.11.09: Grundlage von Isabelle Christoph Lüth, Lutz Schröder Universität Bremen Wintersemester 2009/10 2 Fahrplan Teil I: Grundlagen der Formalen

Mehr

2.2 Konstruktion der rationalen Zahlen

2.2 Konstruktion der rationalen Zahlen 2.2 Konstruktion der rationalen Zahlen Wie wir in Satz 2.6 gesehen haben, kann man die Gleichung a + x = b in Z jetzt immer lösen, allerdings die Gleichung a x = b im allgemeinen immer noch nicht. Wir

Mehr

Gröbnerbasen in Monoid- und Gruppenringen

Gröbnerbasen in Monoid- und Gruppenringen Gröbnerbasen in Monoid- und Gruppenringen Karsten Hiddemann 5. November 2003 Zusammenfassung Gröbnerbasen, entwickelt von Bruno Buchberger für kommutative Polynomringe, finden immer häufiger Anwendung

Mehr

Formale Methoden 1. Gerhard Jäger 7. November Uni Bielefeld, WS 2007/2008 1/18

Formale Methoden 1. Gerhard Jäger 7. November Uni Bielefeld, WS 2007/2008 1/18 1/18 Formale Methoden 1 Gerhard Jäger Gerhard.Jaeger@uni-bielefeld.de Uni Bielefeld, WS 2007/2008 7. November 2007 2/18 Geordnete Paare Mengen sind ungeordnet: {a, b} = {b, a} für viele Anwendungen braucht

Mehr