Korrekte Software: Grundlagen und Methoden Vorlesung 4 vom 23.04.19
Äquivalenz der Operationalen und Denotationalen Semantik
Serge Autexier, Christoph Lüth
Universität Bremen
Sommersemester 2019
Fahrplan
I Einführung
I Operationale Semantik I Denotationale Semantik
I Äquivalenz der Operationalen und Denotationalen Semantik I Der Floyd-Hoare-Kalkül
I Invarianten und die Korrektheit des Floyd-Hoare-Kalküls I Strukturierte Datentypen
I Verifikationsbedingungen I Vorwärts mit Floyd und Hoare I Modellierung
I Spezifikation von Funktionen I Referenzen und Speichermodelle
I Funktionsaufrufe und das Framing-Problem 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(σ)}
x6∈Dom(σ) hx, σi →Aexp ⊥ 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=⊥ ha ◦a , σi → ⊥
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 →Bexp 0|1 Denotational B[[b]]
1 h1, σi →Bexp1 {(σ,1)|σ∈Σ}
0 h0, σi →Bexp0 {(σ,0)|σ∈Σ}
Operationale vs. denotationale Semantik
Operat. hb, σi →Bexp t 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 →Bexp ⊥ hc, σi →Stmt ⊥ hb, σi →Bexp 1 hc0, σi →Stmt σ0
hc, σi →Stmt σ0
{(σ, σ0)|(σ,1)∈ B[[b]],(σ, σ0)∈ C[[c0]]}
else c1
hb, σi →Bexp 0 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 →Bexp 0 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?)
Knackpunkt
C[[w]] =fix(Γ) = Γ(fix(Γ)) = Γ([
i≥0
Γi(∅)) = [
i≥0
Γ(Γi(∅))
=[
i≥0
{(σ, σ0)|(σ,1)∈ B[[b]],(σ, σ00)∈ C[[c]],(σ00, σ0)∈Γi(∅)}
∪ {(σ, σ)|(σ,0)∈ B[[b]]}
mitw ≡while(b)c Induktion überi≥0 {(σ, σ0)| (σ,1)∈ B[[b]]
| {z }
hb,σi→Bexp1
, (σ, σ00)∈ C[[c]]
| {z }
(strukt.IH)hc,σi→Stmtσ0
, (σ00, σ0)∈Γi(∅)
| {z }
(≤i IH)hw,σ00i→Stmtσ0
∪{(σ, σ)| (σ,0)∈ B[[b]]
| {z }
hw,σi→Stmtσ
}
hw, σi →Stmtσ0
Ä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 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 Der Floyd-Hoare-Kalkül
I Invarianten und die Korrektheit des Floyd-Hoare-Kalküls I Strukturierte Datentypen
I Verifikationsbedingungen I Vorwärts mit Floyd und Hoare I Modellierung
I Spezifikation von Funktionen I Referenzen und Speichermodelle
I Funktionsaufrufe und das Framing-Problem I Ausblick und Rückblick