• Keine Ergebnisse gefunden

Korrekte Software: Grundlagen und Methoden Vorlesung 3 vom 18.04.16: Operationale Semantik

N/A
N/A
Protected

Academic year: 2022

Aktie "Korrekte Software: Grundlagen und Methoden Vorlesung 3 vom 18.04.16: Operationale Semantik"

Copied!
42
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Korrekte Software: Grundlagen und Methoden Vorlesung 3 vom 18.04.16: Operationale Semantik

Serge Autexier, Christoph Lüth

Universität Bremen

Sommersemester 2016

18:09:52 2016-07-07 1 [18]

(2)

Fahrplan

I Einführung

I Die Floyd-Hoare-Logik

I Operationale Semantik

I Denotationale Semantik

I Äquivalenz der Semantiken

I Verifikation: Vorwärts oder Rückwärts?

I Korrektheit des Hoare-Kalküls

I Einführung in Isabelle/HOL

I Weitere Datentypen: Strukturen und Felder

I Funktionen und Prozeduren

I Referenzen und Zeiger

I Frame Conditions & Modification Clauses

I Ausblick und Rückblick

Korrekte Software 2 [18]

(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

Korrekte Software 3 [18]

(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

Korrekte Software 4 [18]

(5)

Semantik von C0

Systemzustände

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

I AdressenLocsind hier Programmvariablen (Namen)

I EinSystemzustandbildet Adressen auf Werte ab: Σ =Loc*Val

I Ein Programm bildet einen Anfangszustandmöglicherweiseauf einen Endzustand ab (wenn esterminiert).

I Zusicherungen sind Prädikate über dem Systemzustand.

Korrekte Software 5 [18]

(6)

C0: Ausdrücke und Anweisungen

Aexp a::=N|Loc |a1+a2 |a1a2 |a1a2 |a1/a2 Bexp b ::=0|1|a1 ==a2 |a1! =a2

|a1 <=a2 |!b |b1&&b2 |b1||b2

Exp e :=Aexp |Bexp Stmt c ::= Loc=Exp;

| if( b ) c1 else c2

| while ( b ) c

| {c}

Korrekte Software 6 [18]

(7)

Eine Handvoll Beispiele

// {y =Y y0}

x= 1 ;

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

x= 2∗x ; }

// {x = 2Y}

// {a0b0}

r= b ; q= 0 ;

w h i l e ( b <= r ) { r= r−y ;

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

//{0a}

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

(8)

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::=N |Loc|a1+a2 |a1a2 |a1a2 |a1 / a2

I Zustände bilden Adressen/Programmvariablen auf Werte ab (σ) ha, σi →Aexp n|⊥

Regeln

hn, σi →Aexp n XLoc,XDom(σ), σ(X) =v

hX, σi →Aexp v

XLoc,X 6∈Dom(σ) hX, σi →Aexp

ha1, σi →Aexp n1 ha2, σi →Aexp n2 niN,n Summe n1 undn2 ha1+a2, σi →Aexp n

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

Korrekte Software 8 [18]

(9)

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::=N |Loc|a1+a2 |a1a2 |a1a2 |a1 / a2

I Zustände bilden Adressen/Programmvariablen auf Werte ab (σ) ha, σi →Aexp n|⊥

Regeln

hn, σi →Aexp n

XLoc,XDom(σ), σ(X) =v hX, σi →Aexp v

XLoc,X 6∈Dom(σ) hX, σi →Aexp

ha1, σi →Aexp n1 ha2, σi →Aexp n2 niN,n Summe n1 undn2 ha1+a2, σi →Aexp n

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

Korrekte Software 8 [18]

(10)

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::=N |Loc|a1+a2 |a1a2 |a1a2 |a1 / a2

I Zustände bilden Adressen/Programmvariablen auf Werte ab (σ) ha, σi →Aexp n|⊥

Regeln

hn, σi →Aexp n XLoc,XDom(σ), σ(X) =v

hX, σi →Aexp v

XLoc,X 6∈Dom(σ) hX, σi →Aexp

ha1, σi →Aexp n1 ha2, σi →Aexp n2 niN,n Summe n1 undn2 ha1+a2, σi →Aexp n

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

Korrekte Software 8 [18]

(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::=N |Loc|a1+a2 |a1a2 |a1a2 |a1 / a2

I Zustände bilden Adressen/Programmvariablen auf Werte ab (σ) ha, σi →Aexp n|⊥

Regeln

hn, σi →Aexp n XLoc,XDom(σ), σ(X) =v

hX, σi →Aexp v

XLoc,X 6∈Dom(σ) hX, σi →Aexp

ha1, σi →Aexp n1 ha2, σi →Aexp n2 niN,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

Korrekte Software 8 [18]

(12)

Operationale Semantik: Arithmetische Ausdrücke

ha1, σi →Aexp n1

ha2, σi →Aexp n2 niN,n Differenz n1 undn2 ha1a2, σi →Aexp n

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

ha1, σi →Aexp n1 ha2, σi →Aexp n2 niN,n Produktn1 und n2 ha1a2, σi →Aexp n

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

Korrekte Software 9 [18]

(13)

Operationale Semantik: Arithmetische Ausdrücke

ha1, σi →Aexp n1

ha2, σi →Aexp n2 niN,n Differenz n1 undn2 ha1a2, σi →Aexp n

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

ha1, σi →Aexp n1 ha2, σi →Aexp n2 niN,n Produktn1 und n2 ha1a2, σi →Aexp n

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

Korrekte Software 9 [18]

(14)

Operationale Semantik: Arithmetische Ausdrücke

ha1, σi →Aexp n1

ha2, σi →Aexp n2 niN,n2 6= 0,n Quotient n1 undn2 ha1/a2, σi →Aexp n

ha1, σi →Aexp n1

ha2, σi →Aexp n2 fallsn1 =⊥,n2 =⊥oder n2 = 0 ha1+a2, σi →Aexp

Korrekte Software 10 [18]

(15)

Beispiel Ableitungen

Sei σ(X) = 6, σ(Y) = 5.

h(X+Y)(X Y), σi →Aexp

Korrekte Software 11 [18]

(16)

Beispiel Ableitungen

Sei σ(X) = 6, σ(Y) = 5.

hX+Y, σi →Aexp hXY, σi →Aexp h(X+Y)(X Y), σi →Aexp

Korrekte Software 11 [18]

(17)

Beispiel Ableitungen

Sei σ(X) = 6, σ(Y) = 5.

hX, σi →Aexp6

hX+Y, σi →Aexp hXY, σi →Aexp h(X+Y)(X Y), σi →Aexp

Korrekte Software 11 [18]

(18)

Beispiel Ableitungen

Sei σ(X) = 6, σ(Y) = 5.

hX, σi →Aexp6 hY, σi →Aexp 5

hX+Y, σi →Aexp hXY, σi →Aexp

h(X+Y)(X Y), σi →Aexp

Korrekte Software 11 [18]

(19)

Beispiel Ableitungen

Sei σ(X) = 6, σ(Y) = 5.

hX, σi →Aexp6 hY, σi →Aexp 5

hX +Y, σi →Aexp11 hXY, σi →Aexp

h(X+Y)(X Y), σi →Aexp

Korrekte Software 11 [18]

(20)

Beispiel Ableitungen

Sei σ(X) = 6, σ(Y) = 5.

hX, σi →Aexp6 hY, σi →Aexp5 hX+Y, σi →Aexp11

hX, σi →Aexp6 hY, σi →Aexp5 hXY, σi →Aexp

h(X+Y)(X Y), σi →Aexp

Korrekte Software 11 [18]

(21)

Beispiel Ableitungen

Sei σ(X) = 6, σ(Y) = 5.

hX, σi →Aexp6 hY, σi →Aexp5 hX+Y, σi →Aexp11

hX, σi →Aexp6 hY, σi →Aexp5 hXY, σi →Aexp1 h(X+Y)(X Y), σi →Aexp

Korrekte Software 11 [18]

(22)

Beispiel Ableitungen

Sei σ(X) = 6, σ(Y) = 5.

hX, σi →Aexp6 hY, σi →Aexp5 hX+Y, σi →Aexp11

hX, σi →Aexp6 hY, σi →Aexp5 hXY, σi →Aexp1 h(X+Y)(XY), σi →Aexp11

Korrekte Software 11 [18]

(23)

Beispiel Ableitungen

Sei σ(X) = 6, σ(Y) = 5.

hX, σi →Aexp6 hY, σi →Aexp5 hX+Y, σi →Aexp11

hX, σi →Aexp6 hY, σi →Aexp5 hXY, σi →Aexp1 h(X+Y)(XY), σi →Aexp11

h(XX)(Y Y), σi →Aexp

Korrekte Software 11 [18]

(24)

Beispiel Ableitungen

Sei σ(X) = 6, σ(Y) = 5.

hX, σi →Aexp6 hY, σi →Aexp5 hX+Y, σi →Aexp11

hX, σi →Aexp6 hY, σi →Aexp5 hXY, σi →Aexp1 h(X+Y)(XY), σi →Aexp11

hX, σi →Aexp 6 hX, σi →Aexp 6 hXX, σi →Aexp36 h(XX)(Y Y), σi →Aexp

Korrekte Software 11 [18]

(25)

Beispiel Ableitungen

Sei σ(X) = 6, σ(Y) = 5.

hX, σi →Aexp6 hY, σi →Aexp5 hX+Y, σi →Aexp11

hX, σi →Aexp6 hY, σi →Aexp5 hXY, σi →Aexp1 h(X+Y)(XY), σi →Aexp11

hX, σi →Aexp6 hX, σi →Aexp6 hXX, σi →Aexp36

hY, σi →Aexp5 hY, σi →Aexp5 hY Y, σi →Aexp25 h(XX)(Y Y), σi →Aexp

Korrekte Software 11 [18]

(26)

Beispiel Ableitungen

Sei σ(X) = 6, σ(Y) = 5.

hX, σi →Aexp6 hY, σi →Aexp5 hX+Y, σi →Aexp11

hX, σi →Aexp6 hY, σi →Aexp5 hXY, σi →Aexp1 h(X+Y)(XY), σi →Aexp11

hX, σi →Aexp6 hX, σi →Aexp6 hXX, σi →Aexp36

hY, σi →Aexp5 hY, σi →Aexp5 hY Y, σi →Aexp25 h(XX)(Y Y), σi →Aexp11

Korrekte Software 11 [18]

(27)

Operationale Semantik: Boolesche Ausdrücken

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

Rules

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

Korrekte Software 12 [18]

(28)

Operationale Semantik: Boolesche Ausdrücken

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

Rules

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

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

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

Korrekte Software 12 [18]

(29)

Operationale Semantik: Boolesche Ausdrücken

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

Rules

ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni 6=⊥,n1 kleiner/gleichn2 ha1 <=a2, σi →Bexp1

ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni 6=⊥,n1 größer alsn2

ha1 <=a2, σi →Bexp0

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

Korrekte Software 12 [18]

(30)

Operationale Semantik: Boolesche Ausdrücken

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

Rules

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

hb, σi →Bexp0 h!b, σi →Bexp 1

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

hb1&&b2, σi →Bexpt

wobei t = 1 wennt1 =t2 = 1;

t = 0 wennt1 = 0 oder (t1 = 1 und t2= 0);

t =⊥sonst

Korrekte Software 12 [18]

(31)

Operationale Semantik: Boolesche Ausdrücken

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

Rules

hb1, σi →Bexpt1 hb2, σi →Bexp t2 hb1||b2, σi →Bexpt

wobei t = 0 wennt1 =t2 = 0;

t = 1 wennt1 = 1 oder (t1= 0 und t2= 1);

t =⊥ sonst

Korrekte Software 12 [18]

(32)

Operationale Semantik: Anweisungen

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

hc, σi →Stmt σ0 hX = 5, σi →Stmt σ0

wobei σ0(X) = 5 und σ0(Y) =σ(Y) für alle Y 6=X

Korrekte Software 13 [18]

(33)

Operationale Semantik: Anweisungen

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

hc, σi →Stmt σ0 hX = 5, σi →Stmt σ0

wobei σ0(X) = 5 und σ0(Y) =σ(Y) für alle Y 6=X Definiere :

σ[m/X](Y) :=

( m ifX =Y σ(Y) sonst

hX = 5, σi →Stmt σ[5/X]

Korrekte Software 13 [18]

(34)

Operationale Semantik: Anweisungen

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

hc, σi →Stmt σ0 h{ }, σi →Stmt σ ha, σi →Aexp nN

hX =a, σi →Stmt σ[n/X]

ha, σi →Aexp ⊥ hX =a, σi →Stmt

Korrekte Software 13 [18]

(35)

Operationale Semantik: Anweisungen

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

hc, σi →Stmt σ0

hc, σi →Stmt σ0 6=⊥ h{cs}, σ0i →Stmt σ006=⊥ h{c cs}, σi →Stmt σ00

hc, σi →Stmt ⊥ h{c cs}, σi →Stmt

hc, σi →Stmt σ0 6=⊥ h{cs}, σ0i →Stmt ⊥ h{c cs}, σi →Stmt

Korrekte Software 13 [18]

(36)

Operationale Semantik: Anweisungen

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

hc, σi →Stmt σ0

hb, σi →Bexp1 hc1, σi →Stmt σ0 hif( b ) c1 else c2, σi →Stmt σ0 hb, σi →Bexp0 hc2, σi →Stmt σ0

hif( b ) c1 else c2, σi →Stmt σ0 hb, σi →Bexp

hif( b ) c1 else c2, σi →Stmt

Korrekte Software 13 [18]

(37)

Operationale Semantik: Anweisungen

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

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

hb, σi →Bexp 1 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 13 [18]

(38)

Beispiel

x= 1 ;

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

x= 2x ; }

// x = 2y σ(y) = 3

Korrekte Software 14 [18]

(39)

Ä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

(X∗X) + 2∗X∗Y + (Y∗Y) und (X+Y) (X+Y)

I Wann sind sie gleich?

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

X∗X und 9∗X+22

X∗X und X∗X+1

Korrekte Software 15 [18]

(40)

Ä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

Korrekte Software 16 [18]

(41)

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

Beweis an der Tafel

Korrekte Software 17 [18]

(42)

Zusammenfassung

I Operationale Semantik als ein Mittel für 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 18 [18]

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]

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

sie die gleichen

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

[r]