Grundlagen der Programmierung 2. Operationale Semantik
|
|
- Viktoria Kraus
- vor 6 Jahren
- Abrufe
Transkript
1 Grundlagen der Programmierung 2 Operationale Semantik Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 29. April 2009
2 Semantik von Programmiersprachen Semantik = Bedeutung eines Programms (Programmtextes) ausgehend vom Syntaxbaum des Programms. Methoden der Semantik-Definition: Operationale Semantik Denotationale Semantik Transformations-Semantik axiomatische Semantik Grundlagen der Programmierung 2-2 -
3 Operationale Semantik Spezifikation von Wirkung und Ablauf: Zustand: Speicherbelegung als Datenstruktur oder... Pro Programmkonstrukt: Angabe des Zustandsübergangs Haskell: Zustand = Ausdruck Übergänge: = Reduktionen, d.h. Änderungen der Ausdrücke. Python: Zustand = Umgebung Übergänge: = Veränderungen des Speicherinhalts. operationale Semantik = Spezifikation eines Interpreters Vorteil: Prinzipiell immer durchführbar Grundlagen der Programmierung 2-3 -
4 Denotationale Semantik Zuordnung: Domain D: Programm Funktion Menge der möglichen Funktionen und Objekte Pro Programmkonstrukt: rekursive Angabe der Konstruktion einer Funktion in D. Hürden: Mathematisches Vorwissen notwendig Domainkonstruktion kann schwierig sein Meist nur für kleines Fragment einer Programmiersprache Grundlagen der Programmierung 2-4 -
5 Transformations-Semantik Vorgehen zur Definition der Semantik eines Programms P, wenn die Semantik für Kernsprachen-Programme bereits definiert ist Transformiere P... P (in Kernsprache) Nehme die Semantik von P. Semantik von Haskell nutzt dieses Prinzip (zb Pattern, List Comprehensions) Vorteile: Vereinfacht Semantik-Definition Analog zur Arbeitsweise von Compilern Grundlagen der Programmierung 2-5 -
6 Axiomatische Semantik Beschreibung der Programmkonstrukte und Eigenschaften von Programmen mittels logischer Axiome Herleiten von Programmeigenschaften durch logisches Schließen Z.B. in Prädikatenlogik: Für alle Eingaben n von natürlichen Zahlen liefert quadrat n das Ergebnis n 2. Als Formel: n : quadrat(n) = n 2 Grundlagen der Programmierung 2-6 -
7 Axiomatische Semantik Hoare-Logik: {x > 2} x := x+1 {x > 3} Vorbedingung Nachbedingung Programmbefehl Grundlagen der Programmierung 2-7 -
8 Auswertung von einfachen Haskell- Programmen: Ziel: operationale Semantik von Haskell formal saubere Definition der Auswertung auch für Funktionen höherer Ordnung Unabhängigkeit von Compilern Unabhängigkeit vom Rechnertyp (Portabilität) Grundlagen der Programmierung 2-8 -
9 Einfache Haskell-Programme Definition: Basiswert ist entweder eine Zahl, ein Zeichen oder True,False. Einfache Haskell-Programme: dürfen benutzen: Basiswerte und entsprechende vordefinierte Operatoren Funktionsdefinitionen if-then-else Anwendung von Funktionen auf Argumente Grundlagen der Programmierung 2-9 -
10 Einfache Haskell-Programme (2) Definition: Ein (einfaches) Haskell-Programm besteht aus: Menge von Funktionsdefinitionen; entsprechend obiger Beschränkungen Ausdruck (main) vom Typ eines Basiswertes. Wert des Programms = Wert von main Beispiel quadrat x = x * x kubik x = x * x * x w = 2 main = if w >= 0 then quadrat w else kubik w Grundlagen der Programmierung
11 Berechnung und Auswertung Prinzip der Berechnung für einfache Haskell-Programme Auswertung = Folge von Transformationen von main bis ein Basiswert erreicht ist main t 1 t 2... t n... Es gibt drei Fälle: 1. Die Folge endet mit einem Basiswert 2. Die Folge endet, aber nicht mit einem Basiswert (kommt nicht vor wegen des Typsystems) 3. Die Folge endet nicht Bei 2. und 3.: Wert undefiniert. Grundlagen der Programmierung
12 Auswertung Einfache Haskell-Programm haben drei verschiedene Arten von Auswertungsschritten 1. Definitionseinsetzung (δ-reduktion) 2. Arithmetische Auswertung 3. Auswertung von Fallunterscheidungen Grundlagen der Programmierung
13 Satz von Church und Rosser Satz (Church-Rosser 1) Sei P ein einfaches Haskell-Programm, R 1, R 2 zwei verschiedene Reduktionsfolgen für main mit jeweiligen Resultat-Basiswerten e 1 bzw. e 2 dann sind diese Basiswerte gleich, d.h. e 1 = e 2 Grundlagen der Programmierung
14 Werte von Programmen Definition: Sei P ein einfaches Haskell-Programm und main von numerischem oder Booleschem Typ. Der Wert des Programms P ist: e ( undefiniert ) wenn es eine terminierende Reduktionsfolge, ausgehend von main gibt, die mit dem Basiswert e endet, wenn es keine mit einem Basiswert terminierende Reduktionsfolge ausgehend von main gibt. Aus dem Satz von Church-Rosser-1 folgt: Ein einfaches Haskell-Programm hat einen eindeutig definierten Wert unabhängig von der Art der Auswertung Grundlagen der Programmierung
15 Satz 2 von Church und Rosser SATZ (Church-Rosser-2) Sei P ein einfaches Haskell-Programm. Wenn es irgendeine Reduktionsfolge für main gibt, die mit einem Basiswert e terminiert, dann terminiert auch die normale Reihenfolge der Auswertung von main und liefert als Basiswert (Resultat) genau e. Die normale Reihenfolge ist ausreichend zur Auswertung Haskell benutzt normale Reihenfolge der Auswertung Grundlagen der Programmierung
16 Gegenbeispiel zu C.R. 2 bei applikativ Church-Rosser-2 gilt nicht für die applikative Reihenfolge: nt x = nt x proj x y = x main = proj 0 (nt 1) applikative Reihenfolge für main terminiert nicht: (nt 1) (nt 1) (nt 1) Deshalb: proj 0 (nt 1) proj 0 (nt 1) Die normale Reihenfolge liefert sofort 0. Grundlagen der Programmierung
17 Programmtransformationen Optimierung: Programm P wird zur Compilezeit mittels Transformationen in ein anderes Programm P umgewandelt, welches weniger Ressourcen benötigt, aber den gleichen Effekt hat. gleicher Effekt ( ) : ist mithilfe der operationalen Semantik definierbar Äquivalenzrelation auf Programmen und Funktionen vom gleichen Typ Verschiedene Zahlen und Boolesche Werte sind verschieden unter. Grundlagen der Programmierung
18 Programmtransformationen Aussage: Für einfache Haskellprogramme gilt: Alle bisher betrachteten Reduktionen, auch deren Umkehrung, sind auch als Compilezeit-Transformationen verwendbar. D.h. Wenn P P mit einer Reduktion, dann gilt auch P P. Begründung: 1. Satz von Church-Rosser: Wenn P zu e auswertet und P P ist eine Transformation, dann wertet auch P zu e aus. Grundlagen der Programmierung
19 Programmtransformationen [] ++ ys = ys (x:xs) ++ ys = x : (xs ++ ys) Beispiel: [a] ++ as a:([] ++ as) Reduktion für append, da [a] = a:[] a:as Transformation mittels append = [x]++xs kann zu x:xs vereinfacht werden Grundlagen der Programmierung
20 Programmtransformationen Bei Beschränkung auf applikativer Reihenfolge der Auswertung sowie in Programmiersprachen, die die appl. Reihenfolge verwenden, sind diese Transformationen nicht korrekt, Beispiel: Ein terminierendes Programm kann zu einem nichtterminierenden werden: meinif b x y = if b then x else y main = meinf True True bot Nach der Transformation: main = if True then True else bot D.h. auch: ein nichtterminierendes Programm kann zu einem terminierenden werden. Grundlagen der Programmierung
21 Church-Rosser-Sätze auch für Konstruktoren Verallgemeinerter Wert statt Basiswert; auch Listen sind Werte: Ein (verallgemeinerter) Wert ist entweder 1. ein Basiswert d.h. eine Zahl oder einer der Wahrheitswerte True, False, oder 2. eine Applikation (c t 1... t n ), wobei c ein Konstruktor ist mit der Stelligkeit n Beispiele: [1,2,3,4] 1: (map quadrat [2,3,4]) Beachte: verallgemeinerte Werte können unausgewertete Unterausdrücke haben Grundlagen der Programmierung
22 Church-Rosser-Sätze für Haskell-Programme mit Listen Satz(Church-Rosser-1) Sei P ein Haskell-Programm, wobei Konstruktoren und case erlaubt sind, und main den Typ eines verallgemeinerten Basiswertes hat. Wenn zwei verschiedene Reduktionsfolgen jeweils verallgemeinerte Werte e 1 bzw. e 2 ergeben, dann gibt es einen weiteren verallgemeinerten Wert e 3, so dass sowohl e 1 als auch e 2 zu e 3 (in keinem, einem oder mehreren Schritten) reduziert werden können: P e 1 e 2 e 3 Grundlagen der Programmierung
23 Church-Rosser-Sätze; Beispiele Beispiel: Der Ausdruck [3+4,5+6] ist schon ein Wert, auf zwei Arten reduzierbar: [3 + 4, 5 + 6] [7, 5 + 6] [3 + 4, 11] [7, 11] Grundlagen der Programmierung
24 Church-Rosser-Sätze; Beispiele Beachte: Normalform muss nicht existieren Beispiel (3 + 4) : ((5 + 6) : [1..] 7 : ((5 + 6) : [1..] (3 + 4) : (11 : [1..]) 7 : 11 : [1..] Grundlagen der Programmierung
25 Church-Rosser-Satz 2 Satz (Church-Rosser-2) Sei P ein let-freies Haskell-Programm. Wenn irgendeine Reduktionsfolge main zu einem verallg. Wert e reduziert, dann terminiert auch die normale Reihenfolge der Auswertung von main mit einem verallg. Wert e 1, und e 1 ist reduzierbar zu e. Ex: normale Ausw. P v. Wert e 1 e Grundlagen der Programmierung
26 Church-Rosser-Satz 2. Beispiel normale Ausw. [3+4]++[5+6] [3+4,5+6] [3+4,11] Grundlagen der Programmierung
27 Haskell mit rekursivem let Church-Rosser-Sätze gelten nicht in vollem Haskell Grund: rekursives let. Church-Rosser-Sätze sind zu syntaktisch! Grundlagen der Programmierung
28 Church-Rosser-Sätze: Verallgemeinerung Notwendig: Konzept der Verhaltensgleichheit von Ausdrücken: verschiedene Basiswerte a, b sind nicht verhaltensgleich: a b a b man kann Gleiches durch Gleiches ersetzen a b P [a] P [b] Nachzuweisen ist dann: Reduktionen (bzw. Optimierungen) erhalten die Verhaltensgleichheit: s t s t Grundlagen der Programmierung
29 Induktion und Co-Induktion zum Nachweis der Gleichheit von Ausdrücken Induktionsschema für endliche Listen xs: 1. Zeige die Behauptung für xs = []. 2. Zeige, dass die Behauptung für x : xs gilt unter der Annahme, dass sie für xs gilt. Grundlagen der Programmierung
30 Co-Induktion für Listen Co-Induktionsschema für endliche und unendliche Listen xs: 1. Zeige die Behauptung für xs = []. 2. Zeige die Behauptung für xs =. 3. Zeige, dass die Behauptung für x : xs gilt unter der Annahme, dass sie für xs gilt. Grundlagen der Programmierung
31 Induktion für endliche Listen. Beispiel Zeige: length(xs ++ ys) = length(xs) + length(ys) für alle endlichen Listen xs,ys Basisfall: length([] ++ ys ) = length(ys), und length([]) + length(ys) = length(ys) Grundlagen der Programmierung
32 Induktion. Beispiel Zeige: length(xs ++ ys) = length(xs) + length(ys) für alle endlichen Listen xs,ys Induktionsfall: xs ist eine Liste der Länge n + 1. Auswertung beider Seiten, wobei xs = x:xs. length(xs ++ ys) length((x:xs ++ ys) length((x:(xs ++ ys)) 1+ length((xs ++ ys)) = 1+ length(xs )+ length(ys)). length(xs) + length(ys) = length(x:xs ) + length(ys) 1+ length(xs ) + length(ys). Grundlagen der Programmierung
Semantik von Programmiersprachen
Semantik von Programmiersprachen Prof. Dr. Manfred Schmidt-Schauß SS 2013 Stand der Folien: 15. April 2013 Semantik von Programmen verschiedene Semantiken: operationale Semantik (Spezifikation eines Interpreters)
MehrHaskell, 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
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
MehrProgrammieren in Haskell
Programmieren in Haskell Syntax und Semantik von Haskell Programmieren in Haskell 1 Was wir heute (und nächstes mal) machen Datentypdefinitionen Wertdefinitionen, Variablenbindungen Musterbindungen Funktionsbindungen
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
MehrFormale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen
Was bisher geschah Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen Syntax: Signatur Semantik: Axiome (FOL-Formeln, meist
MehrGrundlagen der Programmierung 2 (1.C)
Grundlagen der Programmierung 2 (1.C) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 3. Mai 2006 Funktionen auf Listen: map map :: (a -> b) -> [a] -> [b] map f [] = []
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
MehrALP I Einführung in Haskell
ALP I Einführung in Haskell WS 2012/2013 Was ist Haskell? Haskell ist eine rein Funktionale Programmiersprache mit einer nach Bedarf Auswertung-Strategie oder "Lazy Evaluation". Was bedeutet rein funktional?
MehrVorsemesterkurs Informatik
Stand der Folien: 31. März 2011 Vorsemesterkurs Informatik Sommersemester 2011 Grundlagen der Programmierung in Haskell SoSe 2011 Übersicht 1 Ausdrücke und Typen 2 Funktionen 3 Rekursion 4 Listen 5 Paare
MehrGrundlagen der Programmierung 2. Sortierverfahren
Grundlagen der Programmierung 2 Sortierverfahren Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 30. Mai 2006 Sortieren Ziel: Bringe Folge von Objekten in eine Reihenfolge
MehrCompiler, Übersetzer. Allgemeine Erklärung / Definition
Compiler, Übersetzer Allgemeine Erklärung / Definition Ein Übersetzer ist ein Programm, das ein S 1 -Wort den Quelltext in ein S 2 -Wort umwandelt den Zieltext wobei die Semantik erhalten bleibt. Frage:
MehrProgrammieren 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
MehrFunktionen höherer Ordnung
Eine Funktion wird als Funktion höherer Ordnung bezeichnet, wenn Funktionen als Argumente verwendet werden, oder wenn eine Funktion als Ergebnis zurück gegeben wird. Beispiel: twotimes :: ( a -> a ) ->
MehrProgrammiersprachen: rekursives Programmieren in Haskell
Kapitel 1 Programmiersprachen: rekursives Programmieren in Haskell Das generelle Ziel dieses Teils der Vorlesung ist das Verständnis von Programmierparadigmen, insbesondere rekursive Programmierung, funktionaler
MehrDas erste C++ Programm
Das erste C++ Programm // Program: power8.c // Raise a number to the eighth power. #include int main() { // input std::cout > a; // computation int
MehrRhetorik und Argumentationstheorie.
Rhetorik und Argumentationstheorie 2 [frederik.gierlinger@univie.ac.at] Teil 2 Was ist ein Beweis? 2 Wichtige Grundlagen Tautologie nennt man eine zusammengesetzte Aussage, die wahr ist, unabhängig vom
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
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
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
MehrSudoku. Warum 6? Warum 6?
. / Sudoku Füllen Sie die leeren Felder so aus, dass in jeder Zeile, in jeder Spalte und in jedem x Kästchen alle Zahlen von bis stehen.. / Warum?. / Warum?. / Geschichte der Logik Syllogismen (I) Beginn
MehrBeispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare
Beispiele: (Funktionen auf Listen) (3) Bemerkungen: 5. Zusammenhängen der Elemente einer Liste von Listen: concat :: [[a]] -> [a] concat xl = if null xl then [] else append (head xl) ( concat (tail xl))
MehrPraktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen
Rev. 1152 1 [23] Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen Christoph Lüth & Dennis Walter Universität Bremen Wintersemester 2010/11
MehrSemantics of a Call-by-Need Lambda Calculus with McCarthy s amb for Program Equivalence
Semantics of a Call-by-Need Lambda Calculus with McCarthy s amb for Program Equivalence David Sabel Institut für Informatik Fachbereich Informatik und Mathematik Goethe-Universität Frankfurt Kolloquium
MehrVorsemesterkurs Informatik
Vorsemesterkurs Informatik Vorsemesterkurs Informatik Mario Holldack WS2015/16 30. September 2015 Vorsemesterkurs Informatik 1 Einleitung 2 Aussagenlogik 3 Mengen Vorsemesterkurs Informatik > Einleitung
MehrKontextuelle Gleichheit, Korrektheit, Programmtransformationen, Auswertungsänderung
Skript CEFP, WS 2013/14 Prof. Dr. Manfred Schmidt-Schauß Fachbereich Informatik Johann Wolfgang Goethe-Universität Postfach 11 19 32 D-60054 Frankfurt Germany E-mail:schauss@ki.informatik.uni-frankfurt.de
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
MehrFormale Sprachen. Script, Kapitel 4. Grammatiken
Formale Sprachen Grammatiken Script, Kapitel 4 erzeugen Sprachen eingeführt von Chomsky zur Beschreibung natürlicher Sprache bedeutend für die Syntaxdefinition und -analyse von Programmiersprachen Automaten
MehrWS 2011/2012. Georg Sauthoff 1. October 18, 2011
in in WS 2011/2012 Georg 1 AG Praktische Informatik October 18, 2011 1 gsauthof@techfak.uni-bielefeld.de Neue Übungsgruppen in neue Übungsgruppen neue Tutoren Sprechstunden in GZI-Arbeitsraum (V2-240)
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrAlgorithmen & Programmierung. Ausdrücke & Operatoren (1)
Algorithmen & Programmierung Ausdrücke & Operatoren (1) Ausdrücke Was ist ein Ausdruck? Literal Variable Funktionsaufruf Ausdruck, der durch Anwendung eines einstelligen (unären) Operators auf einen Ausdruck
MehrFunktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS 2013. Prof. Dr. Margarita Esponda. Prof. Dr.
ALP I Funktionen höherer Ordnung Teil 2 SS 2013 Funktionen höherer Ordnung Nehmen wir an, wir möchten alle Zahlen innerhalb einer Liste miteinander addieren addall:: (Num a) => [a -> a addall [ = 0 addall
MehrGrundlagen der Programmierung 2. Bäume
Grundlagen der Programmierung 2 Bäume Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 24. Mai 2006 Graphen Graph: Menge von Knoten undzugehörige (gerichtete oder ungerichtete)
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,
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrEinführung Grundbegriffe
Einführung Grundbegriffe 1.1 Der Modellbegriff Broy: Informatik 1, Springer 1998 (2) Die Modellbildung der Informatik zielt auf die Darstellung der unter dem Gesichtspunkt einer gegebenen Aufgabenstellung
MehrProgrammierung 1 - Repetitorium
WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage: http://info1.marcwagner.info Donnerstag, den 10.04.03 Kapitel 7 Korrektheit 7.1 Abstrakte Prozeduren Abstrakte Prozedur
MehrWas ist Logische Programmierung?
Was ist Logische Programmierung? Die Bedeutung eines Computer-Programms kann durch Logik erklärt werden. Die Idee der logischen Programmierung besteht darin, die Logik eines Programms selber als Programm
MehrFragen zum Nachdenken: Wie könnte man das Fehlen eines Attribut-Wertes interpretieren?
Attribut-Werte-Paare Eine Eigenschaft kann beschrieben werden durch ein Paar [a,w]. Dabei bezeichnet a das Attribut und w den konkreten Wert aus dem Wertebereich W a des Attributs. Die Eigenschaften eines
MehrTag 7. Pattern Matching und eigene Datentypen
Tag 7 Pattern Matching und eigene Datentypen Heute werden wir eine Technik kennenlernen, die dafür sorgt, daß wir sehr viel übersichtlichere und kürzere Programme schreiben können. Als Überleitung auf
MehrDiskrete 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
MehrProgrammierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder
Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Syntax und Semantik): 1. Was ist Syntax? Was ist Semantik? Erläutern Sie den Unterschied. 2.
MehrCS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)
CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) Einfache Programme: Programm-Argument, Bedingte Anweisungen, Switch, Enum Boolesche Werte und Ausdrücke Seite 1 Beispiel: Umrechnen
MehrZahlen in Haskell Kapitel 3
Einführung in die Funktionale Programmiersprache Haskell Zahlen in Haskell Kapitel 3 FH Wedel IT-Seminar: WS 2003/04 Dozent: Prof. Dr. Schmidt Autor: Timo Wlecke (wi3309) Vortrag am: 04.11.2003 - Kapitel
MehrInformatik I - Programmierung Globalübung Hoare-Kalkül. Thomas Weiler. Fachgruppe Informatik RWTH Aachen. T. Weiler, RWTH Aachen - 1 -
Informatik I - Programmierung Globalübung 11.11.2003 Hoare-Kalkül Thomas Weiler Fachgruppe Informatik RWTH Aachen T. Weiler, RWTH Aachen - 1 - Ariane 5 Die Ariane 5 ist das jüngste Modell der Trägerrakete
MehrProgrammtransformationen und Induktion in funktionalen Programmen
Programmtransformationen und Induktion in funktionalen Programmen Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 13. Januar 2009 Einschub: Monadisches IO verzögern Implementierung
MehrGrundprinzipien der funktionalen Programmierung
Grundprinzipien der funktionalen Programmierung Funktionen haben keine Seiteneffekte Eine Funktion berechnet einen Ausgabewert der nur von den Eingabewerten abhängt: 12 inputs + output 46 34 2 Nicht nur
MehrStrukturelle 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
MehrFormale Sprachen, reguläre und kontextfreie Grammatiken
Formale Sprachen, reguläre und kontextfreie Grammatiken Alphabet A: endliche Menge von Zeichen Wort über A: endliche Folge von Zeichen aus A A : volle Sprache über A: Menge der A-Worte formale Sprache
MehrFunktionale Programmiersprachen
Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte
MehrVBA-Programmierung: Zusammenfassung
VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung
MehrGrundlagen 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
Mehr3 Mengen, Logik. 1 Naive Mengenlehre
3 Mengen, Logik Jörn Loviscach Versionsstand: 21. September 2013, 15:53 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work is
Mehr4.Grundsätzliche Programmentwicklungsmethoden
4.Grundsätzliche Programmentwicklungsmethoden 1.1 Grundlage strukturierter und objektorientierter Programmierung Begriff Software Engineering - umfaßt den gezielten Einsatz von Beschreibungsmitteln, Methoden
MehrLemma Für jede monotone Grammatik G gibt es eine kontextsensitive
Lemma Für jede monotone Grammatik G gibt es eine kontextsensitive Grammatik G mit L(G) = L(G ). Beweis im Beispiel (2.): G = (V,Σ, P, S) : P = {S asbc, S abc, CB BC, ab ab, bb bb, bc bc, cc cc}. (i) G
MehrTyp-basiertes Programmieren und Schließen in Funktionalen Sprachen
Typ-basiertes Programmieren und Schließen in Funktionalen Sprachen Jun.-Prof. Janis Voigtländer Institut für Informatik III Universität Bonn WS 2009/10 Organisation Wahlpflichtvorlesung im Diplomstudiengang,
MehrEinführung in die Informatik Algorithms
Einführung in die Informatik Algorithms Vom Problem zum Algorithmus und zum Programm Wolfram Burgard Cyrill Stachniss 1.1 Motivation und Einleitung In der Informatik sucht man im Normalfall nach Verfahren
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel
MehrTheoretische Informatik SS 03 Übung 3
Theoretische Informatik SS 03 Übung 3 Aufgabe 1 a) Sind die folgenden Funktionen f : partiell oder total: f(x, y) = x + y f(x, y) = x y f(x, y) = x y f(x, y) = x DIV y? Hierbei ist x DIV y = x y der ganzzahlige
Mehr2. Vorlesung. Slide 40
2. Vorlesung Slide 40 Knobelaufgabe Was tut dieses Programm? Informell Formal Wie stellt man dies sicher? knobel(a,b) { Wenn a = 0 dann return b sonst { solange b 0 wenn a > b dann { a := a - b sonst b
MehrInterpreter - Gliederung
Institut für Informatik Ludwig-Maximilian Universität Interpreter - Gliederung Programmiersprache Syntax Konkrete Syntax Abstrakter Syntax Baum (Abstrakte Syntax) Parser Syntaktische Struktur einer Sprache
MehrVorkurs 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
MehrEinführung in die Informatik I (autip)
Einführung in die Informatik I (autip) Dr. Stefan Lewandowski Fakultät 5: Informatik, Elektrotechnik und Informationstechnik Abteilung Formale Konzepte Universität Stuttgart 24. Oktober 2007 Was Sie bis
MehrBinäre Suchbäume (binary search trees, kurz: bst)
Binäre Suchbäume (binary search trees, kurz: bst) Datenstruktur zum Speichern einer endlichen Menge M von Zahlen. Genauer: Binärbaum T mit n := M Knoten Jeder Knoten v von T ist mit einer Zahl m v M markiert.
MehrInformationsverarbeitung auf Bitebene
Informationsverarbeitung auf Bitebene Dr. Christian Herta 5. November 2005 Einführung in die Informatik - Informationsverarbeitung auf Bitebene Dr. Christian Herta Grundlagen der Informationverarbeitung
MehrRekursion und Induktion
Rekursion und Induktion Rekursion und Induktion Quick Start Informatik Theoretischer Teil WS2011/12 11. Oktober 2011 Rekursion und Induktion > Rekursion > Was ist Rekursion? Definition der Rekursion fu
MehrAussagenlogik zu wenig ausdrucksstark für die meisten Anwendungen. notwendig: Existenz- und Allaussagen
Prädikatenlogik 1. Stufe (kurz: PL1) Aussagenlogik zu wenig ausdrucksstark für die meisten Anwendungen notwendig: Existenz- und Allaussagen Beispiel: 54 Syntax der Prädikatenlogik erster Stufe (in der
MehrKapitel 4. Induktive Definitionen und Beweise
Kapitel 4 Induktive Definitionen und Beweise Bei der Definition der Semantik der Programmiersprache IMP haben wir an vielen verschiedenen Stellen induktive Definitionen benutzt: angefangen bei der Syntax
MehrTechnische Universität München
Stand der Vorlesung Kapitel 2: Auffrischung einiger mathematischer Grundlagen Mengen, Potenzmenge, Kreuzprodukt (Paare, Tripel, n-tupel) Relation: Teilmenge MxN Eigenschaften: reflexiv, symmetrisch, transitiv,
MehrKombinatorik von Zahlenfolgen
6. April 2006 Vorlesung in der Orientierungswoche 1 Kombinatorik von Zahlenfolgen Einige Beispiele Jeder kennt die Fragen aus Intelligenztests, in denen man Zahlenfolgen fortsetzen soll. Zum Beispiel könnten
MehrKapitel 1.5. Ein adäquater Kalkül der Aussagenlogik. Teil 1: Kalküle und Beweisbarkeit und die Korrektheit des Shoenfield-Kalküls
Kapitel 1.5 Ein adäquater Kalkül der Aussagenlogik Teil 1: Kalküle und Beweisbarkeit und die Korrektheit des Shoenfield-Kalküls Mathematische Logik (WS 2012/13) Kapitel 1.5: Kalküle 1/30 Syntaktischer
Mehr3 Vollständige Induktion
3.1 Natürliche Zahlen In den vorherigen Kapiteln haben wir die Menge der natürlichen Zahlen schon mehrfach als Beispiel benutzt. Das Konzept der natürlichen Zahlen erscheint uns einfach, da wir es schon
MehrTypdeklarationen. Es gibt in Haskell bereits primitive Typen:
Typdeklarationen Es gibt in bereits primitive Typen: Integer: ganze Zahlen, z.b. 1289736781236 Int: ganze Zahlen mit Computerarithmetik, z.b. 123 Double: Fließkommazahlen, z.b. 3.14159 String: Zeichenketten,
MehrSoftwaretechnik. Funktionale Programmierung. Christian Lindig. 23. Januar 2006. Lehrstuhl für Softwaretechnik Universität des Saarlandes
Softwaretechnik Funktionale Programmierung Christian Lindig Lehrstuhl für Softwaretechnik Universität des Saarlandes 23. Januar 2006 Quicksort in Java static void sort(int a[], int lo0, int hi0) { int
MehrKlassische Aussagenlogik
Eine Einführung in die Logik Schon seit Jahrhunderten beschäftigen sich Menschen mit Logik. Die alten Griechen und nach ihnen mittelalterliche Gelehrte versuchten, Listen mit Regeln zu entwickeln, welche
MehrGrundlagen der Programmierung 2. Parallele Verarbeitung
Grundlagen der Programmierung 2 Parallele Verarbeitung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 27. Mai 2009 Parallele Algorithmen und Ressourcenbedarf Themen: Nebenläufigkeit,
MehrCrashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin
Crashkurs Haskell Mentoring WiSe 2016/17 Anja Wolffgramm Freie Universität Berlin 02/11/2016 , Inhalt Kommandozeile Haskell installieren & starten Ein 1. Haskell-Programm Funktionsdefinition Primitive
MehrFunktionale Programmierung mit Haskell. Jan Hermanns
Funktionale Programmierung mit Haskell Jan Hermanns 1 Programmiersprachen imperativ deklarativ konventionell OO logisch funktional Fortran Smalltalk Prolog Lisp C Eiffel ML Pascal Java Haskell 2 von Neumann
MehrJAVA-Datentypen und deren Wertebereich
Folge 8 Variablen & Operatoren JAVA 8.1 Variablen JAVA nutzt zum Ablegen (Zwischenspeichern) von Daten Variablen. (Dies funktioniert wie beim Taschenrechner. Dort können Sie mit der Taste eine Zahl zwischenspeichern).
MehrHandout zu Beweistechniken
Handout zu Beweistechniken erstellt vom Lernzentrum Informatik auf Basis von [Kre13],[Bün] Inhaltsverzeichnis 1 Was ist ein Beweis? 2 2 Was ist Vorraussetzung, was ist Behauptung? 2 3 Beweisarten 3 3.1
MehrFunktionale Programmierung
Schleifen 1 Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 3 Teil I Jedem Anfang wohnt ein Zauber inne 4 Über mich Diplom in Informatik in Saarbrücken
MehrEinführung in die Funktionale Programmierung: Einleitung & Motivation
Einführung in die Funktionale Programmierung: Einleitung & Motivation Prof Dr. Manfred Schmidt-Schauß WS 2011/12 Stand der Folien: 25. Oktober 2011 Motivation Funktionale Programmiersprachen Haskell Übersicht
MehrObjektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln
Stefan Brass: OOP (Java), 3. Syntaxdiagramme und Grammatikregeln 1/32 Objektorientierte Programmierung Kapitel 3: Syntaxdiagramme und Grammatikregeln Stefan Brass Martin-Luther-Universität Halle-Wittenberg
MehrAlgorithmen mit konstantem Platzbedarf: Die Klasse REG
Algorithmen mit konstantem Platzbedarf: Die Klasse REG Sommerakademie Rot an der Rot AG 1 Wieviel Platz brauchen Algorithmen wirklich? Daniel Alm Institut für Numerische Simulation Universität Bonn August
MehrKapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte
Elementare Schritte Ein elementarer Berechnungsschritt eines Algorithmus ändert im Allgemeinen den Wert von Variablen Zuweisungsoperation von fundamentaler Bedeutung Zuweisungsoperator In Pascal := In
MehrEntwicklung eines korrekten Übersetzers
Entwicklung eines korrekten Übersetzers für eine funktionale Programmiersprache im Theorembeweiser Coq Thomas Strathmann 14.01.2011 Gliederung 1 Einleitung
MehrAdressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung
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
MehrRekursive Auswertungsprozesse in Haskell
Rekursive Auswertungsprozesse in Haskell Auswertungsprozess, der durch eine rekursive Funktion bewirkt wird Beispiel: Auswertung der rekursiven Fakultätsfunktion 0! := 1 n! := n (n 1)! fakultaet x = if
MehrTheoretische Grundlagen des Software Engineering
Theoretische Grundlagen des Software Engineering 7: Einführung Aussagenlogik schulz@eprover.org Logisches Schließen 2 gold +1000, 1 per step, Beispiel: Jage den Wumpus Performance measure death 1000 10
MehrInformatik II - Tutorium
Sommersemester 2008 http://info2tut.blogspot.com 29. April 2007 Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Quellennachweis & Dank an: Joachim Wilke, Susanne Dinkler, Bernhard Müller,
MehrHaskell zur Constraint-Programmierung HaL8
Haskell zur Constraint-Programmierung HaL8 Alexander Bau 2. Mai 2013 Wir benutzen eine Teilmenge von Haskell zur Spezifikation von Constraint- Systemen über Haskell-Datentypen. Ein Constraint-Compiler
MehrTU8 Beweismethoden. Daniela Andrade
TU8 Beweismethoden Daniela Andrade daniela.andrade@tum.de 12.12.2016 1 / 21 Kleine Anmerkung Meine Folien basieren auf den DS Trainer von Carlos Camino, den ihr auf www.carlos-camino.de/ds findet ;) 2
MehrKapitel 1.0. Aussagenlogik: Einführung. Mathematische Logik (WS 2011/12) Kapitel 1.0: Aussagenlogik: Einführung 1/ 1
Kapitel 1.0 Aussagenlogik: Einführung Mathematische Logik (WS 2011/12) Kapitel 1.0: Aussagenlogik: Einführung 1/ 1 Ziele der Aussagenlogik In der Aussagenlogik analysiert man die Wahrheitswerte zusammengesetzter
MehrDer Datentyp String. Stringvariable und -vergleiche
Informatik 12 mit Java: Gierhardt Zeichenketten bzw. Strings Der Datentyp String Zeichenketten bzw. Strings sind eine häufig benutzte Datenstruktur. Man könnte auch mit Arrays aus Zeichen arbeiten. Da
MehrWS 2011/2012. Georg Sauthoff 1. November 1, 2011
WS 2011/2012 Georg 1 AG Praktische Informatik November 1, 2011 1 gsauthof@techfak.uni-bielefeld.de Übungen Abgaben und Aufgabenblätter am Ende der Vorlesung Skript gibt es demnächst in den Übungen Der
MehrKapitel 7: Formaler Datenbankentwurf
7. Formaler Datenbankentwurf Seite 1 Kapitel 7: Formaler Datenbankentwurf Die Schwierigkeiten der konzeptuellen Modellierung sind zu einem großen Teil dadurch begründet, dass sich die relevanten Strukturen
Mehr1.2 LOOP-, WHILE- und GOTO-Berechenbarkeit
Die Programmiersprache LOOP (i) Syntaktische Komponenten: Variable: x 0, x 1, x 2,... Konstanten: 0, 1, 2,... Trennsymbole: ; := Operationszeichen: + Schlüsselwörter: LOOP DO END (ii) LOOP-Programme: Wertzuweisungen:
MehrLogic in a Nutshell. Christian Liguda
Logic in a Nutshell Christian Liguda Quelle: Kastens, Uwe und Büning, Hans K., Modellierung: Grundlagen und formale Methoden, 2009, Carl Hanser Verlag Übersicht Logik - Allgemein Aussagenlogik Modellierung
MehrProbeklausur der Tutoren
Probeklausur der Tutoren Informatik II SS2005 Lösungsvorschlag Aufgabe 1: Verständnis- und Wissensfragen (6 Punkte) Kreuzen Sie an, ob die Aussage wahr ( W ) oder falsch ( F ) ist. Hinweis: Jedes korrekte
MehrAgenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung.
Vortrag: Bäume in Haskell Bäume in Haskell Vortrag Christoph Forster Thomas Kresalek Fachhochschule Wedel University of Applied Sciences 27. November 2009 Christoph Forster, Thomas Kresalek 1/53 Vortrag
Mehr