Serge Autexier, Christoph Lüth
Universität Bremen
Sommersemester 2018
11:50:38 2018-06-05 1 [22]
Organisatorisches
I Veranstalter:
Christoph Lüth christoph.lueth@dfki.de
MZH 4186, Tel. 59830
Serge Autexier serge.autexier@dfki.de
Cartesium 2.11, Tel. 59834
I Termine:
I Vorlesung: Dienstag, 12 – 14, MZH 6210
I Übung: Donnerstag, 12 – 14, MZH 1110
I Webseite:
http://www.informatik.uni-bremen.de/~cxl/lehre/ksgm.ss18
I “Leichtgewichtige” Übungsblätter, diein der Übungbearbeitet und schnellkorrigiert werden können.
I ÜbungsblättervertiefenVorlesungsstoff, Bewertung gibt Feedback.
I Übungsbetrieb:
I Gruppen bis zu drei Studierende
I Ausgabe: Donnerstag in der Übung
I Bearbeitung: in der Übung
I Abgabe: Donnerstag abend
Korrekte Software 3 [22]
Prüfungsform und Übungsbetrieb
I 10 Übungsblätter (geplant)
I Bewertung:
I A (sehr gut, 1.3) — nichts zu meckern, keine/kaum Fehler
I B (gut, 2.3) — kleine Fehler, sonst gut
I C (befriedigend, 3.3) — größere Fehler oder Mängel
I Nicht bearbeitet — oder zu viele Fehler
I Prüfungsleistung:
I Mündliche Prüfung
I Einzelprüfung ca. 20– 30 Minuten
I Übungsbetrieb (bis zu 20% Bonuspunkte, keine Voraussetzung)
Korrekte Software 5 [22]
Software-Disaster I: Therac-25
Mariner 1 (27.08.1962), Mars Climate Orbiter (1999), Ariane 5 (04.06.1996)
Korrekte Software 7 [22]
Software-Disaster III: AT&T (15.01.1990)
w h i l e ( ! empty ( r i n g _ r c v _ b u f f e r )
&& ! empty ( s i d e _ b u f f e r empty ) ) { i n i t i a l i z e p o i n t e r t o f i r s t m e s s a g e b u f f e r ; g e t c o p y o f b u f f e r ;
s w i t c h ( m e s s a g e ) {
c a s e ( i n c o m i n g _ m e s s a g e ) :
i f ( s e n d e r i s o u t _ o f _ s e r v i c e ) { i f ( empty ( r i n g _ w r t _ b u f f e r ) ) {
s e n d " i n s e r v i c e " t o s t a t u s map ; } e l s e {
break; }
p r o c e s s i n c o m i n g message , s e t up p o i n t e r s ; break;
} }
do o p t i o n a l p a r a m e t e r work ;
Sevilla, 09.05.2015
Korrekte Software 9 [22]
Inhalt der Vorlesung
Korrekte Software im Lehrbuch:
I Spielzeugsprache
I Wenig Konstrukte
I Kleine Beispiele
Korrekte Software im Einsatz:
I Richtige Programmiersprache
I Mehr als nur ganze Zahlen
I Skalierbarkeit — wie können große Programme verifiziert werden?
Korrekte Software 11 [22]
Inhalt
I Grundlagen:
I Beweis derKorrektheitvon Programmen: derFloyd-Hoare-Kalkül
I Bedeutungvon Programmen:Semantik
I Betrachtete Programmiersprache: “C0” (erweiterte Untermenge von C)
I Erweiterung der Programmkonstrukte und des Hoare-Kalküls:
1. Referenzen (Zeiger)
2. Funktion und Prozeduren (Modularität) 3. ReicheDatenstrukturen(Felder,struct)
I Operationale Semantik
I Denotationale Semantik
I Äquivalenz der Operationalen und Denotationalen Semantik
I Die Floyd-Hoare-Logik
I Invarianten und die Korrektheit des Floyd-Hoare-Kalküls
I Strukturierte Datentypen
I Modellierung und Spezifikation
I Verifikationsbedingungen
I Vorwärts mit Floyd und Hoare
I Funktionen und Prozeduren
I Referenzen
I Ausblick und Rückblick
Korrekte Software 13 [22]
Warum Semantik?
Idee
I Was wird hier berechnet?
I Wir berechnen symbolisch, welche Werte Variablen über den
Programmverlauf annehmen.
p= 1 ; c= 1 ;
w h i l e ( c <= n ) { p = p ∗ c ; c = c + 1 ; }
Korrekte Software 15 [22]
Idee
I Was wird hier berechnet?p =n!
I Warum? Wie können wir das beweisen?
I Wir berechnen symbolisch, welche Werte Variablen über den
Programmverlauf annehmen.
p= 1 ; c= 1 ;
w h i l e ( c <= n ) { p = p ∗ c ; c = c + 1 ; }
I Was wird hier berechnet?p =n!
I Warum? Wie können wir das beweisen?
I Wir berechnen symbolisch, welche Werte Variablen über den
Programmverlauf annehmen.
p= 1 ; c= 1 ;
w h i l e ( c <= n ) { p = p ∗ c ; c = c + 1 ; }
Korrekte Software 15 [22]
Semantik von Programmiersprachen
Drei wesentliche Möglichkeiten:
I Operationale Semantik:
Ausführung auf einerabstraktenMaschine
I Denotationale Semantik:
Abbildung in ein mathematisches Objekt
I Axiomatische Semantik:
Beschreibung durch eines Programmes durch seineEigenschaften
I C0 ist eineUntermengeder Sprache C
I C0-Programme sindausführbare C-Programme
I Erste Ausbaustufe:
I Zuweisungen, Fallunterscheidungen, Schleifen
I Datentypen: ganze Zahlen mit Arithmetik
I Relationen: Vergleich (=,≤)
I Boolsche Operatoren: Konjunktion, Disjunktion, Negation
I 1. Ausbaustufe: Funktionen und Prozeduren
I 2. Ausbaustufe: Felder und Strukturen
I 3. Ausbaustufe: Referenzen (Pointer)
I Fehlt:union,goto, . . .
Korrekte Software 17 [22]
Operationale Semantik
I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine
I Abstrakte Maschine hatimpliziten Zustand
I Zustand ordnetAdressen veränderlicheWerten zu
I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;
c = 1 ;
w h i l e( c <= n ) { p = p ∗ c ; c = c + 1 ; }
p ? c ? n 3
p 1 c ? n 3
p 1 c 1 n 3
p 1 c 1 n 3
p 1 c 2 n 3
p 2 c 2 n 3
p 2 c 3 n 3
p 6 c 3 n 3
p 6 c 4 n 3
Operationale Semantik
I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine
I Abstrakte Maschine hatimpliziten Zustand
I Zustand ordnetAdressen veränderlicheWerten zu
I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;
c = 1 ;
w h i l e( c <= n ) { p = p ∗ c ; c = c + 1 ; }
p ? c ? n 3
p 1 c ? n 3
p 1 c 2 n 3
p 2 c 2 n 3
p 2 c 3 n 3
p 6 c 3 n 3
p 6 c 4 n 3
Korrekte Software 18 [22]
Operationale Semantik
I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine
I Abstrakte Maschine hatimpliziten Zustand
I Zustand ordnetAdressen veränderlicheWerten zu
I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;
c = 1 ;
w h i l e( c <= n ) { p = p ∗ c ; c = c + 1 ; }
p ? c ? n 3
p 1 c ? n 3
p 1 c 1 n 3
p 1 c 1 n 3
p 1 c 2 n 3
p 2 c 2 n 3
p 2 c 3 n 3
p 6 c 3 n 3
p 6 c 4 n 3
Operationale Semantik
I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine
I Abstrakte Maschine hatimpliziten Zustand
I Zustand ordnetAdressen veränderlicheWerten zu
I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;
c = 1 ;
w h i l e( c <= n ) { p = p ∗ c ; c = c + 1 ; }
p ? c ? n 3
p 1 c ? n 3
p 1 c 1 n 3
p 1 c 1 n 3
Korrekte Software 18 [22]
Operationale Semantik
I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine
I Abstrakte Maschine hatimpliziten Zustand
I Zustand ordnetAdressen veränderlicheWerten zu
I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;
c = 1 ;
w h i l e( c <= n ) { p = p ∗ c ; c = c + 1 ; }
p ? c ? n 3
p 1 c ? n 3
p 1 c 1 n 3
p 1 c 1 n 3
p 1 c 2 n 3
p 2 c 2 n 3
p 2 c 3 n 3
p 6 c 3 n 3
p 6 c 4 n 3
Operationale Semantik
I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine
I Abstrakte Maschine hatimpliziten Zustand
I Zustand ordnetAdressen veränderlicheWerten zu
I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;
c = 1 ;
w h i l e( c <= n ) { p = p ∗ c ; c = c + 1 ; }
p ? c ? n 3
p 1 c ? n 3
p 1 c 1 n 3
p 1 c 1 n 3
p 1 c 2 n 3
p 2 c 2 n 3
Korrekte Software 18 [22]
Operationale Semantik
I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine
I Abstrakte Maschine hatimpliziten Zustand
I Zustand ordnetAdressen veränderlicheWerten zu
I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;
c = 1 ;
w h i l e( c <= n ) { p = p ∗ c ; c = c + 1 ; }
p ? c ? n 3
p 1 c ? n 3
p 1 c 1 n 3
p 1 c 1 n 3
p 1 c 2 n 3
p 2 c 2 n 3
p 2 c 3 n 3
p 6 c 3 n 3
p 6 c 4 n 3
Operationale Semantik
I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine
I Abstrakte Maschine hatimpliziten Zustand
I Zustand ordnetAdressen veränderlicheWerten zu
I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;
c = 1 ;
w h i l e( c <= n ) { p = p ∗ c ; c = c + 1 ; }
p ? c ? n 3
p 1 c ? n 3
p 1 c 1 n 3
p 1 c 1 n 3
p 1 c 2 n 3
p 2 c 2 n 3
p 2 c 3 n 3
p 6 c 3 n 3
Korrekte Software 18 [22]
Operationale Semantik
I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine
I Abstrakte Maschine hatimpliziten Zustand
I Zustand ordnetAdressen veränderlicheWerten zu
I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;
c = 1 ;
w h i l e( c <= n ) { p = p ∗ c ; c = c + 1 ; }
p ? c ? n 3
p 1 c ? n 3
p 1 c 1 n 3
p 1 c 1 n 3
p 1 c 2 n 3
p 2 c 2 n 3
p 2 c 3 n 3
p 6 c 3 n 3
p 6 c 4 n 3
I Kernkonzept: Abbildung von Programmen auf mathematisches Gegenstück (Denotat)
I PartielleFunktionen zwischen Zuständen [[c]] :σ * σ
I Beispiel:
p = 1 ; c = 1 ; // p1 w h i l e ( c <= n ) {
p = p ∗ c ; c = c + 1 ; // p2 }
// p3
[[p1]](σ) =σ(p 7→1)(c 7→1)
[[p2]](σ) =σ(p 7→σ(p)∗σ(c))(c 7→σ(c) + 1) [[p3]](σ) = ???
Korrekte Software 19 [22]
Denotationale Semantik
I Kernkonzept: Abbildung von Programmen auf mathematisches Gegenstück (Denotat)
I PartielleFunktionen zwischen Zuständen [[c]] :σ * σ
I Beispiel:
p = 1 ; c = 1 ; // p1 w h i l e ( c <= n ) {
p = p ∗ c ; c = c + 1 ; // p2 }
// p3
[[p1]](σ) =σ(p 7→1)(c 7→1)
[[p2]](σ) =σ(p 7→σ(p)∗σ(c))(c 7→σ(c) + 1) [[p3]](σ) =fix([[p2]])([[p1]](σ))
I Kernkonzept: Abbildung von Programmen auf mathematisches Gegenstück (Denotat)
I PartielleFunktionen zwischen Zuständen [[c]] :σ * σ
I Beispiel:
p = 1 ; c = 1 ; // p1 w h i l e ( c <= n ) {
p = p ∗ c ; c = c + 1 ; // p2 }
// p3
[[p1]](σ) =σ(p 7→1)(c 7→1)
[[p2]](σ) =σ(p 7→σ(p)∗σ(c))(c 7→σ(c) + 1) [[p3]] =fix([[p2]])◦[[p1]]
Korrekte Software 19 [22]
Axiomatische Semantik
I Kernkonzept: Charakterisierung von Programmen durch Zusicherungen
I Zusicherungen sind zustandsabhängige Prädikate
I Beispiel (mitn= 3) // (1)
p = 1 ; // (2) c = 1 ; // (3) w h i l e( c <= n ) {
// (4) p = p ∗ c ; c = c + 1 ; } // (5)
(1) n= 3
(2) p = 1∧n = 3
(3) p = 1∧c = 1∧n= 3 (4) ???
(5) p = 6∧c = 4∧n= 3
I Kernkonzept: Charakterisierung von Programmen durch Zusicherungen
I Zusicherungen sind zustandsabhängige Prädikate
I Beispiel (mitn= 3) // (1)
p = 1 ; // (2) c = 1 ; // (3) w h i l e( c <= n ) {
// (4) p = p ∗ c ; c = c + 1 ; } // (5)
(1) n= 3
(2) p = 1∧n = 3
(3) p = 1∧c = 1∧n= 3
(4) (p = 1∧c = 1∨p= 1∧c = 2∨ p = 2∧c = 3∨p= 6∧c = 4)
∧n= 3
(5) p = 6∧c = 4∧n= 3
Korrekte Software 20 [22]
Axiomatische Semantik
I Kernkonzept: Charakterisierung von Programmen durch Zusicherungen
I Zusicherungen sind zustandsabhängige Prädikate
I Beispiel (mitn= 3) // (1)
p = 1 ; // (2) c = 1 ; // (3) w h i l e( c <= n ) {
// (4) p = p ∗ c ; c = c + 1 ; } // (5)
(1) n= 3
(2) p = 1∧n = 3
(3) p = 1∧c = 1∧n= 3 (4) p = (c −1)!∧n= 3
(5) p = 6∧c = 4∧n= 3
p = 1;
c := 1;
while (c <= n) { p= p * c;
c= c + 1;
}
Operational
Axiomatisch Denotational
Programm
Korrekte Software 21 [22]
Zusammenfassung
I Wir wollen dieBedeutung(Semantik) von Programmen beschreiben, um ihre Korrektheit beweisen zu können.
I Dazu gibt es verschiedene Ansätze, die wir betrachten werden.
I Nächste Woche geht es mit dem ersten los:operationaleSemantik
Serge Autexier, Christoph Lüth
Universität Bremen
Sommersemester 2018
14:15:47 2018-06-22 1 [26]
Fahrplan
I Einführung
I Operationale Semantik
I Denotationale Semantik
I Äquivalenz der Operationalen und Denotationalen Semantik
I Die Floyd-Hoare-Logik
I Invarianten und die Korrektheit des Floyd-Hoare-Kalküls
I Strukturierte Datentypen
I Modellierung und Spezifikation
I Verifikationsbedingungen
I Vorwärts mit Floyd und Hoare
I Funktionen und Prozeduren
I Referenzen
// GGT(A,B)
i f ( a == 0 ) r = b ; e l s e {
w h i l e ( b != 0 ) { i f ( a <= b )
b = b − a ; e l s e a = a − b ; }
r = a ; }
I Programme berechnenWerte
I Basierend auf
I Werte sindVariablenzugewiesen
I Evaluation vonAusdrücken
I Folgt dem Programmablauf
Korrekte Software 3 [26]
Unsere Programmiersprache
Wir betrachten einen Ausschnitt der ProgrammierspracheC(C0).
Ausbaustufe 1 kennt folgende Konstrukte:
I Typen: int;
I Ausdrücke: Variablen, Literale (für ganze Zahlen), arithmetische Operatoren (für ganze Zahlen), Relationen (==,<, . . . ), boolsche Operatoren (&&, ||);
I Anweisungen:
I Fallunterscheidung (if. . .else. . . ), Iteration (while), Zuweisung, Blöcke;
I Sequenzierung und leere Anweisung sind implizit
I Die (operationale) Semantik einer imperativen Sprache wie C0 ist ein Zustandsübergang: das System hat einen impliziten Zustand, der durch Zuweisung vonWertenan Adressen geändert werden kann.
Systemzustände
I Ausdrücke werten zuWerten V(hier ganze Zahlen) aus.
I AdressenLocsind hier Programmvariablen (Namen)
I EinSystemzustandbildet Adressen auf Werte ab: Σ =Loc*V
I Ein Programm bildet einen Anfangszustandmöglicherweiseauf einen Endzustand ab (wenn esterminiert).
I Zusicherungen sind Prädikate über dem Systemzustand.
Korrekte Software 5 [26]
C0: Ausdrücke und Anweisungen
Aexp a::=Z|Idt|a1+a2 |a1−a2 |a1∗a2 |a1/a2
Bexp b ::=1|0|a1==a2 |a1<a2|!b |b1&&b2 |b1||b2 Exp e :=a|b
Stmt c ::= Idt=Exp
| if(b) c1 else c2
| while (b) c
| c1;c2
| { }
NB: Nicht diekonkrete Syntax.
x = 1 ;
w h i l e ( y != 0 ) { y = y−1;
x = 2∗x ; }
// {x = 2Y}
// {a≥0∧b≥0}
r = b ; q = 0 ;
w h i l e ( b <= r ) { r = r−a ;
q = q +1;
}
// {a=b∗q+r∧r <b}
c = 1 ;
w h i l e ( c<=n ) { c = c +1;
p = p∗c ; }
//{p=n!}
//{0≤a}
t = 1 ; s = 1 ; i = 0 ;
w h i l e ( s <= a ) { t = t + 2 ; s = s + t ; i = i + 1 ; }
//{i2≤a∧a<(i+ 1)2}
Korrekte Software 7 [26]
Operationale Semantik: Arithmetische Ausdrücke
Ein arithmetischer Ausdruck a wertet unter gegebenen Zustandσ zu einer ganzen Zahl n (Wert) aus oder zu einem Fehler⊥.
I Aexpa::=Z|Idt|a1+a2 |a1−a2 |a1∗a2 |a1 / a2
I Zustände bilden Adressen/Programmvariablen auf Werte ab (σ)
ha, σi →Aexp n|⊥
Regeln:
hn, σi →Aexp n x ∈Loc,x∈Dom(σ), σ(x) =v
hx, σi →Aexp v
x ∈Loc,x6∈Dom(σ) hx, σi →Aexp ⊥
Operationale Semantik: Arithmetische Ausdrücke
Ein arithmetischer Ausdruck a wertet unter gegebenen Zustandσ zu einer ganzen Zahl n (Wert) aus oder zu einem Fehler⊥.
I Aexpa::=Z|Idt|a1+a2 |a1−a2 |a1∗a2 |a1 / a2
I Zustände bilden Adressen/Programmvariablen auf Werte ab (σ)
ha, σi →Aexp n|⊥
Regeln:
hn, σi →Aexp n
Korrekte Software 8 [26]
Operationale Semantik: Arithmetische Ausdrücke
Ein arithmetischer Ausdruck a wertet unter gegebenen Zustandσ zu einer ganzen Zahl n (Wert) aus oder zu einem Fehler⊥.
I Aexpa::=Z|Idt|a1+a2 |a1−a2 |a1∗a2 |a1 / a2
I Zustände bilden Adressen/Programmvariablen auf Werte ab (σ)
ha, σi →Aexp n|⊥
Regeln:
hn, σi →Aexp n x ∈Loc,x∈Dom(σ), σ(x) =v
hx, σi →Aexp v
x ∈Loc,x6∈Dom(σ) hx, σi →Aexp ⊥
Operationale Semantik: Arithmetische Ausdrücke
I Aexpa::=Z|Idt|a1+a2 |a1−a2 |a1∗a2 |a1 / a2 ha, σi →Aexp n⊥¯
ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni ∈Z,n Summe n1 undn2 ha1+a2, σi →Aexp n
ha1, σi →Aexp n1 ha2, σi →Aexp n2 falls n1 =⊥oder n2 =⊥ ha1+a2, σi →Aexp ⊥
ha1, σi →Aexp n1 ha2, σi →Aexp n2 fallsn1 =⊥oder n2 =⊥ ha1−a2, σi →Aexp ⊥
Korrekte Software 9 [26]
Operationale Semantik: Arithmetische Ausdrücke
I Aexpa::=Z|Idt|a1+a2 |a1−a2 |a1∗a2 |a1 / a2 ha, σi →Aexp n⊥¯
ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni ∈Z,n Summe n1 undn2 ha1+a2, σi →Aexp n
ha1, σi →Aexp n1 ha2, σi →Aexp n2 falls n1 =⊥oder n2 =⊥ ha1+a2, σi →Aexp ⊥
ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni ∈Z,n Diff.n1 und n2 ha1−a2, σi →Aexp n
ha1, σi →Aexp n1 ha2, σi →Aexp n2 falls n1 =⊥oder n2 =⊥ ha1−a2, σi →Aexp ⊥
Operationale Semantik: Arithmetische Ausdrücke
I Aexpa::=Z|Idt|a1+a2 |a1−a2 |a1∗a2 |a1 / a2
ha, σi →Aexpn|⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nProduktn1und n2
ha1∗a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥oder n2=⊥ ha1∗a2, σi →Aexp⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥,n2=⊥odern2= 0 ha1/a2, σi →Aexp⊥
Korrekte Software 10 [26]
Operationale Semantik: Arithmetische Ausdrücke
I Aexpa::=Z|Idt|a1+a2 |a1−a2 |a1∗a2 |a1 / a2
ha, σi →Aexpn|⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nProduktn1und n2
ha1∗a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥oder n2=⊥ ha1∗a2, σi →Aexp⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,n26= 0,nQuotientn1,n2
ha1/a2, σi →Aexp n
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥,n2=⊥odern2= 0 ha1/a2, σi →Aexp⊥
Sei σ(x) = 6, σ(y) = 5.
h(x+y)∗(x−y), σi →Aexp
Korrekte Software 11 [26]
Beispiel-Ableitungen
Sei σ(x) = 6, σ(y) = 5.
hx+y, σi →Aexp hx−y, σi →Aexp
h(x+y)∗(x−y), σi →Aexp
Sei σ(x) = 6, σ(y) = 5.
hx, σi →Aexp6
hx+y, σi →Aexp hx−y, σi →Aexp
h(x+y)∗(x−y), σi →Aexp
Korrekte Software 11 [26]
Beispiel-Ableitungen
Sei σ(x) = 6, σ(y) = 5.
hx, σi →Aexp6 hy, σi →Aexp 5
hx+y, σi →Aexp hx−y, σi →Aexp
h(x+y)∗(x−y), σi →Aexp
Sei σ(x) = 6, σ(y) = 5.
hx, σi →Aexp6 hy, σi →Aexp 5
hx+y, σi →Aexp11 hx−y, σi →Aexp
h(x+y)∗(x−y), σi →Aexp
Korrekte Software 11 [26]
Beispiel-Ableitungen
Sei σ(x) = 6, σ(y) = 5.
hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11
hx, σi →Aexp6 hy, σi →Aexp 5 hx−y, σi →Aexp
h(x+y)∗(x−y), σi →Aexp
Sei σ(x) = 6, σ(y) = 5.
hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11
hx, σi →Aexp6 hy, σi →Aexp 5 hx−y, σi →Aexp 1 h(x+y)∗(x−y), σi →Aexp
Korrekte Software 11 [26]
Beispiel-Ableitungen
Sei σ(x) = 6, σ(y) = 5.
hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11
hx, σi →Aexp6 hy, σi →Aexp 5 hx−y, σi →Aexp 1 h(x+y)∗(x−y), σi →Aexp11
Sei σ(x) = 6, σ(y) = 5.
hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11
hx, σi →Aexp6 hy, σi →Aexp 5 hx−y, σi →Aexp 1 h(x+y)∗(x−y), σi →Aexp11
h(x∗x)−(y∗y), σi →Aexp
Korrekte Software 11 [26]
Beispiel-Ableitungen
Sei σ(x) = 6, σ(y) = 5.
hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11
hx, σi →Aexp6 hy, σi →Aexp 5 hx−y, σi →Aexp 1 h(x+y)∗(x−y), σi →Aexp11
hx, σi →Aexp 6 hx, σi →Aexp6 hx∗x, σi →Aexp 36 h(x∗x)−(y∗y), σi →Aexp
Sei σ(x) = 6, σ(y) = 5.
hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11
hx, σi →Aexp6 hy, σi →Aexp 5 hx−y, σi →Aexp 1 h(x+y)∗(x−y), σi →Aexp11
hx, σi →Aexp6 hx, σi →Aexp6 hx∗x, σi →Aexp36
hy, σi →Aexp5 hy, σi →Aexp 5 hy∗y, σi →Aexp25 h(x∗x)−(y∗y), σi →Aexp
Korrekte Software 11 [26]
Beispiel-Ableitungen
Sei σ(x) = 6, σ(y) = 5.
hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11
hx, σi →Aexp6 hy, σi →Aexp 5 hx−y, σi →Aexp 1 h(x+y)∗(x−y), σi →Aexp11
hx, σi →Aexp6 hx, σi →Aexp6 hx∗x, σi →Aexp36
hy, σi →Aexp5 hy, σi →Aexp 5 hy∗y, σi →Aexp25 h(x∗x)−(y∗y), σi →Aexp11
Regeln:
hb, σi →Bexp1|0|⊥
h1, σi →Bexp1 h0, σi →Bexp0
ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni 6=⊥,n1 und n2 gleich ha1 ==a2, σi →Bexp1
ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni 6=⊥,n1 und n2 ungleich ha1 ==a2, σi →Bexp0
ha1, σi →Aexp n1 ha2, σi →Aexp n2 n1 =⊥ orn2=⊥ ha1 ==a2, σi →Bexp ⊥
Korrekte Software 12 [26]
Operationale Semantik: Boolesche Ausdrücke
I Bexpb::= 0|1|a1 ==a2 |a1 <a2 |!b |b1&&b2|b1 || b2 Regeln:
hb, σi →Bexp1|0|⊥
hb, σi →Bexp1 h!b, σi →Bexp 0
hb, σi →Bexp 0 h!b, σi →Bexp1
hb, σi →Bexp ⊥ h!b, σi →Bexp⊥ hb1, σi →Bexp t1 hb2, σi →Bexpt2
hb1&&b2, σi →Bexpt
wobei t = 1 wennt1 =t2 = 1;
t = 0 wennt1 = 0 oder (t1 = 1 und t2= 0);
t =⊥sonst
Bexpb::= 0|1|a1 ==a2 |a1 <a2 |!b |b1&&b2|b1 || b2 Regeln:
hb, σi →Bexp1|0|⊥
hb1, σi →Bexp t1 hb2, σi →Bexpt2
hb1||b2, σi →Bexpt
wobei t = 0 wennt1 =t2 = 0;
t = 1 wennt1 = 1 oder (t1= 0 und t2= 1);
t =⊥ sonst
Korrekte Software 14 [26]
Operationale Semantik: Anweisungen
I Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Beispiel:
hc, σi →Stmt σ0|⊥
hx = 5, σi →Stmt σ0
wobei σ0(x) = 5 undσ0(y) =σ(y) für alle y6=x
Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Regeln:
Definiere:
σ[m/x](y) :=
( m ifx =y σ(y) sonst
hx= 5, σi →Stmt σ[5/x]
Es gilt:
∀σ,n,m,∀x,y .x 6=y ⇒σ[n/x][m/y] =σ[m/y][n/x]
∀σ,n,m,∀x . σ[n/x][m/x] =σ[m/x]
Korrekte Software 16 [26]
Operationale Semantik: Anweisungen
I Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Regeln:
h{ }, σi →Stmt σ ha, σi →Aexp n∈Z
hx =a, σi →Stmt σ[n/x]
ha, σi →Aexp ⊥ hx =a, σi →Stmt ⊥ hc1, σi →Stmt σ0 6=⊥ hc2, σ0i →Stmt σ006=⊥
hc1;c2, σi →Stmt σ00 hc1, σi →Stmt ⊥ hc1;c2, σi →Stmt ⊥
hc1, σi →Stmt σ06=⊥ h{c2}, σ0i →Stmt ⊥
Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Regeln:
hb, σi →Bexp1 hc1, σi →Stmt σ0 hif(b) c1 else c2, σi →Stmt σ0 hb, σi →Bexp0 hc2, σi →Stmt σ0
hif(b) c1 else c2, σi →Stmt σ0 hb, σi →Bexp⊥
hif(b) c1 else c2, σi →Stmt ⊥
Korrekte Software 18 [26]
Operationale Semantik: Anweisungen
I Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Regeln:
hb, σi →Bexp0 hwhile (b) c, σi →Stmt σ
hb, σi →Bexp1 hc, σi →Stmt σ0 hwhile (b) c, σ0i →Stmt σ00 hwhile (b) c, σi →Stmt σ00
hb, σi →Bexp1 hc, σi →Stmt ⊥ hwhile(b) c, σi →Stmt ⊥
hb, σi →Bexp⊥ hwhile(b) c, σi →Stmt ⊥
x = 1 ;
w h i l e ( y != 0 ) { y = y − 1 ; x = 2 ∗ x ; }
// x = 2y σ(y) = 3
Korrekte Software 20 [26]
Äquivalenz arithmetischer Ausdrücke
Gegeben zwei Aexp a1 anda2
I Sind sie gleich?
a1∼Aexp a2 gdw ∀σ,n.ha1, σi →Aexp n⇔ ha2, σi →Aexp n ( x∗x ) + 2∗x∗y + ( y∗y ) und ( x+y ) ∗ ( x+y )
I Wann sind sie gleich?
∃σ,n.ha1, σi →Aexp n⇔ ha2, σi →Aexp n
x∗x und 9∗x+22
x∗x und x∗x+1
Gegeben zwei Bexp-Ausdrückeb1 and b2 I Sind sie gleich?
b1 ∼Bexp b2 iff ∀σ,b.hb1, σi →Bexpb ⇔ hb2, σi →Bexp b A | | (A && B) und A
Korrekte Software 22 [26]
Beweisen
Zwei Programmec0,c1 sind äquivalent gdw. sie die gleichen Zustandsveränderungen bewirken. Formal definieren wir Definition
c0 ∼c1 iff ∀σ, σ0.hc0, σi →Stmt σ0 ⇔ hc1, σi →Stmt σ0
Ein einfaches Beispiel:
Lemma
Sei w ≡while(b) c mit b∈Bexp, c ∈Stmt.
Dann gilt: w ∼if(b){c;w} else { } Beweis an der Tafel