Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
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