Einführung in die funktionale Programmierung

Größe: px
Ab Seite anzeigen:

Download "Einführung in die funktionale Programmierung"

Transkript

1 Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 18. November 2008

2 Typcheck zu KFPT; KFPTS;... Ziele des Kapitels: Polymorphes Typsystem für alle Konstrukte von KFPTSP Typsystem unabhängig vom Haskell-Typcheck Soll das Typsystem von Haskell verständlich machen Funktionalität des Formalismus Grenzen; und Vor- und Nachteile zwei Varianten des Typchecks Einführung in die funktionale Programmierung, fol

3 Polymorpher Typcheck in KFPTS(P) Urväter dieses Typsystems: Hindley, Milner, Mycroft, Abramsky, Damas Wird verwendet in Haskell, ML Ebenso in Java ( leicht angepasst) Einführung in die funktionale Programmierung, fol

4 Polymorpher Typcheck in KFPTS(P) Annahmen KFPTSP ist die Grundlage: Es gibt eine Typsyntax, Typen und Typkonstruktoren Der Typ der Daten-Konstruktoren ist vorgegeben Ein case-konstrukt pro abstraktem Datentyp (mit data type deklariert) (nicht für den Funktionsdatentyp a b) rekursive Superkombinatoren sind erlaubt. Einführung in die funktionale Programmierung, fol

5 Erwünschte Eigenschaften eines Typsystems Wenn Typcheck erfolgreich, dann keine dynamischen Typfehler (d.h. zur Laufzeit) Flexibles Programmieren trotz Typenbeschränkungen Typisierung sollte entscheidbar sein. Falls möglich: effizient Jeder Ausdruck und Unterausdruck muss einen Typ haben. Einführung in die funktionale Programmierung, fol

6 Wiederholung; Exp-Syntax von KFPT: Exp ::= V (Variablen) (\V -> Exp) (Exp 1 Exp 2 ) (c T yp Exp 1... Exp n ) (wobei n = ar(c) ) (case Typ Exp of {P at 1 -> Exp 1 ;... ; P at n -> Exp n }) (P at i sind alle einfachen Pattern zum Typ des case) Pat ::= (c V 1... V ar(c) ) Die Variablen V i müssen alle verschieden sein. Einführung in die funktionale Programmierung, fol

7 Dynamische Typfehler Definition: Ein dynamischer Typfehler tritt auf, wenn: Die Normalordnung versucht folgendes auszuwerten: (case Typ (c...)...) wobei c kein Konstruktor zu Typ ist. (case Typ (\x->s)...) (case Typ (sc t1.. tn)...) und n < ar(sc) ((c...) t) wobei c ein Konstruktor ist. Einführung in die funktionale Programmierung, fol

8 Dynamische Typfehler Satz Es gibt kein (entscheidbares) Typsystem in KFPT (KFPTS), das genau die Ausdrücke erkennt, die keine dynamischen Typfehler verursachen. Beweis-Skizze Zurückführung auf das Halteproblem: Betrachte den Ausdruck if t then case_bool Nil {p1-> (Nil Nil) ;... } else case_bool Nil {p1-> (Nil Nil) ;... } Falls t nur True, False, (oder Nichtterminierung) ergeben kann, dann ergibt sich ein Typfehler genau dann wenn t terminiert. Als t kann man eine Turingmaschine in KFPT kodieren D.h.: Lösung des Halteproblem Existenz eines exakten Typcheckers Einführung in die funktionale Programmierung, fol

9 Nicht-Existenz eines exakten Typcheckers: Konsequenzen Angenommen, wir haben ein entscheidbares Typsystem, das keine dynamischen Typfehler zulässt. Dann gibt es ungetypte Ausdrücke, die keine dynamischen Typfehler verursachen. Erweiterung des entscheidbaren Typsystems sind immer möglich; sind trotzdem nie exakt. Einführung in die funktionale Programmierung, fol

10 Polymorphe Typen (Hindley; Milner; Mycroft) Syntax Typ ::= Typkonstante Typvariable (TC Typ 1... Typ n ) Wobei TC Stelligkeit n hat. elementarer Typ = Basistyp, d.h. Konstante Grundtyp,monomorpher Typ. = Typ ohne Typvariablen polymorph = mit Typvariablen Einführung in die funktionale Programmierung, fol

11 Polymorphe Typen (Typ-)Variable: Typkonstruktor: Gleiche Variablen bedeuten gleichen Typ. zu jedem algebraischen Datentyp gibt es einen. Die Stelligkeit der Konstruktoren ist festgelegt. zweistelliger Typ-Konstruktor für Funktionen. Einführung in die funktionale Programmierung, fol

12 Bedeutung der Typen Zwei Möglichkeiten: (A) (B) Als Menge von Grundtypen Als Formel erster Ordnung: Aussage über Argument und Ergebnistypen einer Funktion Beispiel: (A) (B) Cons: α [α] [α] Die Menge der Typen von Cons ist: {τ [τ] [τ] τ ist ein Grundtyp}. α.α [α] [α]: Für alle Eingaben... ist die Ausgabe vom Typ [α]. Betrachtungsweise: Jeder Ausdruck hat eine Menge von Grundtypen Einführung in die funktionale Programmierung, fol

13 Weitere Annahmen zu Datenkonstruktoren Annahmen: Typ des Datenkonstruktors gibt die Stelligkeit an, und die möglichen Typen und Typkombinationen der Argumente. Zieltyp muss von der Form T α 1... α n sein, wobei T Typkonstruktor des zugehörigen algebraischen Datentyps und die α i verschiedene Typvariablen sind. Nur α 1... α n können als Typvariablen in Argumenttypen von Konstruktoren vorkommen Das schließt im Moment GADT aus, ebenso existenzielle Typen in Konstruktor-Deklarationen (Wird in WX-Haskell benötigt) Einführung in die funktionale Programmierung, fol

