• Keine Ergebnisse gefunden

Korrekte Software: Grundlagen und Methoden Vorlesung 2 vom 28.04.20 Operationale Semantik

N/A
N/A
Protected

Academic year: 2022

Aktie "Korrekte Software: Grundlagen und Methoden Vorlesung 2 vom 28.04.20 Operationale Semantik"

Copied!
61
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Korrekte Software: Grundlagen und Methoden Vorlesung 2 vom 28.04.20

Operationale Semantik

Serge Autexier, Christoph Lüth

Universität Bremen

Sommersemester 2020

(2)

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

(3)

Zutaten

// GGT(A,B)

i f ( a == 0 ) r = b ; e l s e {

w h i l e ( b != 0 ) { i f ( a <= b )

b = b a ; e l s e a = a b ; }

r = a ; }

I Programme berechnenWerte I Basierend auf

I Werte sindVariablenzugewiesen I Evaluation vonAusdrücken I Folgt dem Programmablauf

(4)

Unsere Programmiersprache

Wir betrachten einen Ausschnitt der ProgrammierspracheC(C0).

Ausbaustufe 1 kennt folgende Konstrukte:

I Typen: int;

I Ausdrücke: Variablen, Literale (für ganze Zahlen), arithmetische Operatoren (für ganze Zahlen), Relationen (==,<, . . . ), boolsche Operatoren (&&, ||);

I Anweisungen:

I Fallunterscheidung (if. . .else. . . ), Iteration (while), Zuweisung, Blöcke;

I Sequenzierung und leere Anweisung sind implizit

(5)

C0: Ausdrücke und Anweisungen

Aexp a::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1/a2

Bexp b ::=1|0|a1==a2 |a1<a2|!b |b1&&b2 |b1||b2

Exp e :=a|b

Stmt c ::= Idt=Exp

| if(b) c1 else c2

| while (b) c

| c1;c2

| { }

NB: Nicht diekonkrete Syntax.

(6)

Eine Handvoll Beispiele

a = (3+ y )x+5∗b ; a = ((3+ y )x )+(5∗b ) ; a = 3+yx+5∗b ;

p = 1 ; c = 1 ;

w h i l e ( c <= n ) { p= p c ; c= c + 1 ; }

(7)

Semantik von C0

I Die (operationale) Semantik einer imperativen Sprache wie C0 ist ein Zustandsübergang: das System hat einen impliziten Zustand, der durch Zuweisung vonWertenan Adressen geändert werden kann.

Systemzustände

I Ausdrücke werten zuWerten V(hier ganze Zahlen) aus.

I AdressenLocsind hier Programmvariablen (Namen): Loc=Idt I EinSystemzustandbildet Adressen auf Werte ab: Σ =Loc*V I Ein Programm bildet einen Anfangszustandmöglicherweiseauf einen

Endzustand ab (wenn esterminiert).

(8)

Partielle, endliche Abbildungen

Zustände sind partielle, endliche Abbildungen(finite partial maps)

f :X *A Notation:

I f(x) für den Wert von x in f (lookup) I f(x) =⊥wennx nicht inf (undefined)

I f[n/x] für den Update an der Stelle x mit dem Wertn:

f[n/x](y)def=

