• Keine Ergebnisse gefunden

Korrekte Software: Grundlagen und Methoden Vorlesung 2 vom 09.04.19

N/A
N/A
Protected

Academic year: 2022

Aktie "Korrekte Software: Grundlagen und Methoden Vorlesung 2 vom 09.04.19"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Korrekte Software: Grundlagen und Methoden Vorlesung 2 vom 09.04.19

Operationale Semantik

Serge Autexier, Christoph Lüth Universität Bremen Sommersemester 2019

11:27:19 2019-07-04 1 [26]

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

IFunktionsaufrufe und das Framing-Problem IAusblick und Rückblick

Korrekte Software 2 [26]

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 ; }

IProgramme berechnenWerte IBasierend auf

I Werte sindVariablenzugewiesen I Evaluation vonAusdrücken IFolgt dem Programmablauf

Korrekte Software 3 [26]

Unsere Programmiersprache

Wir betrachten einen Ausschnitt der ProgrammierspracheC(C0).

Ausbaustufe 1 kennt folgende Konstrukte:

ITypen:int;

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

IAnweisungen:

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

ISequenzierung und leere Anweisung sind implizit

Korrekte Software 4 [26]

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

Expe:=a|b Stmt c::= Idt=Exp

| if(b)c1 elsec2

| while(b)c

| c1;c2

| { } NB: Nicht diekonkreteSyntax.

Korrekte Software 5 [26]

Eine Handvoll Beispiele

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

p = 1 ; c = 1 ;

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

Korrekte Software 6 [26]

Semantik von C0

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

Systemzustände

IAusdrücke werten zuWertenV(hier ganze Zahlen) aus.

IAdressenLocsind hier Programmvariablen (Namen):Loc=Idt IEinSystemzustandbildet Adressen auf Werte ab: Σ =Loc*V IEin Programm bildet einen Anfangszustandmöglicherweiseauf einen

Endzustand ab (wenn esterminiert).

Korrekte Software 7 [26]

Partielle, endliche Abbildungen

Zustände sindpartielle, endliche Abbildungen(finite partial maps) f :X*A

Notation:

If(x) für den Wert vonxinf (lookup) If(x) =⊥wennxnicht inf (undefined)

If[n/x] für den Update an der Stellexmit dem Wertn:

f[n/x](y)=def

