Korrekte Software: Grundlagen und Methoden Vorlesung 3 vom 20.04.17: Operationale Semantik
Serge Autexier, Christoph Lüth
Universität Bremen Sommersemester 2017
09:06:58 2017-06-28 1 [24]
Fahrplan
I Einführung
I Die Floyd-Hoare-Logik I Operationale Semantik I Denotationale Semantik
I Äquivalenz der Operationalen und Denotationalen Semantik I Korrektheit des Hoare-Kalküls
I Vorwärts und Rückwärts mit Floyd und Hoare I Funktionen und Prozeduren
I Referenzen und Speichermodelle I Verifikationsbedingungen Revisited I Vorwärtsrechnung Revisited
I Programmsicherheit und Frame Conditions I Ausblick und Rückblick
Korrekte Software 2 [24]
Zutaten
// 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 [24]
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:
IFallunterscheidung (if. . .else. . . ), Iteration (while), Zuweisung, Blöcke;
ISequenzierung und leere Anweisung sind implizit
Korrekte Software 4 [24]
Semantik von C0
I Die (operationale) Semantik einer imperativen Sprache wie C0 ist ein Zustandsübergang: das System hat einen impliziten Zustand, der durch Zuweisung vonWertenanAdressengeändert werden kann.
I Konkretes Beispiel:n= 3 p ?
c ? n 3
p 1 c ? n 3
p 1 c 1 n 3
p 1 c 1 n 3
. . . p 6 c 4 n 3
p = 1 ; c = 1 ; w h i l e( c <= n ) {
p = p ∗ c ; c = c + 1 ; }
Systemzustände
I Ausdrücke werten zuWertenV(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 [24]
C0: Ausdrücke und Anweisungen
Aexpa::=N|Loc|a1+a2|a1−a2|a1∗a2|a1/a2 Bexpb::=0|1|a1==a2|a1! =a2
|a1<=a2|!b|b1&&b2|b1||b2 Exp e:=Aexp|Bexp
Stmtc ::= Loc=Exp;
| if(b)c1 else c2
| while(b)c
| {c∗}
Korrekte Software 6 [24]
Eine Handvoll Beispiele
//{y=Y∧y≥0}
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−y ; q = q +1;
}
//{a=b∗q+r∧r<b}
p = 1 ; 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 [24]
Operationale Semantik: Arithmetische Ausdrücke
Ein arithmetischer Ausdruckawertet unter gegebenen Zustandσzu einer ganzen Zahln(Wert) aus oder zu einem Fehler⊥.
I Aexpa::=N|Loc|a1+a2|a1−a2|a1∗a2|a1/a2 I Zustände bilden Adressen/Programmvariablen aufWerteab (σ)
ha, σi →Aexpn|⊥
Regeln:
hn, σi →Aexpn X∈Loc,X∈Dom(σ), σ(X) =v
hX, σi →Aexpv
X∈Loc,X6∈Dom(σ) hX, σi →Aexp⊥
Korrekte Software 8 [24]
Operationale Semantik: Arithmetische Ausdrücke
I Aexpa::=N|Loc|a1+a2|a1−a2|a1∗a2|a1/a2 ha, σi →Aexpn|⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈N,nSummen1undn2 ha1+a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1+a2, σi →Aexp⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈N,nDiff.n1undn2 ha1−a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1−a2, σi →Aexp⊥
Korrekte Software 9 [24]
Operationale Semantik: Arithmetische Ausdrücke
I Aexpa::=N|Loc|a1+a2|a1−a2|a1∗a2|a1/a2 ha, σi →Aexpn|⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈N,nProduktn1undn2
ha1∗a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1∗a2, σi →Aexp⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈N,n26= 0,nQuotientn1,n2
ha1/a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥,n2=⊥odern2= 0 ha1/a2, σi →Aexp⊥
Korrekte Software 10 [24]
Beispiel-Ableitungen
Seiσ(X) = 6, σ(Y) = 5.
hX, σi →Aexp6 hY, σi →Aexp5 hX+Y, σi →Aexp11
hX, σi →Aexp6 hY, σi →Aexp5 hX−Y, σi →Aexp1 h(X+Y)∗(X−Y), σi →Aexp11
hX, σi →Aexp6 hX, σi →Aexp6 hX∗X, σi →Aexp36
hY, σi →Aexp5 hY, σi →Aexp5 hY∗Y, σi →Aexp25 h(X∗X)−(Y∗Y), σi →Aexp11
Korrekte Software 11 [24]
Operationale Semantik: Boolesche Ausdrücke
I Bexpb::= 0|1|a1==a2|a1 <= a2|!b|b1&&b2|b1 || b2 Regeln:
hb, σi →Bexp1|0|⊥
h1, σi →Bexp1 h0, σi →Bexp0
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni6=⊥,n1undn2gleich ha1==a2, σi →Bexp1
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni6=⊥,n1undn2ungleich ha1==a2, σi →Bexp0
ha1, σi →Aexpn1 ha2, σi →Aexpn2 n1=⊥orn2=⊥ ha1==a2, σi →Bexp⊥
Korrekte Software 12 [24]
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 →Bexp0
hb, σi →Bexp0 h!b, σi →Bexp1
hb, σi →Bexp⊥ h!b, σi →Bexp⊥ hb1, σi →Bexpt1 hb2, σi →Bexpt2
hb1&&b2, σi →Bexpt
wobei t= 1 wennt1=t2= 1;
t= 0 wennt1= 0 oder (t1= 1 undt2= 0);
t=⊥sonst
Korrekte Software 13 [24]
Operationale Semantik: Boolesche Ausdrücke
I Bexpb::= 0|1|a1==a2|a1 <= a2|!b|b1&&b2|b1 || b2 Regeln:
hb, σi →Bexp1|0|⊥
hb1, σi →Bexpt1 hb2, σi →Bexpt2 hb1||b2, σi →Bexpt
wobei t= 0 wennt1=t2= 0;
t= 1 wennt1= 1 oder (t1= 0 undt2= 1);
t=⊥sonst
Korrekte Software 14 [24]
Operationale Semantik: Anweisungen
I Stmtc::=Loc=Exp;| {c∗} | if(b)c1 else c2|while(b)c Beispiel:
hc, σi →Stmtσ0|⊥
hX= 5, σi →Stmtσ0
wobeiσ0(X) = 5 undσ0(Y) =σ(Y) für alleY6=X
Korrekte Software 15 [24]
Operationale Semantik: Anweisungen
I Stmtc::=Loc=Exp; | {c∗} | if(b)c1 elsec2|while(b)c Regeln:
Definiere:
σ[m/X](Y) :=
(m ifX=Y σ(Y) sonst
hX= 5, σi →Stmtσ[5/X] Es gilt:
∀σ,n,m,∀X,Y .X6=Y⇒σ[n/X][m/Y] =σ[m/Y][n/X]
∀σ,n,m,∀X. σ[n/X][m/X] =σ[m/X]
Korrekte Software 16 [24]
Operationale Semantik: Anweisungen
I Stmtc::=Loc=Exp;| {c∗} | if(b)c1 else c2|while(b)c Regeln:
h{ }, σi →Stmtσ ha, σi →Aexpn∈N
hX=a, σi →Stmtσ[n/X]
ha, σi →Aexp⊥ hX=a, σi →Stmt⊥ hc, σi →Stmtσ06=⊥ h{cs}, σ0i →Stmtσ006=⊥
h{c cs}, σi →Stmtσ00 hc, σi →Stmt⊥ h{c cs}, σi →Stmt⊥
hc, σi →Stmtσ06=⊥ h{cs}, σ0i →Stmt⊥ h{c cs}, σi →Stmt⊥
Korrekte Software 17 [24]
Operationale Semantik: Anweisungen
I Stmtc::=Loc=Exp; | {c∗} | if(b)c1 elsec2|while(b)c Regeln:
h{ }, σi →Stmtσ hb, σi →Bexp1 hc1, σi →Stmtσ0
hif(b)c1 elsec2, σi →Stmtσ0 hb, σi →Bexp0 hc2, σi →Stmtσ0
hif(b)c1 elsec2, σi →Stmtσ0 hb, σi →Bexp⊥ hif(b)c1 elsec2, σi →Stmt⊥
Korrekte Software 18 [24]
Operationale Semantik: Anweisungen
I Stmtc::=Loc=Exp;| {c∗} | if(b)c1 else c2|while(b)c Regeln:
h{ }, σi →Stmtσ 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⊥
Korrekte Software 19 [24]
Beispiel
x = 1 ;
w h i l e ( y != 0 ) { y = y− 1 ; x = 2 ∗ x ; }
//x= 2y σ(y) = 3
Korrekte Software 20 [24]
Äquivalenz arithmetischer Ausdrücke
Gegeben zwei Aexpa1anda2 I Sind sie gleich?
a1∼Aexpa2gdw∀σ,n.ha1, σi →Aexpn⇔ ha2, σi →Aexpn (X∗X) + 2∗X∗Y + (Y∗Y) und (X+Y) ∗ (X+Y)
I Wann sind sie gleich?
∃σ,n.ha1, σi →Aexpn⇔ ha2, σi →Aexpn
X∗X und 9∗X+22
X∗X und X∗X+1
Korrekte Software 21 [24]
Äquivalenz Boolscher Ausdrücke
Gegeben zwei Bexp-Ausdrückeb1andb2 I Sind sie gleich?
b1∼Bexpb2iff∀σ,b.hb1, σi →Bexpb⇔ hb2, σi →Bexpb A | | (A && B) und A
Korrekte Software 22 [24]
Beweisen
Zwei Programmec0,c1sind äquivalent gdw. sie die gleichen Zustandsveränderungen bewirken. Formal definieren wir Definition
c0∼c1iff∀σ, σ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
Korrekte Software 23 [24]
Zusammenfassung
I Operationale Semantik als ein Mittel für Beschreibung der Semantik
I Auswertungsregeln arbeiten entlang der syntaktischen Struktur
I Werten Ausdrücke zu Werten aus und Programme zu Zuständen (zu gegebenen Zustand)
I Fragen zu Programmen: Gleichheit
Korrekte Software 24 [24]