(n if x=y f(y) otherwise

I hx 7→n,y7→miu.ä. für konkrete Abbildungen.

I hiist die leere (überall undefinierte Abbildung):

hi(x) =⊥

(9)

Arbeitsblatt 2.1: Jetzt seid ihr dran!

I In euren Gruppen-Arbeitsblättern unter

https://hackmd.informatik.uni-bremen.de/s/SkVLK1Q_Igebt folgendes an

I Wie sieht ein Zustand aus, dera den Wert 6 und c den Wert 2 zuweist.

I Welches sind Zustände, und welche nicht:

(A)hx7→1,a7→3i

(B)hx7→y,b7→6i

(C)hx7→y,b7→6,y 7→2i

(D)hx7→3,b7→6,y 7→2i I Update von Zuständen:

(A)hx7→1,a7→3i[1/y] :=??

(B)hx7→1,a7→3i[3/x] :=??

(10)

Besprechung

I Wie sieht ein Zustand aus, dera den Wert 6 und c den Wert 2 zuweist:ha7→6,c 7→2i

I Welches sind Zustände, und welche nicht:

(A)hx7→1,a7→3i +

(B)hx7→y,b7→6i −

(C)hx7→y,b7→6,y 7→2i −

(D)hx7→3,b7→6,y 7→2i + I Update von Zuständen:

(A)hx7→1,a7→3i[1/y] :=hx 7→1,a7→3,y 7→1i

(B)hx7→1,a7→3i[3/x] :=hx 7→3,a7→3i

(C)hx7→1,a7→3i[3/x][y/1][4/x] :=hx7→4,y 7→1,a7→3i

(11)

Operationale Semantik: Arithmetische Ausdrücke

Ein arithmetischer Ausdruck a wertet unter gegebenen Zustandσ zu einer ganzen Zahl n (Wert) aus oder zu einem Fehler⊥.

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2

ha, σi →Aexp n | ⊥

Regeln:

hn, σi →Aexp n xIdt,xDom(σ), σ(x) =v

hx, σi →Aexp v

xIdt,x 6∈Dom(σ) hx, σi →Aexp

(12)

Operationale Semantik: Arithmetische Ausdrücke

Ein arithmetischer Ausdruck a wertet unter gegebenen Zustandσ zu einer ganzen Zahl n (Wert) aus oder zu einem Fehler⊥.

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2

ha, σi →Aexp n | ⊥ Regeln:

hn, σi →Aexp n

xIdt,xDom(σ), σ(x) =v hx, σi →Aexp v

xIdt,x 6∈Dom(σ) hx, σi →Aexp

(13)

Operationale Semantik: Arithmetische Ausdrücke

Ein arithmetischer Ausdruck a wertet unter gegebenen Zustandσ zu einer ganzen Zahl n (Wert) aus oder zu einem Fehler⊥.

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2

ha, σi →Aexp n | ⊥ Regeln:

hn, σi →Aexp n xIdt,xDom(σ), σ(x) =v

hx, σi →Aexp v

xIdt,x 6∈Dom(σ) hx, σi →Aexp

(14)

Regelschreibweise vs. Funktionen

Sei Int + = Int∪{⊥}

A e x p E v a l : : AExp > ( Z u s t a n d −> I n t +) A e x p E v a l n : : I n t s > n

A e x p E v a l x : : Loc s i f Dom( s ) c o n t a i n s x > s ( x ) A e x p E v a l x : : Loc s i f n o t (Dom( s ) c o n t a i n s x ) >

(15)

Operationale Semantik: Arithmetische Ausdrücke

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2 ha, σi →Aexp n| ⊥

ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni ∈Z,n Summe n1 undn2 ha1+a2, σi →Aexp n

ha1, σi →Aexp n1 ha2, σi →Aexp n2 falls n1 =⊥oder n2 =⊥ ha1+a2, σi →Aexp

ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni ∈Z,n Diff.n1 und n2 ha1a2, σi →Aexp n

ha1, σi →Aexp n1 ha2, σi →Aexp n2 fallsn1 =⊥oder n2 =⊥ ha1a2, σi →Aexp

(16)

Operationale Semantik: Arithmetische Ausdrücke

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2 ha, σi →Aexp n| ⊥

ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni ∈Z,n Summe n1 undn2 ha1+a2, σi →Aexp n

ha1, σi →Aexp n1 ha2, σi →Aexp n2 falls n1 =⊥oder n2 =⊥ ha1+a2, σi →Aexp

ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni ∈Z,n Diff.n1 und n2 ha1a2, σi →Aexp n

ha1, σi →Aexp n1 ha2, σi →Aexp n2 falls n1 =⊥oder n2 =⊥ ha1a2, σi →Aexp

(17)

Regelschreibweise vs. Funktionen

Sei Int + = Int∪{⊥}

A e x p E v a l : : AExp > ( Z u s t a n d −> I n t +) A e x p E v a l n : : I n t s > n

A e x p E v a l x : : Loc s i f Dom( s ) c o n t a i n s x > s ( x ) A e x p E v a l x : : Loc s i f n o t (Dom( s ) c o n t a i n s x ) > A E x p E v a l ( a1 + a2 ) s > l e t n1 = A E x p E v a l a1 s

n2 = A E x p E v a l a2 s i n

i f n1 : : I n t and n2 : : I n t t h e n n1 + n2 i f n1 == o r n2 == t h e n

(18)

Operationale Semantik: Arithmetische Ausdrücke

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2

ha, σi →Aexp n| ⊥

ha1, σi →Aexpn1 ha2, σi →Aexpn2 niZ,nProduktn1und n2

ha1a2, σi →Aexpn

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=oder n2= ha1a2, σi →Aexp

ha1, σi →Aexpn1 ha2, σi →Aexpn2 niZ,n26= 0,nQuotientn1,n2

ha1/a2, σi →Aexp n

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥,n2=odern2= 0 ha1/a2, σi →Aexp

(19)

Operationale Semantik: Arithmetische Ausdrücke

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2

ha, σi →Aexp n| ⊥

ha1, σi →Aexpn1 ha2, σi →Aexpn2 niZ,nProduktn1und n2

ha1a2, σi →Aexpn

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=oder n2= ha1a2, σi →Aexp

ha1, σi →Aexpn1 ha2, σi →Aexpn2 niZ,n26= 0,nQuotientn1,n2

ha1/a2, σi →Aexp n

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥,n2=odern2= 0 ha1/a2, σi →Aexp

(20)

Arbeitsblatt 2.2: Jetzt seid ihr dran!

I In euren Gruppen-Arbeitsblättern unter

https://hackmd.informatik.uni-bremen.de/s/SkVLK1Q_I vervollständigt die Funktion

A e x p E v a l : : AExp > ( Z u s t a n d > I n t +) A e x p E v a l n : : I n t s > n

A e x p E v a l x : : Loc s i f Dom( s ) c o n t a i n s x > s ( x ) A e x p E v a l x : : Loc s i f n o t (Dom( s ) c o n t a i n s x ) > A E x p E v a l ( a1 + a2 ) s > l e t n1 = A E x p E v a l a1 s

n2 = A E x p E v a l a2 s i n

i f n1 : : I n t and n2 : : I n t t h e n n1 + n2 i f n1 == o r n2 == t h e n

I Ergänzt dies für * und für /

I Für⊥könnt ihr einfach\botschreiben.

(21)

Beispiel-Ableitungen

Sei σdef=hx 7→6,y 7→5i.

h(x+y)(xy), σi →Aexp

(22)

Beispiel-Ableitungen

Sei σdef=hx 7→6,y 7→5i.

hx+y, σi →Aexp hxy, σi →Aexp

h(x+y)(xy), σi →Aexp

(23)

Beispiel-Ableitungen

Sei σdef=hx 7→6,y 7→5i.

hx, σi →Aexp6

hx+y, σi →Aexp hxy, σi →Aexp

h(x+y)(xy), σi →Aexp

(24)

Beispiel-Ableitungen

Sei σdef=hx 7→6,y 7→5i.

hx, σi →Aexp6 hy, σi →Aexp 5

hx+y, σi →Aexp hxy, σi →Aexp

h(x+y)(xy), σi →Aexp

(25)

Beispiel-Ableitungen

Sei σdef=hx 7→6,y 7→5i.

hx, σi →Aexp6 hy, σi →Aexp 5

hx+y, σi →Aexp11 hxy, σi →Aexp

h(x+y)(xy), σi →Aexp

(26)

Beispiel-Ableitungen

Sei σdef=hx 7→6,y 7→5i.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp

h(x+y)(xy), σi →Aexp

(27)

Beispiel-Ableitungen

Sei σdef=hx 7→6,y 7→5i.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp 1 h(x+y)(xy), σi →Aexp

(28)

Beispiel-Ableitungen

Sei σdef=hx 7→6,y 7→5i.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp 1 h(x+y)(xy), σi →Aexp11

(29)

Beispiel-Ableitungen

Sei σdef=hx 7→6,y 7→5i.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp 1 h(x+y)(xy), σi →Aexp11

h(xx)(yy), σi →Aexp

(30)

Beispiel-Ableitungen

Sei σdef=hx 7→6,y 7→5i.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp 1 h(x+y)(xy), σi →Aexp11

hx, σi →Aexp 6 hx, σi →Aexp6 hxx, σi →Aexp 36 h(xx)(yy), σi →Aexp

(31)

Beispiel-Ableitungen

Sei σdef=hx 7→6,y 7→5i.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp 1 h(x+y)(xy), σi →Aexp11

hx, σi →Aexp6 hx, σi →Aexp6 hxx, σi →Aexp36

hy, σi →Aexp5 hy, σi →Aexp 5 hyy, σi →Aexp25 h(xx)(yy), σi →Aexp

(32)

Beispiel-Ableitungen

Sei σdef=hx 7→6,y 7→5i.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp 1 h(x+y)(xy), σi →Aexp11

hx, σi →Aexp6 hx, σi →Aexp6 hxx, σi →Aexp36

hy, σi →Aexp5 hy, σi →Aexp 5 hyy, σi →Aexp25 h(xx)(yy), σi →Aexp11

(33)

Operationale Semantik: Boolesche Ausdrücke

I Bexpb::= 0|1|a1 ==a2 |a1 <a2 |!b |b1&&b2|b1 || b2

hb, σi →Bexp true|false| ⊥ Regeln:

h1, σi →Bexptrue h0, σi →Bexp false

ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni 6=⊥,n1 und n2 gleich ha1 ==a2, σi →Bexptrue

ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni 6=⊥,n1 und n2 ungleich ha1 ==a2, σi →Bexp false

ha1, σi →Aexp n1 ha2, σi →Aexp n2 n1 =⊥ orn2=⊥

(34)

Operationale Semantik: Boolesche Ausdrücke

I Bexpb::= 0|1|a1 ==a2 |a1 <a2 |!b |b1&&b2|b1 || b2

hb, σi →Bexp true|false| ⊥ Regeln:

hb, σi →Bexp true h!b, σi →Bexp false

hb, σi →Bexpfalse h!b, σi →Bexptrue

hb, σi →Bexp⊥ h!b, σi →Bexp ⊥ hb1, σi →Bexp false

hb1&&b2, σi →Bexpfalse

hb1, σi →Bexp⊥ hb1&&b2, σi →Bexp⊥ hb1, σi →Bexp true hb2, σi →Bexpt

hb1&&b2, σi →Bexp t

(35)

Operationale Semantik: Boolesche Ausdrücke

I Bexpb::= 0|1|a1 ==a2 |a1 <a2 |!b |b1&&b2|b1 || b2

hb, σi →Bexp true|false| ⊥ Regeln:

hb1, σi →Bexp true hb1&&b2, σi →Bexptrue

hb1, σi →Bexp ⊥ hb1&&b2, σi →Bexp ⊥ hb1, σi →Bexpfalse hb2, σi →Bexp t

hb1||b2, σi →Bexpt

(36)

Operationale Semantik: Anweisungen

I Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Beispiel:

hc, σi →Stmt σ0 | ⊥ hx = 5, σi →Stmt σ0

wobei σ0(x) = 5 undσ0(y) =σ(y) für alle y6=x

(37)

Operationale Semantik: Anweisungen

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

(38)

Operationale Semantik: Anweisungen

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

(39)

Operationale Semantik: Anweisungen

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

(40)

Beispiel

x = 1 ;

w h i l e ( y != 0 ) { y = y 1 ; x = 2 x ; }

// x = 2y σdef=hy7→2i

(41)

h1, σi →Aexp1 hx= 1, σi →Stmtσ[1/x] :=σ1

hy, σ1i →Aexp2 hy! = 0, σ1i →Bexp1

(A)

hy=y1;x= 2x, σ1i →Stmt? (B) hw,?i →Stmt? hwhile(y! = 0){y=y1;x= 2x}, σ1i →Stmt?

hx= 1;while(y! = 0){y=y1;x= 2x}

| {z }

w

, σi →Stmt?

(42)

(A)

hy1, σ1i →Aexp1 hy=y1, σ1i →Stmtσ1[1/y] :=σ2

h2x, σ2i →Aexp2 hx= 2x, σ2i →Stmtσ2[2/x] :=σ3 hy=y1;x= 2x, σ1i →Stmtσ3

(43)

h1, σi →Aexp1 hx= 1, σi →Stmtσ1

hy, σ1i →Aexp2 hy! = 0, σ1i →Bexp1

(A)

hy=y1;x= 2x, σ1i →Stmtσ3

(B) hw, σ3i →Stmt? hwhile(y! = 0){y=y1;x= 2x}, σ1i →Stmt?

hx= 1;while(y! = 0){y=y1;x= 2x}

| {z }

w

, σi →Stmt?

(44)

(B)

hy, σ3i →Aexp1 hy! = 0, σ3i →Bexp1

hy1, σ3i →Aexp0 hy=y1, σ3i →Stmtσ3[0/y] :=σ4

h2x, σ4i →Aexp4 hx= 2x, σ4i →Stmtσ4[4/x] :=σ5 hy=y1;x= 2x, σ3i →Stmtσ5

(C) hw, σ5i →Stmtσ5 hw, σ3i →Stmtσ5

hy, σ5i →Aexp0 hy! = 0, σ3i →Bexp0

hw, σ5i →Stmtσ5

(C) (1)

while(y! = 0){y=y1;x= 2x}

| {z }

w

(45)

. . .

hy, σ1i →Aexp2 hy! = 0, σ1i →Bexp1

(A)

hy=y1;x= 2x, σ1i →Stmtσ3

(B) hw, σ3i →Stmtσ5 hwhile(y! = 0){y=y1;x= 2x}, σ1i →Stmtσ5

hx= 1;while(y! = 0){y=y1;x= 2x}

| {z }

w

, σi →Stmtσ5

σ5=σ4[4/x] =σ3[0/y][4/x] =σ2[2/x][0/y][4/x]

=σ1[1/y][2/x][0/y][4/x] =hy 7→2i[1/y][2/x][0/y][4/x]

=hy 7→0,x 7→4i

und es giltσ5(x) = 4 = 22 = 2σ1(y)

(46)

Lineare, abgekürzte Schreibweise

// hy 7→2i x = 1 ; //

w h i l e ( y != 0 ) { y = y 1 ; x = 2 x ; }

(47)

Lineare, abgekürzte Schreibweise

// hy 7→2i x = 1 ;

// hy 7→2,x7→1i w h i l e ( y != 0 ) {

y = y 1 ; x = 2 x ; }

