Korrekte Software: Grundlagen und Methoden Vorlesung 2 vom 09.04.19
Operationale Semantik
Serge Autexier, Christoph Lüth Universität Bremen Sommersemester 2019
11:27:19 2019-07-04 1 [26]
Fahrplan
IEinführung
IOperationale Semantik IDenotationale Semantik
IÄquivalenz der Operationalen und Denotationalen Semantik IDer Floyd-Hoare-Kalkül
IInvarianten und die Korrektheit des Floyd-Hoare-Kalküls IStrukturierte Datentypen
IVerifikationsbedingungen IVorwärts mit Floyd und Hoare IModellierung
ISpezifikation von Funktionen IReferenzen und Speichermodelle
IFunktionsaufrufe und das Framing-Problem IAusblick und Rückblick
Korrekte Software 2 [26]
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 ; }
IProgramme berechnenWerte IBasierend auf
I Werte sindVariablenzugewiesen I Evaluation vonAusdrücken IFolgt dem Programmablauf
Korrekte Software 3 [26]
Unsere Programmiersprache
Wir betrachten einen Ausschnitt der ProgrammierspracheC(C0).
Ausbaustufe 1 kennt folgende Konstrukte:
ITypen:int;
IAusdrücke: Variablen, Literale (für ganze Zahlen), arithmetische Operatoren (für ganze Zahlen), Relationen (==, <, . . . ), boolsche Operatoren (&&, || );
IAnweisungen:
IFallunterscheidung (if. . .else. . . ), Iteration (while), Zuweisung, Blöcke;
ISequenzierung und leere Anweisung sind implizit
Korrekte Software 4 [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
Expe:=a|b Stmt c::= Idt=Exp
| if(b)c1 elsec2
| while(b)c
| c1;c2
| { } NB: Nicht diekonkreteSyntax.
Korrekte Software 5 [26]
Eine Handvoll Beispiele
a = (3+ y )∗x+5∗b ; a = ((3+ y )∗x )+(5∗b ) ; a = 3+y∗x+5∗b ;
p = 1 ; c = 1 ;
w h i l e ( c <= n ) { p= p∗ c ; c= c+ 1 ; }
Korrekte Software 6 [26]
Semantik von C0
IDie (operationale) Semantik einer imperativen Sprache wie C0 ist ein Zustandsübergang: das System hat einen impliziten Zustand, der durch Zuweisung vonWertenanAdressengeändert werden kann.
Systemzustände
IAusdrücke werten zuWertenV(hier ganze Zahlen) aus.
IAdressenLocsind hier Programmvariablen (Namen):Loc=Idt IEinSystemzustandbildet Adressen auf Werte ab: Σ =Loc*V IEin Programm bildet einen Anfangszustandmöglicherweiseauf einen
Endzustand ab (wenn esterminiert).
Korrekte Software 7 [26]
Partielle, endliche Abbildungen
Zustände sindpartielle, endliche Abbildungen(finite partial maps) f :X*A
Notation:
If(x) für den Wert vonxinf (lookup) If(x) =⊥wennxnicht inf (undefined)
If[n/x] für den Update an der Stellexmit dem Wertn:
f[n/x](y)=def
(n ifx=y f(y) otherwise
Ihx7→n,y7→miu.ä. für konkrete Abbildungen.
Ihiist die leere (überall undefinierte Abbildung):
hi(x) =⊥
Korrekte Software 8 [26]
Operationale Semantik: Arithmetische Ausdrücke
Ein arithmetischer Ausdruckawertet unter gegebenen Zustandσzu einer ganzen Zahln(Wert) aus oder zu einem Fehler⊥.
IAexpa::=Z|Idt|a1+a2|a1−a2|a1∗a2|a1/a2 ha, σi →Aexpn| ⊥ Regeln:
hn, σi →Aexpn x∈Idt,x∈Dom(σ), σ(x) =v
hx, σi →Aexpv
x∈Idt,x6∈Dom(σ) hx, σi →Aexp⊥
Korrekte Software 9 [26]
Operationale Semantik: Arithmetische Ausdrücke
IAexpa::=Z|Idt|a1+a2|a1−a2|a1∗a2|a1/a2 ha, σi →Aexpn| ⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nSummen1undn2 ha1+a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1+a2, σi →Aexp⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nDiff.n1undn2 ha1−a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1−a2, σi →Aexp⊥
Korrekte Software 10 [26]
Operationale Semantik: Arithmetische Ausdrücke
IAexpa::=Z|Idt|a1+a2|a1−a2|a1∗a2|a1/a2 ha, σi →Aexpn| ⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nProduktn1undn2
ha1∗a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1∗a2, σi →Aexp⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,n26= 0,nQuotientn1,n2
ha1/a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥,n2=⊥odern2= 0 ha1/a2, σi →Aexp⊥
Korrekte Software 11 [26]
Beispiel-Ableitungen
Seiσdef=hx7→6,y7→5i.
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 12 [26]
Operationale Semantik: Boolesche Ausdrücke
IBexpb::= 0|1|a1==a2|a1 <a2|!b|b1&&b2|b1 || b2 hb, σi →Bexptrue|false| ⊥
Regeln:
h1, σi →Bexptrue h0, σi →Bexpfalse ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni6=⊥,n1undn2gleich
ha1==a2, σi →Bexptrue
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni6=⊥,n1undn2ungleich ha1==a2, σi →Bexpfalse
ha1, σi →Aexpn1 ha2, σi →Aexpn2 n1=⊥orn2=⊥ ha1==a2, σi →Bexp⊥
Korrekte Software 13 [26]
Operationale Semantik: Boolesche Ausdrücke
IBexpb::= 0|1|a1==a2|a1 <a2|!b|b1&&b2|b1 || b2 hb, σi →Bexptrue|false| ⊥
Regeln:
hb, σi →Bexptrue h!b, σi →Bexpfalse
hb, σi →Bexpfalse h!b, σi →Bexptrue
hb, σi →Bexp⊥ h!b, σi →Bexp⊥ hb1, σi →Bexpt1 hb2, σi →Bexpt2
hb1&&b2, σi →Bexpt
wobei t=truewennt1=t2=true;
t=falsewennt1=falseoder (t1=trueundt2=false);
t=⊥sonst
Korrekte Software 14 [26]
Operationale Semantik: Boolesche Ausdrücke
IBexpb::= 0|1|a1==a2|a1 <a2|!b|b1&&b2|b1 || b2 hb, σi →Bexptrue|false| ⊥
Regeln:
hb1, σi →Bexpt1 hb2, σi →Bexpt2 hb1||b2, σi →Bexpt wobei t=falsewennt1=t2=false;
t=truewennt1=trueoder (t1=falseundt2=true);
t=⊥sonst
Korrekte Software 15 [26]
Operationale Semantik: Anweisungen
IStmtc::=Idt=Exp|if(b)c1 elsec2|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 alley6=x
Korrekte Software 16 [26]
Operationale Semantik: Anweisungen
IStmtc::=Idt=Exp|if(b)c1 else c2|while(b)c|c1;c2| { } Regeln:
h{ }, σi →Stmtσ ha, σi →Aexpn∈Z
hx=a, σi →Stmtσ[n/x]
ha, σi →Aexp⊥ hx=a, σi →Stmt⊥ hc1, σi →Stmtσ06=⊥ hc2, σ0i →Stmtσ006=⊥
hc1;c2, σi →Stmtσ00 hc1, σi →Stmt⊥ hc1;c2, σi →Stmt⊥
hc1, σi →Stmtσ06=⊥ hc2, σ0i →Stmt⊥ hc1;c2, σi →Stmt⊥
Korrekte Software 17 [26]
Operationale Semantik: Anweisungen
IStmtc::=Idt=Exp|if(b)c1 elsec2|while(b)c|c1;c2| { } Regeln:
hb, σi →Bexptrue hc1, σi →Stmtσ0 hif(b)c1 elsec2, σi →Stmtσ0 hb, σi →Bexpfalse hc2, σi →Stmtσ0
hif(b)c1 elsec2, σi →Stmtσ0 hb, σi →Bexp⊥ hif(b)c1 elsec2, σi →Stmt⊥
Korrekte Software 18 [26]
Operationale Semantik: Anweisungen
IStmtc::=Idt=Exp|if(b)c1 else c2|while(b)c|c1;c2| { } Regeln:
hb, σi →Bexpfalse hwhile(b)c, σi →Stmtσ
hb, σi →Bexptrue hc, σi →Stmtσ0 hwhile(b)c, σ0i →Stmtσ00 hwhile(b)c, σi →Stmtσ00
hb, σi →Bexptrue hc, σi →Stmt⊥ hwhile(b)c, σi →Stmt⊥
hb, σi →Bexp⊥ hwhile(b)c, σi →Stmt⊥
Korrekte Software 19 [26]
Beispiel
x = 1 ;
w h i l e ( y != 0 ) { y = y− 1 ; x = 2 ∗ x ; }
//x= 2y σdef=hy7→3i
Korrekte Software 20 [26]
Äquivalenz arithmetischer Ausdrücke
Gegeben zwei Aexpa1anda2 ISind sie gleich?
a1∼Aexpa2gdw∀σ,n.ha1, σi →Aexpn⇔ ha2, σi →Aexpn ( x∗x ) + 2∗x∗y + ( y∗y ) und ( x+y ) ∗ ( x+y )
IWann sind sie gleich?
∀σ,n.ha1, σi →Aexpn⇔ ha2, σi →Aexpn
x∗x und 8∗x+9
x∗x und x∗x+1
Korrekte Software 21 [26]
Äquivalenz Boolscher Ausdrücke
Gegeben zwei Bexp-Ausdrückeb1andb2 ISind sie gleich?
b1∼Bexpb2iff∀σ,b.hb1, σi →Bexpb⇔ hb2, σi →Bexpb A | | (A && B) und A
Korrekte Software 22 [26]
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{ }
Korrekte Software 23 [26]
Beweis
Gegeben beliebiger Programmzustandσ. Zu zeigen ist, dass sowohlw also auchif(b){c;w} else{ }zu dem selben Programmzustand auswerten oder beide zu einem Fehler. Der Beweis geht per Fallunterscheidung über die Auswertung von Teilausdrücken bzw.
Teilprogrammen.
1 hb, σi →Bexp⊥:
hwhile(b)c, σi →Stmt⊥ hif(b){c;w} else{ }, σi →Stmt⊥
2 hb, σi →Bexpfalse:
hwhile(b)c, σi →Stmtσ
hif(b){c;w} else{ }, σi →Stmth{ }, σi →Stmtσ
Korrekte Software 24 [26]
Beweis II
3 hb, σi →Bexptrue:
1 hc, σi →Stmtσ0 h
w
z }| {
while(b)c, σi →Stmthc, σi →Stmtσ0 hw, σ0i →Stmtσ00
hif(b){c;w}else{ }, σi →Stmth{c;w}, σi →Stmthc, σi →Stmtσ0 hw, σ0i →Stmtσ00
2 hc, σi →Stmt⊥ h
w
z }| {
while(b)c, σi →Stmthc, σi →Stmt⊥
hif(b){c;w}else{ }, σi →Stmth{c;w}, σi →Stmthc, σi →Stmt⊥
Korrekte Software 25 [26]
Zusammenfassung
IOperationale Semantik als ein Mittel zur Beschreibung der Semantik
IAuswertungsregeln arbeiten entlang der syntaktischen Struktur
IWerten Ausdrücke zu Werten aus und Programme zu Zuständen (zu gegebenen Zustand)
IFragen zu Programmen: Gleichheit
Korrekte Software 26 [26]