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
13:55:46 2020-07-14 1 [53]
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 IAusblick und Rückblick
Korrekte Software 2 [53]
Operationale vs. denotationale Semantik
Operationalha, σi →Aexpn Denotational[[a]]A m∈Z hm, σi →Aexpm {(σ,m)|σ∈Σ}
x∈Loc x∈Dom(σ)
hx, σi →Aexpσ(x) {(σ, σ(x))|σ∈Σ,x∈ Dom(σ)}
x6∈Dom(σ) hx, σi →Aexp⊥
a1◦a2
ha1, σi →Aexpn ha2, σi →Aexpm n,m6=⊥
ha1◦a2, σi →Aexpn◦Im {(σ,n◦Im)|σ∈Σ,(σ,n)∈ [[a1]]A,(σ,m)∈[[a2]]A} ha1, σi →Aexpn
ha2, σi →Aexpm n=⊥oderm=⊥ ha1◦a2, σi →Aexp⊥
◦ ∈ {+,∗,−}
Korrekte Software 3 [53]
Operationale vs. denotationale Semantik
Operationalha, σi →Aexpn Denotational[[a]]A
a1/a2
ha1, σi →Aexpn ha2, σi →Aexpm m6= 0 m,n6=⊥
ha1◦a2, σi →Aexpn◦Im {(σ,n/m)|σ∈Σ,(σ,n)∈ [[a1]]A,(σ,m)∈[[a2]]A,m6=
0}
ha1, σi →Aexpn ha2, σi →Aexpm n=⊥,m=⊥oderm= 0
ha1/a2, σi →Aexp⊥
Korrekte Software 4 [53]
Äquivalenz operationale und denotationale Semantik
IFür allea∈Aexp, für allen∈Z, für alle Zuständeσ:
ha, σi →Aexpn⇔(σ,n)∈[[a]]A ha, σi →Aexp⊥ ⇔σ6∈Dom([[a]]A)
IBeweis Prinzip?
Korrekte Software 5 [53]
Induktionsprinzip
Noether’sche Induktion
Seieinewohlfundierte OrdnungüberSundPeine Aussage über Elemente vonS. Dann gilt
∀v∈S.(∀u∈S.vu∧P(u))⇒P(v)
∀x∈S.P(x)
IEine binäre Relation⊆S×Sist eine Ordnung wenn gilt
∀x∈S.xx (irreflexiv)
∀x,y∈S.xy⇒yx (assymetrisch)
∀x,y,z∈S.(xy∧yz)⇒xz (transitiv) IEine Ordnung≺ist wohlfundiert, wenn es keine unendlich
absteigendenKetten gibt
a1a2a3. . .
S
Mathematische Induktion N n→n+ 1
Strukturelle InduktionAexp Aexp aa0genau dann, wenn a0ist Teilausdruck vona
Korrekte Software 6 [53]
Arbeitsblatt 4.1: Übung zu struktureller Ordnung
Die strukturelle Ordnung auf arithmetischen Ausdrücken ist definiert als:
∀a,a0∈AExp.aa0⇔a0ist Teilausdruck vona Dabei ist “Teilausdruck” formalisiert als◦ ∈ {+,∗,−, /}:
aTeilausdruck-von(a1◦a2)⇔ a=a1∨aTeilausdruck-vona1∨ a=a2∨aTeilausdruck-vona2
!
IArgumentiert/beweist, dass die Relation “Teilausdruck-von”
4.1.1irreflexiv 4.2.2assymmetrisch und 4.3.3transitiv
ist.
Korrekte Software 7 [53]
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(a01◦a02)
∧(a01◦a02) Teilausdruck-von(a1◦a2)
⇔[(a1◦a2) Teilausdruck-vona10
∨(a1◦a2) Teilausdruck-vona02]
∧[(a01◦a02) Teilausdruck-vona1
∨(a01◦a20) Teilausdruck-vona2]
Korrekte Software 8 [53]
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)
Korrekte Software 9 [53]
Äquivalenz operationale und denotationale Semantik
IFür allea∈Aexp, für allen∈Z, für alle Zuständeσ:
ha, σi →Aexpn⇔(σ,n)∈[[a]]A ha, σi →Aexp⊥ ⇔σ6∈Dom([[a]]A)
IBeweis Prinzip?per struktureller Induktion übera. (Warum?)
Korrekte Software 10 [53]
Beweis ∀a∈Aexp.∀n∈Z.∀σ. ha, σi →Aexpn⇔(σ,n)∈[[a]]A
∧ ha, σi →Aexp⊥ ⇔σ6∈Dom([[a]]A) Induktionsanfänge
Ia≡m∈Z:
hm, σi →Aexpm
[[m]]A={(σ0,m)|σ0∈Σ} ⇒(σ,m)∈[[m]]A
#
⇔
Ia≡X∈Loc:
1 X∈Dom(σ):
hX, σi →Aexpσ(X)
[[X]]A={(σ0, σ0(X))|σ0∈Σ,X∈Dom(σ)} ⇒(σ, σ(X))∈[[X]]A
⇔
2 X6∈Dom(σ):
hX, σi →Aexp⊥
[[X]]A={(σ0, σ0(X))|σ0∈Σ,X∈Dom(σ)} ⇒σ6∈Dom([[X]]A)
⇔
Korrekte Software 11 [53]
Beweis ∀a∈Aexp.∀n∈Z.∀σ. ha, σi →Aexpn⇔(σ,n)∈[[a]]A
∧ ha, σi →Aexp⊥ ⇔σ6∈Dom([[a]]A) Induktionsschritte
Ia≡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 Aexpm+n
(Def.h.,.i→Aexp.)
ha1, σi →Aexpm
&
ks IA fuera1 +3(σ,m)∈[[a1]]A
&
ha2, σi →Aexpnks IA fuera2 +3(σ,n)∈KS [[a2]]A (Def.[[.]]A)
(σ,m+n)∈[[a1+a2]]A
Korrekte Software 12 [53]
Beweis ∀a∈Aexp.∀n∈Z.∀σ. ha, σi →Aexpn⇔(σ,n)∈[[a]]A
∧ ha, σi →Aexp⊥ ⇔σ6∈Dom([[a]]A)
Induktionsschritte
Ia≡a1+a2: Induktionsannahme gilt füra1unda2. 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.
Korrekte Software 13 [53]
Beweis ∀a∈Aexp.∀n∈Z.∀σ. ha, σi →Aexpn⇔(σ,n)∈[[a]]A
∧ ha, σi →Aexp⊥ ⇔σ6∈Dom([[a]]A) Induktionsschritte
Ia≡a1/a2:
1 Fall:m6=⊥undn6=⊥,n6= 0 Es gilt
[[a1/a2]]A={(σ0,u/v)|(σ0,u)∈[[a1]]A,(σ0,v)∈[[a2]]Aundv6= 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)∈KS [[a2]]A (Def.[[.]]A)
(σ,m+n)∈[[a1/a2]]A
Korrekte Software 14 [53]
Beweis ∀a∈Aexp.∀n∈Z.∀σ. ha, σi →Aexpn⇔(σ,n)∈[[a]]A
∧ ha, σi →Aexp⊥ ⇔σ6∈Dom([[a]]A)
Induktionsschritte
Ia≡a1/a2: Induktionsannahme gilt füra1unda2. 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.
Korrekte Software 15 [53]
Operationale vs. denotationale Semantik
Operational hb, σi →Bexpfalse|true| ⊥
Denotational[[b]]B
1 h1, σi →Bexptrue {(σ,true)|σ∈Σ}
0 h0, σi →Bexpfalse {(σ,false)|σ∈Σ}
Korrekte Software 16 [53]
Operationale vs. denotationale Semantik
Operat.hb, σi →Bexpt Denotational[[b]]B
a0==a1
ha0, σi →Aexpn ha1, σi →Aexpm n,m6=⊥ n=m ha0==a1, σi →Bexptrue
ha0, σi →Aexpn ha1, σi →Aexpm n,m6=⊥ n6=m ha0==a1, σi →Bexpfalse
ha0, σi →Aexpn ha1, σi →Aexpm n=⊥oderm=⊥ 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
Korrekte Software 17 [53]
Operationale vs. denotationale Semantik
Operationalha, σi →Bexpb Denotational[[b]]B b1&&b0
hb1, σi →Bexpfalse
hb1&&b2, σi →false {(σ,false)|(σ,false)∈ [[b1]]B} hb1, σi →Bexptrue
hb2, σi →Bexpb
hb1&&b2, σi →b {(σ,b)|(σ,true)∈ [[b1]]B,(σ,b)∈[[b2]]B} hb1, σi →Bexp⊥
hb1&&b2, σi → ⊥
b1||b2 analog
!n . . .
Korrekte Software 18 [53]
Äquivalenz operationale und denotationale Semantik
IFür alleb∈Bexp, für allet∈B, for alle Zuständeσ:
hb, σi →Bexpt⇔(σ,t)∈[[b]]B hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B)
IBeweis Prinzip?per struktureller Induktion überb(unter Verwendung der Äquivalenz für AExp). (Warum?)
Korrekte Software 19 [53]
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B)
Induktionsanfänge Ib≡0:
h0, σi →Bexpfalse
[[0]]A={(σ0,false)|σ0∈Σ} ⇒(σ,false)∈[[b]]B
#
⇔
Ib≡1:
h1, σi →Bexptrue
[[1]]A={(σ0,true)|σ0∈Σ} ⇒(σ,true)∈[[b]]B
#
⇔
Korrekte Software 20 [53]
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B) Induktionsschritte
Ib≡b1&&b2: Es gilt
[[b1&&b2]]B={(σ0,false)|(σ0,false)∈[[b1]]B}
∪ {(σ0,t2)|(σ0,true)∈[[b1]]Bund (σ0,t2)∈[[b2]]B} Induktionsannahme gilt fürb1undb2.
IFallhb1, σi →Bexp⊥ hb1&&b2, σi →Bexp⊥
KS
(Def.h.,.i→Bexp.)
hb1, σi →Bexp⊥ksIA fuerb1+3σ6∈Dom([[b1]]B)
Def. [[.]]B
σ6∈[[b1&&b2]]B
Korrekte Software 21 [53]
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B) Induktionsschritte
Ib≡b1&&b2: Es gilt
[[b1&&b2]]B={(σ0,false)|(σ0,false)∈[[b1]]B}
∪ {(σ0,t2)|(σ0,true)∈[[b1]]Bund (σ0,t2)∈[[b2]]B} Induktionsannahme gilt fürb1undb2.
IFallhb1, σi →Bexpfalse hb1&&b2, σi →KS Bexpfalse
(Def.h.,.i→Bexp.)
hb1, σi →Bexpfalseks IA fuerb1 +3(σ,false)∈[[b1]]B Def. [[.]]B
(σ,false)∈[[b1&&b2]]B
Korrekte Software 22 [53]
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B) Induktionsschritte
Ib≡b1&&b2:
[[b1&&b2]]B={(σ0,false)|(σ0,false)∈[[b1]]B}
∪ {(σ0,t2)|(σ0,true)∈[[b1]]Bund (σ0,t2)∈[[b2]]B} Induktionsannahme gilt fürb1undb2.
IFallhb1, σi →Bexptrue,hb2, σi →Bexpfalse hb1&&b2, σi →KS Bexpfalse
(Def.h.,.i→Bexp.)
hb1, σi →Bexptrue
&
ks IA fuerb1 +3(σ,true)∈[[b1]]B
&
hb2, σi →Bexpfalseks IA fuerb2 +3(σ,false)∈[[b2]]B
Def. [[.]]B
(σ,false)∈[[b1&&b2]]B
Korrekte Software 23 [53]
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B) Induktionsschritte
Ib≡b1&&b2:
[[b1&&b2]]B={(σ0,false)|(σ0,false)∈[[b1]]B}
∪ {(σ0,t2)|(σ0,true)∈[[b1]]Bund (σ0,t2)∈[[b2]]B} Induktionsannahme gilt fürb1undb2.
IFallhb1, σi →Bexptrue,hb2, σi →Bexptrue hb1&&b2, σi →KS Bexptrue
(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
Korrekte Software 24 [53]
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B) Induktionsschritte
Ib≡b1&&b2:
[[b1&&b2]]B={(σ0,false)|(σ0,false)∈[[b1]]B}
∪ {(σ0,t2)|(σ0,true)∈[[b1]]Bund (σ0,t2)∈[[b2]]B} Induktionsannahme gilt fürb1undb2.
IFallhb1, σi →Bexptrue,hb2, σi →Bexp⊥ hb1&&b2, σi →Bexp⊥
KS
(Def.h.,.i→Bexp.)
hb1, σi →Bexptrue
&
ksIA fuerb1 +3(σ,true)∈[[b1]]B
&
hb2, σi →Bexp⊥ks IA fuerb2 +3σ6∈Dom([[b2]]B)
Def. [[.]]B
σ6∈Dom([[b1&&b2]]B)
Korrekte Software 25 [53]
Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt⇔(σ,t)∈[[b]]B
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B)
I (σ,true)∈[[b1&&b2]]BDef. [[.]]ks +3B(σ,true)∈[[b1]]Bund (σ,true)∈[[b2]]B ISiehe Folie 24
I
(σ,false)∈[[b1&&b2]]BDef. [[.]]ks B+3 (σ,false)∈[[b1]]Boder
(σ,true)∈[[b1]]Bund (σ,false)∈[[b2]]B ISiehe Folie 22 und 23
I σ6∈Dom([[b1&&b2]]B)Def. [[.]]ks +3Bσ6∈Dom([[b1]]B) oderσ6∈Dom([[b2]]B) ISiehe Folie 21 und 25
Somit gilt dann auch⇔ q.e.d.
Korrekte Software 26 [53]
Arbeitsblatt 4.2:
Beweis Induktionsanfang 1. ha1==a2, σi →Bexpfalse⇔(σ,false)∈[[a1==a2]]B2. 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 →Aexpn⇔(σ,n)∈[[a]]A
∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[a]]A)
Korrekte Software 27 [53]
Beweis 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)
[[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}
IFallha1, σi →Bexpm,hb2, σi →Bexpn,m=n ha1==a2, σi →Bexptrue
KS
(Def.h.,.i→Bexp.) ha1, σi →Bexpm
&
ks IA fuera1 +3(σ,m)∈[[a2]]A
&
ha2, σi →Bexpmks IA fuera2 +3(σ,m)∈KS [[a1]]A Def. [[.]]B
(σ,true)[[a1==a2]]B
Korrekte Software 28 [53]
Beweis 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)
[[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}
IFallha1, σi →Bexpm,hb2, σi →Bexpn,m6=n ha1==a2, σi →Bexpfalse
KS
(Def.h.,.i→Bexp.) ha1, σi →Aexpm
&
ksLemma fuera1 +3(σ,m)∈[[a1]]A
&
ha2, σi →AexpnksLemma fuera2 +3(σ,n)∈KS [[a2]]A Def. [[.]]B
(σ,false)[[a1==a2]]B
Korrekte Software 29 [53]
Beweis 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)
[[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}
IFallha1, σi →Bexp⊥:
ha1==a2, σi →Bexp⊥
KS
(Def.h.,.i→Bexp.) ha1, σi →Aexp⊥
&
ksLemma fuera+3σ6∈Dom([[a1]]A) Def. [[.]]B
σ6∈Dom([[a1==a2]]B) IFallha2, σi →Bexp⊥:
ha1==a2, σi →Bexp⊥
KS
(Def.h.,.i→Bexp.)
ha2, σi →Aexp⊥
&
ksLemma fuera+3σ6∈Dom([[a2]]A) Def. [[.]]B
σ6∈Dom([[a1==a2]]B) I σ6∈Dom([[a1==a2]]B)Def. [[.]]ks B+3 σ6∈Dom([[a1]]A) oderσ6∈
Dom([[a2]]A)
ISiehe die beiden Fälle auf den beiden vorangegangenen Folien.
Korrekte Software 30 [53]
Operationale vs. denotationale Semantik
Operationalhc, σi →Stmtσ0|⊥ Denotational[[c]]C { } h{}, σi →Stmtσ [[{ }]]C=Id
c1;c2
hc1, σi →Stmtσ06=⊥ hc2, σ0i →Stmtσ00 hc1;c2, σi →Stmtσ00
hc1, σi →Stmt⊥ hc1;c2, σi →Stmt⊥
[[c1]]C◦[[c2]]C
x=a ha, σi →Aexpn hx=a, σi →Stmtσ[n/x]
ha, σi →Aexp⊥ hx=a, σi →Stmt⊥
{(σ, σ[n/x])|(σ,n)∈[[a]]A}
Korrekte Software 31 [53]
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}
elsec1
hb, σi →Bexpfalse hc1, σi →Stmtσ0
hc, σi →Stmtσ0 {(σ, σ0)|(σ,false)∈ [[b]]B,(σ, σ0)∈[[c1]]C}
Korrekte Software 32 [53]
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σ06=⊥ 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}
Korrekte Software 33 [53]
Äquivalenz operationale und denotationale Semantik
IFü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?
Korrekte Software 34 [53]
Operationale Semantik: C0 Programme
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 35 [53]
Operationale Semantik: C0 Programme
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 36 [53]
Operationale Semantik: C0 Programme
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 37 [53]
Ableitungstiefe für Programme
IDie Ableitungstiefe einer Programmauswertung mittels Regeln der operationaler Semantik ist dieAnzahl der Regelanwendungenmit Conclusion der Form h., .i →Stmt..
...
Prämisse1 . . . ... Prämissen Conclusion
Korrekte Software 38 [53]
Operationale Semantik: C0 Programme
IStmtc::=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)c1elsec2, σi →Stmtσ0
hb, σi →Bexpfalse hc2, σi →Stmtσ0 hif(b)c1elsec2, σ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⊥ hwhile(b)c, σi →Stmt⊥
Programmstruktur
&
&
&
→
&
Ableitungstiefe
&
&
&
&
&
Korrekte Software 39 [53]
Äquivalenz operationale und denotationale Semantik
IFü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?per Induktion überdie (Tiefe der) Ableitungin der operationalen Semantik (Warum?)
I⇐Beweis Prinzip?
Korrekte Software 40 [53]
Beweis∀c∈Stmt.∀σ, σ0.1. hc, σi →Stmtσ0⇒(σ, σ0)∈[[c]]C
2. hc, σi →Stmt⊥ ⇒σ6∈Dom([[c]]C) Induktionsanfang – Ableitungstiefe 1
IFallc≡x=a:
[[x=a]]C={(σ, σ[m/x])|(σ,m)∈[[a]]A} IFallha, σi →Aexpm∈Z
hx=a, σi →KSStmtσ[m/x]
(Def.h.,.i→Stmt.)
ha, σi →Aexpm∈ZksLemma fuera +3(σ,m)∈[[a]]A
Def. [[.]]C
(σ, σ[m/x])∈[[x=a]]C
IFallha, σi →Aexp⊥:
hx=a, σi →KS Stmt⊥
(Def.h.,.i→Stmt.)
ha, σi →Aexp⊥ksLemma fuera+3σ6∈Dom([[a]]A)
Def. [[.]]C
σ6∈Dom([[x=a]]C) IFallc≡ {}: . . .
Korrekte Software 41 [53]
Beweis∀c∈Stmt.∀σ, σ0.1. hc, σi →Stmtσ0⇒(σ, σ0)∈[[c]]C
2. hc, σi →Stmt⊥ ⇒σ6∈Dom([[c]]C) Induktionsschritt:
IFallc≡if(b)c1elsec2:
[[if(b)c1elsec2]]C={(σ, σ0)|(σ, σ0)∈[[c1]]C,(σ,true)∈[[b]]B}
∪ {(σ, σ0)|(σ, σ0)∈[[c2]]C,(σ,false)∈[[b]]B} IFallhσ,bi →Bexptrue,hc1, σi →Stmtσ0:
hif(b)c1elsec2KS, σi →Stmtσ0
(Def.h.,.i→Stmt.)
hb, σi →Bexptrue
&
ks Lemma fuerb +3(σ,true)∈[[b]]B
&
hc1, σi →Stmtσ0ks IH fuerc1 +3(σ, σ0)∈[[c1]]C Def. [[.]]C
(σ, σ0)∈[[if(b)c1elsec2]]C
IFallhσ,bi →Bexpfalse,hc2, σi →Stmtσ0: hif(b)c1elsec2KS, σi →Stmtσ0
(Def.h.,.i→Stmt.)
hb, σi →Bexpfalse
&
ks Lemma fuerb +3(σ,false)∈[[b]]B
&
hc2, σi →Stmtσ0ks IH fuerc2 +3(σ, σ0)∈[[c2]]C
Def. [[.]]C
(σ, σ0)∈[[if(b)c1elsec2]]C IFallhσ,bi →Bexptrue,hc1, σi →Stmt⊥:
hif(b)c1elsec2KS, σi →Stmt⊥
(Def.h.,.i→Stmt.)
hb, σi →Bexptrue
&
ks Lemma fuerb +3(σ,true)∈[[b]]B
&
hc1, σi →Stmt⊥ks IH fuerc1 +3σ6∈Dom([[c1]]C)
Def. [[.]]C
σ6∈Dom([[if(b)c1elsec2]]C) IFallhσ,bi →Bexp⊥:
hif(b)c1elsec2, σi →Stmt⊥
KS
(Def.h.,.i→Stmt.)
hb, σi →Bexp⊥ks Lemma fuerb +3σ6∈Dom([[b]]B)
Def. [[.]]C
σ6∈Dom([[if(b)c1elsec2]]C)
Korrekte Software 42 [53]
Beweis∀c∈Stmt.∀σ, σ0.1. hc, σi →Stmtσ0⇒(σ, σ0)∈[[c]]C
2. hc, σi →Stmt⊥ ⇒σ6∈Dom([[c]]C) Induktionsschritt:
IFallc≡while(b)c: [[while(b)c]]C=fix(Γ) IFallhb, σi →Bexptrue,hc, σi →Stmtσ0,hwhile(b)c, σ0i →Stmtσ00 hwhile(b)c, σi →KS Stmtσ00
(Def.h.,.i→Stmt.)
hb, σi →Bexptrue
&
ks Lemma fuerb +3(σ,true)∈[[b]]B
&
hc, σi →Stmtσ0
&
ks
IH fuerhc,σi→Stmtσ0+3(σ, σ0)∈[[c]]C
&
hwhile(b)c, σ0i →IH fuerStmthwhile(b)σ00ks c,σ+30(σi→0Stmt, σ00σ)00∈[[while(b)c]]C Def. [[.]]C
(σ, σ00)∈[[while(b)c]]C
Korrekte Software 43 [53]
Äquivalenz operationale und denotationale Semantik
IFü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 überdie (Tiefe der) Ableitungin der operationalen Semantik (Warum?)
I⇐Beweis Prinzip?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?)
Korrekte Software 44 [53]
Beweis∀c∈Stmt.∀σ, σ0.(σ, σ0)∈[[c]]C⇒ hc, σi →Stmtσ0 Induktionsanfang:
IFallc≡x=a:
[[x=a]]C={(σ00, σ00[t/x])|(σ00,t)∈[[a]]A}
(σ, σ0)∈ {(σ00, σ00[t/x])|(σ00,t)∈[[a]]A} Def. [[.]]C..
=⇒ (σ,t) = [[a]]A∧σ0=σ[t/x] LemmaAExp
=⇒ ha, σi →Aexpt∧σ0=σ[t/x] Def.h.,.i→Stmt.
=⇒ hx=a, σi →Stmtσ[t/x]∧σ0=σ[t/x]
=⇒ hx=a, σi →Stmtσ0 IFallc≡ {}
[[{}]]C={(σ, σ)|σ∈Σ}
(σ, σ0)∈ {(σ00, σ00)|σ00∈Σ}
Def. [[.]]C..
=⇒ σ=σ0
Def.h.,.i→Stmt.
=⇒ h{}, σi →Stmtσ∧σ=σ0
=⇒ h{}, σi →Stmtσ0
Korrekte Software 45 [53]
Beweis∀c∈Stmt.∀σ, σ0.(σ, σ0)∈[[c]]C⇒ hc, σi →Stmtσ0 Induktionsschritt:
IFallif(b)c1elsec2:
[[if(b)c1elsec2]]C= {(σ00, σ000)|(σ00,true)∈[[b]]B,(σ00, σ000)∈[[c1]]C}
∪{(σ00, σ000)|(σ00,false)∈[[b]]B,(σ00, σ000)∈[[c2]]C} Induktionsannahme gilt fürc1undc2
IFall: (σ, σ0)∈ {(σ00, σ000)|(σ00,true)∈[[b]]B,(σ00, σ000)∈[[c1]]C}
(σ, σ0)∈ {(σ00, σ000)|(σ00,true)∈[[b]]B,(σ00, σ000)∈[[c1]]C}
Def. [[.]]C..
=⇒ (σ,true)∈[[b]]B∧(σ, σ0)∈[[c1]]C LemmaBExp
=⇒ hb, σi →Bexptrue∧(σ, σ0)∈[[c1]]C IA fürc1
=⇒ hb, σi →Bexptrue∧ hc1, σi →Stmtσ0
Def.h.,.i→Stmt.
=⇒ hif(b)c1elsec2, σi →Stmtσ0
IFall: (σ, σ0)∈ {(σ00, σ000)|(σ00,false)∈[[b]]B,(σ00, σ000)∈[[c2]]C}
(σ, σ0)∈ {(σ00, σ000)|(σ00,true)∈[[b]]B,(σ00, σ000)∈[[c2]]C}
Def. [[.]]C..
=⇒ (σ,false)∈[[b]]B∧(σ, σ0)∈[[c2]]C LemmaBExp
=⇒ hb, σi →Bexpfalse∧(σ, σ0)∈[[c2]]C
IA fürc1
=⇒ hb, σi →Bexpfalse∧ hc2, σi →Stmtσ0
Def.h.,.i→Stmt.
=⇒ hif(b)c1elsec2, σi →Stmtσ0
Korrekte Software 46 [53]
Beweis∀c∈Stmt.∀σ, σ0.(σ, σ0)∈[[c]]C⇒ hc, σi →Stmtσ0 Induktionsschritt:
IFallwhile(b)c2:
[[while(b)c]]C=fix(Γ)
mit Γ(s) ={(σ, σ0)|(σ,true)∈[[b]]B∧(σ, σ0)∈[[c]]C◦s}
∪ {(σ, σ)|(σ,false)∈[[b]]B} Induktionshypothese gilt fürc
(σ, σ0)∈[[while(b)c]]C Def. [[.]]C..
=⇒ (σ, σ0)∈fix(Γ)
Korrekte Software 47 [53]
Beweis∀c∈Stmt.∀σ, σ0.(σ, σ0)∈[[c]]C⇒ hc, σi →Stmtσ0 Induktionsschritt:
IFallwhile(b)c:
[[while(b)c]]C=fix(Γ)
mit Γ(s) ={(σ, σ0)|(σ,true)∈[[b]]B∧(σ, σ0)∈[[c]]C◦s}
∪ {(σ, σ)|(σ,false)∈[[b]]B} Induktionshypothese gilt fürc
(σ, σ0)∈[[while(b)c]]CDef. [[.]]=⇒C.. (σ, σ0)∈fix(Γ) Def.fix(Γ)
=⇒ (σ, σ0)∈[ i∈N
Γi(∅)
Unterbeweis:∀i∈N.(σ, σ0)∈Γi(∅)⇒ hwhile(b)c, σi →Stmtσ0 (UB) Woraus dann folgt, dass
(σ, σ0)∈[ i∈N
Γi(∅)⇒ hwhile(b)c, σi →Stmtσ0 (1)
Korrekte Software 48 [53]