• Keine Ergebnisse gefunden

Theorembeweiser und ihre Anwendungen

N/A
N/A
Protected

Academic year: 2022

Aktie "Theorembeweiser und ihre Anwendungen"

Copied!
57
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Theorembeweiser und ihre Anwendungen

Prof. Dr.-Ing. Gregor Snelting Dipl.-Inf. Univ. Daniel Wasserrab

Lehrstuhl Programmierparadigmen IPD Snelting

Universit¨at Karlsruhe (TH)

(2)

Teil V

Formale Semantik und Typsysteme

(3)

Was ist Semantik?

Zwei Konzepte bei Programmiersprachen (analog zu nat¨urlicher Sprache), Syntax und Semantik

Syntax: Regeln f¨ur korrekte Anordnung von Sprachkonstrukten In Programmiersprachen meist durch Grammatik, vor allem in BNF (Backus-Naur-Form) gegeben Angegeben im Sprachstandard

Semantik: Bedeutung der einzelnen Sprachkonstrukte Bei Programmiersprachen verschiedenste Darstellungsweisen:

informal (Beispiele, erl¨auternder Text etc.) formal (Regelsysteme, Funktionen etc.) Angegeben im Sprachstandard

(oft sehr vermischt mit Syntax)

(4)

Was ist Semantik?

Zwei Konzepte bei Programmiersprachen (analog zu nat¨urlicher Sprache), Syntax und Semantik

Syntax: Regeln f¨ur korrekte Anordnung von Sprachkonstrukten In Programmiersprachen meist durch Grammatik, vor allem in BNF (Backus-Naur-Form) gegeben Angegeben im Sprachstandard

Semantik: Bedeutung der einzelnen Sprachkonstrukte Bei Programmiersprachen verschiedenste Darstellungsweisen:

informal (Beispiele, erl¨auternder Text etc.) formal (Regelsysteme, Funktionen etc.) Angegeben im Sprachstandard

(oft sehr vermischt mit Syntax)

(5)

Was ist Semantik?

Zwei Konzepte bei Programmiersprachen (analog zu nat¨urlicher Sprache), Syntax und Semantik

Syntax: Regeln f¨ur korrekte Anordnung von Sprachkonstrukten In Programmiersprachen meist durch Grammatik, vor allem in BNF (Backus-Naur-Form) gegeben Angegeben im Sprachstandard

Semantik: Bedeutung der einzelnen Sprachkonstrukte Bei Programmiersprachen verschiedenste Darstellungsweisen:

informal (Beispiele, erl¨auternder Text etc.) formal (Regelsysteme, Funktionen etc.) Angegeben im Sprachstandard

(oft sehr vermischt mit Syntax)

(6)

Wozu formale Semantik?

Weitreichende Einsatzbereiche:

Spezifikation von Programmverhalten

(z.B. Design/Verst¨andnis von Programmiersprachen) Compilerbau und -optimierung (z.B. Korrektheitsanalyse) Programmanalyse (z.B. Language Based Security) Korrektheitsbeweise (z.B. Typsicherheit)

Testen (z.B. Prototyp-Entwicklung) ...

Verschiedenste Methodik:

“Pen and Paper”

Theorembeweiser Model Checking Typsysteme

(7)

Wozu formale Semantik?

Weitreichende Einsatzbereiche:

Spezifikation von Programmverhalten

(z.B. Design/Verst¨andnis von Programmiersprachen) Compilerbau und -optimierung (z.B. Korrektheitsanalyse) Programmanalyse (z.B. Language Based Security) Korrektheitsbeweise (z.B. Typsicherheit)

Testen (z.B. Prototyp-Entwicklung) ...

Verschiedenste Methodik:

“Pen and Paper”

Theorembeweiser Model Checking Typsysteme

(8)

Wozu formale Semantik?

Weitreichende Einsatzbereiche:

Spezifikation von Programmverhalten

(z.B. Design/Verst¨andnis von Programmiersprachen) Compilerbau und -optimierung (z.B. Korrektheitsanalyse) Programmanalyse (z.B. Language Based Security) Korrektheitsbeweise (z.B. Typsicherheit)←−

Testen (z.B. Prototyp-Entwicklung) ...

Verschiedenste Methodik:

“Pen and Paper”

Theorembeweiser←−

Model Checking Typsysteme

(9)

Ubersicht formale Semantiken ¨

verschiedene Arten von Semantiken:

