Korrekte Software: Grundlagen und Methoden Vorlesung 3 vom 18.04.16: Operationale Semantik
Serge Autexier, Christoph Lüth
Universität Bremen
Sommersemester 2016
18:09:52 2016-07-07 1 [18]
Fahrplan
I Einführung
I Die Floyd-Hoare-Logik
I Operationale Semantik
I Denotationale Semantik
I Äquivalenz der Semantiken
I Verifikation: Vorwärts oder Rückwärts?
I Korrektheit des Hoare-Kalküls
I Einführung in Isabelle/HOL
I Weitere Datentypen: Strukturen und Felder
I Funktionen und Prozeduren
I Referenzen und Zeiger
I Frame Conditions & Modification Clauses
I Ausblick und Rückblick
Korrekte Software 2 [18]
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 [18]
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
Korrekte Software 4 [18]
Semantik von C0
Systemzustände
I Ausdrücke werten zuWerten Val (hier ganze Zahlen) aus.
I AdressenLocsind hier Programmvariablen (Namen)
I EinSystemzustandbildet Adressen auf Werte ab: Σ =Loc*Val
I Ein Programm bildet einen Anfangszustandmöglicherweiseauf einen Endzustand ab (wenn esterminiert).
I Zusicherungen sind Prädikate über dem Systemzustand.
Korrekte Software 5 [18]
C0: Ausdrücke und Anweisungen
Aexp a::=N|Loc |a1+a2 |a1−a2 |a1∗a2 |a1/a2 Bexp b ::=0|1|a1 ==a2 |a1! =a2
|a1 <=a2 |!b |b1&&b2 |b1||b2
Exp e :=Aexp |Bexp Stmt c ::= Loc=Exp;
| if( b ) c1 else c2
| while ( b ) c
| {c∗}
Korrekte Software 6 [18]
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 [18]
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::=N |Loc|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,X 6∈Dom(σ) hX, σi →Aexp ⊥
ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni ∈N,n Summe n1 undn2 ha1+a2, σi →Aexp n
ha1, σi →Aexp n1 ha2, σi →Aexp n2 fallsn1 =⊥oder n2 =⊥ ha1+a2, σi →Aexp ⊥
Korrekte Software 8 [18]
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::=N |Loc|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,X 6∈Dom(σ) hX, σi →Aexp ⊥
ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni ∈N,n Summe n1 undn2 ha1+a2, σi →Aexp n
ha1, σi →Aexp n1 ha2, σi →Aexp n2 fallsn1 =⊥oder n2 =⊥ ha1+a2, σi →Aexp ⊥
Korrekte Software 8 [18]
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::=N |Loc|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,X 6∈Dom(σ) hX, σi →Aexp ⊥
ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni ∈N,n Summe n1 undn2 ha1+a2, σi →Aexp n
ha1, σi →Aexp n1 ha2, σi →Aexp n2 fallsn1 =⊥oder n2 =⊥ ha1+a2, σi →Aexp ⊥
Korrekte Software 8 [18]
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::=N |Loc|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,X 6∈Dom(σ) hX, σi →Aexp ⊥
ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni ∈N,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 ⊥
Korrekte Software 8 [18]
Operationale Semantik: Arithmetische Ausdrücke
ha1, σi →Aexp n1
ha2, σi →Aexp n2 ni ∈N,n Differenz 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 ∈N,n Produktn1 und n2 ha1∗a2, σi →Aexp n
ha1, σi →Aexp n1 ha2, σi →Aexp n2 fallsn1 =⊥oder n2 =⊥ ha1∗a2, σi →Aexp ⊥
Korrekte Software 9 [18]
Operationale Semantik: Arithmetische Ausdrücke
ha1, σi →Aexp n1
ha2, σi →Aexp n2 ni ∈N,n Differenz 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 ∈N,n Produktn1 und n2 ha1∗a2, σi →Aexp n
ha1, σi →Aexp n1 ha2, σi →Aexp n2 falls n1 =⊥oder n2 =⊥ ha1∗a2, σi →Aexp ⊥
Korrekte Software 9 [18]
Operationale Semantik: Arithmetische Ausdrücke
ha1, σi →Aexp n1
ha2, σi →Aexp n2 ni ∈N,n2 6= 0,n Quotient n1 undn2 ha1/a2, σi →Aexp n
ha1, σi →Aexp n1
ha2, σi →Aexp n2 fallsn1 =⊥,n2 =⊥oder n2 = 0 ha1+a2, σi →Aexp ⊥
Korrekte Software 10 [18]
Beispiel Ableitungen
Sei σ(X) = 6, σ(Y) = 5.
h(X+Y)∗(X −Y), σi →Aexp
Korrekte Software 11 [18]
Beispiel Ableitungen
Sei σ(X) = 6, σ(Y) = 5.
hX+Y, σi →Aexp hX−Y, σi →Aexp h(X+Y)∗(X −Y), σi →Aexp
Korrekte Software 11 [18]
Beispiel Ableitungen
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 [18]
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
Korrekte Software 11 [18]
Beispiel Ableitungen
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 [18]
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 →Aexp
h(X+Y)∗(X −Y), σi →Aexp
Korrekte Software 11 [18]
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 →Aexp
Korrekte Software 11 [18]
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
Korrekte Software 11 [18]
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
h(X∗X)−(Y ∗Y), σi →Aexp
Korrekte Software 11 [18]
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 →Aexp 6 hX, σi →Aexp 6 hX∗X, σi →Aexp36 h(X∗X)−(Y ∗Y), σi →Aexp
Korrekte Software 11 [18]
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 →Aexp
Korrekte Software 11 [18]
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 [18]
Operationale Semantik: Boolesche Ausdrücken
I Bexpb::= 0|1 |a1 ==a2 |a1 <= a2 |!b |b1&&b2|b1 || b2
Rules
h1, σi →Bexp1 h0, σi →Bexp0
Korrekte Software 12 [18]
Operationale Semantik: Boolesche Ausdrücken
I Bexpb::= 0|1 |a1 ==a2 |a1 <= a2 |!b |b1&&b2|b1 || b2
Rules
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 [18]
Operationale Semantik: Boolesche Ausdrücken
I Bexpb::= 0|1 |a1 ==a2 |a1 <= a2 |!b |b1&&b2|b1 || b2
Rules
ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni 6=⊥,n1 kleiner/gleichn2 ha1 <=a2, σi →Bexp1
ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni 6=⊥,n1 größer alsn2
ha1 <=a2, σi →Bexp0
ha1, σi →Aexp n1 ha2, σi →Aexp n2 n1 =⊥ orn2=⊥ ha1 <=a2, σi →Bexp ⊥
Korrekte Software 12 [18]
Operationale Semantik: Boolesche Ausdrücken
I Bexpb::= 0|1 |a1 ==a2 |a1 <= a2 |!b |b1&&b2|b1 || b2
Rules
hb, σi →Bexp1 h!b, σi →Bexp0
hb, σi →Bexp0 h!b, σi →Bexp 1
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
Korrekte Software 12 [18]
Operationale Semantik: Boolesche Ausdrücken
I Bexpb::= 0|1 |a1 ==a2 |a1 <= a2 |!b |b1&&b2|b1 || b2
Rules
hb1, σi →Bexpt1 hb2, σi →Bexp t2 hb1||b2, σi →Bexpt
wobei t = 0 wennt1 =t2 = 0;
t = 1 wennt1 = 1 oder (t1= 0 und t2= 1);
t =⊥ sonst
Korrekte Software 12 [18]
Operationale Semantik: Anweisungen
I Stmtc ::=Loc=Exp; | {c∗} | if( b ) c1 else c2 |while( b ) c Regeln
hc, σi →Stmt σ0 hX = 5, σi →Stmt σ0
wobei σ0(X) = 5 und σ0(Y) =σ(Y) für alle Y 6=X
Korrekte Software 13 [18]
Operationale Semantik: Anweisungen
I Stmtc ::=Loc=Exp; | {c∗} | if( b ) c1 else c2 |while( b ) c Regeln
hc, σi →Stmt σ0 hX = 5, σi →Stmt σ0
wobei σ0(X) = 5 und σ0(Y) =σ(Y) für alle Y 6=X Definiere :
σ[m/X](Y) :=
( m ifX =Y σ(Y) sonst
hX = 5, σi →Stmt σ[5/X]
Korrekte Software 13 [18]
Operationale Semantik: Anweisungen
I Stmtc ::=Loc=Exp; | {c∗} | if( b ) c1 else c2 |while( b ) c Regeln
hc, σi →Stmt σ0 h{ }, σi →Stmt σ ha, σi →Aexp n ∈N
hX =a, σi →Stmt σ[n/X]
ha, σi →Aexp ⊥ hX =a, σi →Stmt ⊥
Korrekte Software 13 [18]
Operationale Semantik: Anweisungen
I Stmtc ::=Loc=Exp; | {c∗} | if( b ) c1 else c2 |while( b ) c Regeln
hc, σi →Stmt σ0
hc, σi →Stmt σ0 6=⊥ h{cs}, σ0i →Stmt σ006=⊥ h{c cs}, σi →Stmt σ00
hc, σi →Stmt ⊥ h{c cs}, σi →Stmt ⊥
hc, σi →Stmt σ0 6=⊥ h{cs}, σ0i →Stmt ⊥ h{c cs}, σi →Stmt ⊥
Korrekte Software 13 [18]
Operationale Semantik: Anweisungen
I Stmtc ::=Loc=Exp; | {c∗} | if( b ) c1 else c2 |while( b ) c Regeln
hc, σi →Stmt σ0
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 13 [18]
Operationale Semantik: Anweisungen
I Stmtc ::=Loc=Exp; | {c∗} | if( b ) c1 else c2 |while( b ) c Regeln
hc, σi →Stmt σ0 hb, σi →Bexp0 hwhile( b )c, σi →Stmt σ
hb, σi →Bexp 1 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 13 [18]
Beispiel
x= 1 ;
w h i l e ( ! ( y == 0 ) ) { y= y−1;
x= 2∗x ; }
// x = 2y σ(y) = 3
Korrekte Software 14 [18]
Ä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
Korrekte Software 15 [18]
Äquivalenz Boolscher Ausdrücke
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 16 [18]
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
Korrekte Software 17 [18]
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 18 [18]