Korrekte Software: Grundlagen und Methoden Vorlesung 4 vom 12/14.05.20
Äquivalenz der Operationalen und Denotationalen Semantik
Serge Autexier, Christoph Lüth
Universität Bremen
Sommersemester 2020
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
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)∈ [[a1]]A,(σ,m)∈[[a2]]A} 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)∈ [[a1]]A,(σ,m)∈[[a2]]A,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?
Induktionsprinzip
Noether’sche Induktion
Sei eine wohlfundierte OrdnungüberS und P eine Aussage über Elemente von S. Dann gilt
∀v ∈S.(∀u∈S.v u∧P(u))⇒P(v)
∀x ∈S.P(x)
I Eine binäre Relation⊆S×S ist eine Ordnung wenn gilt
∀x ∈S.xx (irreflexiv)
∀x,y ∈S.x y ⇒y x (assymetrisch)
∀x,y,z ∈S.(x y∧yz)⇒x z (transitiv) I Eine Ordnung≺ ist wohlfundiert, wenn es keine unendlich
absteigendenKetten gibt
a a a . . .
Induktionsprinzip
Noether’sche Induktion
Sei eine wohlfundierte OrdnungüberS und P eine Aussage über Elemente von S. Dann gilt
∀v ∈S.(∀u∈S.v u∧P(u))⇒P(v)
∀x ∈S.P(x)
S
Mathematische Induktion N n→n+ 1
Strukturelle Induktion Aexp Aexp aa0 genau dann, wenn a0 ist Teilausdruck von a
Arbeitsblatt 4.1: Übung zu struktureller Ordnung
Die strukturelle Ordnung auf arithmetischen Ausdrücken ist definiert als:
∀a,a0 ∈AExp.aa0 ⇔a0 ist Teilausdruck von a Dabei ist “Teilausdruck” formalisiert als ◦ ∈ {+,∗,−, /}:
aTeilausdruck-von(a1◦a2)⇔ a=a1∨aTeilausdruck-vona1∨ a=a2∨aTeilausdruck-vona2
!
I Argumentiert/beweist, dass die Relation “Teilausdruck-von”
4.1.1irreflexiv
4.2.2assymmetrisch und
4.3.3transitiv ist.
Besprechung
Argumentiert/beweist, die Relation “Teilausdruck-von” ist
1 irreflexiv Für Variablen und Zahlen gilt es nicht.
(a1◦a2) Teilausdruck-von(a1◦a2)
⇔(a1◦a2) =a1∨(a1◦a2) Teilausdruck-vona1 Widerspruch
2 assymmetrisch
(a1◦a2) Teilausdruck-von(a10 ◦a02)
∧(a01◦a20) Teilausdruck-von(a1◦a2)
⇔[(a1◦a2) Teilausdruck-vona01
∨(a1◦a2) Teilausdruck-vona02]
∧[(a01◦a20) Teilausdruck-vona1
∨(a01◦a20) Teilausdruck-vona2]
Besprechung
Argumentiert/beweist, die Relation “Teilausdruck-von” ist
3 transitiv
aTeilausdruck-von(a1◦a2)∧(a1◦a2) Teilausdruck-von(a01◦a20)
⇔
1. Fall:a=a1∨aTeilausdruck-vona1⇒aTeilausdruck-von(a01◦a02) 2. Fall:a=a2∨aTeilausdruck-vona2⇒aTeilausdruck-von(a01◦a02)
Ä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?)
Beweis ∀a∈Aexp.∀n∈Z.∀σ. ha, σi →Aexpn⇔(σ,n)∈[[a]]A
∧ ha, σi →Aexp⊥ ⇔σ6∈Dom([[a]]A) Induktionsanfänge
I a≡m∈Z:
hm, σi →Aexp m
[[m]]A={(σ0,m)|σ0 ∈Σ} ⇒(σ,m)∈[[m]]A
#
⇔
I a≡X ∈Loc:
1 X ∈Dom(σ):
hX, σi →Aexpσ(X)
[[X]]A={(σ0, σ0(X))|σ0∈Σ,X ∈Dom(σ)} ⇒(σ, σ(X))∈[[X]]A
⇔
2 X 6∈Dom(σ):
hX, σi →Aexp⊥
[[X]]A={(σ0, σ0(X))|σ0∈Σ,X ∈Dom(σ)} ⇒σ6∈Dom([[X]]A)
⇔
Beweis ∀a∈Aexp.∀n∈Z.∀σ. ha, σi →Aexpn⇔(σ,n)∈[[a]]A
∧ ha, σi →Aexp⊥ ⇔σ6∈Dom([[a]]A) Induktionsschritte
I a≡a1+a2:
1 Fall:m6=⊥undn6=⊥ Es gilt
[[a1+a2]]A={(σ0,u+v)|(σ0,u)∈[[a1]]Aund (σ0,v)∈[[a2]]A} Induktionsannahme gilt füra1unda2.
ha1+a2, σi →KS Aexp m+n
(Def.h.,.i→Aexp.)
ha1, σi →Aexpm
&
ks IA fuera1 +3(σ,m)∈[[a1]]A
&
ha2, σi →Aexpnks IA fuera2 +3(σ,n)∈[[a2]]A
KS
(Def.[[.]]A)
Beweis ∀a∈Aexp.∀n∈Z.∀σ. ha, σi →Aexpn⇔(σ,n)∈[[a]]A
∧ ha, σi →Aexp⊥ ⇔σ6∈Dom([[a]]A)
Induktionsschritte
I a≡a1+a2: Induktionsannahme gilt für a1 und a2.
2 Fall:m=⊥odern=⊥
ha1, σi →Aexpn ha2, σi →Aexpm m=⊥odern=⊥ ha1+a2, σi →Aexp ⊥
I Falln=⊥.
Aus Induktionsannahme folgt, dassha1, σi →Aexp⊥ ⇔σ6∈Dom([[a1]]A).
Weiterhin gilt
[[a1+a2]]A={(σ0,u+v)|(σ0,u)∈[[a1]]Aund (σ0,v)∈[[a2]]A} Somit giltσ6∈Dom([[a1+a2]]A).
I Falln6=⊥,m=⊥: analog.
Beweis ∀a∈Aexp.∀n∈Z.∀σ. ha, σi →Aexpn⇔(σ,n)∈[[a]]A
∧ ha, σi →Aexp⊥ ⇔σ6∈Dom([[a]]A) Induktionsschritte
I a≡a1/a2:
1 Fall:m6=⊥undn6=⊥,n6= 0 Es gilt
[[a1/a2]]A={(σ0,u/v)|(σ0,u)∈[[a1]]A,(σ0,v)∈[[a2]]Aundv 6= 0}
Induktionsannahme gilt füra1unda2. ha1/a2, σi →KS Aexpm/n
(Def.h.,.i→Aexp.)
ha1, σi →Aexpm
&
ks IA fuera1 +3(σ,m)∈[[a1]]A
&
ha2, σi →Aexpnks IA fuera2 +3(σ,n)∈[[a2]]A
KS
(Def.[[.]]A)
Beweis ∀a∈Aexp.∀n∈Z.∀σ. ha, σi →Aexpn⇔(σ,n)∈[[a]]A
∧ ha, σi →Aexp⊥ ⇔σ6∈Dom([[a]]A)
Induktionsschritte
I a≡a1/a2: Induktionsannahme gilt füra1 und a2.
2 Fall:
ha1, σi →Aexpm ha2, σi →Aexpn m=⊥,n= 0 odern=⊥ ha1/a2, σi →Aexp⊥
I Falln= 0.
Aus Induktionsannahme folgt, dassha2, σi →Aexp0⇔(σ,0)∈[[a2]]A. Weiterhin gilt
[[a1/a2]]A={(σ0,u/v)|(σ0,u)∈[[a1]]A,(σ0,v)∈[[a2]]Aundv6= 0}
Somit giltσ6∈Dom([[a1/a2]]A).
I Falln=⊥,m=⊥: analog wie bei +
q.e.d.
Operationale vs. denotationale Semantik
Operational
hb, σi →Bexpfalse|true| ⊥
Denotational [[b]]B
1 h1, σi →Bexptrue {(σ,true)|σ∈Σ}
0 h0, σi →Bexp false {(σ,false)|σ ∈Σ}
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 →Bexp true
ha0, σi →Aexp n ha1, σi →Aexp m n,m6=⊥ n6=m ha0==a1, σi →Bexpfalse
ha0, σi →Aexp n ha1, σi →Aexp m n=⊥oder m=⊥ ha0==a1, σi →Bexp⊥
{(σ,true)|σ ∈Σ,
(σ,n0)∈[[a0]]A, (σ,n1)∈[[a1]]A, n0=n1 }
∪
{(σ,false)|σ ∈Σ,
(σ,n0)∈[[a0]]A, (σ,n1)∈[[a1]]A, n06=n1 }
a1<a2 analog
Operationale vs. denotationale Semantik
Operational ha, σi →Bexp b Denotational [[b]]B
b1&&b0
hb1, σi →Bexpfalse
hb1&&b2, σi →false {(σ,false)|(σ,false)∈ [[b1]]B}
hb1, σi →Bexp true hb2, σi →Bexpb
hb1&&b2, σi →b {(σ,b)|(σ,true)∈ [[b1]]B,(σ,b)∈[[b2]]B} 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?)
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt ⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B)
Induktionsanfänge I b≡0:
h0, σi →Bexp false
[[0]]A ={(σ0,false)|σ0 ∈Σ} ⇒(σ,false)∈[[b]]B
#
⇔
I b≡1:
h1, σi →Bexp true
[[1]]A ={(σ0,true)|σ0 ∈Σ} ⇒(σ,true)∈[[b]]B
#
⇔
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt ⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B) Induktionsschritte
I b≡b1&&b2: Es gilt
[[b1&&b2]]B ={(σ0,false)|(σ0,false)∈[[b1]]B}
∪ {(σ0,t2)|(σ0,true)∈[[b1]]B und (σ0,t2)∈[[b2]]B} Induktionsannahme gilt fürb1 und b2.
I Fallhb1, σi →Bexp⊥ hb1&&b2, σi →Bexp⊥
KS
(Def.h.,.i→Bexp.)
hb1, σi →Bexp⊥ksIA fuerb1+3σ6∈Dom([[b1]]B)
Def. [[.]]B
σ6∈[[b &&b ]]
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt ⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B) Induktionsschritte
I b≡b1&&b2: Es gilt
[[b1&&b2]]B ={(σ0,false)|(σ0,false)∈[[b1]]B}
∪ {(σ0,t2)|(σ0,true)∈[[b1]]B und (σ0,t2)∈[[b2]]B} Induktionsannahme gilt fürb1 und b2.
I Fallhb1, σi →Bexpfalse hb1&&b2, σi →Bexpfalse
KS
(Def.h.,.i→Bexp.)
hb1, σi →Bexpfalseks IA fuerb1 +3(σ,false)∈[[b1]]B Def. [[.]]B
(σ,false)∈[[b1&&b2]]B
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt ⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B) Induktionsschritte
I b≡b1&&b2:
[[b1&&b2]]B ={(σ0,false)|(σ0,false)∈[[b1]]B}
∪ {(σ0,t2)|(σ0,true)∈[[b1]]B und (σ0,t2)∈[[b2]]B} Induktionsannahme gilt fürb1 und b2.
I Fallhb1, σi →Bexptrue,hb2, σi →Bexp false hb1&&b2, σi →KS Bexpfalse
(Def.h.,.i→Bexp.)
hb1, σi →Bexp true
&
ks IA fuerb1 +3(σ,true)∈[[b1]]B
&
hb2, σi →Bexpfalseks IA fuerb2 +3(σ,false)∈[[b2]]B
Def. [[.]]B
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt ⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B) Induktionsschritte
I b≡b1&&b2:
[[b1&&b2]]B ={(σ0,false)|(σ0,false)∈[[b1]]B}
∪ {(σ0,t2)|(σ0,true)∈[[b1]]B und (σ0,t2)∈[[b2]]B} Induktionsannahme gilt fürb1 und b2.
I Fallhb1, σi →Bexptrue,hb2, σi →Bexp true hb1&&b2, σi →Bexptrue
KS
(Def.h.,.i→Bexp.)
hb1, σi →Bexptrue
&
ks IA fuerb1 +3(σ,true)∈[[b1]]B
&
hb2, σi →Bexptrueks IA fuerb2 +3(σ,true)KS∈[[b2]]B
Def. [[.]]B
(σ,true)∈[[b1&&b2]]B
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt ⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B) Induktionsschritte
I b≡b1&&b2:
[[b1&&b2]]B ={(σ0,false)|(σ0,false)∈[[b1]]B}
∪ {(σ0,t2)|(σ0,true)∈[[b1]]B und (σ0,t2)∈[[b2]]B} Induktionsannahme gilt fürb1 und b2.
I Fallhb1, σi →Bexptrue,hb2, σi →Bexp ⊥ hb1&&b2, σi →KS Bexp⊥
(Def.h.,.i→Bexp.)
hb1, σi →Bexp true
&
ks IA fuerb1 +3(σ,true)∈[[b1]]B
&
hb2, σi →Bexp⊥ks IA fuerb2 +3σ6∈Dom([[b2]]B)
Def. [[.]]B
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexp t ⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp ⊥ ⇔σ6∈Dom([[b]]B)
I (σ,true)∈[[b1&&b2]]BDef. [[.]]ks +3B(σ,true)∈[[b1]]B und (σ,true)∈[[b2]]B
I Siehe Folie 24
I
(σ,false)∈[[b1&&b2]]BDef. [[.]]ks +3B (σ,false)∈[[b1]]B oder
(σ,true)∈[[b1]]B und (σ,false)∈[[b2]]B
I Siehe Folie 22 und 23
I σ6∈Dom([[b1&&b2]]B)Def. [[.]]ks +3B σ6∈Dom([[b1]]B) oderσ6∈Dom([[b2]]B) I Siehe Folie 21 und 25
Somit gilt dann auch⇔ q.e.d.
Arbeitsblatt 4.2:
Beweis Induktionsanfang 1. ha1==a2, σi →Bexpfalse⇔(σ,false)∈[[a1==a2]]B 2. ha1==a2, σi →Bexptrue⇔(σ,true)∈[[a1==a2]]B 3. ha1==a2, σi →Bexp⊥ ⇔σ6∈Dom([[a1==a2]]B)Beweist obige drei Aussagen unter Verwendung des für arithmetische Ausdrücke geltenden Lemmas
∀a∈Aexp.∀n∈Z.∀σ. ha, σi →Aexp n⇔(σ,n)∈[[a]]A
∧ hb, σi →Bexp⊥ ⇔σ 6∈Dom([[a]]A)
Beweis 1. ha1==a2, σi →Bexp false⇔(σ,false)∈[[a1==a2]]B 2. ha1==a2, σi →Bexp true⇔(σ,true)∈[[a1==a2]]B 3. ha1==a2, σi →Bexp ⊥ ⇔σ6∈Dom([[a1==a2]]B)
[[a1 ==a2]]B ={(σ0,true)|(σ0,m)∈[[a1]]A,(σ0,n)∈[[a2]]A,m=n}
∪ {(σ0,false)|(σ0,m)∈[[a1]]A,(σ0,n)∈[[a2]]A,m6=n}
I Fallha1, σi →Bexp m,hb2, σi →Bexpn,m=n ha1 ==a2, σi →Bexptrue
KS
(Def.h.,.i→Bexp.)
ha1, σi →Bexp m
&
ks IA fuera1 +3(σ,m)∈[[a2]]A
&
ha2, σi →Bexp mks IA fuera2 +3(σ,m)∈KS [[a1]]A Def. [[.]]B
(σ,true)[[a ==a ]]
Beweis 1. ha1==a2, σi →Bexp false⇔(σ,false)∈[[a1==a2]]B 2. ha1==a2, σi →Bexp true⇔(σ,true)∈[[a1==a2]]B 3. ha1==a2, σi →Bexp ⊥ ⇔σ6∈Dom([[a1==a2]]B)
[[a1 ==a2]]B ={(σ0,true)|(σ0,m)∈[[a1]]A,(σ0,n)∈[[a2]]A,m=n}
∪ {(σ0,false)|(σ0,m)∈[[a1]]A,(σ0,n)∈[[a2]]A,m6=n}
I Fallha1, σi →Bexp m,hb2, σi →Bexpn,m6=n ha1 ==a2, σi →Bexpfalse
KS
(Def.h.,.i→Bexp.)
ha1, σi →Aexp m
&
ksLemma fuera1 +3(σ,m)∈[[a1]]A
&
ha2, σi →Aexp nks Lemma fuera2 +3(σ,n)∈KS [[a2]]A Def. [[.]]B
Beweis 1. ha1==a2, σi →Bexp false⇔(σ,false)∈[[a1==a2]]B 2. ha1==a2, σi →Bexp true⇔(σ,true)∈[[a1==a2]]B 3. ha1==a2, σi →Bexp ⊥ ⇔σ6∈Dom([[a1==a2]]B)
[[a1 ==a2]]B ={(σ0,true)|(σ0,m)∈[[a1]]A,(σ0,n)∈[[a1]]A,m=n}
∪ {(σ0,false)|(σ0,m)∈[[a1]]A,(σ0,n)∈[[a2]]A,m6=n}
I Fallha1, σi →Bexp ⊥:
ha1 ==a2, σi →Bexp⊥
KS
(Def.h.,.i→Bexp.)
ha1, σi →Aexp ⊥
&
ks Lemma fuera+3σ6∈Dom([[a1]]A)
Def. [[.]]B
σ6∈Dom([[a1 ==a2]]B)
Beweis 1. ha1==a2, σi →Bexp false⇔(σ,false)∈[[a1==a2]]B 2. ha1==a2, σi →Bexp true⇔(σ,true)∈[[a1==a2]]B 3. ha1==a2, σi →Bexp ⊥ ⇔σ6∈Dom([[a1==a2]]B)
[[a1 ==a2]]B ={(σ0,true)|(σ0,m)∈[[a1]]A,(σ0,n)∈[[a1]]A,m=n}
∪ {(σ0,false)|(σ0,m)∈[[a1]]A,(σ0,n)∈[[a2]]A,m6=n}
I Fallha2, σi →Bexp ⊥:
ha1 ==a2, σi →Bexp⊥
KS
(Def.h.,.i→Bexp.)
ha2, σi →Aexp ⊥
&
ks Lemma fuera+3σ6∈Dom([[a2]]A)
Def. [[.]]B
σ6∈Dom([[a1 ==a2]]B)
Beweis 1. ha1==a2, σi →Bexp false⇔(σ,false)∈[[a1==a2]]B 2. ha1==a2, σi →Bexp true⇔(σ,true)∈[[a1==a2]]B 3. ha1==a2, σi →Bexp ⊥ ⇔σ6∈Dom([[a1==a2]]B)
[[a1 ==a2]]B ={(σ0,true)|(σ0,m)∈[[a1]]A,(σ0,n)∈[[a1]]A,m=n}
∪ {(σ0,false)|(σ0,m)∈[[a1]]A,(σ0,n)∈[[a2]]A,m6=n}
I σ6∈Dom([[a1 ==a2]]B)Def. [[.]]ks B+3 σ 6∈Dom([[a1]]A) oderσ 6∈
Dom([[a2]]A)
I Siehe die beiden Fälle auf den beiden vorangegangenen Folien.
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 ⊥
[[c1]]C◦[[c2]]C
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 →Bexptrue
hc0, σi →Stmt σ0 hc, σi →Stmt σ0
{(σ, σ0)|(σ,true)∈ [[b]]B,(σ, σ0)∈[[c0]]C}
else c1
hb, σi →Bexp false hc1, σi →Stmt σ0
hc, σi →Stmt σ0 {(σ, σ0)|(σ,false)∈ [[b]]B,(σ, σ0)∈[[c1]]C}
Operationale vs. denotationale Semantik
Operational hc, σi →Stmt σ0 | ⊥
Denotational [[c]]C
while(b) c
| {z }
w
hb, σi →Bexpfalse hw, σi →Stmt σ
hb, σi →Bexp⊥ hw, σi →Stmt ⊥
hb, σi →Bexptrue hc, σi →Stmt σ0 6=⊥ hw, σ0i →Stmt σ00 hw, σi →Stmt σ00
fix(Γ)
hb, σi →Bexptrue hc, σi →Stmt ⊥ hw, σi →Stmt ⊥
mit
Γ(ϕ) = {(σ, σ0)|(σ,true)∈[[b]]B,(σ, σ0)∈[[c]]C◦ϕ}
∪{(σ, σ)|(σ,false)∈[[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?
Operationale Semantik: C0 Programme
I Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Regeln:
h{ }, σi →Stmt σ ha, σi →Aexp n∈Z
hx =a, σi →Stmt σ[n/x]
ha, σi →Aexp ⊥ hx =a, σi →Stmt ⊥ hc1, σi →Stmt σ0 6=⊥ hc2, σ0i →Stmt σ006=⊥
hc1;c2, σi →Stmt σ00 hc1, σi →Stmt ⊥ hc1;c2, σi →Stmt ⊥
hc1, σi →Stmt σ0 6=⊥ hc2, σ0i →Stmt ⊥ hc1;c2, σi →Stmt ⊥
Operationale Semantik: C0 Programme
I Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Regeln:
hb, σi →Bexptrue hc1, σi →Stmt σ0 hif(b) c1 else c2, σi →Stmt σ0 hb, σi →Bexpfalse hc2, σi →Stmt σ0
hif(b) c1 else c2, σi →Stmt σ0 hb, σi →Bexp⊥
hif(b) c1 else c2, σi →Stmt ⊥
Operationale Semantik: C0 Programme
I Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Regeln:
hb, σi →Bexpfalse hwhile (b) c, σi →Stmt σ
hb, σi →Bexp true 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 ⊥
Ableitungstiefe für Programme
I Die Ableitungstiefe einer Programmauswertung mittels Regeln der operationaler Semantik ist die Anzahl der Regelanwendungenmit Conclusion der Form h., .i →Stmt ..
...
Prämisse1 . . . ... Prämissen Conclusion
Operationale Semantik: C0 Programme
I Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Regeln:
hc1, σi →Stmtσ06=⊥ hc2, σ0i →Stmtσ006=⊥
hc1;c2, σi →Stmtσ00
hb, σi →Bexptrue hc1, σi →Stmtσ0 hif(b)c1 else c2, σi →Stmtσ0
hb, σi →Bexpfalse hc2, σi →Stmtσ0 hif(b)c1 else c2, σi →Stmtσ0
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⊥
Programmstruktur
&
&
&
→
&