HOME | ENGLISH | IMPRESSUM | KIT

Semantik von Programmiersprachen

Aktuelles

DatumMitteilung
2.9.2021Für den Prüfungstermin am 15.9.2021 fehlt uns noch die Bestätigung, bitte UNBEDINGT beim Sekretariat melden!
4.6.2019Der Übungstermin am 10.6. entfällt wegen Pfingsten und wird am Freitag, den 14.6.2019 um 14:00 nachgeholt. Ort ist wie immer der SR-118.

Semantik von Programmiersprachen

Die formale Semantik einer Programmiersprache beschreibt mit mathematischen Mitteln, was die exakte Bedeutung eines Programms bzw. der Ablauf des Programms während seiner Ausführung ist. Erst mittels einer solchen Semantik kann man eine Programmiersprache exakt beschreiben, wobei man gleichzeitig ein Verständnis für die Feinheiten der Programmiersprache entwickelt. Außerdem braucht man eine Semantik, um überhaupt Aussagen über Programme, die Programmiersprache oder Programmanalysen mathematisch formulieren und als korrekt nachweisen zu können. Ein Beispiel dazu wäre die Sicherheitseigenschaft, dass ein Programm nicht wegen illegaler Casts abstürzen kann.

In dieser Vorlesung werden die mathematischen Grundlagen formaler Semantik zusammen mit Anwendungen vorgestellt.

Themen

  • Abstrakte Syntax
  • Operationale Semantik
  • Grundlagen von Typsystemen und Typsicherheit
  • Denotationale Semantik
  • Continuation-Semantik
  • Axiomatische Semantik und Korrektheit des Hoare-Kalküls

Voraussetzungen

Kenntnisse mit formalen Beschreibungen (Vorlesung Formale Systeme) sind sehr vorteilhaft.

Einordnung

Master-Studenten (SPO 2008 & 2015)
Diese Veranstaltung wird als eigenständiges Modul angeboten: M-INFO-100845.
ECTS-Punkte: 4

Skript

Das Semantik-Skript wurde von Andreas Lochbihler erstellt, im SS 2015 von Joachim Breitner ergänzt, und wird von uns weiter überarbeitet. Größere Änderungen werden hier erwähnt. Darüber hinaus wird angegeben, wie weit wir jeweils in der Vorlesung gekommen sind.

Änderungen

  • 23.4.2019: Kapitel 1.3: Beispiel der operationalen Semantik an spätere Notation angepasst.
  • 3.5.2019: Ein Versuch, Variablen konsistenter von 1 ausgehend durchzuzählen
  • 21.5.2019: Prosa-Erklärung zum Aufteilungslemma hinzugefügt, JmpFT-Regel zu JmpTT umbenannt
  • 28.5.2019: Übungsaufgabe zu WhileBlock hinzugefügt
  • 4.6.2019: Syntax der BigStep-Semantik mit Prozeduren geändert: E jetzt rechts vom Turnstile
  • 9.7.2019: Variablen in Theorem 128 etwas sinnvoller benannt

Vorlesungsfortschritt

  • 23.4.2019: Bis einschließlich Abschnitt 3.1 (Syntax von While)
  • 30.4.2019: Bis zur Formulierung von Theorem 10 (Determinismus)
  • 7.5.2019: Bis einschließlich Lemma 19
  • 14.5.2019: Bis Ende Kapitel 5.2 (Definition Compiler)
  • 21.5.2019: Bis Ende Kapitel 5
  • 28.5.2019: Bis einschließlich Lemma 46
  • 5.6.2019: Bis Ende Kapitel 6.5 (Prozeduren)
  • 11.6.2019: Bis Ende Kapitel 6 (Erweiterungen für While)
  • 18.6.2019: Bis Mitte Kapitel 7.2 (Fixpunkttheorie, Definition von oberen Schranken)
  • 25.6.2019: Bis Ende Kapitel 7.2 (Knaster-Tarski-Fixpunktsatz)
  • 2.7.2019: Bis Ende Kapitel 7.4 (Bezug zur operationalen Semantik)
  • 9.7.2019: Bis Ende Kapitel 8.1 (Ein Korrektheitsbeweis mit der Denotationalen Semantik)
  • 16.7.2019: Bis Ende Kapitel 8.6 (Semantische Prädikate und syntaktische Bedingungen)
  • 23.7.2019: Bis Ende Kapitel 8 (Axiomatische Semantik)

Übung

Parallel dazu gibt es eine Übung, in der die Inhalte der Vorlesung angewandt und vertieft werden. Dazu erscheint jede Woche ein Übungsblatt mit Aufgaben, die z.T. selbstständig, z.T. gemeinsam in der Übung gelöst werden. Im Anschluss wird hier eine Beispiellösung veröffentlicht.

Änderungen

  • 8.5.2019: Hinweis zu ÜB 3 Aufgabe 2 ergänzt, Blatt veröffentlicht.
  • 13.5.2019: Fehler in Aufgabe 1 auf Blatt 3 verbessert, Lösung veröffentlicht.

Übungsblätter