operational: simuliert Zustands¨uberg¨ange auf abstrakter Maschine nahe an tats¨achlichem Programmverhalten

denotational: Programm Funktion, bildet Anfangs- auf Endzustand ab sehr mathematisch, gern f¨ur Beweise verwendet

heute etwas aus der Mode axiomatisch: auch bekannt als Hoare-Logik

Zusicherungen als Vor-/Nachbedingungen, Invarianten Termersetzung: Programmfortschritt als Termersetzungsregeln

Game semantics: nahe an denotational, “Spiel” zwischen Programm und System, aktuell viel Forschung in diesem Bereich Im folgenden nur operationale Semantik

(10)

Ubersicht formale Semantiken ¨

verschiedene Arten von Semantiken:

operational: simuliert Zustands¨uberg¨ange auf abstrakter Maschine nahe an tats¨achlichem Programmverhalten

denotational: Programm Funktion, bildet Anfangs- auf Endzustand ab sehr mathematisch, gern f¨ur Beweise verwendet

heute etwas aus der Mode axiomatisch: auch bekannt als Hoare-Logik

Zusicherungen als Vor-/Nachbedingungen, Invarianten Termersetzung: Programmfortschritt als Termersetzungsregeln

Game semantics: nahe an denotational, “Spiel” zwischen Programm und System, aktuell viel Forschung in diesem Bereich Im folgenden nur operationale Semantik

(11)

Ubersicht formale Semantiken ¨

verschiedene Arten von Semantiken:

operational: simuliert Zustands¨uberg¨ange auf abstrakter Maschine nahe an tats¨achlichem Programmverhalten

denotational: Programm Funktion, bildet Anfangs- auf Endzustand ab sehr mathematisch, gern f¨ur Beweise verwendet

heute etwas aus der Mode axiomatisch: auch bekannt als Hoare-Logik

Zusicherungen als Vor-/Nachbedingungen, Invarianten Termersetzung: Programmfortschritt als Termersetzungsregeln

Game semantics: nahe an denotational, “Spiel” zwischen Programm und System, aktuell viel Forschung in diesem Bereich Im folgenden nur operationale Semantik

(12)

Ubersicht formale Semantiken ¨

verschiedene Arten von Semantiken:

operational: simuliert Zustands¨uberg¨ange auf abstrakter Maschine nahe an tats¨achlichem Programmverhalten

denotational: Programm Funktion, bildet Anfangs- auf Endzustand ab sehr mathematisch, gern f¨ur Beweise verwendet

heute etwas aus der Mode axiomatisch: auch bekannt als Hoare-Logik

Zusicherungen als Vor-/Nachbedingungen, Invarianten Termersetzung: Programmfortschritt als Termersetzungsregeln

Game semantics: nahe an denotational, “Spiel” zwischen Programm und System, aktuell viel Forschung in diesem Bereich Im folgenden nur operationale Semantik

(13)

Ubersicht formale Semantiken ¨

verschiedene Arten von Semantiken:

operational: simuliert Zustands¨uberg¨ange auf abstrakter Maschine nahe an tats¨achlichem Programmverhalten

denotational: Programm Funktion, bildet Anfangs- auf Endzustand ab sehr mathematisch, gern f¨ur Beweise verwendet

heute etwas aus der Mode axiomatisch: auch bekannt als Hoare-Logik

Zusicherungen als Vor-/Nachbedingungen, Invarianten Termersetzung: Programmfortschritt als Termersetzungsregeln

Game semantics: nahe an denotational, “Spiel” zwischen Programm und System, aktuell viel Forschung in diesem Bereich Im folgenden nur operationale Semantik

(14)

Ubersicht formale Semantiken ¨

verschiedene Arten von Semantiken:

operational: simuliert Zustands¨uberg¨ange auf abstrakter Maschine nahe an tats¨achlichem Programmverhalten

denotational: Programm Funktion, bildet Anfangs- auf Endzustand ab sehr mathematisch, gern f¨ur Beweise verwendet

heute etwas aus der Mode axiomatisch: auch bekannt als Hoare-Logik

Zusicherungen als Vor-/Nachbedingungen, Invarianten Termersetzung: Programmfortschritt als Termersetzungsregeln

Game semantics: nahe an denotational, “Spiel” zwischen Programm und System, aktuell viel Forschung in diesem Bereich Im folgenden nur operationale Semantik

(15)

aktuelles Forschungsgebiet

Typsicherheitsbeweise f¨ur “akademische Spielzeugsprachen”