(n ifx=y f(y) otherwise

Ihx7→n,y7→miu.ä. für konkrete Abbildungen.

Ihiist die leere (überall undefinierte Abbildung):

hi(x) =⊥

Korrekte Software 8 [26]

(2)

Operationale Semantik: Arithmetische Ausdrücke

Ein arithmetischer Ausdruckawertet unter gegebenen Zustandσzu einer ganzen Zahln(Wert) aus oder zu einem Fehler⊥.

IAexpa::=Z|Idt|a1+a2|a1a2|a1a2|a1/a2 ha, σi →Aexpn| ⊥ Regeln:

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

hx, σi →Aexpv

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

Korrekte Software 9 [26]

Operationale Semantik: Arithmetische Ausdrücke

IAexpa::=Z|Idt|a1+a2|a1a2|a1a2|a1/a2 ha, σi →Aexpn| ⊥

ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nSummen1undn2 ha1+a2, σi →Aexpn

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1+a2, σi →Aexp

ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nDiff.n1undn2 ha1a2, σi →Aexpn

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1a2, σi →Aexp

Korrekte Software 10 [26]

Operationale Semantik: Arithmetische Ausdrücke

IAexpa::=Z|Idt|a1+a2|a1a2|a1a2|a1/a2 ha, σi →Aexpn| ⊥

ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nProduktn1undn2

ha1a2, σi →Aexpn

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1a2, σi →Aexp

ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,n26= 0,nQuotientn1,n2

ha1/a2, σi →Aexpn

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

Korrekte Software 11 [26]

Beispiel-Ableitungen

Seiσdef=hx7→6,y7→5i.

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

hx, σi →Aexp6 hy, σi →Aexp5 hx−y, σi →Aexp1 h(x+y)∗(x−y), σi →Aexp11

hx, σi →Aexp6 hx, σi →Aexp6 hx∗x, σi →Aexp36

hy, σi →Aexp5 hy, σi →Aexp5 hy∗y, σi →Aexp25 h(x∗x)−(y∗y), σi →Aexp11

Korrekte Software 12 [26]

Operationale Semantik: Boolesche Ausdrücke

IBexpb::= 0|1|a1==a2|a1 <a2|!b|b1&&b2|b1 || b2 hb, σi →Bexptrue|false| ⊥

Regeln:

h1, σi →Bexptrue h0, σi →Bexpfalse ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni6=⊥,n1undn2gleich

ha1==a2, σi →Bexptrue

ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni6=⊥,n1undn2ungleich ha1==a2, σi →Bexpfalse

ha1, σi →Aexpn1 ha2, σi →Aexpn2 n1=⊥orn2=⊥ ha1==a2, σi →Bexp

Korrekte Software 13 [26]

Operationale Semantik: Boolesche Ausdrücke

IBexpb::= 0|1|a1==a2|a1 <a2|!b|b1&&b2|b1 || b2 hb, σi →Bexptrue|false| ⊥

Regeln:

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

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

hb, σi →Bexp⊥ h!b, σi →Bexp⊥ hb1, σi →Bexpt1 hb2, σi →Bexpt2

hb1&&b2, σi →Bexpt

wobei t=truewennt1=t2=true;

t=falsewennt1=falseoder (t1=trueundt2=false);

t=⊥sonst

Korrekte Software 14 [26]

Operationale Semantik: Boolesche Ausdrücke

IBexpb::= 0|1|a1==a2|a1 <a2|!b|b1&&b2|b1 || b2 hb, σi →Bexptrue|false| ⊥

Regeln:

hb1, σi →Bexpt1 hb2, σi →Bexpt2 hb1||b2, σi →Bexpt wobei t=falsewennt1=t2=false;

t=truewennt1=trueoder (t1=falseundt2=true);

t=⊥sonst

Korrekte Software 15 [26]

Operationale Semantik: Anweisungen

IStmtc::=Idt=Exp|if(b)c1 elsec2|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 alley6=x

Korrekte Software 16 [26]

(3)

Operationale Semantik: Anweisungen

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 17 [26]

Operationale Semantik: Anweisungen

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 18 [26]

Operationale Semantik: Anweisungen

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 19 [26]

Beispiel

x = 1 ;

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

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

Korrekte Software 20 [26]

Äquivalenz arithmetischer Ausdrücke

Gegeben zwei Aexpa1anda2 ISind sie gleich?

a1Aexpa2gdw∀σ,n.ha1, σi →Aexpn⇔ ha2, σi →Aexpn ( x∗x ) + 2∗x∗y + ( y∗y ) und ( x+y ) ∗ ( x+y )

IWann sind sie gleich?

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

x∗x und 8∗x+9

x∗x und x∗x+1

Korrekte Software 21 [26]

Äquivalenz Boolscher Ausdrücke

Gegeben zwei Bexp-Ausdrückeb1andb2 ISind sie gleich?

b1Bexpb2iff∀σ,b.hb1, σi →Bexpb⇔ hb2, σi →Bexpb A | | (A && B) und A

Korrekte Software 22 [26]

Beweisen

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

c0c1iff∀σ, σ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{ }

Korrekte Software 23 [26]

Beweis

Gegeben beliebiger Programmzustandσ. Zu zeigen ist, dass sowohlw 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σ

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

Korrekte Software 24 [26]

(4)

Beweis II

3 hb, σi →Bexptrue:

1 hc, σi →Stmtσ0 h

w

z }| {

while(b)c, σi →Stmthc, σi →Stmtσ0 hw, σ0i →Stmtσ00

hif(b){c;w}else{ }, σi →Stmth{c;w}, σi →Stmthc, σi →Stmtσ0 hw, σ0i →Stmtσ00

2 hc, σi →Stmt⊥ h

w

z }| {

while(b)c, σi →Stmthc, σi →Stmt

hif(b){c;w}else{ }, σi →Stmth{c;w}, σi →Stmthc, σi →Stmt

Korrekte Software 25 [26]

Zusammenfassung

IOperationale Semantik als ein Mittel zur Beschreibung der Semantik

IAuswertungsregeln arbeiten entlang der syntaktischen Struktur

IWerten Ausdrücke zu Werten aus und Programme zu Zuständen (zu gegebenen Zustand)

IFragen zu Programmen: Gleichheit

Korrekte Software 26 [26]

Referenzen

ÄHNLICHE DOKUMENTE

Serge Autexier, Christoph Lüth Universität Bremen Sommersemester 2019. 11:27:18 2019-07-04

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

[r]

I Für Iterationen wird eine Invariante benötigt (die nicht hergeleitet werden kann).. Korrekte Software

3 Beweise innerhalb der Schleife

aber mit erheblichen Konsequenzen: Substitution. Korrekte Software

I Wir annotieren daher die Invarianten an Schleifen, und können dann die schwächste Vorbedingung und Verifikationsbedingungen.

−→ Genauere Unterscheidung in der Semantik Kontrollstrukturen:. I switch −→ Ist im allgemeinen Fall