14 Beispiele zu Datenkonstruktoren Paare: (.,.) : α β (α, β) Listen: Nil: [α] und : : α [α] [α] Boolesche Werte: True: Bool und False: Bool. Einführung in die funktionale Programmierung, fol

15 Beispiel: Bäume Data Tree a = Node a (Tree a) (Tree a) Leaf a Tree ist der einstellige Typkonstruktor. Node,Leaf sind die (Daten-)Konstruktoren. Node: α (Tree α) (Tree α) (Tree α) Leaf: α (Tree α) Einführung in die funktionale Programmierung, fol

16 Instanz eines polymorphen Typs (Typ-)Substitution σ: ist Abbildung : Typ-Ausdrücke Typen definiert auf den Typ-Variablen Anwendungsregeln: σ α = σα σ (c t 1... t n ) = (c (σ t 1 )... (σ t n )) Beispiel Instanzen von [α] sind [Int] mit {α Int} [[α]] mit {α [α]} [β Int] mit {α (β Int)} Einführung in die funktionale Programmierung, fol

17 Typregeln (auf Grundtypen) für KFPTSP Idee der Typregeln: Die Regeln berechnen Grundtypen von Ausdrücken (i.a.unendlich viele) Grundtypen Ist scheinbar umständlich, Aber allgemeiner als polymorphe Typ-Schemata. Einführung in die funktionale Programmierung, fol

18 Typregeln (auf Grundtypen) für KFPTSP Aufbau einer Regel: bisherige Folgerungen neue Folgerung Typannahme t : τ ist eine Einzel-Komponente (judgement) Bisherige Folgerungen = Liste von Komponenten neue Folgerungen bestehen aus einer Komponente Regeln ohne Voraussetzungen sind Axiome. Bei diesen wird die Annahme und der Strich weggelassen. Einführung in die funktionale Programmierung, fol

19 Typregeln (auf Grundtypen) für KFPTSP Typannahmen A: Variablen x sind eine Menge von Annahmen über die möglichen Typen der freien Variablen und bekanntes Wissen über die Typen der Konstanten bzw. Funktionssymbole haben höchstens eine Typannahme x : τ in jedem A Superkombinatoren werden getrennt behandelt Konstanten c können mehrere Typannahmen haben: c : τ 1,..., c : τ n. I.A. Menge aller Grundinstanzen eines polymorphen Typs Typangabe c : (σ). Einführung in die funktionale Programmierung, fol

20 Typregeln Die Typregeln definieren eine Herleitbarkeitsrelation A s : τ bedeutet, dass aus A der Typ τ für s herleitbar ist. I.a. ist eine Menge von Typen für einen Term herleitbar. Oft ist diese Menge eine Instanzmenge eines polymorphen Typs. Einführung in die funktionale Programmierung, fol

21 Typen und Typklassen Mit der Typmengen-Methode kann man einige Beschränkungen des Typklassensystem modellieren: Typen von +: {Int Int Int, Integer Integer Integer,...}. Das sind endlich viele; Diese Menge ist nicht als Instanz eines polymorphen Typs darstellbar. Einführung in die funktionale Programmierung, fol

22 Typregeln τ, τ i sind Grundtypen, T Menge von Grundtypen. Axiom für Konstanten A {c : T } c : τ wenn τ T Axiom für Konstanten (polymorphe Typen) A {c : (σ)} c : τ wenn τ Grundinstanz von σ Axiome für freie Variablen A {x : τ} x : τ Einführung in die funktionale Programmierung, fol

23 Typregeln Anwendungsregel: Superkombinator-Regel A a : (τ 1 τ 2 ); A b : τ 1 A (a b) : τ 2 A {x 1 : τ 1,... x n : τ n } e : τ; sc x 1... x n = e ist die Definition für den Superkombinator sc A sc : τ 1... τ n τ Nebenbedingung: A hat keine Annahmen über x i Abstraktion: A {x : τ 1 } t : τ 2 A (λx.t) : τ 1 τ 2 Einführung in die funktionale Programmierung, fol

24 Typregeln case-regel: µ ist Typ zu Typkonstruktor D A e : µ A {x 1,1 : τ 1,1... x 1,n(1) : τ 1,n(1) } (c 1 x 1,1... x 1,n(1) ) : µ... A {x m,1 : τ m,1... x m,n(m) : τ m,n(m) } (c m x m,1... x m,n(m) ) : µ A {x 1,1 : τ 1,1... x 1,n(1) : τ 1,n(1) } e 1 : τ... A {x m,1 : τ m,1... x m,n(m) : τ m,n(m) } e m : τ A (case D e {(c 1 x 1,1... x 1,n(1) ) e 1 ;... ; (c m x m,1... x m,n(m) ) e m }) : τ Es reicht aus, sich zu merken: e und alle Pattern haben gleichen Typ der zu D gehört ebenso die entsprechenden Unterterme alle e i und der Gesamt-case-Ausdruck haben gleichen Typ. Einführung in die funktionale Programmierung, fol

25 Typregeln; Anmerkungen Die Typregeln für Abstraktionen, Superkombinatoren und case verändern die Menge der Typannahmen: und zwar um lokale Annahmen für gebundene Variablen Einführung in die funktionale Programmierung, fol

26 Typregeln Obige Regeln sind ausreichend für Typen von nicht rekursiv definierten Superkombinatoren Man stellt fest, dass oft polymorphe Typen (Schemata) für die Menge der herleitbaren Typen eines (nicht-rekursiven) Superkombinatoren herleitbar sind. Einführung in die funktionale Programmierung, fol

27 Wohlgetypte Ausdrücke Definition Ein Ausdruck t ist (bzgl des Grundtypensystem) wohlgetypt, wenn man für t mindestens einen Typ herleiten kann. D.h. A t :: τ soll herleitbar sein. Hierbei darf A nur Annahmen zu Variablen enthalten, die frei in t vorkommen. Es gilt Bei geschlossenen Ausdrücken muss A = sein Wenn t wohlgetypt ist, dann auch alle Unterausdrücke von t. Einführung in die funktionale Programmierung, fol