schon vor Jahrzehnten (von Hand)

echte Sprachen f¨ur diesen Ansatz zu komplex

vor 10 Jahren erste formale Semantik f¨ur (Untermenge von) Java Gruppe von Tobias Nipkow an TU M¨unchen

formalisiert in Isabelle/HOL dazu sp¨ater mehr. . .

(16)

aktuelles Forschungsgebiet

Typsicherheitsbeweise f¨ur “akademische Spielzeugsprachen”

schon vor Jahrzehnten (von Hand)

echte Sprachen f¨ur diesen Ansatz zu komplex

vor 10 Jahren erste formale Semantik f¨ur (Untermenge von) Java Gruppe von Tobias Nipkow an TU M¨unchen

formalisiert in Isabelle/HOL dazu sp¨ater mehr. . .

(17)

aktuelles Forschungsgebiet

Typsicherheitsbeweise f¨ur “akademische Spielzeugsprachen”

schon vor Jahrzehnten (von Hand)

echte Sprachen f¨ur diesen Ansatz zu komplex

vor 10 Jahren erste formale Semantik f¨ur (Untermenge von) Java Gruppe von Tobias Nipkow an TU M¨unchen

formalisiert in Isabelle/HOL dazu sp¨ater mehr. . .

(18)

Beispiel: einfache While-Sprache

Programmanweisungen:

Skip

VariablenzuweisungV :=e

sequentielle Komposition (Hintereinanderausf¨uhrung)c1; ;c2 if-then-elseif (b) c1 else c2

while-Schleifenwhile (b) c0 Zustand:

beschreibt, welche Werte aktuell in den Variablen (partielle Funktion) arithmetische/boole’sche Ausdr¨ucke:

Wert des Ausdrucks abh¨angig von Zustand (wg. Variablen)

(19)

Beispiel: einfache While-Sprache

Programmanweisungen:

Skip

VariablenzuweisungV :=e

sequentielle Komposition (Hintereinanderausf¨uhrung)c1; ;c2 if-then-elseif (b) c1 else c2

while-Schleifenwhile (b) c0 Zustand:

beschreibt, welche Werte aktuell in den Variablen (partielle Funktion) arithmetische/boole’sche Ausdr¨ucke:

Wert des Ausdrucks abh¨angig von Zustand (wg. Variablen)

(20)

Beispiel: einfache While-Sprache

Programmanweisungen:

Skip

VariablenzuweisungV :=e

sequentielle Komposition (Hintereinanderausf¨uhrung)c1; ;c2 if-then-elseif (b) c1 else c2

while-Schleifenwhile (b) c0 Zustand:

beschreibt, welche Werte aktuell in den Variablen (partielle Funktion) arithmetische/boole’sche Ausdr¨ucke:

Wert des Ausdrucks abh¨angig von Zustand (wg. Variablen)

(21)

Big Step Regeln

Syntax: hs, σi ⇒σ0 Anweisungs in Zustand σ liefert Endzustandσ0 A(a)σ Auswertung von arithm. Ausdruckain Zustand σ B(b)σ Auswertung von boole’schem. Ausdruck b in Zustand σ

⇒-Regeln: hSkip, σi ⇒σ hx :=a, σi ⇒σ(x 7→A(a)σ) B(b)σ=true hc, σi ⇒σ0

hif(b)c else c0, σi ⇒σ0

B(b)σ=false hc0, σi ⇒σ0 hif (b) c else c0, σi ⇒σ0 B(b)σ =true hc0, σi ⇒σ0 hwhile(b) c0, σ0i ⇒σ00

hwhile(b)c0, σi ⇒σ00 B(b)σ =false

hwhile(b) c0, σi ⇒σ

hc, σi ⇒σ0 hc0, σ0i ⇒σ00 hc; ;c0, σi ⇒σ00

(22)

Big Step Regeln

Syntax: hs, σi ⇒σ0 Anweisungs in Zustand σ liefert Endzustandσ0 A(a)σ Auswertung von arithm. Ausdruckain Zustand σ B(b)σ Auswertung von boole’schem. Ausdruck b in Zustand σ

⇒-Regeln: hSkip, σi ⇒σ hx :=a, σi ⇒σ(x 7→A(a)σ) B(b)σ=true hc, σi ⇒σ0

hif(b)c else c0, σi ⇒σ0

B(b)σ=false hc0, σi ⇒σ0 hif (b) c else c0, σi ⇒σ0 B(b)σ =true hc0, σi ⇒σ0 hwhile(b) c0, σ0i ⇒σ00