Übungsblätter Sourcecode
30.04.2019 common.pl Download
06.05.2019 bigstep.pl Download
06.05.2019 derivTree.pl Download
Übungsblätter PDF
26.04.2019 Übungsblatt 1 - Induktion Download
30.04.2019 Übungsblatt 1 (Lösung)- Induktion Download
30.04.2019 Übungsblatt 2 - Big-Step Download
06.05.2019 Übungsblatt 2 (Lösung) - Big-Step Download
08.05.2019 Übungsblatt 3 - Small-Step Download
13.05.2019 Übungsblatt 3 (Lösung) - Small-Step Download
16.05.2019 Übungsblatt 4 - Big-Step und Small-Step Download
20.05.2019 Übungsblatt 4 (Lösung) - Big-Step und Small-Step Download
21.05.2019 Übungsblatt 5 - Compiler Download
28.05.2019 Übungsblatt 5 (Lösung) - Compiler Download
28.05.2019 Übungsblatt 6 - Erweiterungen zu While Download
03.06.2019 Übungsblatt 6 (Lösung) - Erweiterungen zu While Download
05.06.2019 Übungsblatt 7 - Prozeduren Download
11.06.2019 Übungsblatt 8 - Typsicherheit Download
17.06.2019 Übungsblatt 7 (Lösung) - Prozeduren Download
17.06.2019 Übungsblatt 8 (Lösung) - Typsicherheit Download
18.06.2019 Übungsblatt 9 - Denotationale Semantik Download
24.06.2019 Übungsblatt 9 (Lösung) - Denotationale Semantik Download
25.06.2019 Übungsblatt 10 - Fixpunkttheorie Download
02.07.2019 Übungsblatt 10 (Lösung) - Fixpunkttheorie Download
02.07.2019 Übungsblatt 11 - Kontexte Download
09.07.2019 Übungsblatt 11 (Lösung) - Kontexte Download
09.07.2019 Übungsblatt 12 - Continuations Download
15.07.2019 Übungsblatt 12 (Lösung) - Continuations Download
22.07.2019 Übungsblatt 13 - Axiomatische Semantik Download
22.07.2019 Übungsblatt 13 (Lösung) - Axiomatische Semantik Download

Termine

Vorlesung:

Die Vorlesung findet immer dienstags um 15:45 im Seminarraum 301 statt.
TagDatumBeginnEndeOrt
Dienstag 23.04.201915:4517:15Raum 301
Dienstag 30.04.201915:4517:15Raum 301
Dienstag 07.05.201915:4517:15Raum 301
Dienstag 14.05.201915:4517:15Raum 301
Dienstag 21.05.201915:4517:15Raum 301
Dienstag 28.05.201915:4517:15Raum 301
Dienstag 04.06.201915:4517:15Raum 301
Dienstag 11.06.201915:4517:15Raum 301
Dienstag 18.06.201915:4517:15Raum 301
Dienstag 25.06.201915:4517:15Raum 301
Dienstag 02.07.201915:4517:15Raum 301
Dienstag 09.07.201915:4517:15Raum 301
Dienstag 16.07.201915:4517:15Raum 301
Dienstag 23.07.201915:4517:15Raum 301

Übung:

Die Übung findet immer montags um 14:00 im Seminarraum -118 statt. In der ersten Vorlesungswoche und am Pfingstmontag ist keine Übung.
TagDatumBeginnEndeOrt
Montag 29.04.201914:0015:30Raum -118
Montag 06.05.201914:0015:30Raum -118
Montag 13.05.201914:0015:30Raum -118
Montag 20.05.201914:0015:30Raum -118
Montag 27.05.201914:0015:30Raum -118
Montag 03.06.201914:0015:30Raum -118
Montag 17.06.201914:0015:30Raum -118
Montag 24.06.201914:0015:30Raum -118
Montag 01.07.201914:0015:30Raum -118
Montag 08.07.201914:0015:30Raum -118
Montag 15.07.201914:0015:30Raum -118
Montag 22.07.201914:0015:30Raum -118

Literatur

  • Hanne Riis Nielson, Flemming Nielson. Semantics with Applications: An Appetizer. Springer Verlag, 2007. Zweite Auflage. ISBN: 978-1-84628-691-9.
    Grundlage der meisten Themen der Vorlesung, sehr anschaulich und gut verständlich.
  • John C. Reynolds. Theories of Programming Languages. Cambridge University Press, 1998. ISBN: 0-521-59414-6.
    Fokus auf denotationaler Semantik
  • Benjamin C. Pierce. Types and Programming Languages. MIT Press, 2002. ISBN: 0-262-162209-1.
    Schwerpunkt auf dem Lamda-Kalkül und Typsystemen, mit sehr guten Erklärungen, auch zu weiterführenden Themen.
  • Glynn Winskel. The Formal Semantics of Programming Languages. An Introduction. MIT Press, 1993. ISBN: 0-262-73103-7.
    Ausführlicher Beweis der Unentscheidbarkeit eines vollständigen axiomatischen Kalküls
  • Tobias Nipkow, Gerwin Klein. Concrete Semantics. Springer, 2014. ISBN: 978-3-319-10542-0. http://www.concrete-semantics.org/ Formalisierung des Vorlesungsstoffs im Theorembeweiser Isabelle, inklusive einer Einführung in diesen.

Veranstalter

Lehrstuhlinhaber
Prof. Gregor Snelting
Ehemalige Mitarbeiter
Dr.-Ing. Sebastian Ullrich
M.Sc. Maximilian Wagner