28 Typregeln: Beispiele Abstraktion Id := λx.x: {x : τ} x : τ λx.x : τ τ wobei τ ein (beliebiger) Grundtyp ist. D.h. λx.x hat alle Typen der Form {τ τ}. Das ist gerade die Menge der Instanzen von α α. Einführung in die funktionale Programmierung, fol

29 Typregeln: Beispiele unitlist x = Cons x Nil Menge der Annahmen: A = {x : τ, (Nil : [β]), Cons : (α [α] [α])} 1. A (Cons x) : [τ] [τ] 2. A (Cons x Nil) : [τ] 3. Superkombinatorregel: unitlist: τ [τ]. Für alle Grundtypen τ gilt: unitlist: τ [τ]. Auch hier: unitlist : α [α] Einführung in die funktionale Programmierung, fol

30 Typregeln: Beispiele twice f x = f (f x) Typannahme A = {x : τ 1, f : τ 2 }. 1. Der Typ von (f x) muss existieren: deshalb muss f : τ 2 = τ 1 τ 3 sein, wobei τ 3 noch unbestimmt ist. a (f x) : τ Nur Annahmen der Form A = {x : τ 1, f : τ 1 τ 3 } sind sinnvoll 3. Typ von f (f x) muss existieren: Argumentvariablen haben nur einen Typ: Also τ 1 = τ 3 und f (f x): τ A = {x : τ 1, f : τ 1 τ 1 } herleitbar: f (f x): τ 1 5. Mit der Superkombinatorregel: twice: (τ τ) τ τ. 6. Polymorpher Typ von twice :: (α α) α α Einführung in die funktionale Programmierung, fol

31 Anmerkungen Statt mit x : τ Grundtypen durchzuprobieren : Evtl. besser: x : α mit Typvariable α. Wesentlich für das Typsystem: Nur eine Grundtypannahme für lokale Variablen (ohne Quantoren) keine Menge o.ä. Lambda-gebundene Variablen dürfen nicht polymorph verwendet werden Das ist eine echte Einschränkung, falls Variablen vom Funktionstyp Einführung in die funktionale Programmierung, fol

32 Beispiel selfapply selfapply kommt als Unterausdruck in der Definition des Fixpunktkombinators Y vor. selfapply x = x x Typ von selfapply nach zwei verschiedenen Methoden: 1. lambda-gebundene Variablen sind monomorph 2. Argumente dürfen eine Menge von Typen haben. (was wäre wenn,...) Polymorphismus mit höherem Rang. Einführung in die funktionale Programmierung, fol

33 Beispiel selfapply selfapply x = x x Unter der Annahme, dass lambda-gebundene Variablen monomorph sind. 1. Annahme: {x : τ} 2. (x x) hat Typ, deshalb τ = τ 1 τ 2 und τ 1 = τ. Fehler, denn solche Grundtypen, gibt es nicht. Damit hat Y = λf.(λx.f(x x)) (λx.f(x x)) keinen polymorphen Typ Aber: (selfapply x) kann vernünftig sein: Z.B: selfapply I (I I) I. Einführung in die funktionale Programmierung, fol

34 Beispiel selfapply: ohne Monomorphie- Annahme zu lambda-gebundenen Variablen Als versuchsweise Erweiterung des Typsystems: eine Menge von Typen ist erlaubt pro Variable 1. {selfapply : S; x : T } 2. (x x) muss einen Typ haben T muss erfüllen: Es gibt Typen τ 1 T und τ 1 τ 2 T 3. Die von T abgeleitete Typmenge von (x x) ist dann: T 1 = {τ 2 Es gibt τ 1 τ 2 T und τ 1 T } D.h. selfapply: T {τ 2 Es gibt τ 1 τ 2 T und τ 1 T } Der Mengen-Typ von selfapply ist keine Instanz eines polymorphen Typausdrucks, sondern eine komplexere Bedingung an Mengen von Grundtypen. Einführung in die funktionale Programmierung, fol

35 Typen für rekursive Superkombinatoren Das bisherige Typsystem kann keine Typen für rekursiv definierte Superkombinatoren herleiten, da die Definition der Herleitbarkeit dann zyklisch ist. Einführung in die funktionale Programmierung, fol

36 Erweiterung des Typsystems Erweiterung zur Berechnung von Typen von rekursiven Superkombinatoren Einführung in die funktionale Programmierung, fol

37 Typen für rekursive Superkombinatoren Konsistente Annahme Programm: sc 1 = e 1,..., sc n = e n A C := Typen der Konstruktoren A SC := {sc 1 :: S 1,..., sc n :: S n } sind Typannahmen zu den sc i Für jeden Kombinator sc j und für alle τ i S j : lässt sich jeder angenommene Typ herleiten, d.h.: A SC A C sc j : τ i, wobei die letzte angewendete Regel jeder Herleitung jeweils die Superkombinatorregel zu sc j ist, dann ist A eine konsistente Typannahme. A ist dann ein Fixpunkt des Verfahrens. Einführung in die funktionale Programmierung, fol

38 Typen für rekursive Superkombinatoren Konsistenz: alle (Grund-)Typen von Superkombinatoren, die in den Annahmen sind, kann man auch aus diesen Annahmen herleiten (Evtl. mehr Typen) Einführung in die funktionale Programmierung, fol

39 Typen für rekursive Superkombinatoren Definition Ein Programm P (eine Mengen von Superkombinatordefinitionen) ist wohlgetypt, wenn es eine konsistente Typannahme zu P gibt. Wenn es eine allgemeinste (größte) konsistente Typannahme gibt dann sind sc i : S i die allgemeinsten Typen der Superkombinatoren. entspricht: größtem Fixpunkt der Annahmen unter Superkombinator-Typ-Herleitung Einführung in die funktionale Programmierung, fol