hwhile(b)c0, σi ⇒σ00 B(b)σ =false

hwhile(b) c0, σi ⇒σ

hc, σi ⇒σ0 hc0, σ0i ⇒σ00 hc; ;c0, σi ⇒σ00

(23)

Big Step Regeln

Syntax: hs, σi ⇒σ0 Anweisungs in Zustand σ liefert Endzustandσ0 A(a)σ Auswertung von arithm. Ausdruckain Zustand σ B(b)σ Auswertung von boole’schem. Ausdruck b in Zustand σ

⇒-Regeln: hSkip, σi ⇒σ hx :=a, σi ⇒σ(x 7→A(a)σ) B(b)σ=true hc, σi ⇒σ0

hif(b)c else c0, σi ⇒σ0

B(b)σ=false hc0, σi ⇒σ0 hif (b) c else c0, σi ⇒σ0 B(b)σ =true hc0, σi ⇒σ0 hwhile(b) c0, σ0i ⇒σ00

hwhile(b)c0, σi ⇒σ00 B(b)σ =false

hwhile(b) c0, σi ⇒σ

hc, σi ⇒σ0 hc0, σ0i ⇒σ00 hc; ;c0, σi ⇒σ00

(24)

Big Step Regeln

Syntax: hs, σi ⇒σ0 Anweisungs in Zustand σ liefert Endzustandσ0 A(a)σ Auswertung von arithm. Ausdruckain Zustand σ B(b)σ Auswertung von boole’schem. Ausdruck b in Zustand σ

⇒-Regeln: hSkip, σi ⇒σ hx :=a, σi ⇒σ(x 7→A(a)σ) B(b)σ=true hc, σi ⇒σ0

hif(b)c else c0, σi ⇒σ0

B(b)σ=false hc0, σi ⇒σ0 hif (b) c else c0, σi ⇒σ0 B(b)σ =true hc0, σi ⇒σ0 hwhile(b) c0, σ0i ⇒σ00

hwhile(b)c0, σi ⇒σ00 B(b)σ =false

hwhile(b) c0, σi ⇒σ

hc, σi ⇒σ0 hc0, σ0i ⇒σ00 hc; ;c0, σi ⇒σ00

(25)

Big Step Regeln

Syntax: hs, σi ⇒σ0 Anweisungs in Zustand σ liefert Endzustandσ0 A(a)σ Auswertung von arithm. Ausdruckain Zustand σ B(b)σ Auswertung von boole’schem. Ausdruck b in Zustand σ

⇒-Regeln: hSkip, σi ⇒σ hx :=a, σi ⇒σ(x 7→A(a)σ) B(b)σ=true hc, σi ⇒σ0

hif(b)c else c0, σi ⇒σ0

B(b)σ=false hc0, σi ⇒σ0 hif (b) c else c0, σi ⇒σ0 B(b)σ =true hc0, σi ⇒σ0 hwhile(b) c0, σ0i ⇒σ00

hwhile(b)c0, σi ⇒σ00 B(b)σ =false

hwhile(b) c0, σi ⇒σ

hc, σi ⇒σ0 hc0, σ0i ⇒σ00 hc; ;c0, σi ⇒σ00

(26)

Big Step Regeln

Syntax: hs, σi ⇒σ0 Anweisungs in Zustand σ liefert Endzustandσ0 A(a)σ Auswertung von arithm. Ausdruckain Zustand σ B(b)σ Auswertung von boole’schem. Ausdruck b in Zustand σ

⇒-Regeln: hSkip, σi ⇒σ hx :=a, σi ⇒σ(x 7→A(a)σ) B(b)σ=true hc, σi ⇒σ0

hif(b)c else c0, σi ⇒σ0

B(b)σ=false hc0, σi ⇒σ0 hif (b) c else c0, σi ⇒σ0 B(b)σ =true hc0, σi ⇒σ0 hwhile(b) c0, σ0i ⇒σ00

hwhile(b)c0, σi ⇒σ00 B(b)σ =false

hwhile(b) c0, σi ⇒σ

hc, σi ⇒σ0 hc0, σ0i ⇒σ00 hc; ;c0, σi ⇒σ00

(27)

Formalisierung in Isabelle

[[a]]σ wertet Ausdruckain σ aus, ersetztA(a)σ und B(b)σ von vorher inductive eval :: "com state state bool"