(48)

Lineare, abgekürzte Schreibweise

// hy 7→2i

x = 1 ; // Ableitung fürx = 1

// hy 7→2,x7→1i

w h i l e(w) // hy! = 0,hy7→2,x7→1ii →Bexp1

| y = y 1 ; // Ableitung füry =y1

| // hy7→1,x7→1i

| x = 2 x ; // Ableitung fürx = 2x

| // hy7→1,x7→2i w h i l e ( y != 0 ) {

y = y 1 ; x = 2 x ; }

(49)

Lineare, abgekürzte Schreibweise

// hy 7→2i x = 1 ;

// hy 7→2,x7→1i

w h i l e(w) // hy! = 0,hy7→2,x7→1ii →Bexp1

| y = y 1 ; // Ableitung füry =y1

| // hy7→1,x7→1i

| x = 2 x ; // Ableitung fürx = 2x

| // hy7→1,x7→2i

w h i l e(w) // hy! = 0,hy7→1,x7→2ii →Bexp1

| y = y 1 ;

| // hy7→0,x7→1i

| x = 2 x ;

| // hy7→0,x7→4i

w h i l e(w) // hy! = 0,hy7→0,x7→2ii →Bexp0 // hy 7→0,x7→4i

(50)

Was haben wir gezeigt?

