Die Grundlagen der Pretty-Big-Step Semantik · 2014. 2. 11. · 2 Inhalt 1. Einleitung 2. Big-Step...

39
Fabian Nack Seminar Programmiersprachen WS13/14 Freie Universität Berlin Die Grundlagen der Pretty-Big-Step Semantik Semantik von Programmiersprachen

Transcript of Die Grundlagen der Pretty-Big-Step Semantik · 2014. 2. 11. · 2 Inhalt 1. Einleitung 2. Big-Step...

  • Fabian Nack

    Seminar Programmiersprachen WS13/14

    Freie Universität Berlin

    Die Grundlagen der

    Pretty-Big-Step Semantik

    Semantik von Programmiersprachen

  • 2

    Inhalt

    1. Einleitung

    2. Big-Step Semantik

    - Grundlagen und Probleme

    3. Pretty-Big-Step Semantik

    - Die Big-Step Semantik des Lambda-Kalküls

    - Schrittweise Umwandlung in das P.-B.-S. Pendant

    4. Eigenschaften der Pretty-Big-Step Semantik

    5. Zusammenfassung

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 3

    EINLEITUNG

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 4

    Aspekte von Programmiersprachen

    Syntax• Lexikalische und grammatikalische Struktur

    Semantik• Bedeutung der Sprachkonstrukte

    Pragmatik• Zweck und Gebrauch der Sprache

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 5

    Formalisierungsmethoden

    Klassifizierung in drei Gruppen:

    1. Operationelle Semantiken

    • Zustandsveränderungen durch Überführungsfunktionen

    2. Denotationelle Semantiken

    • Mathematische Formalisierung der Effekte von Sprachkonstrukten

    3. Axiomatische Semantiken

    • Transformation von Bedingungen über den Zustandsraum

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 6

    Operationelle Semantiken

    • Beschreibung der Ausführung von Programmen auf abstrakten Maschinen

    • Fokus auf Zustandsänderungen

    • Zustandsüberführungen mit einer Überführungsfunktion

    Zwei traditionelle Ansätze

    Big-Step und Small-Step

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 7

    DIE BIG-STEP SEMANTIKGrundlagen und Probleme

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 8

    Big-Step Semantik

    • Beschreibt wie das Endresultat eines Programms entsteht:

    „How to execute a program?“

    • Relation zwischen Anfangsstatus und Endstatus einer Ausführung

    • Semantik besteht aus einer Menge von Regeln der Form:

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 9

    Premises, Conditions und Conclusion

    Für jede Regel:

    • Genau eine Conclusion

    • Beliebige Anzahl Prämissen und Conditions

    • Prämissen und Conclusion bilden Term mit Anfangsstatus auf Endstatus ab

    Überführungsfunktion:

    • Bedingungen müssen zur Anwendung einer Regel erfüllt sein

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 10

    Big-Step Regelbeispiel

    Zum besseren Verständnis exemplarisch die Regeln für eine einfache While-Schleife

    Unterscheide zwei Fälle, daher zwei Regeln:

    (1) wird „false“

    (2) wird „true“

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 11

    Anwendungsbeispiel: Derivation Trees

    • Auswertung der Regeln für Terme als Bottom-Up Baum möglich

    Blätter: Regeln ohne Prämisse (Axiome)

    Ursprungswurzel: Überführungsregel für Gesamtterm

    Conclusion

    Prämisse 1 Prämisse 2

    Prämisse 2.1 Prämisse 2.2

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 12

    Exceptions und Divergence

    • Regeln betrachten bisher nur korrekt terminierende Ausführungen

    • Nun sollen auch Exceptions und Divergence betrachtet werden

    Regeln müssen erweitert werden

    Induktives Judgement und Koinduktives Judgement

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 13

    Regeln für Exceptions und Divergence

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 14

    Probleme der Erweiterung

    Die Erweiterung zeigt die Probleme der Big-Step Semantik:

    • Schon für simples While-Konstrukt eine Vielzahl neuer Regeln

    • Regeln für Exceptions und unendliche Ausführung sehr ähnlich

    • Prämissen teilweise in mehreren Regeln dupliziert, z.B.:

    Beweis auf Basis dieser Semantik sehr kompliziert!

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 15

    Regeln für Exceptions und Divergence

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 16

    Lösung: Die Pretty-Big-Step Semantik

    • Entwicklung der Pretty-Big-Step Semantik durch Arthur Charguéraud

    Ziele:

    • Vermeidung von Duplikaten

    • Verringerung der Komplexität

    Dazu eine schrittweise Umwandlung einer Big-Step Semantik:

    (1) Dekomposition komplexer Regeln

    (2) Einführung von Zwischentermen

    (3) Verwendung von Outcomes und Behaviours zur Abbildung von

    Exceptions und Divergence

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 17

    DIE PRETTY-BIG-STEPSEMANTIK

    Schrittweise Anpassung der Big-Step Semantik

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 18

    Der Lambda-Kalkül

    • Umformung einer Big-Step Semantik am Beispiel des Lambda-Kalküls

    Reminder:

    • Lambda-Kalkül besteht aus Termen und Transformationsregeln

    Wichtige Konstrukte:

    • Variablen

    • Konstanten

    • Lambda-Abstraktion

    • Lambda-Applikation

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 19

    Abstraktion und Applikation

    Abstraktion

    • Beschreibt Funktion, die Eingabe x erhält und auf den Term t abbildet

    • Beispiel:

    Applikation

    • Beschreibt Funktionsaufruf der Form

    • Beispiel:

    Identitätsfunktion

    Applikation der Identitätsfunktion

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 20

    Big-Step Semantik des Lambda-Kalküls

    • Simple Grammatik des Lambda-Kalküls:

    • Big-Step Semantik auf Basis dieser Grammatik formulierbar

    • Auswertung von Termen t nach Values v:

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 21

    Schritt 1: Dekomposition der Regeln

    • In Schritt 1 erfolgt die Zerlegung der existierenden Regeln

    • Ziel sind Regeln, die maximal einen Subterm auswerten

    Zerlege

    1 2 3

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 22

    Schritt 1: Dekomposition der Regeln

    (1)

    Aus der Zerlegung resultieren drei neue Regeln:

    (2)

    (3)

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 23

    Schritt 1: Dekomposition der Regeln

    • Problem: Neue Regeln sind nicht eindeutig

    • Beispiel:

    • sowohl durch Regel 1 als auch Regel 2 reduzierbar

    • Regel 1 unendlich anwendbar

    Argumentation, dass der Term divergiert möglich

    • Deshalb wird die Einführung von Zwischentermen notwendig

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 24

    Schritt 2: Einführung von Zwischentermen

    • Erweiterung der Grammatik:

    • Zugehöriges Evaluation Judgement:

    • Anpassung der Semantikregeln erfolgt entsprechend der Grammatik

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 25

    Zwischenfazit

    • Grammatik nach Schritt 2

    • Semantikregeln nach Schritt 2

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 26

    Schritt 3a: Behandlung von Exceptions

    • Erweitere Grammatik um Behaviours

    • Ein Behaviour bildet entweder einen Wert, oder eine Exception ab

    Anpassung des Evaluation Judgements nach

    • Als Zusatz werden auch folgende Terme eingeführt:

    • Eine Try-Catch-Anweisung zum Exceptionhandling

    • Eine Throw-Anweisung für Exceptions

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 27

    Schritt 3a: Behandlung von Exceptions

    Die neue Vorschrift erfordert die Anpassung der bestehenden Regeln

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 28

    Schritt 3a: Behandlung von Exceptions

    Zusätzlich ist die Einführung weiterer Regeln notwendig:

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 29

    Schritt 3b: Behandlung von Divergence

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

    • Behandlung von unendlichen Ausführungen erfordert koinduktives Judgement

    • Erweitere Grammatik um Outcome

    • Ein Outcome beschreibt, dass ein Term entweder mit Behaviour b terminiert

    oder unendlich divergiert

    Anpassung des Evaluation Judgements nach

    Grammatikanpassung:

  • 30

    Finale Pretty-Big-Step Semantik

    Entsprechend der Grammatik können die finalen Semantikregeln aufgestellt werden:

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 31

    EIGENSCHAFTEN DERPRETTY-BIG-STEP SEMANTIK

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 32

    Äquivalenz mit der Big-Step Semantik

    • Automatisierter Nachweis der Äquivalenz zur Big-Step Semantik möglich

    • Äquivalenz gilt für:

    • Induktive evaluierte terminierende Terme

    • Koinduktiv evaluierte divergierende Terme

    • Formalisierung durch folgendes Theorem:

    Theorem:

    Für bel. Term t und beliebiges Behaviour b gilt

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 33

    Erweiterbarkeit um generische Fehlerregeln

    • Ziel: Nicht-auswertbare Terme sollen in einem Fehler resultieren

    • Nützlich beispielsweise für Type Soundness Proofs:

    „Wenn die Auswertung des Terms nicht in einem Fehler resultiert, ist er korrekt getypt!“

    • Grobes Vorgehen zur Erweiterung ist die Einführung einer generischen Fehlerregel:

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 34

    Erweiterbarkeit um Traces

    • Ein Trace bezeichnet eine Aufzeichnung der Interaktionen eines Programms mit

    seiner Ausführungsumgebung

    • In Traces werden beispielsweise I/O-Operationen festgehalten

    • Grobes Vorgehen zur Erweiterung:

    • Führe den Trace jedes Terms während seiner Evaluierung mit

    • Konkateniere Traces bei der Zusammenführung geeignet

    • Beispielregeln für Read-Operationen:

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 35

    ZUSAMMENFASSUNG

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 36

    Zusammenfassung I

    • Die Big-Step Semantik ist eine operationelle Formalisierungsmethode

    für Programmiersprachen

    • Problem der Big-Step Semantik:

    Ineffiziente Betrachtung von Exceptions und Divergence

    • Die Pretty-Big-Step Semantik behebt dieses Problem durch:

    • Vermeidung von Duplikaten

    • Verringerung der Komplexität

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 37

    Zusammenfassung II

    • Überführung einer Big-Step Semantik in ihr Pretty-Big-Step Pendant möglich

    • Dazu: Schrittweise Umwandlung

    (1) Dekomposition komplexer Regeln

    (2) Einführung von Zwischentermen

    (3) Verwendung von Outcomes und Behaviours zur Abbildung von

    Exceptions und Divergence

    • Pretty-Big-Step Semantik ermöglicht bspw.:

    • Komfortable Umsetzung von Traces

    • Generische Fehlerregeln

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 38

    Danke für eure

    Aufmerksamkeit!

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen

  • 39

    Quellen

    Die Grundlagen der Pretty-Big-Step Semantik Seminar Programmiersprachen