("h_,_i ⇒ _" [0,0,0] 81) where Skip: "hSkip,σi ⇒ σ"

| Assign: "hx:=a,σi ⇒ σ(x:=([[a]]σ))"

| Seq: "[[ hc,σi ⇒ σ’; hc’,σ’i ⇒ σ’’ ]] =⇒ hc;;c’,σi ⇒ σ’’"

| CondT:

"[[ [[b]]σ = true; hc,σi ⇒ σ’ ]] =⇒ hif (b) c else c’,σi ⇒ σ’"

| CondF:

"[[ [[b]]σ = false; hc’,σi ⇒ σ’ ]] =⇒ hif (b) c else c’,σi ⇒ σ’"

| WhileF: "[[b]]σ = false =⇒ hwhile (b) c’,σi ⇒ σ"

| WhileT: "[[ [[b]]σ = true; hc,σi ⇒ σ’; hwhile (b) c’,σ’i ⇒ σ’’ ]]

=⇒ hwhile (b) c’,σi ⇒ σ’’"

(28)

Jinja

λ

Isabe=lle β

α G. Klein and T. Nipkow.

A Machine-Checked Model for a Java-Like Language, Virtual Machine and Compiler.

Transaction on Programming Languages and Systems, 28(4):619-695, ACM, 2006.

http://afp.sf.net/entries/Jinja.shtml

(29)

Jinja

Ziel: formale Semantik von Java Uberblick:¨

beschr¨ankt auf Basiskonstrukte in Java

bietet Semantik und Typsystem f¨ur diese Konstrukte darauf basierend Typsicherheitsbeweis

auch JVM formalisiert, Semantik, Typsystem und Typsicherheitsbeweis

Durch deutlich komplexere Sprache mehr Formalisierungsarbeit n¨otig

(30)

Jinja

Ziel: formale Semantik von Java Uberblick:¨

beschr¨ankt auf Basiskonstrukte in Java

bietet Semantik und Typsystem f¨ur diese Konstrukte darauf basierend Typsicherheitsbeweis

auch JVM formalisiert, Semantik, Typsystem und Typsicherheitsbeweis

Durch deutlich komplexere Sprache mehr Formalisierungsarbeit n¨otig

(31)

Das Programm

Formalisierung der Klassenhierarchie als Liste von Klassen bezeichnet als Programm

jede Klasse

eindeutigen Namen

Oberklasse (falls keine Oberklasse, Oberklasse Object) Liste von Feldern

Liste von Methoden (jeweils mit Methodenr¨umpfen)

(32)

Das Programm

Formalisierung der Klassenhierarchie als Liste von Klassen bezeichnet als Programm

jede Klasse

eindeutigen Namen

Oberklasse (falls keine Oberklasse, Oberklasse Object) Liste von Feldern

Liste von Methoden (jeweils mit Methodenr¨umpfen)

(33)

Exceptions

Jinja besitzt analog zu Java Exceptions

Problem: wie semantisch darstellen, dass Exception ausgel¨ost?

L¨osung:

alle Anweisungen sind Ausdr¨ucke, d.h. werten zu etwas aus keine Exception: Programm wertet zu einem Wert aus (f¨ur alle Anweisungen zu dummy-Wert unit)

Exception ausgel¨ost: Programm wertet zu dieser Exception aus 3 vordefinierte Exceptions:

ClassCastException OutOfMemoryException NullPointerException

(34)

Exceptions

Jinja besitzt analog zu Java Exceptions

Problem: wie semantisch darstellen, dass Exception ausgel¨ost?

L¨osung:

alle Anweisungen sind Ausdr¨ucke, d.h. werten zu etwas aus keine Exception: Programm wertet zu einem Wert aus (f¨ur alle Anweisungen zu dummy-Wert unit)

Exception ausgel¨ost: Programm wertet zu dieser Exception aus 3 vordefinierte Exceptions:

ClassCastException OutOfMemoryException NullPointerException

(35)

Exceptions

Jinja besitzt analog zu Java Exceptions

Problem: wie semantisch darstellen, dass Exception ausgel¨ost?

L¨osung:

alle Anweisungen sind Ausdr¨ucke, d.h. werten zu etwas aus keine Exception: Programm wertet zu einem Wert aus (f¨ur alle Anweisungen zu dummy-Wert unit)

Exception ausgel¨ost: Programm wertet zu dieser Exception aus 3 vordefinierte Exceptions:

ClassCastException OutOfMemoryException NullPointerException

(36)

