• Keine Ergebnisse gefunden

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

N/A
N/A
Protected

Academic year: 2022

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

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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

Serge Autexier, Christoph Lüth

Universität Bremen Sommersemester 2018

14:21:38 2018-06-22 1 [26]

Fahrplan

I Einführung

I Operationale Semantik I Denotationale Semantik

I Äquivalenz der Operationalen und Denotationalen Semantik I Die Floyd-Hoare-Logik

I Invarianten und die Korrektheit des Floyd-Hoare-Kalküls I Strukturierte Datentypen

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

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

I Programme berechnenWerte I Basierend auf

I Werte sindVariablenzugewiesen

I Evaluation vonAusdrücken I Folgt dem Programmablauf

Korrekte Software 3 [26]

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:

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

ISequenzierung und leere Anweisung sind implizit

Korrekte Software 4 [26]

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 vonWertenanAdressengeändert werden kann.

Systemzustände

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

I AdressenLocsind hier Programmvariablen (Namen)

I EinSystemzustandbildet Adressen auf Werte ab: Σ =Loc*V I Ein Programm bildet einen Anfangszustandmöglicherweiseauf einen

Endzustand ab (wenn esterminiert).

I Zusicherungen sind Prädikate über dem Systemzustand.

Korrekte Software 5 [26]

C0: Ausdrücke und Anweisungen

Aexpa::=Z|Idt|a1+a2|a1a2|a1a2|a1/a2 Bexp b::=1|0|a1==a2|a1<a2|!b|b1&&b2|b1||b2

Expe:=a|b Stmtc ::= Idt=Exp

| if(b)c1 elsec2

| while(b)c

| c1;c2

| { } NB: Nicht diekonkreteSyntax.

Korrekte Software 6 [26]

Eine Handvoll Beispiele

//{y=Yy≥0}

x = 1 ;

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

x = 2∗x ; }

//{x= 2Y}

//{a≥0∧b≥0}

r = b ; q = 0 ;

w h i l e ( b <= r ) { r = r−a ; q = q +1;

}

//{a=bq+rr<b}

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

c = c +1;

p = p∗c ; }

//{p=n!}

//{0≤a}

t = 1 ; s = 1 ; i = 0 ;

w h i l e ( s <= a ) { t = t + 2 ; s = s + t ; i = i + 1 ; }

//{i2aa<(i+ 1)2}

Korrekte Software 7 [26]

Operationale Semantik: Arithmetische Ausdrücke

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

I Aexpa::=Z|Idt|a1+a2|a1a2|a1a2|a1/a2 I Zustände bilden Adressen/Programmvariablen aufWerteab (σ)

ha, σi →Aexpn|⊥

Regeln:

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

hx, σi →Aexpv

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

Korrekte Software 8 [26]

(2)

Operationale Semantik: Arithmetische Ausdrücke

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

ha1, σi →Aexpn1 ha2, σi →Aexpn2 niZ,nSummen1undn2 ha1+a2, σi →Aexpn

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

ha1, σi →Aexpn1 ha2, σi →Aexpn2 niZ,nDiff.n1undn2 ha1a2, σi →Aexpn

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

Korrekte Software 9 [26]

Operationale Semantik: Arithmetische Ausdrücke

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

ha1, σi →Aexpn1 ha2, σi →Aexpn2 niZ,nProduktn1undn2

ha1a2, σi →Aexpn

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

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

ha1/a2, σi →Aexpn

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

Korrekte Software 10 [26]

Beispiel-Ableitungen

Seiσ(x) = 6, σ(y) = 5.

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

Operationale Semantik: Boolesche Ausdrücke

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

hb, σi →Bexp1|0|⊥

h1, σi →Bexp1 h0, σi →Bexp0

ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni6=⊥,n1undn2gleich ha1==a2, σi →Bexp1

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

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

Korrekte Software 12 [26]

Operationale Semantik: Boolesche Ausdrücke

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

hb, σi →Bexp1|0|⊥

hb, σi →Bexp1 h!b, σi →Bexp0

hb, σi →Bexp0 h!b, σi →Bexp1

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

hb1&&b2, σi →Bexpt

wobei t= 1 wennt1=t2= 1;

t= 0 wennt1= 0 oder (t1= 1 undt2= 0);

t=⊥sonst

Korrekte Software 13 [26]

Operationale Semantik: Boolesche Ausdrücke

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

hb, σi →Bexp1|0|⊥

hb1, σi →Bexpt1 hb2, σi →Bexpt2 hb1||b2, σi →Bexpt

wobei t= 0 wennt1=t2= 0;

t= 1 wennt1= 1 oder (t1= 0 undt2= 1);

t=⊥sonst

Korrekte Software 14 [26]

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 alley6=x

Korrekte Software 15 [26]

Operationale Semantik: Anweisungen

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

Definiere:

σ[m/x](y) :=

(m ifx=y σ(y) sonst

hx= 5, σi →Stmtσ[5/x] Es gilt:

∀σ,n,m,∀x,y.x6=yσ[n/x][m/y] =σ[m/y][n/x]

∀σ,n,m,∀x. σ[n/x][m/x] =σ[m/x]

Korrekte Software 16 [26]

(3)

Operationale Semantik: Anweisungen

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

h{ }, σi →Stmtσ ha, σi →AexpnZ

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=⊥ h{c2}, σ0i →Stmt⊥ hc1;c2, σi →Stmt

Korrekte Software 17 [26]

Operationale Semantik: Anweisungen

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

hb, σi →Bexp1 hc1, σi →Stmtσ0 hif(b)c1 elsec2, σi →Stmtσ0 hb, σi →Bexp0 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

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

hb, σi →Bexp0 hwhile(b)c, σi →Stmtσ

hb, σi →Bexp1 hc, σi →Stmtσ0 hwhile(b)c, σ0i →Stmtσ00 hwhile(b)c, σi →Stmtσ00

hb, σi →Bexp1 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 σ(y) = 3

Korrekte Software 20 [26]

Äquivalenz arithmetischer Ausdrücke

Gegeben zwei Aexpa1anda2 I Sind sie gleich?

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

I Wann sind sie gleich?

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

x∗x und 9∗x+22

x∗x und x∗x+1

Korrekte Software 21 [26]

Äquivalenz Boolscher Ausdrücke

Gegeben zwei Bexp-Ausdrückeb1andb2 I Sind 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{ } Beweis an der Tafel

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 →Bexp0:

hwhile(b)c, σi →Stmtσ

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

2 hb, σi →Bexp1:

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

Korrekte Software 24 [26]

(4)

Beweis II

2.hb, σi →Bexp1:

2.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

3.hb, σi →Bexp⊥:

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

Korrekte Software 25 [26]

Zusammenfassung

I Operationale Semantik als ein Mittel zur Beschreibung der Semantik

I Auswertungsregeln arbeiten entlang der syntaktischen Struktur

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

I Fragen zu Programmen: Gleichheit

Korrekte Software 26 [26]

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

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

[r]

sie die gleichen

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

[r]

I Für die Berechnung der approximativen schwächsten Vorbedingung (AWP) und der Verifikationsbedingungen (WVC) müssen zwei Anpassungen vorgenommen werden:. I Sowohl AWP als auch

Korrekte Software: Grundlagen und Methoden Vorlesung 10 vom 12.06.17: Verifikationsbedingungen Revisited. Serge Autexier, Christoph Lüth Universität Bremen