40 Typisierung eines rekursiven Kombinators Beispiel: repeat x = Cons x (repeat x) Versuch einer Typannahme: A = {repeat : α, Cons : (β [β] [β]), x : τ} Dann ergibt sich: 1. (repeat x) (rechts) ist getypt, deshalb repeat: τ α 2. (Cons x (repeat x)) ist getypt, deshalb [τ] = α und damit (Cons x (repeat x)): [τ]. 3. Das Ergebnis: repeat : τ [τ] Beachte: das geht für alle τ! Aber: Typ-Annahme nicht konsistent. Einführung in die funktionale Programmierung, fol

41 Beispiel: repeat Neue Annahmen A 1 = {repeat : (α [α]), Cons : (β [β] [β])} Konsistenz-Test bzw Typisierung unter A 1 : 1. (repeat x): [τ] 2. (Cons x (repeat x)): [α] und β = α = τ 3. Damit: repeat : τ [τ] für alle τ mit Superkombinatorregel als letzte Regel herleitbar 4. Damit ist A 1 eine konsistente Typannahme. Einführung in die funktionale Programmierung, fol

42 Reduktion und Typen Lemma Sei A konsistente Typannahme für alle Superkombinatoren. Dann gilt: Wenn t t eine Reduktion ist, Dann A t : τ = A t : τ (falls t geschlossen) Bzw. A A V t : τ = A A V t : τ (falls t offen) Begründung: Alle Reduktionsfälle durchgehen: Superkombinator-Reduktion, Beta-Reduktion, Case-Reduktion Einführung in die funktionale Programmierung, fol

43 Reduktion und Typen Begründung des Lemmas: 1. Superkombinator-Reduktion: sc t 1... t n e[t 1 /x 1... t n /x n ] mit sc x 1... x n = e Wir wollen wissen, ob: (A sc t 1... t n ) :: τ = (A e[t 1 /x 1... t n /x n ] :: τ) Einführung in die funktionale Programmierung, fol

44 Reduktion und Typen; Begründung Typregel zu Superkombinatoren und Anwendung: Term sc t 1... t n : Aus A herleitbar: t 1 :: τ 1,..., t n :: τ n, ebenso sc :: τ 1... τ n τ A und (sc t 1... t n ) :: τ. Typannahmen konsistent = sc :: τ 1... τ n τ mittels der Superkombinatorregel herleitbar somit auch für den Rumpf e :: τ unter den Annahmen x 1 :: τ 1,.... Typisierungsregeln beachten nur den Typ der Terme, somit: e[t 1 /x 1... t n /x n ] :: τ ist aus A herleitbar Einführung in die funktionale Programmierung, fol

45 Reduktion und Typen: Begründung 2. ((λx.s)t) s[t/x]. Analog zur Superkombinatorreduktion: Abstraktions und Anwendungsregel-Typisierung passen zur Beta- Reduktion Typen vorher: λx.s :: τ 1 τ 2 t :: σ. ((λx.s) t) :: γ(τ 2 ). wobei γ(τ 1 ) = γ(σ) Typ nachher: s[t/x] ::?? Da der Typcheck-Algorithmus nur auf den Typ der Unterterme achtet und t :: γ(σ) und x :: γ(σ), gilt: s[t/x] : γ(τ 2 ) Einführung in die funktionale Programmierung, fol

46 Reduktion und Typen: Begründung zu case- Reduktion 3. case-reduktion case A (c i t 1... t n(i) )) {(c 1 x 1,1,... x 1,n(1) ) exp 1 ;... (c m x m,1,... x m,n(m) ) exp m } exp i [t 1 /x i,1,..., t n(i) /x i,n(i) ] case-typregel: = : (c i t 1... t n(i) ) und (c i x i,1... x i,n(i) ) haben gleichen Typ. = : t i : τ i und x j,i : τ i exp i : τ, wobei τ der Typ des case- Ausdrucks. Beachte: Aus den Konventionen zu Konstruktoren folgt: aus dem Typ von (c i t 1... t n(i) ) laesst sich der Typ der Terme t i eindeutig bestimmen. = : exp i [t 1 /x i,1,..., t n(i) /x i,n(i) ] : τ Einführung in die funktionale Programmierung, fol

47 Aussagen zu Typcheck Satz wohlgetypte Programme machen keine dynamischen Typfehler Das gilt auch für die (Milner-)Typisierung (wird noch besprochen) Die Milner-Typisierung typisiert aber weniger Programme als die Grundtypenmethode. Einführung in die funktionale Programmierung, fol

48 Direkt Ungetypte Ausdrücke Aussage Für direkt ungetypte Ausdrücke lässt sich kein Typ herleiten. direkt ungetypte Fälle: 1. (case T (c...)...) wobei c kein Konstruktor zu Typ ist. 2. (case T (\x->s)...) 3. (case T (sc t1.. tn)...) und n < ar(sc) 4. ((c...) t) wobei c ein Konstruktor ist. zu 1. Keine Typregel für case anwendbar: Pattern-Typ verschieden von (T...) zu 2. Abstraktion hat Typ τ 1 τ 2 (T...) zu 3. (sc t1.. tn) hat Typ τ 1 τ 2 (T...) zu 4. ((c t 1... t n ) t): Typ von (c t 1...t n ) ist kein -Typ = Die Typregel für Anwendungen ist nicht anwendbar Einführung in die funktionale Programmierung, fol

49 Aussagen zu Typcheck Definition: t dynamisch ungetypt: gdw. t t und t direkt ungetypt Lemma Für dynamisch ungetypte Ausdrücke lässt sich kein Typ herleiten. Folgt aus obigen Lemmas: 1. Typ bleibt erhalten unter Reduktion 2. direkt dynamisch ungetypte t haben keinen Typ. Einführung in die funktionale Programmierung, fol

50 Keine Typfehler: Fortschrittslemma Progress-Lemma; Fortschrittslemma: (zb in KFPTSP) Für jeden geschlossenen, wohlgetypten Ausdruck t gilt: Entweder t ist eine WHNF; oder t hat eine Normalordnungsreduktion Einführung in die funktionale Programmierung, fol