Ausdr¨ ucke

Jinja bietet:

Objekterstellung casten von Objekten bin¨are Operatoren

Variablenzugriff und -zuweisung Feldzugriff und -zuweisung

Methodenaufruf (inkl. dynamischer Bindung) Blockstrukturen mit lokalen Variablen sequentielle Komposition

if-then-else while-Schleifen

Werfen und Fangen von beliebigen Exceptions

(37)

Laufzeitstruktur

wie in Java: Objekte auf dem Heap

Heap: Abbildung Adressen (nat¨urliche Zahlen) nach Objekte Objekt: Tupel aus Klassenname und Feldern

Felder: Abbildung Tupel (Feldname, definierende Klasse) nach Wert Lookup kann je nach stat. Typ Feld gleichen Namens

in verschiedenen Klassen finden (Feldredefinition) alle solche Werte m¨ussen gespeichert werden k¨onnen,

also definierende Klasse n¨otig

(38)

Laufzeitstruktur

wie in Java: Objekte auf dem Heap

Heap: Abbildung Adressen (nat¨urliche Zahlen) nach Objekte Objekt: Tupel aus Klassenname und Feldern

Felder: Abbildung Tupel (Feldname, definierende Klasse) nach Wert Lookup kann je nach stat. Typ Feld gleichen Namens

in verschiedenen Klassen finden (Feldredefinition) alle solche Werte m¨ussen gespeichert werden k¨onnen,

also definierende Klasse n¨otig

(39)

Laufzeitstruktur

wie in Java: Objekte auf dem Heap

Heap: Abbildung Adressen (nat¨urliche Zahlen) nach Objekte Objekt: Tupel aus Klassenname und Feldern

Felder: Abbildung Tupel (Feldname, definierende Klasse) nach Wert Lookup kann je nach stat. Typ Feld gleichen Namens

in verschiedenen Klassen finden (Feldredefinition) alle solche Werte m¨ussen gespeichert werden k¨onnen,

also definierende Klasse n¨otig

(40)

Laufzeitstruktur

wie in Java: Objekte auf dem Heap

Heap: Abbildung Adressen (nat¨urliche Zahlen) nach Objekte Objekt: Tupel aus Klassenname und Feldern

Felder: Abbildung Tupel (Feldname, definierende Klasse) nach Wert Lookup kann je nach stat. Typ Feld gleichen Namens

in verschiedenen Klassen finden (Feldredefinition) alle solche Werte m¨ussen gespeichert werden k¨onnen,

also definierende Klasse n¨otig

(41)

Laufzeitstruktur

wie in Java: Objekte auf dem Heap

Heap: Abbildung Adressen (nat¨urliche Zahlen) nach Objekte Objekt: Tupel aus Klassenname und Feldern

Felder: Abbildung Tupel (Feldname, definierende Klasse) nach Wert Lookup kann je nach stat. Typ Feld gleichen Namens

in verschiedenen Klassen finden (Feldredefinition) alle solche Werte m¨ussen gespeichert werden k¨onnen,

also definierende Klasse n¨otig

(42)

Laufzeitstruktur

wie in Java: Objekte auf dem Heap

Heap: Abbildung Adressen (nat¨urliche Zahlen) nach Objekte Objekt: Tupel aus Klassenname und Feldern

Felder: Abbildung Tupel (Feldname, definierende Klasse) nach Wert Lookup kann je nach stat. Typ Feld gleichen Namens

in verschiedenen Klassen finden (Feldredefinition) alle solche Werte m¨ussen gespeichert werden k¨onnen,

also definierende Klasse n¨otig

(43)

Semantik

Zustand: modelliert aus Tupel Heap

lokale Variablen wie bisher, part. Funktion Variable nach Wert Semantik braucht Programm als Parameter

ausgef¨uhrter Ausdruck entspricht main-Methode Zwei Semantiken definiert als induktive Mengen:

Big Step: wie bei While, Auswertung zu Endzustand Small Step: Auswertung zu Restausdruck und -zustand Aquivalenz der beiden Semantiken bewiesen¨

(44)

Semantik

Zustand: modelliert aus Tupel Heap

lokale Variablen wie bisher, part. Funktion Variable nach Wert Semantik braucht Programm als Parameter

ausgef¨uhrter Ausdruck entspricht main-Methode Zwei Semantiken definiert als induktive Mengen:

Big Step: wie bei While, Auswertung zu Endzustand Small Step: Auswertung zu Restausdruck und -zustand Aquivalenz der beiden Semantiken bewiesen¨

