Korrekte Software: Grundlagen und Methoden
Vorlesung 4 vom 24.04.18: Äquivalenz der Operationalen und Denotationalen Semantik
Serge Autexier, Christoph Lüth
Universität Bremen
Sommersemester 2018
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
I Ausblick und Rückblick
Operationale vs. denotationale Semantik
Operational ha, σi →Aexp n Denotational A[[a]]
m∈Z hm, σi →Aexp m {(σ,m)|σ ∈Σ}
x∈Loc x∈Dom(σ)
hx, σi →Aexp σ(x) {(σ, σ(x))|σ∈Σ,x∈ Dom(σ)}
a1◦a2
ha1, σi →Aexp n ha2, σi →Aexp m
n,m6=⊥
ha1◦a2, σi →Aexp n◦Im {(σ,n◦Im)|σ∈Σ,(σ,n)∈ A[[a1]],(σ,m)∈ A[[a2]]}
ha1, σi →Aexp n ha2, σi →Aexp m n=⊥oderm=⊥ ha1◦a2, σi →Aexp ⊥
Operationale vs. denotationale Semantik
Operational ha, σi →Aexp n Denotational A[[a]]
a1/a2
ha1, σi →Aexp n ha2, σi →Aexp m m6= 0 m,n 6=⊥
ha1◦a2, σi →Aexp n◦Im {(σ,n/m)|σ ∈Σ,(σ,n)∈ A[[a1]],(σ,m)∈ A[[a2]],m6=
0}
ha1, σi →Aexp n ha2, σi →Aexp m n =⊥,m=⊥oder m= 0
ha1/a2, σi →Aexp ⊥
Äquivalenz operationale und denotationale Semantik
I Für allea∈Aexp, für alle n∈Z, für alle Zuständeσ:
ha, σi →Aexp n ⇔(σ,n)∈ A[[a]]
ha, σi →Aexp ⊥ ⇔σ6∈Dom(A[[a]])
I Beweis Prinzip?
Äquivalenz operationale und denotationale Semantik
I Für allea∈Aexp, für alle n∈Z, für alle Zuständeσ:
ha, σi →Aexp n ⇔(σ,n)∈ A[[a]]
ha, σi →Aexp ⊥ ⇔σ6∈Dom(A[[a]])
I Beweis per struktureller Induktion übera. (Warum?)
Operationale vs. denotationale Semantik
Operational hb, σi →Bexp0|1 Denotational B[[b]]
1 h1, σi →Bexp1 {(σ,1)|σ ∈Σ}
0 h0, σi →Bexp0 {(σ,0)|σ ∈Σ}
Operationale vs. denotationale Semantik
Operat.hb, σi →Bexp 0|1 Denotational B[[b]]
a0 ==a1
ha0, σi →Aexp n ha1, σi →Aexp m n,m6=⊥ n=m ha0 ==a1, σi →Bexp1
ha0, σi →Aexp n ha1, σi →Aexp m n,m6=⊥ n6=m ha0 ==a1, σi →Bexp0
ha0, σi →Aexp n ha1, σi →Aexp m n=⊥oder m=⊥ ha0==a1, σi →Bexp⊥
{(σ,1)|σ ∈Σ,
(σ,n0)∈ A[[a0]], (σ,n1)∈ A[[a1]], n0 =n1 }
∪
{(σ,0)|σ ∈Σ,
(σ,n0)∈ A[[a0]], (σ,n1)∈ A[[a1]], n0 6=n1 }
a1<=a2 analog
Operationale vs. denotationale Semantik
Operational ha, σi →Bexp b Denotational B[[b]]
b1&&b0
hb1, σi →Bexp0
hb1&&b2, σi →0 {(σ,0)|(σ,0)∈ B[[b1]]}
hb1, σi →Bexp1 hb2, σi →Bexpb
hb1&&b2, σi →b {(σ,b)|(σ,1)∈ B[[b1]],(σ,b)∈ B[[b2]]}
hb1, σi →Bexp⊥ hb1&&b2, σi → ⊥
b1||b2 analog
!n . . .
Äquivalenz operationale und denotationale Semantik
I Für alleb∈Bexp, für allet ∈B, for alle Zuständeσ:
hb, σi →Bexpt ⇔(σ,t)∈ B[[b]]
hb, σi →Bexp ⊥ ⇔σ6∈Dom(B[[b]])
I Beweis Prinzip?
Äquivalenz operationale und denotationale Semantik
I Für alleb∈Bexp, für allet ∈B, for alle Zuständeσ:
hb, σi →Bexpt ⇔(σ,t)∈ B[[b]]
hb, σi →Bexp ⊥ ⇔σ6∈Dom(B[[b]])
I Beweis per struktureller Induktion überb (unter Verwendung der Äquivalenz für AExp). (Warum?)
Operationale vs. denotationale Semantik
Operational hc, σi →Stmt σ0|⊥
Denotational C[[c]]
{ } h{}, σi →Stmt σ C[[{ }]] =Id
c1;c2
hc1, σi →Stmt σ0 6=⊥ hc2, σ0i →Stmt σ00 hc1;c2, σi →Stmt σ00
hc1, σi →Stmt ⊥ hc1;c2, σi →Stmt ⊥
C[[c2]]◦ C[[c1]]
x =a ha, σi →Aexp n hx =a, σi →Stmt σ[n/x]
ha, σi →Aexp ⊥ hx =a, σi →Stmt ⊥
{(σ, σ[n/x])|(σ,n)∈ A[[a]]}
Operationale vs. denotationale Semantik
Operational hc, σi →Stmt σ0|⊥
Denotational C[[c]]
if(b) c0
hb, σi →Bexp1 hc0, σi →Stmt σ0
hc, σi →Stmt σ0 hb, σi →Bexp ⊥ hc, σi →Stmt ⊥
{(σ, σ0)|(σ,1)∈ B[[b]],(σ, σ0)∈ C[[c0]]}
else c1
hb, σi →Bexp0 hc1, σi →Stmt σ0
hc, σi →Stmt σ0 {(σ, σ0)|(σ,0)∈ B[[b]],(σ, σ0)∈ C[[c1]]}
Operationale vs. denotationale Semantik
Operational hc, σi →Stmt σ0|⊥
Denotational C[[c]]
while(b) c
| {z }
w
hb, σi →Bexp0 hw, σi →Stmt σ
hb, σi →Bexp⊥ hw, σi →Stmt ⊥
hb, σi →Bexp1 hc, σi →Stmt σ06=⊥ hw, σ0i →Stmt σ00 hw, σi →Stmt σ00
fix(Γ)
hb, σi →Bexp1 hc, σi →Stmt ⊥ hw, σi →Stmt ⊥
mit
Γ(ϕ) = {(σ, σ0)|(σ,1)∈ B[[b]],(σ, σ0)∈ϕ◦ C[[c]]}
∪{(σ, σ)|(σ,0)∈ B[[b]]}
Äquivalenz operationale und denotationale Semantik
I Für allec ∈Stmt, für alle Zuständeσ, σ0:
hc, σi →Stmt σ0 ⇔(σ, σ0)∈ C[[c]]
hc, σi →Stmt ⊥ ⇒σ6∈Dom(C[[c]])
I ⇒Beweis Prinzip?
I ⇐Beweis Prinzip?
Äquivalenz operationale und denotationale Semantik
I Für allec ∈Stmt, für alle Zuständeσ, σ0:
hc, σi →Stmt σ0 ⇔(σ, σ0)∈ C[[c]]
hc, σi →Stmt ⊥ ⇒σ6∈Dom(C[[c]])
I ⇒Beweis per Induktion über die Ableitung in der operationalen Semantik (Warum?)
I ⇐Beweis Prinzip?
Äquivalenz operationale und denotationale Semantik
I Für allec ∈Stmt, für alle Zuständeσ, σ0:
hc, σi →Stmt σ0 ⇔(σ, σ0)∈ C[[c]]
hc, σi →Stmt ⊥ ⇒σ6∈Dom(C[[c]])
I ⇒Beweis per Induktion über die Ableitung in der operationalen Semantik (Warum?)
I ⇐Beweis per struktureller Induktion überc (Verwendung der Äquivalenz für arithmetische und boolsche Ausdrücke). Für die While-Schleife Rückgriff auf Definition des Fixpunkts und Induktion über die Teilmengen Γi(∅) des Fixpunkts. (Warum?)
Äquivalenz operationale und denotationale Semantik
I Für allec ∈Stmt, für alle Zuständeσ, σ0:
hc, σi →Stmt σ0 ⇔(σ, σ0)∈ C[[c]]
hc, σi →Stmt ⊥ ⇒σ6∈Dom(C[[c]])
I ⇒Beweis per Induktion über die Ableitung in der operationalen Semantik (Warum?)
I ⇐Beweis per struktureller Induktion überc (Verwendung der Äquivalenz für arithmetische und boolsche Ausdrücke). Für die While-Schleife Rückgriff auf Definition des Fixpunkts und Induktion über die Teilmengen Γi(∅) des Fixpunkts. (Warum?)
I Gegenbeispiel für⇐in der zweiten Aussage: wählec≡while(1){}:
C[[c]] =∅aberhc, σi →Stmt⊥gilt nicht (sondern?).
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