• Keine Ergebnisse gefunden

Operationale vs. denotationale Semantik

N/A
N/A
Protected

Academic year: 2022

Aktie "Operationale vs. denotationale Semantik"

Copied!
7
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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 xDom(σ)

hx, σi →Aexpσ(x) {(σ, σ(x))|σ∈Σ,x∈ Dom(σ)}

x6∈Dom(σ) hx, σi →Aexp

a1a2

ha1, σi →Aexpn ha2, σi →Aexpm n,m6=⊥

ha1a2, σi →AexpnIm {(σ,nIm)|σ∈Σ,(σ,n)∈ [[a1]]A,(σ,m)∈[[a2]]A} ha1, σi →Aexpn

ha2, σi →Aexpm n=⊥oderm=⊥ ha1a2, σ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=⊥

ha1a2, σi →AexpnIm {(σ,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 alleaAexp, 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.(∀uS.vuP(u))P(v)

∀x∈S.P(x)

IEine binäre Relation⊆S×Sist eine Ordnung wenn gilt

∀x∈S.xx (irreflexiv)

∀x,yS.xyyx (assymetrisch)

∀x,y,zS.(xyyz)xz (transitiv) IEine Ordnung≺ist wohlfundiert, wenn es keine unendlich

absteigendenKetten gibt

a1a2a3. . .

S

Mathematische Induktion N nn+ 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,a0AExp.aa0a0ist Teilausdruck vona Dabei ist “Teilausdruck” formalisiert als◦ ∈ {+,∗,−, /}:

aTeilausdruck-von(a1a2)⇔ a=a1aTeilausdruck-vona1a=a2aTeilausdruck-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.

(a1a2) Teilausdruck-von(a1a2)

⇔(a1a2) =a1∨(a1a2) Teilausdruck-vona1 Widerspruch

2 assymmetrisch

(a1a2) Teilausdruck-von(a01a02)

∧(a01a02) Teilausdruck-von(a1a2)

⇔[(a1a2) Teilausdruck-vona10

∨(a1a2) Teilausdruck-vona02]

∧[(a01a02) Teilausdruck-vona1

∨(a01a20) Teilausdruck-vona2]

Korrekte Software 8 [53]

(2)

Besprechung

Argumentiert/beweist, die Relation “Teilausdruck-von” ist 3 transitiv

aTeilausdruck-von(a1a2)∧(a1a2) Teilausdruck-von(a01a20)

1. Fall:a=a1aTeilausdruck-vona1aTeilausdruck-von(a01a02) 2. Fall:a=a2aTeilausdruck-vona2aTeilausdruck-von(a01a02)

Korrekte Software 9 [53]

Äquivalenz operationale und denotationale Semantik

IFür alleaAexp, 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

Iam∈Z:

hm, σi →Aexpm

[[m]]A={(σ0,m)|σ0∈Σ} ⇒(σ,m)∈[[m]]A

#

IaXLoc:

1 XDom(σ):

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

Iaa1+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

Iaa1+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

Iaa1/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

Iaa1/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]

(3)

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 allebBexp, 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 Ib0:

h0, σi →Bexpfalse

[[0]]A={(σ0,false)|σ0∈Σ} ⇒(σ,false)∈[[b]]B

#

Ib1:

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

Ibb1&&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

Ibb1&&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

Ibb1&&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

Ibb1&&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]

(4)

Beweis ∀a∈Bexp.∀n∈Z.∀σ. hb, σi →Bexpt⇔(σ,t)∈[[b]]B

∧ hb, σi →Bexp⊥ ⇔σ6∈Dom([[b]]B) Induktionsschritte

Ibb1&&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]]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 →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]

(5)

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 allecStmt, 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 allecStmt, 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]

(6)

Beweis∀c∈Stmt.∀σ, σ0.1. hc, σi →Stmtσ0⇒(σ, σ0)∈[[c]]C

2. hc, σi →Stmt⊥ ⇒σ6∈Dom([[c]]C) Induktionsanfang – Ableitungstiefe 1

IFallcx=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:

IFallcif(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:

IFallcwhile(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,σ+30i→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 allecStmt, 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:

IFallcx=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]]Cs}

∪ {(σ, σ)|(σ,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]]Cs}

∪ {(σ, σ)|(σ,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]

Referenzen

ÄHNLICHE DOKUMENTE

Für die While-Schleife Rückgriff auf Definition des Fixpunkts und Induktion über die Teilmengen Γ i (∅) des Fixpunkts.. Für die While-Schleife Rückgriff auf Definition des

I Modellierung und Spezifikation I Verifikationsbedingungen I Vorwärts mit Floyd und Hoare I Funktionen und Prozeduren I Referenzen. I Ausblick

• Erweitern Sie die Syntax auch für boolesche Ausdrücke um den ternären Bedingungsoperator und defi- nieren Sie die operationale Semantik entsprechend. — Seite 2 von

die denotationale Semantik der Schleife (Zeile 1– 8), indem wir die Tabelle solange horizontal fortsetzen, bis die Schleife terminiert.. (c) Geben Sie danach eine geschlossene

Korrekte Software: Grundlagen und Methoden Vorlesung 5 vom 04.05.17: Äquivalenz der Operationalen und..

• Erweitern Sie die Syntax auch für boolesche Ausdrücke um den ternären Bedingungsoperator und defi- nieren Sie die operationale Semantik entsprechend. — Seite 2 von

Serge Autexier, Christoph Lüth.

Korrekte Software: Grundlagen und Methoden Vorlesung 5 vom 2.05.16: Äquivalenz operationale und.