51 Keine Typfehler: Fortschrittslemma Fortschrittslemma gilt nicht in KFPT für die erlaubten Ausdrücke zb (Cons Nil Nil) Nil ist keine WHNF, und hat keine Normalordnungsreduktion Fortschrittslemma gilt nicht für offene Ausdrücke: Einführung in die funktionale Programmierung, fol

Typen und Typcheck. Kapitel Typsysteme, Typüberprüfung

Typen und Typcheck. Kapitel Typsysteme, Typüberprüfung Kapitel 4 Typen und Typcheck 4.1 Typsysteme, Typüberprüfung Wir haben bisher algebraische Datentypen in KFPT, Erweiterungen von KFPT und Haskell kennengelernt, und gesehen, dass es in KFPT dynamische Typfehler

Mehr

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 3 A Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2016 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln

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

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

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 3 A Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln

Mehr

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. 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 Milners

Mehr

Haskell, Typen, und Objektorientierung

Haskell, Typen, und Objektorientierung Haskell, Typen, und Objektorientierung ZIELE dieses Kapitels Haskells Typisierung Milners Polymorpher Typcheck Haskells Typklassen P raktische Informatik 2, SS 2005, F olien Kap.3, (27. Mai2005) Seite

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 28. Oktober 2008 Einführung in Haskell: Syntax, Reduktionen, Kernsprachen Haskell,

Mehr

Übersicht. Einführung in die Funktionale Programmierung: Ziele des Kapitels. Typisierung Prof Dr. Manfred Schmidt-Schauß WS 2012/13

Übersicht. Einführung in die Funktionale Programmierung: Ziele des Kapitels. Typisierung Prof Dr. Manfred Schmidt-Schauß WS 2012/13 Übersicht Einführung in die Funktionale Programmierung: Typisierung Prof Dr. Manfred Schmidt-Schauß WS 2012/13 1 Motivation 2 Typen: Sprechweisen, Notationen und Unifikation 3 Typisierungsverfahren Iteratives

Mehr

Haskell, Typen und Typberechnung

Haskell, Typen und Typberechnung Kapitel 5 Haskell, Typen und Typberechnung 5.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen

Mehr

Übersicht. Einführung in die Funktionale Programmierung: Übersicht: Expression und Typen. Ziele des Kapitels

Übersicht. Einführung in die Funktionale Programmierung: Übersicht: Expression und Typen. Ziele des Kapitels Übersicht Einführung in die Funktionale Programmierung: Typisierung Prof Dr. Manfred Schmidt-Schauß 1 Motivation 2 Typen: Sprechweisen, Notationen und Unifikation 3 Typisierungsverfahren Iteratives Typisierungsverfahren

Mehr

Einführung in Funktionale Programmierung Typisierung

Einführung in Funktionale Programmierung Typisierung Einführung in Funktionale Programmierung Typisierung PD Dr. David Sabel WS 2015/16 Stand der Folien: 19. November 2015 Motivation Typen Typisierungsverfahren Ziele des Kapitels Warum typisieren? Typisierungsverfahren

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 26. Oktober 2006 Haskell - Einführung Syntax Typen Auswertung Programmierung

Mehr

Haskell, Typen und Typberechnung

Haskell, Typen und Typberechnung Kapitel 3 Haskell, Typen und Typberechnung 3.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen

Mehr

Haskell, Typen und Typberechnung

Haskell, Typen und Typberechnung Kapitel 5 Haskell, Typen und Typberechnung 5.1 Typisierung in Haskell In diesem Kapitel sind die Typisierungsmethoden in Haskell beschrieben, wobei auch kurz auf die Typisierung in anderen Programmiersprachen

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

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

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

Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation

Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation Dr. David Sabel Sommersemester 2015 Stand der Folien: SoSe 2015 Übersicht FP-PR Teil 2: Typecheck und Transformation Sommersemester

Mehr

Semantik und Analyse von Funktionalen Programmen (SAFP):