// hy 7→2i x = 1 ;

// hy 7→2,x7→1i w h i l e ( y != 0 ) {

y = y 1 ; x = 2 x ; }

// hy 7→0,x7→4i

I Füreinen festen Anfangszustand σ1 =hy7→2i gilt am Ende x= 4 = 22= 2σ1(y).

I Gilt das für alle?

I Für welche nicht?

I Wie kann man das für alle Anfangs-Zustände, für die es gilt, zeigen?

(51)

Was passiert hier?

// hy 7→ −1i x = 1 ;

w h i l e ( y != 0 ) { y = y 1 ; x = 2 x ; }

I Ableitung terminiert nicht (Ableitungsbaum der Auswerttung der while-Schleife wächst unendlich)

I In linearer Schreibweise geht es immer wieder unten weiter.

(52)

Was passiert hier?

// hy 7→ −1i x = 1 ;

w h i l e ( y != 0 ) { y = y 1 ; x = 2 x ; }

I Ableitung terminiert nicht (Ableitungsbaum der Auswerttung der while-Schleife wächst unendlich)

I In linearer Schreibweise geht es immer wieder unten weiter.

(53)

Arbeitsblatt 2.3: Jetzt seid ihr dran!

I Werten Sie das nebenstehende Program aus für den

Anfangszustand hx 7→5,y 7→2i I Geben Sie die Auswertung in