(45)

Semantik

Zustand: modelliert aus Tupel Heap

lokale Variablen wie bisher, part. Funktion Variable nach Wert Semantik braucht Programm als Parameter

ausgef¨uhrter Ausdruck entspricht main-Methode Zwei Semantiken definiert als induktive Mengen:

Big Step: wie bei While, Auswertung zu Endzustand Small Step: Auswertung zu Restausdruck und -zustand Aquivalenz der beiden Semantiken bewiesen¨

(46)

Semantik

auf diesem Level wichtig: Abstraktion

damit Regeln lesbar und verst¨andlich, Auslagerung der Berechnungen und Zusicherungen in Funktionen bzw. Pr¨adikate

Beispiel: dynamischer Lookup mittels Pr¨adikat P `C sees M :Ts →T = (pns,body) inD

“In Programm P sieht Klasse C MethodeM mit Parameternpns mit TypenTs, R¨uckgabetyp T und Methodenrumpf body in KlasseD”

Im Endeffekt geschickte Mengenmanipulation

(47)

Semantik

auf diesem Level wichtig: Abstraktion

damit Regeln lesbar und verst¨andlich, Auslagerung der Berechnungen und Zusicherungen in Funktionen bzw. Pr¨adikate

Beispiel: dynamischer Lookup mittels Pr¨adikat P `C sees M :Ts →T = (pns,body) inD

“In Programm P sieht Klasse C MethodeM mit Parameternpns mit TypenTs, R¨uckgabetyp T und Methodenrumpf body in KlasseD”

Im Endeffekt geschickte Mengenmanipulation

(48)

Semantik

auf diesem Level wichtig: Abstraktion

damit Regeln lesbar und verst¨andlich, Auslagerung der Berechnungen und Zusicherungen in Funktionen bzw. Pr¨adikate

Beispiel: dynamischer Lookup mittels Pr¨adikat P `C sees M :Ts →T = (pns,body) inD

“In Programm P sieht Klasse C MethodeM mit Parameternpns mit TypenTs, R¨uckgabetyp T und Methodenrumpf body in KlasseD”

Im Endeffekt geschickte Mengenmanipulation

(49)

Semantik

auf diesem Level wichtig: Abstraktion

damit Regeln lesbar und verst¨andlich, Auslagerung der Berechnungen und Zusicherungen in Funktionen bzw. Pr¨adikate

Beispiel: dynamischer Lookup mittels Pr¨adikat P `C sees M :Ts →T = (pns,body) inD

“In Programm P sieht Klasse C MethodeM mit Parameternpns mit TypenTs, R¨uckgabetyp T und Methodenrumpf body in KlasseD”

Im Endeffekt geschickte Mengenmanipulation

(50)

Typsystem

Typsystem ordnet jedem Ausdruck Typ zu

parametrisiert mit Programm und Typumgebung: Fkt. Variablen nach Typ Syntax: P,E `e :T

auch Typsystem definiert als induktive Menge

pr¨uft auch weitere Eigenschaften, die zu Compilezeit gelten m¨ussen:

Cast nur auf Klasse ober- oder unterhalb des gecasteten Ausdrucks Feldzugriff sieht statisch Klasse mit Felddefinition

Methodenaufruf sieht statisch Klasse mit Methodendefinition (garantiert, dass dynamischer Lookup Ziel findet)

(51)

Typsystem

Typsystem ordnet jedem Ausdruck Typ zu

parametrisiert mit Programm und Typumgebung: Fkt. Variablen nach Typ Syntax: P,E `e :T

auch Typsystem definiert als induktive Menge

pr¨uft auch weitere Eigenschaften, die zu Compilezeit gelten m¨ussen:

Cast nur auf Klasse ober- oder unterhalb des gecasteten Ausdrucks Feldzugriff sieht statisch Klasse mit Felddefinition

Methodenaufruf sieht statisch Klasse mit Methodendefinition (garantiert, dass dynamischer Lookup Ziel findet)

(52)

Typsicherheitsbeweis

Typsicherheit durch Kombination Small Step Semantik und Typsystem (plus einige weitere Plausibilit¨atsannahmen)

Typsicherheit traditionell durch diese Aussagen: [Wright,Felleisen]

Progress: Semantik darf nicht steckenbleiben

“wohlgetypter Ausdruck, der nicht fertig ausgewertet zu

Wert oder Exception, muss weiter ausgewertet werden k¨onnen”

