Einführung in das λ-kalkül
|
|
- Elvira Hausler
- vor 6 Jahren
- Abrufe
Transkript
1 Einführung in das λ-kalkül Max Wagner IPD Snelting Max Wagner - Einführung in das λ-kalkül IPD KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft
2 Syntax Abstrakte Syntax: <term> :: = <abs> <app> <v a r > <abs> ::= λ <var >. <term> <app> :: = <term> <term> <var> ::= a b c... Klammerung ist wichtig! App implizit linksgeklammert, Abs greedy. λx. x (λy. y) λx. x λs. λz. s z λs. λz. s (s z) λs. λz. s s z Max Wagner - Einführung in das λ-kalkül IPD
3 Syntax Abstrakte Syntax: <term> :: = <abs> <app> <v a r > <abs> ::= λ <var >. <term> <app> :: = <term> <term> <var> ::= a b c... Klammerung ist wichtig! App implizit linksgeklammert, Abs greedy. λx. x (λy. y) λx. x λy. y λx. x λs. λz. s z λs. λz. s (s z) λs. λz. s s z Max Wagner - Einführung in das λ-kalkül IPD
4 Syntax Abstrakte Syntax: <term> :: = <abs> <app> <v a r > <abs> ::= λ <var >. <term> <app> :: = <term> <term> <var> ::= a b c... Klammerung ist wichtig! App implizit linksgeklammert, Abs greedy. λx. x (λy. y) λx. x λy. y λx. x λs. λz. s z λs. λz. s (s z) λs. λz. s s z λx. x λs. λz. s z λs. λz. s s z λs. λz. s s z Max Wagner - Einführung in das λ-kalkül IPD
5 Variablenbindung Unterscheide freie und gebundene Variablen. λs. λz. s (s z) λx. x (λx. x) λx. x z Max Wagner - Einführung in das λ-kalkül IPD
6 β-reduktion Entspricht schrittweiser Funktionsauswertung. Nur auf sog. Reducible Expressions (Redexe) andwendbar. Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist (λv. T 1 ) T 2 Definition (β-reduktion) β-reduktion ersetzt einen Redex mit einer modifizierten Form von T 1, wobei alle in T 1 freien 1 Vorkommnisse von V mit T 2 ersetzt werden. (λv. T 1 ) T 2 β = T1 [T 2 /V ] 1 Achtung: frei nicht im Redex, sondern wenn T 1 alleinstehender Ausdruck wäre Max Wagner - Einführung in das λ-kalkül IPD
7 Beispiele (λv. T 1 ) T 2 β = T1 [T 2 /V ] (λx. x) z (λx. x x) (λy. y) z (λx. (λy. y) x) (λy. λx. y x) x Max Wagner - Einführung in das λ-kalkül IPD
8 Beispiele (λv. T 1 ) T 2 β = T1 [T 2 /V ] (λx. x) z = β z (λx. x x) (λy. y) = β (λy. y) (λy. y) = β λy. y z (λx. (λy. y) x) = β z (λx. x) (λy. λx. y x) x = β Max Wagner - Einführung in das λ-kalkül IPD
9 Capture Avoidance und α-konversion β-reduktion nicht korrekt anwendbar, wenn dadurch aus Versehen freie Variablen gebunden werden. Definition (α-konversion) Entspricht intuitiver Variablenumbenennung, anwendbar auf Abstraktions-Teilausdrücke. λx. T α = λy. T [y/x] Max Wagner - Einführung in das λ-kalkül IPD
10 Capture Avoidance und α-konversion β-reduktion nicht korrekt anwendbar, wenn dadurch aus Versehen freie Variablen gebunden werden. Definition (α-konversion) Entspricht intuitiver Variablenumbenennung, anwendbar auf Abstraktions-Teilausdrücke. λx. T α = λy. T [y/x] (λy. λx. y x) x α = (λy. λz. y z) x β = λz. x z Wird bei der Reduktion von (λv. T 1 ) T 2 benötigt gdw. in T 1 an einer Stelle ein (freies) v steht, an der der Name einer freien Variable aus T 2 gebunden ist Max Wagner - Einführung in das λ-kalkül IPD
11 Capture Avoidance und α-konversion β-reduktion nicht korrekt anwendbar, wenn dadurch aus Versehen freie Variablen gebunden werden. Definition (α-konversion) Entspricht intuitiver Variablenumbenennung, anwendbar auf Abstraktions-Teilausdrücke. λx. T α = λy. T [y/x] (λy. λx. y x) x α = (λy. λz. y z) x β = λz. x z Wird bei der Reduktion von (λv. T 1 ) T 2 benötigt gdw. in T 1 an einer Stelle ein (freies) v steht, an der der Name einer freien Variable aus T 2 gebunden ist. Unschön. = De-Bruijn-Indizes Max Wagner - Einführung in das λ-kalkül IPD
12 Auswertungsstrategien Manchmal gibt es mehrere Redexe. Was tun? ((λx. x) z) ((λa. a a) z) Max Wagner - Einführung in das λ-kalkül IPD
13 Auswertungsstrategien Manchmal gibt es mehrere Redexe. Was tun? ((λx. x) z) ((λa. a a) z) = z ((λa. a a) z) ((λx. x) z) (z z) = = z (z z) = Beispiele für Auswertungsstrategien: Normalreihenfolge: zuerst linkesten Redex Call-by-Name: zuerst linkesten Redex, der nicht in einer Abstraktion liegt Call-by-Value: zuerst linkesten Redex, der nicht in einer Abstraktion liegt, u. dessen Argument vollst. reduziert ist Max Wagner - Einführung in das λ-kalkül IPD
14 Termination und Divergenz Reminder: λ-kalkül ist Turingmächtig. Das bedeutet aber insbesondere, dass es auch nicht terminierende Ausdrücke geben muss. (λx. x x) (λx. x x) β = (λx. x x) (λx. x x) β =... (λx. x x x) (λx. x x x) β = (λx. x x x) (λx. x x x) (λx. x x x) β = Max Wagner - Einführung in das λ-kalkül IPD
15 Termination und Divergenz Reminder: λ-kalkül ist Turingmächtig. Das bedeutet aber insbesondere, dass es auch nicht terminierende Ausdrücke geben muss. (λx. x x) (λx. x x) β = (λx. x x) (λx. x x) β =... (λx. x x x) (λx. x x x) β = (λx. x x x) (λx. x x x) (λx. x x x) β =... Es gibt Ausdrücke, die nur mit bestimmten Auswertungsstrategien terminieren. Beispiel: (λt. λf. t) (λx. x) T Mit nicht terminierendem Ausdruck T Max Wagner - Einführung in das λ-kalkül IPD
16 How to Turingmächtigkeit Man nehme Kodierung von Daten Kodierung boolscher Werte Ein Schema für Fallunterscheidung Rekursion Max Wagner - Einführung in das λ-kalkül IPD
17 How to Turingmächtigkeit Man nehme Kodierung von Daten Möglich, z.b. Natürliche Zahlen via Church-Zahlen 0: λs. λz. z 1: λs. λz. s z 4: λs. λz. s (s (s (s z))) Kodierung boolscher Werte Ein Schema für Fallunterscheidung Rekursion Max Wagner - Einführung in das λ-kalkül IPD
18 How to Turingmächtigkeit Man nehme Kodierung von Daten Möglich, z.b. Natürliche Zahlen via Church-Zahlen 0: λs. λz. z 1: λs. λz. s z 4: λs. λz. s (s (s (s z))) Kodierung boolscher Werte True: λt. λf. t False: λt. λf. f Ein Schema für Fallunterscheidung Rekursion Max Wagner - Einführung in das λ-kalkül IPD
19 How to Turingmächtigkeit Man nehme Kodierung von Daten Möglich, z.b. Natürliche Zahlen via Church-Zahlen 0: λs. λz. z 1: λs. λz. s z 4: λs. λz. s (s (s (s z))) Kodierung boolscher Werte True: λt. λf. t False: λt. λf. f Ein Schema für Fallunterscheidung Boolsche Werte sind Fallunterscheidungs-Funktionen! if A then B else C : A B C Rekursion Max Wagner - Einführung in das λ-kalkül IPD
20 How to Turingmächtigkeit Man nehme Kodierung von Daten Möglich, z.b. Natürliche Zahlen via Church-Zahlen 0: λs. λz. z 1: λs. λz. s z 4: λs. λz. s (s (s (s z))) Kodierung boolscher Werte True: λt. λf. t False: λt. λf. f Ein Schema für Fallunterscheidung Boolsche Werte sind Fallunterscheidungs-Funktionen! if A then B else C : A B C Rekursion??? Max Wagner - Einführung in das λ-kalkül IPD
21 Rekursion Problem: brauche Namensbindung für selbstreferenziellen Aufruf. f = λn. f n Max Wagner - Einführung in das λ-kalkül IPD
22 Rekursion Problem: brauche Namensbindung für selbstreferenziellen Aufruf. λf. λn. f n Max Wagner - Einführung in das λ-kalkül IPD
23 Rekursion Problem: brauche Namensbindung für selbstreferenziellen Aufruf. λf. λn. f n (λf. λn. f n) (λf. λn. f n) β = λn. (λf. λn. f n) n Max Wagner - Einführung in das λ-kalkül IPD
24 Rekursion Problem: brauche Namensbindung für selbstreferenziellen Aufruf. λf. λn. f n (λf. λn. f n) (λf. λn. f n) = β λn. (λf. λn. f n) n (λf. λn. f n) ((λf. λn. f n) (λf. λn. f n)) = β λn. (λn. (λf. λn. f n) n) n Max Wagner - Einführung in das λ-kalkül IPD
25 Rekursion Problem: brauche Namensbindung für selbstreferenziellen Aufruf. λf. λn. f n (λf. λn. f n) (λf. λn. f n) β = λn. (λf. λn. f n) n (λf. λn. f n) ((λf. λn. f n) (λf. λn. f n)) β = λn. (λn. (λf. λn. f n) n) n Trick: Finde besonderen λ-ausdruck, der solche rekursiven Terme richtig bedient Max Wagner - Einführung in das λ-kalkül IPD
26 Rekursion Problem: brauche Namensbindung für selbstreferenziellen Aufruf. λf. λn. f n (λf. λn. f n) (λf. λn. f n) β = λn. (λf. λn. f n) n (λf. λn. f n) ((λf. λn. f n) (λf. λn. f n)) β = λn. (λn. (λf. λn. f n) n) n Trick: Finde besonderen λ-ausdruck, der solche rekursiven Terme richtig bedient. Y = λf. (λx. f (x x)) (λx. f (x x)) β Formal: Y ist Fixpunktkombinator, denn f : Y f = f (Y f) Schema: für rekursive Funktion f mit Rumpf T benutze Y (λf. T) als Funktionsdefinition Max Wagner - Einführung in das λ-kalkül IPD
27 Beispiel: Teilbarkeit von Zahlen überprüfen Gegeben: natürliche Zahlen, minus, iszero boolsche Werte ctrue, cfalse def less(a, b): if a - b == 0: return not b - a == 0 return False Max Wagner - Einführung in das λ-kalkül IPD
28 Beispiel: Teilbarkeit von Zahlen überprüfen Gegeben: natürliche Zahlen, minus, iszero boolsche Werte ctrue, cfalse def less(a, b): if iszero(minus(a, b)): return not iszero(minus(b, a)) return cfalse Max Wagner - Einführung in das λ-kalkül IPD
29 Beispiel: Teilbarkeit von Zahlen überprüfen Gegeben: natürliche Zahlen, minus, iszero boolsche Werte ctrue, cfalse less = λa. λb. (iszero(minus(a, b))) (not iszero(minus(b, a))) (cfalse) Max Wagner - Einführung in das λ-kalkül IPD
30 Beispiel: Teilbarkeit von Zahlen überprüfen Gegeben: natürliche Zahlen, minus, iszero boolsche Werte ctrue, cfalse less = λa. λb. (iszero (minus a b)) (iszero (minus b a) cfalse ctrue) cfalse Max Wagner - Einführung in das λ-kalkül IPD
31 Beispiel: Teilbarkeit von Zahlen überprüfen Gegeben: natürliche Zahlen, minus, iszero boolsche Werte ctrue, cfalse def divides(a, b): if b == 0: return True if b < a: return False return divides(a, b - a) Max Wagner - Einführung in das λ-kalkül IPD
32 Beispiel: Teilbarkeit von Zahlen überprüfen Gegeben: natürliche Zahlen, minus, iszero boolsche Werte ctrue, cfalse def divides(a, b): if iszero(b): return ctrue if less(b, a): return cfalse return divides(a, minus(b, a)) Max Wagner - Einführung in das λ-kalkül IPD
33 Beispiel: Teilbarkeit von Zahlen überprüfen Gegeben: natürliche Zahlen, minus, iszero boolsche Werte ctrue, cfalse def divides(a, b): iszero b ctrue ( (less b a) cfalse divides(a, minus(b, a)) ) Max Wagner - Einführung in das λ-kalkül IPD
34 Beispiel: Teilbarkeit von Zahlen überprüfen Gegeben: natürliche Zahlen, minus, iszero boolsche Werte ctrue, cfalse divides = λa. λb. iszero b ctrue ((less b a) cfalse (divides a (minus b a)) Max Wagner - Einführung in das λ-kalkül IPD
35 Beispiel: Teilbarkeit von Zahlen überprüfen Gegeben: natürliche Zahlen, minus, iszero boolsche Werte ctrue, cfalse divides = Y (λdivides. λa. λb. iszero b ctrue ((less b a) cfalse (divides a (minus b a))) Max Wagner - Einführung in das λ-kalkül IPD
36 10 Minuten Rechnen später Max Wagner - Einführung in das λ-kalkül IPD
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
MehrFunktionale Programmierung ALP I. λ Kalkül. Teil 2 WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I λ Kalkül Teil 2 WS 2012/2013 Lokale Variablennamen Haskell: let x = exp1 in exp2 Lambda: λ exp1. exp2 Einfache Regel: Der Geltungsbereich eines Lambda-Ausdrucks erstreckt sich soweit wie möglich
MehrDer 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
MehrDer 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
MehrDer 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
MehrFunktionen 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
MehrFunktionale 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.......................
MehrEinfü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,
MehrLambda-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
MehrKapitel 5: λ-kalkül und Laziness
Funktionale Programmierung (WS2005/2006) 5/1 Kapitel 5: λ-kalkül und Laziness Lernziele dieses Kapitels 1. Syntax des einfachen, ungetypten λ-kalküls Symbolische Manipulation von λ-ausdrücken in Haskell,
MehrInferenzmethoden. 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
MehrTheoretische Informatik II
Vorlesung Theoretische Informatik II Bernhard Beckert Institut für Informatik Wintersemester 2007/2008 B. Beckert Theoretischen Informatik II: WS 2007/08 1 / 179 Dank Diese Vorlesungsmaterialien basieren
MehrFunktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I λ Kalkül WS 2012/2013 Berechenbarkeit - inspiriert durch Hilbert's Frage - im Jahr 1900, Paris - Internationaler Mathematikerkongress Gibt es ein System von Axiomen, aus denen alle Gesetze der Mathematik
Mehr1. 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
MehrDer λ-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
MehrMusterableitung Relativsätze als Hilfestellung zur Lösung von Aufgaben in den Übungen und der Klausur
eminar: Formale emantik Modul 04-006-1006: Grammatikorie eminarleiter: Anke Assmann Institut für Linguistik Universität Leipzig Musterableitung Relativsätze als Hilfestellung zur Lösung von Aufgaben in
MehrFormale 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
MehrKapitel 5: Applikative Programmierung
Kapitel 5: Applikative Programmierung In der applikativen Programmierung wird ein Programm als eine mathematische Funktion von Eingabe-in Ausgabewerte betrachtet. Das Ausführen eines Programms besteht
MehrDer untypisierte Lambda-Kalkül als Programmiersprache
Proseminar: Programmiersprachen bei Prof. Tobias Nipkow Der untypisierte Lambda-Kalkül als Programmiersprache von Benjamin Peherstorfer betreut von Prof. Tobias Nipkow 23. November 2006 Inhaltsverzeichnis
MehrUniversität Hannover Fakultät für Elektrotechnik und Informatik Institut für Theoretische Informatik. Thema: von. Paul Krüger
1 Universität Hannover Fakultät für Elektrotechnik und Informatik Institut für Theoretische Informatik Thema: - Kalkül von Paul Krüger Betreuer: Prof. Dr. Heribert Vollmer Das Rahmenthema ist " Berechenbarkeit
MehrEntwicklung eines korrekten Übersetzers
Entwicklung eines korrekten Übersetzers für eine funktionale Programmiersprache im Theorembeweiser Coq Thomas Strathmann 14.01.2011 Gliederung 1 Einleitung
MehrFunktionale Programmierung
Monaden LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 30. April 2009 Monaden Eine Monade ist ein Programmier-Schema für sequentielle Berechnungen. In Haskell
MehrPraktische Informatik 3: Funktionale Programmierung Vorlesung 2 vom : Funktionen und Datentypen
Rev. 1843 1 [35] Praktische Informatik 3: Funktionale Programmierung Vorlesung 2 vom 23.10.2012: Funktionen und Datentypen Christoph Lüth Universität Bremen Wintersemester 2012/13 2 [35] Fahrplan Teil
MehrTheorembeweiserpraktikum SS 2016
Institut für Programmstrukturen und Datenorganisation Lehrstuhl Programmierparadigmen Am Fasanengarten 5 76131 Karlsruhe http://pp.ipd.kit.edu/ Theorembeweiserpraktikum SS 2016 http://pp.ipd.kit.edu/lehre/ss2016/tba
MehrOperationale Semantik 1
Operationae Semantik 1 Side 1 Zie: Geschossene Terme t ι ι sind Programme, die auf Eingabe n die Ausgabe [t] n erzeugen. Ein-/Ausgabekonvention: Eingaben und Ausgaben sind Numerae! Def. Ein Numera ist
MehrLR: 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
MehrEinfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at
Inhalt SWP Funktionale Programme (2. Teil) Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at Interpreter für funktionale Sprache
MehrAndreas Abel Ludwig-Maximilians-Universität München. Rohfassung vom 2. Juli 2010
Lambda-Kalkül Andreas Abel Ludwig-Maximilians-Universität München Skript zur Vorlesung Lambda-Kalkül. Weiteres Material ist bereitgestellt unter http://www.tcs.ifi.lmu.de/lehre/ws06-07/lambda/ und http://www.tcs.ifi.lmu.de/lehre/ws08-09/lambda/
MehrSemantik 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 ::=
MehrFormale Semantik. λ Typenlogik. Tutorium WiSe 2013/ November Sitzung: Folien freundlicherweise bereitgestellt von Andreas Bischoff
Formale Semantik Tutorium WiSe 2013/14 20. November 2013 3. Sitzung: λ Typenlogik Folien freundlicherweise bereitgestellt von Andreas Bischoff Grenzen der Typenlogik Das letzte Mal: lesen(duden*) ( Eigenschaft
MehrWas 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
Mehr2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.
2.5 Listen Listen werden mithilfe von [] und :: konstruiert. Kurzschreibweise: [42; 0; 16] # let mt = [];; val mt : a list = [] # let l1 = 1::mt;; val l1 : int list = [1] # let l = [1;2;3];; val l : int
MehrProgrammierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 8 (Kapitel 9)
Fachrichtung 6. Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung Programmierung (Wintersemester 5/6) Lösungsblatt: Aufgaben für die Übungsgruppen: 8 (Kapitel 9) Hinweis: Dieses
MehrSemantik 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
MehrInhalt Kapitel 2: Rekursion
Inhalt Kapitel 2: Rekursion 1 Beispiele und Definition 2 Partialität und Terminierung 3 Formen der Rekursion Endständige Rekursion 4 Einbettung 29 Beispiele und Definition Rekursion 30 Man kann eine Funktion
MehrGrundkurs Semantik. Sitzung 6: Prädikation, Modifikation, Referenz. Andrew Murphy
Grundkurs Semantik Sitzung 6: Prädikation, Modifikation, Referenz Andrew Murphy andrew.murphy@uni-leizpig.de Grundkurs Semantik HU Berlin, Sommersemester 2015 http://www.uni-leipzig.de/ murphy/semantik15
MehrGliederung. Programmierparadigmen. Mathematische Funktionen: Mathematische Funktionen: Lambda-Kalkül
Gliederung Programmierparadigmen D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2013, 9. Juli 2013, c 2009 13 D.Rösner 1 Einführung
MehrVorlesung Programmieren
Vorlesung Programmieren 11 Rekursion Jun.-Prof. Dr.-Ing. Anne Koziolek Version 1.1 ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION
MehrLambda-Notation. Semantik und Pragmatik. Lambda-Notation. Lambda-Notation. Lambda-Notation. Lambda-Notation
emantik und Pragmatik 22. Mai 2006 Gerard Jäger mit Angabe des Definitionsbereics Funktionen aben Definitionsbereic: { x, x 2 x N} { x, x 2 x R} Notation λx.x 2 desalb unvollständig vollständige Notation:
MehrElementare Konzepte von
Elementare Konzepte von Programmiersprachen Teil 2: Anweisungen (Statements) Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Anweisungen (statements) in Java Berechnung (expression statement)
MehrDie Komplement-Funktion
Die Komplement-Funktion type IntMap α = [(Int, α)] compl :: [α] (Int, IntMap α) compl s = let n = (length s) 1 t = [0..n] g = zip t s g = filter (λ(i, _) notelem i (get t)) g in (n + 1, g ) Zum Beispiel:
MehrProgrammiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 7. Funktionen Einleitung Nach dem Prinzip Divide and Conquer bietet es sich an, größere Aufgaben in kleinere Teile zu unterteilen. Anweisungsblöcke,
MehrOptimierungen in einer formalen Semantik Konstantenfaltung und Konstantenpropagation
Optimierungen in einer formalen Semantik Konstantenfaltung und Konstantenpropagation http://pp.info.uni-karlsruhe.de/lehre/ss2011/tba/ LEHRSTUHL PROGRAMMIERPARADIGMEN 0 KIT SS Universität 2011 desdenis
Mehr1 Funktionale vs. Imperative Programmierung
1 Funktionale vs. Imperative Programmierung 1.1 Einführung Programme einer funktionalen Programmiersprache (functional programming language, FPL) bestehen ausschließlich aus Funktionsdefinitionen und Funktionsaufrufen.
MehrC++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22
C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven
MehrTeil 7: Rekursion; Imperative Programme
1 Teil 7: Rekursion; Imperative Programme Terminierend rekursive Funktionen Im Tutorial: Kap. 3.5 / 9.2 Definition mit recdef, Nachweis der Terminierung Beweise über rekursive Funktionen Imperative Programme
MehrLambda-Kalkül. Dr. Eva Richter. 27.April 2012
Lambda-Kalkül Dr. Eva Richter 27.April 2012 1 / 32 Historisches um 1200 Einführung des Zahlensystems in Europa u.a. durch Fibonacci; ist charakterisiert durch ein kleine Menge von Ziffern, deren Wert von
MehrDie projektive Ebene Was sind unendlich ferne Punkte?
Die projektive Ebene Was sind unendlich ferne Punkte? Prof. Dr. Hans-Georg Rück Fachbereich Mathematik/Informatik Universität Kassel Heinrich-Plett-Str. 40 34132 Kassel Zusammenfassung: Wir konstruieren
MehrVorsicht bei redundanten und unvollständigen Matches!
Vorsicht bei redundanten und unvollständigen Matches! # let n = 7;; val n : int = 7 # match n with 0 -> "null";; Warning: this pattern-matching is not exhaustive. Here is an example of a value that is
MehrTheorembeweiser und ihre Anwendungen
Theorembeweiser und ihre Anwendungen Prof. Dr.-Ing. Gregor Snelting Dipl.-Inf. Univ. Daniel Wasserrab Lehrstuhl Programmierparadigmen IPD Snelting Universität Karlsruhe (TH) IPD Snelting, Uni Karlsruhe
MehrProgrammierparadigmen
Programmierparadigmen Teil 1: Funktionale Programmierung Kapitel 3 Lambda Kalkül (Dieses Kapitel orientiert sich an Material von Prof. Dr.-Ing. Snelting, KIT) http://www.tu-ilmenau.de/fakia/functional.html
MehrGrundlagen der Programmierung (Vorlesung 15)
Grundlagen der Programmierung (Vorlesung 15) Ralf Möller, FH-Wedel Vorige Vorlesung Blöcke, Funktionen Auswertestrategien Inhalt dieser Vorlesung Prozeduren Rekursion Lernziele Grundlagen der systematischen
MehrPass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl
Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt
MehrMathematische Rekursion
Rekursion Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die Funktion erscheint in ihrer eigenen Definition. Mathematische Rekursion o Viele mathematische
MehrGTI. 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.
MehrFormale Systeme. Prof. Dr. Bernhard Beckert, WS 2016/ KIT Die Forschungsuniversita t in der Helmholtz-Gemeinschaft
Formale Systeme Prof. Dr. Bernhard Beckert, WS 2016/2017 Aussagenlogik: Tableaukalku l KIT I NSTITUT F U R T HEORETISCHE I NFORMATIK www.kit.edu KIT Die Forschungsuniversita t in der Helmholtz-Gemeinschaft
MehrProgrammieren I. Methoden-Spezial Heusch --- Ratz 6.1, Institut für Angewandte Informatik
Programmieren I Methoden-Spezial Heusch --- Ratz 6.1, 6.2 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Parameterübergabe bei primitivem Datentypen (Wertkopie) public class MethodParameters
MehrMethoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom
Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon
MehrFunktionsobjekte 306 operator
Funktionsobjekte 306 Funktionsobjekte sind Objekte, bei denen der operator() definiert ist. (Siehe ISO 14882-2012, Abschnitt 20.8.) Viele Algorithmen der STL akzeptieren solche Funktionsobjekte, um aus
MehrFunktionale Programmierung Mehr funktionale Muster
Mehr funktionale Muster Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 07.12.2017 06:56 Inhaltsverzeichnis Pattern Matching..................................
MehrFunktionale Programmierung
Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 2 Teil II Typen mit Werten und Ausdruck, sogar listenweise 3 Haskell Programme Programm Module ein
MehrInformatik I: Einführung in die Programmierung
Informatik I: Einführung in die Programmierung 7. Albert-Ludwigs-Universität Freiburg Bernhard Nebel 31. Oktober 2014 1 31. Oktober 2014 B. Nebel Info I 3 / 20 Um zu, muss man zuerst einmal. Abb. in Public
MehrGrundlagen der Programmierung in C Funktionen
Der erste Mechanismus für Code-Reuse! Grundlagen der Programmierung in C Funktionen Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Ältester Mechanismus für Code-Reuse:
MehrVerwende Einführungsregeln, um die Konklusion in kleinere Teile aufzubrechen, und Eliminationsregeln, um Annahmen aufzubrechen (Dekomposition).
2.3. DER λ-kalkül 45 Wende die Hypothesenregel hypothesis und die Widerspruchsregel false e an, wann immer dies möglich ist, da sie Teilbeweise (Zweige im Beweisbaum) abschließen. Verwende Einführungsregeln,
MehrLinguistische Grundlagen 6. Semantik
Linguistische Grundlagen 6. Semantik Gereon Müller Institut für Linguistik Universität Leipzig www.uni-leipzig.de/ muellerg Gereon Müller (Institut für Linguistik) 04-006-1001: Linguistische Grundlagen
MehrInformatik für Schüler, Foliensatz 18 Rekursion
Prof. G. Kemnitz Institut für Informatik, Technische Universität Clausthal 26. März 2009 1/10 Informatik für Schüler, Foliensatz 18 Rekursion Prof. G. Kemnitz Institut für Informatik, Technische Universität
MehrKlassenvariablen, Klassenmethoden
Einstieg in die Informatik mit Java, Vorlesung vom 11.12.07 Übersicht 1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion Klassenmethoden
MehrHaskell und Python. pures Programmieren, Auswerten von Ausdrücken rekursives Programmieren, Typsystem. Python: Eine prozedurale Programmiersprache
Haskell und Python Haskell: Eine funktionale Programmiersprache funktional, nicht-strikt, hat ein polymorphes und starkes Typsystem, flexible Datenstrukturen, gute Abstraktionseigenschaften, Ziele: pures
MehrDieÜbersetzung funktionaler Programmiersprachen
DieÜbersetzung funktionaler Programmiersprachen 107 11 Die Sprache PuF Wir betrachten hier nur die Mini-Sprache PuF( Pure Functions ). Insbesondere verzichten wir(vorerst) auf: Seiteneffekte; Datenstrukturen;
MehrAutomaten, Spiele, und Logik
Automaten, Spiele, und Logik Woche 13 7. Juli 2014 Inhalt der heutigen Vorlesung Terminationsanalyse Rekursive Funktionnen fact(n)= if n==0 then 1 else n*fact(n-1) fibo(n)= if n
MehrEinführung in die Informatik 1
Einführung in die Informatik 1 Algorithmen und algorithmische Sprachkonzepte Sven Kosub AG Algorithmik/Theorie komplexer Systeme Universität Konstanz E 202 Sven.Kosub@uni-konstanz.de Sprechstunde: Freitag,
MehrMathematik für Informatiker I
Mathematik für Informatiker I Mitschrift zur Vorlesung vom 19.10.2004 In diesem Kurs geht es um Mathematik und um Informatik. Es gibt sehr verschiedene Definitionen, aber für mich ist Mathematik die Wissenschaft
MehrGrundlegende Begriffe: Funktionen
2 Grundlegende Begriffe: Funktionen Hohe Gedanken brauchen eine hohe Sprache Aristophanes In diesem Kapitel werden wichtige Eigenschaften von Funktionen besprochen. Dazu werden zunächst die grundlegenden
MehrII.3.1 Rekursive Algorithmen - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.3.1 Rekursive Algorithmen -
MehrC++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16
C++ Teil 4 Sven Groß IGPM, RWTH Aachen 30. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 4 30. Apr 2015 1 / 16 Themen der letzten Vorlesung Funktionen: Definition und Aufruf Wert- und Referenzparameter,
MehrProgrammieren als Grundkompetenz
Programmieren als Grundkompetenz Irrtümer, Chancen und Methodik der Programmierausbildung Michael Sperber sperber@informatik.uni-tuebingen.de Vorgeschichte... AP Computer Science (1987/1998) Informatik
Mehr12 Abstrakte Klassen, finale Klassen und Interfaces
12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
MehrLösungen zum Übungsblatt 3: Softwareentwicklung I (WS 2006/07)
Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J.O. Blech Dipl.-Inform. M.J. Gawkowski Dipl.-Inform. N. Rauch Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungen zum Übungsblatt
MehrBeispiel 1: Addition von Ordinalzahlen in SML
Slide 1 Eine semantische Analyse struktureller Rekursion Andreas Abel 26. Februar 1999 Beispiel 1: Addition von Ordinalzahlen in SML datatype Nat =... Slide 2 datatype Ord = O S of Ord Lim of Nat > Ord;
MehrInformatik Abitur Bayern 2017 / II - Lösung
Informatik Abitur Bayern 2017 / II - Lösung Autoren: Wolf (1) Wagner (2) Scharnagl (3-5) 1a 5 1b Diese Methode vergleicht den Namen des Interpreten eines jeden Elements der Liste mit dem gegebenen Namen.
MehrTücken der dynamischen Bindung
Kapitel 3 Tücken der dynamischen Bindung 3.1 this-pointer Im Methodenaufruf o.m(x) ist o Bezugsobjekt wird als zusätzlicher Parameter übergeben: m(o,x) kann im Rumpf von m als this (bzw self) angesprochen
MehrINFORMATIK FÜR BIOLOGEN
Technische Universität Dresden 15012015 Institut für Theoretische Informatik Professur für Automatentheorie INFORMATIK FÜR BIOLOGEN Musterklausur WS 2014/15 Studiengang Biologie und Molekulare Biotechnologie
MehrFormale Systeme. Das Erfu llbarkeitsproblem. Prof. Dr. Bernhard Beckert, WS 2017/2018
Formale Systeme Prof. Dr. Bernhard Beckert, WS 2017/2018 Das Erfu llbarkeitsproblem KIT I NSTITUT F U R T HEORETISCHE I NFORMATIK www.kit.edu KIT Die Forschungsuniversita t in der Helmholtz-Gemeinschaft
MehrC.3 Funktionen und Prozeduren
C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens
MehrEinführung - Parser. Was ist ein Parser?
Gliederung 1. Einleitung 1.1 Was ist ein Parser? 1.2 Was ist ein tabellengesteuerter TD-Parser? 1. Tabellengesteuerter TD-Parser 2.1 Funktionsweise 2.2 Darstellung als Pseudocode 2.3 Konstruktion von prädiktiven
Mehr- Theorie der uninterpretierten
Theorie der uninterpretierten Funktionen Entscheidungsverfahren mit Anwendungen in der Softwareverifikation STEPHAN FALKE INSTITUT FÜR THEORETISCHE INFORMATIK (ITI) 0 KIT 13. Universität Mai 2013 des S.
MehrWS 2013/2014. Robert Giegerich. 11. Dezember 2013
WS 2013/2014 Robert AG Praktische Informatik 11. Dezember 2013 höherer Ordnung Worum geht es heute? In Haskell gibt es, die als Argument haben oder als Ergebnis liefern. Diese nennt man höherer Ordnung.
MehrVorlesung Programmieren
Vorlesung Programmieren 3. Kontrollstrukturen 04.11.2015 Prof. Dr. Ralf H. Reussner Version 1.1 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD),
MehrProgrammieren lernen mit Groovy Rekursion Rekursion und Iteration
Programmieren lernen mit Groovy Rekursion Seite 1 Rekursion Rekursion Ursprung lat. recurrere ~ zurücklaufen rekursive Definition Definition mit Bezug auf sich selbst Beispiel Fakultätsfunktion n! 0! =
MehrWerkzeuge zur Programmentwicklung
Werkzeuge zur Programmentwicklung B-15 Bibliothek Modulschnittstellen vorübersetzte Module Eingabe Editor Übersetzer (Compiler) Binder (Linker) Rechner mit Systemsoftware Quellmodul (Source) Zielmodul
Mehr4.4 Imperative Algorithmen Prozeduren
4.4.2 Prozeduren Der Wert eines Ausdrucks u in Zustand z Z lässt sich damit auch leicht definieren (jetzt W Z statt W σ ) Dazu erweitern wir die rekursive Definition von Folie 57 (Wert eines Ausdrucks):
MehrSubstitution. 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
MehrFACHHOCHSCHULE MANNHEIM
für Java-Programmierer Der Präprozessor Prof. Dr. Wolfgang Schramm FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Präprozessor Ist dem Compiler vorgeschaltet ( Prä -). Spezielle Anweisungen
MehrVorlesung Programmieren
Vorlesung Programmieren 3. Kontrollstrukturen 09.11.2016 Jun.-Prof. Dr.-Ing. Anne Koziolek Version 1.1 ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE) INSTITUT FÜR PROGRAMMSTRUKTUREN UND
MehrAufgabe 1 (12 Punkte)
Aufgabe 1 (12 Punkte) Schreiben Sie eine Klasse public class ZinsesZins, die zu einem gegebenen Anfangskapital von 100,00 die Kapitalentwicklung bei einer jährlichen nachschüssigen Verzinsung in Höhe von
MehrKapitel 3. Konvergenz von Folgen und Reihen
Kapitel 3. Konvergenz von Folgen und Reihen 3.1. Normierte Vektorräume Definition: Sei V ein Vektorraum (oder linearer Raum) über (dem Körper) R. Eine Abbildung : V [0, ) heißt Norm auf V, falls die folgenden
MehrProgrammiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 5. Kontrollstrukturen Allgemein Kontrollstrukturen dienen zur Steuerung des Programmablaufs. (Bemerkung: C und C++ besitzen die selben Kontrollstrukturen.)
MehrRekursive Funktionen
Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?
MehrNichtklassische Logiken
Nichtklassische Logiken Peter H. Schmitt pschmitt@ira.uka.de UNIVERSITÄT KARLSRUHE Sommersemester 2004 P. H. Schmitt: Nichtklassische Logiken p.1 Inhalt Wiederholung P. H. Schmitt: Nichtklassische Logiken
MehrFormale Systeme. Prädikatenlogik 2. Stufe. Prof. Dr. Bernhard Beckert WS 2009/2010 KIT INSTITUT FÜR THEORETISCHE INFORMATIK
Formale Systeme Prof. Dr. Bernhard Beckert WS 2009/2010 KIT INSTITUT FÜR THEORETISCHE INFORMATIK KIT University of the State of Baden-Württemberg and National Large-scale Research Center of the Helmholtz
Mehr