Semantik und Analyse von Funktionalen Programmen (SAFP): Semantik und Analyse von Funktionalen Programmen (SAFP): LR: Sharing und Striktheitsanalyse titleslide Prof. Dr. Manfred Schmidt-Schauß SAFP; WS 2017/18 Stand der Folien: 30. Januar 2018 LR: Syntax E ::=

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): LR: Sharing und Striktheitsanalyse titleslide Prof. Dr. Manfred Schmidt-Schauß SAFP; WS 2017/18 E ::= V (c E 1... E ar(c) ) (seq E 1

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

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. 4.5.5 Rekursive Typen Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. datatype IntList = Nil Cons o f ( i n t IntList ) ; Damit

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

Workshop Einführung in die Sprache Haskell

Workshop Einführung in die Sprache Haskell Workshop Einführung in die Sprache Haskell Nils Rexin, Marcellus Siegburg und Alexander Bau Fakultät für Informatik, Mathematik und Naturwissenschaften Hochschule für Technik, Wirtschaft und Kultur Leipzig

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Grundlegende Datentypen (Funktionale Programmierung) Prof. Dr. Oliver Braun Letzte Änderung: 18.03.2018 21:08 Grundlegende Datentypen 1/16 Typen in Haskell ist alles streng typisiert Haskell verfügt über

Mehr

Fortgeschrittene Funktionale Programmierung

Fortgeschrittene Funktionale Programmierung Fortgeschrittene Funktionale Programmierung 12. Vorlesung Janis Voigtländer Universität Bonn Wintersemester 2015/16 Motivation Auf http://www-ps.iai.uni-bonn.de/ft: 1 Motivation 1 Betrachtungen zu Polymorphie

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................

Mehr

Lösungen zum Aufgabenblatt 10 Logik und modelltheoretische Semantik

Lösungen zum Aufgabenblatt 10 Logik und modelltheoretische Semantik Lösungen zum Aufgabenblatt 10 Logik und modelltheoretische Semantik Universität München, CIS, SS 2013 Hans Leiß Abgabetermin: Do, 4.7.2013, 16 Uhr, in meinem Postfach Aufgabe 10.1 Vereinfache die folgenden

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Grundlegende Datentypen Funktionale Programmierung Prof. Dr. Oliver Braun Letzte Änderung: 22.10.2018 10:53 Grundlegende Datentypen 1/21 Typen in Haskell ist alles streng typisiert Haskell verfügt über

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Typüberprüfung und Typinferenz Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 5 Typüberprüfung und Typinferenz 1. Typaussagen 2. Typisierungsaxiome

Mehr

ALP I. Funktionale Programmierung

ALP I. Funktionale Programmierung ALP I Funktionale Programmierung Typ-Klassen und SS 2011 Überladung von Datentypen Funktionen sollen oft auf verschiedene Datentypen anwendbar sein, aber nicht auf beliebige Datentypen. Beispiel: Die (+)

Mehr

Funktionale Programmierung Grundlegende Datentypen

Funktionale Programmierung Grundlegende Datentypen Grundlegende Datentypen Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 06.11.2017 16:45 Inhaltsverzeichnis Typen........................................

Mehr

Grundlagen der Programmierung 2 (1.A)

Grundlagen der Programmierung 2 (1.A) Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Grundlagen der Programmierung 2 Geplanter Inhalt der ersten Hälfte: Programmieren in Haskell Definitionen;

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

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie Rev. 2749 1 [28] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 04.11.2014: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2014/15 2 [28] Fahrplan Teil

Mehr

Programmieren in Haskell Programmiermethodik

Programmieren in Haskell Programmiermethodik Programmieren in Haskell Programmiermethodik Peter Steffen Universität Bielefeld Technische Fakultät 12.01.2011 1 Programmieren in Haskell Bisherige Themen Was soll wiederholt werden? Bedienung von hugs

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie 16:02:01 2017-01-17 1 [37] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 08.11.2016: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2016/17 PI3 WS 16/17

Mehr

Kapitel 6: Typprüfung

Kapitel 6: Typprüfung Ludwig Maximilians Universität München Institut für Informatik Lehr- und Forschungseinheit für Datenbanksysteme Skript zur Vorlesung Informatik I Wintersemester 2006 Vorlesung: Prof. Dr. Christian Böhm

Mehr

Fortgeschrittene Funktionale Programmierung

Fortgeschrittene Funktionale Programmierung Fortgeschrittene Funktionale Programmierung 13. Vorlesung Janis Voigtländer Universität Bonn Wintersemester 2015/16 Erweiterung um Datentypen Typen: τ := Bool [τ] Terme: t := False True [ ] τ t : t case

Mehr

Einführung in Haskell

Einführung in Haskell Kapitel 2 Einführung in Haskell Dieses Kapitel enthält eine Einführung in Haskell, eine nicht-strikte funktionale Programmiersprache mit polymorphem Typsystem. Ziel in diesem Kapitel ist: Darstellung der

Mehr

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Semantische Modelle nebenläufiger Programmiersprachen. Einleitung

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Semantische Modelle nebenläufiger Programmiersprachen. Einleitung Stand der Folien: 24. Januar 2012 Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Semantische Modelle nebenläufiger Programmiersprachen 1 2 Call-by-Name

Mehr

Einführung in Haskell

Einführung in Haskell Kapitel 2 Einführung in Haskell Dieses Kapitel enthält eine Einführung in Haskell, eine nicht-strikte funktionale Programmiersprache mit polymorphem Typsystem. Ziel in diesem Kapitel ist: Darstellung der

Mehr

Grundlagen der Programmierung 2 (1.A)

Grundlagen der Programmierung 2 (1.A) Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2018 Grundlagen der Programmierung 2 Geplanter Inhalt der ersten Hälfte: Programmieren in Haskell Definitionen;

Mehr

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine WWW

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine WWW Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 sabel@ki.informatik.uni-frankfurt.de

Mehr

Haskell. Grundlagen der Programmierung 2. Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte. Prof. Dr. Manfred Schmidt-Schauß

Haskell. Grundlagen der Programmierung 2. Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte. Prof. Dr. Manfred Schmidt-Schauß Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte Grundlagen der Programmierung 2 Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 17. April 2013 rekursives

Mehr

Praktikum Funktionale Programmierung Organisation und Überblick

Praktikum Funktionale Programmierung Organisation und Überblick Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Sommersemester 2013 Stand der Folien: SoSe 2013 Adressen Organisatorisches Software Projekt Adressen, Termine Studienleistung

Mehr

Grundlagen der Programmierung 2

Grundlagen der Programmierung 2 Grundlagen der Programmierung 2 Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 15. April 2009 Grundlagen der Programmierung 2: Geplanter Inhalt der zweiten Hälfte rekursives

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

Grundlagen der Programmierung 2 (1.A)

Grundlagen der Programmierung 2 (1.A) Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2015 Grundlagen der Programmierung 2 Geplanter Inhalt der ersten Hälfte: Programmieren in Haskell Definitionen;

Mehr

Generizität, Abstraktion, Rekursion

Generizität, Abstraktion, Rekursion Kapitel 17 Generizität, Abstraktion, Rekursion 17.1 Generische Klassen Fragen: was ist der Typ einer generischen Klasse? Kann man zwischen generischen Klassen Vererbung definieren? Kann man zwischen generischen

Mehr

Einführung in Haskell

Einführung in Haskell Kapitel 2 Einführung in Haskell Dieses Kapitel enthält eine Einführung in Haskell, eine nicht-strikte funktionale Programmiersprache mit polymorphem Typsystem. Ziel in diesem Kapitel ist: Darstellung der

Mehr

Haskell. Grundlagen der Programmierung 2. Grundlagen der Programmierung 2 (1.A) Bücher, Literatur, URLs. Haskell. Einführung

Haskell. Grundlagen der Programmierung 2. Grundlagen der Programmierung 2 (1.A) Bücher, Literatur, URLs. Haskell. Einführung Grundlagen der Programmierung 2 Grundlagen der Programmierung 2 (1.A) Einführung Prof. Dr Manfred Schmidt-Schauß Sommersemester 2014 Geplanter Inhalt der ersten Hälfte: Programmieren in Definitionen; Rekursion

Mehr

9 Algebraische Datentypen

9 Algebraische Datentypen 9 Algebraische Datentypen Dieses Kapitel erweitert Haskells Typsystem, das neben Basistypen (Integer, Float, Char, Bool,... ) und Typkonstruktoren ([ ] und ( )) auch algebraische Datentypen kennt. Ganz

Mehr

Programmieren in Haskell Das Haskell Typsystem

Programmieren in Haskell Das Haskell Typsystem Programmieren in Haskell Das Haskell Typsystem Peter Steffen Robert Giegerich Universität Bielefeld Technische Fakultät 22.01.2010 1 Programmieren in Haskell Belauscht... Lisa Lista: Ohne Typen keine korrekten

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Funktionen höherer Ordnung Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 6 Funktionen höherer Ordnung 1. Funktionen als Parameter und Wert von

Mehr

Grundlagen der Programmierung 2 (1.A)

Grundlagen der Programmierung 2 (1.A) Grundlagen der Programmierung 2 (1.A) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 18. April 2007 Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte

Mehr

Beweise und Typen. 9.1 Formalisierung und Beweis

Beweise und Typen. 9.1 Formalisierung und Beweis 120 9. Beweise und Typen 9 Beweise und Typen Dieses Kapitel ist zweigeteilt. Als erstes wenden wir uns dem Thema zu, wie wir Eigenschaften von funktionalen Programmen beweisen können. Aufwandsabschätzungen

Mehr

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10.

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10. Universität Bielefeld AG Praktische Informatik 10. Dezember 2014 Wiederholung: Schema: f :: [σ] -> τ f [] = e 1 f (a : as) = e 2 where s = f as wobei e 1 und e 2 Ausdrücke vom Typ τ sind und e 2 die Variablen

Mehr

Concurrent Haskell with Futures. Vorlesung SAFP, WS 2017/18

Concurrent Haskell with Futures. Vorlesung SAFP, WS 2017/18 Concurrent Haskell with Futures Vorlesung SAFP, WS 2017/18 Stand der Folien: 8. Februar 2018 Übersicht Der CHF-Kalkül 1 Der CHF-Kalkül Syntax Typisierung Semantik Gleichheit EFP SAFP Vorlesung SAFP, WS

Mehr

Der untypisierte Lambda-Kalkül

Der untypisierte Lambda-Kalkül Der untypisierte Lambda-Kalkül Der Lambda-Kalkül wurde zur Beschreibung des mathematischen Begriffs Funktion entwickelt. Die Menge aller Lambda-Ausdrücke Exp ist folgendermaßen definiert: x Exp wenn x

Mehr

Theoretische Informatik II

Theoretische Informatik II Theoretische Informatik II Dr. Eva Richter / Holger Arnold Universität Potsdam, Theoretische Informatik, Sommersemester 2008 Übungsblatt 3 (Version 4) Abgabetermin: 13.5.2008, 12.00 Uhr Der λ-kalkül Da

Mehr

Praktische Informatik 3

Praktische Informatik 3 Praktische Informatik 3 Christian Maeder WS 03/04 Vorlesung vom 12.1.2004: Ein/Ausgabe in funktionalen Sprachen Vorlesung vom 12.1.2004: Ein/Ausgabe in funktionalen Sprachen 3 Inhalt Wo ist das Problem?

Mehr

Logische und funktionale Programmierung

Logische und funktionale Programmierung Logische und funktionale Programmierung Vorlesung 11: Logikprogramme Babeş-Bolyai Universität, Department für Informatik, Cluj-Napoca csacarea@cs.ubbcluj.ro 19. Dezember 2016 1/55 WIEDERHOLUNG: HORN-KLAUSELN

Mehr

Übung zur Vorlesung Automatisierte Logik und Programmierung

Übung zur Vorlesung Automatisierte Logik und Programmierung Übung zur Vorlesung Automatisierte Logik und Programmierung Prof. Chr. Kreitz Universität Potsdam, Theoretische Informatik Wintersemester 008/09 Blatt Abgabetermin: 9.1.08 nach der Übung Aufgabe.1 (Typisierung)

Mehr

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

Grundlagen der Theoretischen Informatik Musterlösungen zu ausgewählten Übungsaufgaben Dieses Dokument soll mehr dazu dienen, Beispiele für die formal korrekt mathematische Bearbeitung von Aufgaben zu liefern, als konkrete Hinweise auf typische Klausuraufgaben zu liefern. Die hier gezeigten

Mehr

Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07

Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07 Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07 Dies sind die Lösungsvorschläge zu einer Altklausur, deren Aufgabenstellung an die Inhalte der Vorlesung Grundlagen der Programmierung

Mehr

Typ-Polymorphismus. November 12, 2014

Typ-Polymorphismus. November 12, 2014 Typ-Polymorphismus Universität Bielefeld AG Praktische Informatik November 12, 2014 Das Haskell Typ-System Wir beginnen mit einer Wiederholung des Bekannten: In allen Programmiersprachen sind Typ-Konzepte

Mehr

Theoretische Grundlagen der Objektorientierung

Theoretische Grundlagen der Objektorientierung Theoretische Grundlagen der Objektorientierung Benedikt Meurer Fachbereich Mathematik Universität Siegen Übersicht 1. Einleitung 2. Funktionale Objekte 3. Typsicherheit 4. Vererbung 5. Fazit Benedikt Meurer

Mehr

Einführung in Haskell

Einführung in Haskell Einführung in Haskell Axel Stronzik 21. April 2008 1 / 43 Inhaltsverzeichnis 1 Allgemeines 2 / 43 Inhaltsverzeichnis 1 Allgemeines 2 Funktions- und Typdefinitionen 2 / 43 Inhaltsverzeichnis 1 Allgemeines

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

Grundlagen der Programmierung 2

Grundlagen der Programmierung 2 Grundlagen der Programmierung 2 Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 14. April 2011 Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte rekursives

Mehr

Entscheidungsverfahren mit Anwendungen in der Softwareverifikation

Entscheidungsverfahren mit Anwendungen in der Softwareverifikation Entscheidungsverfahren mit Anwendungen in der Softwareverifikation VI: SMT, DPLL(T) Carsten Sinz Institut für Theoretische Informatik 21.11.2018 Inhalt Theorien SMT-LIB DPLL(T): Idee Abstraktes DPLL(T)!2

Mehr

Resolutionsalgorithmus

Resolutionsalgorithmus 112 Resolutionskalkül Mit dem Begriff Kalkül bezeichnet man eine Menge von syntaktischen Umformungsregeln, mit denen man semantische Eigenschaften der Eingabeformel herleiten kann. Für den Resolutionskalkül:

Mehr

Modellierungsmethoden der Informatik Kapitel 2: Logikkalküle

Modellierungsmethoden der Informatik Kapitel 2: Logikkalküle smethoden der Informatik Kapitel 2: Logikkalküle Prädikatenlogik 1. Stufe Norbert Fuhr Gudrun Fischer 29.11.2005 Organisatorisches Organisatorisches Klausur Termin: 20.2.2006, 13-15 Uhr, Audimax Anmeldung

Mehr

Beschreibung von Werten: Beschreibung von Werten: (2) Begriffsklärung: (Ausdruck, expression) (2) Begriffsklärung: (Ausdruck, expression)

Beschreibung von Werten: Beschreibung von Werten: (2) Begriffsklärung: (Ausdruck, expression) (2) Begriffsklärung: (Ausdruck, expression) Beschreibung von Werten: Beschreibung von Werten: (2) mittels Konstanten oder Bezeichnern für Werte: 23 " Ich bin eine Zeichenreihe" True x durch direkte Anwendung von Funktionen: abs (-28382) "Urin" ++

Mehr

Operationale Semantik: Haskell

Operationale Semantik: Haskell Kapitel 4 Operationale Semantik: Haskell 4.1 Semantik von Programmiersprachen Programme sind zunächst mal nur Text. Programme sollen aber etwas im Rechner bewirken bzw. eine Funktion oder Funktionalität

Mehr

Korrektheit und Hoare-Kalkül für Imperative Programme

Korrektheit und Hoare-Kalkül für Imperative Programme Korrektheit und Hoare-Kalkül für Imperative Programme Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer SS 06 Ziele Partielle und totale Korrektheit kennen lernen Die Regeln des Hoare-Kalkül

Mehr

Proinformatik Marco Block Dienstag, den 21. Juli 2009

Proinformatik Marco Block Dienstag, den 21. Juli 2009 2. Skript vom Dienstag, den 21. Juli 2009 zur Vorlesung Proinformatik Marco Block Dienstag, den 21. Juli 2009 1 Verschiedenes 1.1 let und where Am Anfang der Vorlesung haben wir uns ein paar einfache neue

Mehr

Mehrsortige Strukturen

Mehrsortige Strukturen Was bisher geschah Modellierung von Daten durch Mengen (Individuenbereiche), häufig zusammengesetzt durch Mengenoperationen, Zusammenhängen zwischen Individuen durch Relationen (auch Eigenschaften) Funktionen

Mehr

Klausur Programmierung WS 2002/03

Klausur Programmierung WS 2002/03 Klausur Programmierung WS 2002/03 Prof. Dr. Gert Smolka, Dipl. Inf. Thorsten Brunklaus 14. Dezember 2002 Leo Schlau 45 Vor- und Nachname Sitz-Nr. 4711 007 Matrikelnummer Code Bitte öffnen Sie das Klausurheft

Mehr

WS 2011/2012. Robert Giegerich Dezember 2013

WS 2011/2012. Robert Giegerich Dezember 2013 WS 2011/2012 Robert 1 AG Praktische Informatik 11. Dezember 2013 1 robert@techfak.uni-bielefeld.de Vorschau Themen heute: Funktionen höherer Ordnung (Fortsetzung) künstliche Striktheit mehr zu fold für

Mehr

Grundlagen der Programmierung 2 (Comp-D)

Grundlagen der Programmierung 2 (Comp-D) Grundlagen der Programmierung 2 (Comp-D) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 31. Mai 2007 Operationen auf Grammatiken Ziel: Normalisierungen, Vereinfachungen

Mehr

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell): Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel

Mehr

Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen:

Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: take 1 0 ( f i l t e r ( fn x => x mod 2=0) nat ) ; val it =

Mehr

Funktionale Programmierung Einführung

Funktionale Programmierung Einführung Einführung Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 13.09.2017 15:29 Inhaltsverzeichnis Was ist imperative Programmierung.......................

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom : Funktionen Höherer Ordnung II und Effizienzaspekte

Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom : Funktionen Höherer Ordnung II und Effizienzaspekte 16:02:08 2017-01-17 1 [34] Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom 22.11.2016: Funktionen Höherer Ordnung II und Effizienzaspekte Christoph Lüth Universität Bremen Wintersemester

Mehr

Grundlagen der Programmierung 2 (1.A)

Grundlagen der Programmierung 2 (1.A) Grundlagen der Programmierung 2 (1.A) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 20. April 2006 Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte

Mehr

Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte)

Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte) Matrikelnummer: 1 Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte) Kreuzen Sie an, ob die folgenden Aussagen richtig oder falsch sind. Bewertung: keine Antwort: 0 Punkte richtige Antwort: +0.5 Punkte falsche

Mehr

Kapitel 16. Cardelli-Typsystem. Wozu Typen und Typsysteme?

Kapitel 16. Cardelli-Typsystem. Wozu Typen und Typsysteme? Kapitel 16 Cardelli-Typsystem Wozu Typen und Typsysteme? Typen legen die möglichen Werte von Variablen fest Compiler können effizienten Code generieren bestimmte Laufzeitfehler werden garantiert verhindert

Mehr