Preservation: Typ des Ausdrucks darf nur kleiner werden

“durch Anwendung einer Semantikregel darf resultierender Restausdruck nur Typ≤dem Typ des Ausgangsausdruck haben”

(53)

Typsicherheitsbeweis

Typsicherheit durch Kombination Small Step Semantik und Typsystem (plus einige weitere Plausibilit¨atsannahmen)

Typsicherheit traditionell durch diese Aussagen: [Wright,Felleisen]

Progress: Semantik darf nicht steckenbleiben

“wohlgetypter Ausdruck, der nicht fertig ausgewertet zu

Wert oder Exception, muss weiter ausgewertet werden k¨onnen”

Preservation: Typ des Ausdrucks darf nur kleiner werden

“durch Anwendung einer Semantikregel darf resultierender Restausdruck nur Typ≤dem Typ des Ausgangsausdruck haben”

(54)

Typsicherheitsbeweis

Typsicherheit durch Kombination Small Step Semantik und Typsystem (plus einige weitere Plausibilit¨atsannahmen)

Typsicherheit traditionell durch diese Aussagen: [Wright,Felleisen]

Progress: Semantik darf nicht steckenbleiben

“wohlgetypter Ausdruck, der nicht fertig ausgewertet zu

Wert oder Exception, muss weiter ausgewertet werden k¨onnen”

Preservation: Typ des Ausdrucks darf nur kleiner werden

“durch Anwendung einer Semantikregel darf resultierender Restausdruck nur Typ≤dem Typ des Ausgangsausdruck haben”

(55)

Typsicherheitsbeweis

Beweise durch Regelinduktion ¨uber das Typsystem Problem: Typsystem daf¨ur zu restriktiv!

Beispiel: Methodenlookup durch Semantikregelanwendung anderes Ziel L¨osung: Laufzeit-Typsystem

Induktionsinvariante, die Haupteigenschaften des Typsystems beibeh¨alt pr¨uft auch Heapinhalt im Gegensatz zu statischem Typsystem

(56)

Typsicherheitsbeweis

Beweise durch Regelinduktion ¨uber das Typsystem Problem: Typsystem daf¨ur zu restriktiv!

Beispiel: Methodenlookup durch Semantikregelanwendung anderes Ziel L¨osung: Laufzeit-Typsystem

Induktionsinvariante, die Haupteigenschaften des Typsystems beibeh¨alt pr¨uft auch Heapinhalt im Gegensatz zu statischem Typsystem

(57)

Erweiterungen

Ziel: Jinja noch n¨aher an Java aktuell Arbeit an:

Arrays (bereits abgeschlossen) Threads (in Arbeit):

λ

Isabe=lle β

α Andreas Lochbihler.

Type Safe Nondeterminism - A Formal Semantics of Java Threads.

Workshop on Foundations of Object-Oriented Languages, 2008.

http://afp.sf.net/entries/JinjaThreads.shtml

Referenzen

ÄHNLICHE DOKUMENTE

Eine gr¨oßte Zahl gibt es nicht, denn die Zahl 200 000 000 001 ist noch gr¨oßer, und durch weiteres Verdoppeln oder +1-Addieren kann man immer noch gr¨oßere Zahlen

Unter dem Gesichtspunkt der Generalität ist es unerheblich, dass nicht alle Arten der Kommunikation durch Linda oder eine andere Koordinierungssprache implementiert sind

Auch die Scherungsinvarianz l¨asst sich aus (D1-3) herlei- ten.. Ent- sprechend hat man Linkssysteme f¨ur die linke Hand. Jedes unabh¨angige Tripel von Vek- toren bildet entweder

Die Differenz aus 45 und 22 ist der Subtrahend in einer Differenz, wo der Minuend die Summe aller nat¨ urlichen Zahlen von 1 bis 20 ist.. Berechne die

Ubungen zur Linearen Algebra II ¨ Bergische Universit¨ at Wuppertal.. Blatt

Christoph L¨ uth, Lutz Schr¨ oder Universit¨ at Bremen Wintersemester 2009/10. Das

Die Zeilen bei einer Datenbanktabelle heißen oder Wenn ein Attribut eines Tupels einen Nullwert enthält, so bedeutet dies, dass dieses Attribut keinen besitzt und somit

Operationen und Funktionen f¨ ur Tupel: Bei Tupeln sind alle Listenoperationen er- laubt, die das Original-Tupel nicht ver¨