abgekürzter Schreibweise an.

I Welche Beziehung gilt am Ende des Programs zwischen den Werten von x und y im Endzustand und im Anfangszustand?

w h i l e ( y != 0 ) { x = x x ; y = y 1 ; }

(54)

Lineare, abgekürzte Schreibweise

w h i l e(w) // hx7→5,y 7→2i σ1

| // hy! = 0,hx7→5,y7→2ii →Bexp1

| x = x x ;

| // hx7→25,y 7→2i

| y = y 1 ;

| // hx7→25,y 7→1i

w h i l e(w) // hy! = 0,hx7→25,y 7→1ii →Bexp 1

| x = x x ;

| // hx7→625,y 7→1i

| y = y 1 ;

| // hx7→625,y 7→0i σ5

w h i l e(w) // hy! = 0,hx7→625,y7→0ii →Bexp 0 // hx 7→625,y7→0i

(55)

Lineare, abgekürzte Schreibweise

w h i l e(w) // hx7→5,y 7→2i σ1

| // hy! = 0,hx7→5,y7→2ii →Bexp1

| x = x x ;

| // hx7→25,y 7→2i

| y = y 1 ;

| // hx7→25,y 7→1i

w h i l e(w) // hy! = 0,hx7→25,y 7→1ii →Bexp 1

| x = x x ;

| // hx7→625,y 7→1i

| y = y 1 ;

| // hx7→625,y 7→0i σ5

w h i l e(w) // hy! = 0,hx7→625,y7→0ii →Bexp 0 // hx 7→625,y7→0i

Und es gilt 625 = 54= 522 bzw. σ5(x) =σ1(x)2σ1(y)

(56)

Äquivalenz arithmetischer Ausdrücke

Gegeben zwei Aexp a1 anda2 I Sind sie gleich?

a1Aexp a2 gdw ∀σ,n.ha1, σi →Aexp n⇔ ha2, σi →Aexp n ( xx ) + 2xy + ( yy ) und ( x+y ) ( x+y )

I Wann sind sie gleich?

σ,n.ha1, σi →Aexp n⇔ ha2, σi →Aexp n

x∗x und 8∗x+9

x∗x und xx+1

(57)

Äquivalenz Boolscher Ausdrücke

Gegeben zwei Bexp-Ausdrückeb1 and b2

I Sind sie gleich?

b1Bexp b2 iff ∀σ,b.hb1, σi →Bexpb ⇔ hb2, σi →Bexp b A | | (A && B) und A

(58)

Beweisen

Zwei Programmec0,c1 sind äquivalent gdw. sie die gleichen Zustandsveränderungen bewirken. Formal definieren wir Definition

c0c1 iff ∀σ, σ0.hc0, σi →Stmt σ0 ⇔ hc1, σi →Stmt σ0

Ein einfaches Beispiel:

Lemma

Sei wwhile(b) c mit bBexp, cStmt.

Dann gilt: wif(b){c;w} else { }

(59)

Beweis

Gegeben beliebiger Programmzustand σ. Zu zeigen ist, dass sowohl w also auchif (b) {c;w} else { } zu dem selben Programmzustand auswerten oder beide zu einem Fehler. Der Beweis geht per Fallunterscheidung über die Auswertung von Teilausdrücken bzw.

Teilprogrammen.

1 hb, σi →Bexp⊥:

hwhile (b)c, σi →Stmt⊥ hif(b) {c;w} else { }, σi →Stmt

2 hb, σi →Bexpfalse:

hwhile (b) c, σi →Stmtσ

Referenzen

ÄHNLICHE DOKUMENTE

I Die (operationale) Semantik einer imperativen Sprache wie C0 ist ein Zustandsübergang: das System hat einen impliziten Zustand, der durch Zuweisung von Werten an Adressen

Zu zeigen ist, dass sowohl w also auch if (b) {c; w} else { } zu dem selben Programmzustand auswerten oder beide zu

Korrekte Software: Grundlagen und Methoden Vorlesung 3 vom 17.04.18: Denotationale Semantik.. Serge Autexier,

[r]

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

sie die gleichen

Korrekte Software: Grundlagen und Methoden Vorlesung 4 vom 24.04.17: Denotationale Semantik.. Serge Autexier,