• Keine Ergebnisse gefunden

Warum Korrekte Software?

N/A
N/A
Protected

Academic year: 2022

Aktie "Warum Korrekte Software?"

Copied!
47
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Korrekte Software: Grundlagen und Methoden Vorlesung 1 vom 02.04.19

Einführung

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

11:27:18 2019-07-04 1 [22]

Organisatorisches

IVeranstalter:

Christoph Lüth christoph.lueth@dfki.de

MZH 4186, Tel. 59830

Serge Autexier serge.autexier@dfki.de Cartesium 1.49, Tel. 59834 ITermine:

IVorlesung: Dienstag, 12 – 14, MZH 1100 IÜbung: Donnerstag, 12 – 14, MZH 1450 IWebseite:

http://www.informatik.uni-bremen.de/~cxl/lehre/ksgm.ss19

Korrekte Software 2 [22]

Übungsbetrieb

I“Leichtgewichtige” Übungsblätter, diein der Übungbearbeitet und schnellkorrigiert werden können.

IÜbungsblättervertiefenVorlesungsstoff, Bewertung gibt Feedback.

IÜbungsbetrieb:

IGruppen bis zu drei Studierende IAusgabe: Donnerstag in der Übung IBearbeitung: in der Übung IAbgabe: Donnerstag abend

Korrekte Software 3 [22]

Prüfungsform und Übungsbetrieb

I10 Übungsblätter (geplant) IBewertung:

IA (sehr gut, 1.3) — nichts zu meckern, keine/kaum Fehler IB (gut, 2.3) — kleine Fehler, sonst gut

IC (befriedigend, 3.3) — größere Fehler oder Mängel INicht bearbeitet — oder zu viele Fehler

IPrüfungsleistung:

IMündliche Prüfung

IEinzelprüfung ca. 20– 30 Minuten

IÜbungsbetrieb (bis zu 20% Bonuspunkte, keine Voraussetzung)

Korrekte Software 4 [22]

Warum Korrekte Software?

Korrekte Software 5 [22]

Software-Disaster I: Therac-25

Korrekte Software 6 [22]

Software-Disasters II: Space

Mariner 1 (27.08.1962), Mars Climate Orbiter (1999), Ariane 5 (04.06.1996)

Korrekte Software 7 [22]

Software-Disaster III: AT&T (15.01.1990)

w h i l e ( ! empty ( r i n g _ r c v _ b u f f e r )

&& ! empty ( s i d e _ b u f f e r empty ) ) { i n i t i a l i z e p o i n t e r t o f i r s t m e s s a g e b u f f e r ; g e t c o p y o f b u f f e r ;

s w i t c h ( m e s s a g e ) { c a s e ( i n c o m i n g _ m e s s a g e ) :

i f ( s e n d e r i s o u t _ o f _ s e r v i c e ) { i f ( empty ( r i n g _ w r t _ b u f f e r ) ) {

s e n d " i n s e r v i c e " t o s t a t u s map ; } e l s e {

break; }

p r o c e s s i n c o m i n g message , s e t up p o i n t e r s ; break;

} }

do o p t i o n a l p a r a m e t e r work ; }

Korrekte Software 8 [22]

(2)

Software-Disaster IV: Airbus A400M

Sevilla, 09.05.2015

Korrekte Software 9 [22]

Inhalt der Vorlesung

Korrekte Software 10 [22]

Themen

Korrekte Software im Lehrbuch:

ISpielzeugsprache IWenig Konstrukte IKleine Beispiele

Korrekte Software im Einsatz:

IRichtige Programmiersprache IMehr als nur ganze Zahlen ISkalierbarkeit — wie können

große Programme verifiziert werden?

Korrekte Software 11 [22]

Inhalt

IGrundlagen:

IBeweis derKorrektheitvon Programmen: derFloyd-Hoare-Kalkül IBedeutungvon Programmen:Semantik

IBetrachtete Programmiersprache: “C0” (erweiterte Untermenge von C)

IErweiterung der Programmkonstrukte und des Hoare-Kalküls:

1 Referenzen (Zeiger)

2 Funktion und Prozeduren (Modularität) 3 ReicheDatenstrukturen(Felder,struct)

Korrekte Software 12 [22]

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 13 [22]

Warum Semantik?

Korrekte Software 14 [22]

Idee

IWas wird hier berechnet?p=n!

IWarum? Wie können wir das beweisen?

IWir berechnen symbolisch, welche Werte Variablen über den Programmverlauf annehmen.

p= 1 ; c= 1 ;

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

Korrekte Software 15 [22]

Semantik von Programmiersprachen

Drei wesentliche Möglichkeiten:

IOperationale Semantik:

Ausführung auf einerabstraktenMaschine IDenotationale Semantik:

Abbildung in einmathematisches Objekt IAxiomatische Semantik:

Beschreibung durch eines Programmes durch seineEigenschaften

Korrekte Software 16 [22]

(3)

Unsere Sprache C0

IC0 ist eineUntermengeder Sprache C IC0-Programme sindausführbareC-Programme IErste Ausbaustufe:

IZuweisungen, Fallunterscheidungen, Schleifen IDatentypen: ganze Zahlen mit Arithmetik IRelationen: Vergleich (=,≤)

IBoolsche Operatoren: Konjunktion, Disjunktion, Negation I1. Ausbaustufe: Felder und Strukturen

I2. Ausbaustufe: Funktionen und Prozeduren (nur Ausblick) I3. Ausbaustufe: Referenzen (nur Ausblick)

IFehlt:union,goto, . . .

Korrekte Software 17 [22]

Operationale Semantik

IKernkonzept: Zustandstandsübergänge einer abstrakten Maschine IAbstrakte Maschine hatimpliziten Zustand

IZustand ordnetAdressenveränderlicheWertezu IKonkretes Beispiel:n7→3,pundcundefiniert

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

p = p ∗ c ; c = c + 1 ; }

p ? c ? n 3

p 1 c ? n 3

p 1 c 1 n 3

p 1 c 1 n 3

p 1 c 2 n 3

p 2 c 2 n 3

p 2 c 3 n 3

p 6 c 3 n 3

p 6 c 4 n 3

Korrekte Software 18 [22]

Denotationale Semantik

IKernkonzept: Abbildung von Programmen auf mathematisches Gegenstück (Denotat)

IPartielleFunktionen zwischen Zuständen [[c]] :σ * σ IBeispiel:

p = 1 ; c = 1 ; //p1

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

} //p3

[[p1]](σ) =σ(p7→1)(c7→1)

[[p2]](σ) =σ(p7→σ(p)σ(c))(c7→σ(c) + 1)

[[p3]](σ)[[p3]] =???fix(Γ([[c≤n]])[[p2]]))([[p1]](σ))fix(Γ([[c≤n]])([[p2]]))◦[[p1]]

Γ([[c≤n]])([[p2]])(ϕ)(σ) =

(σ if [[c≤n]](σ) = 0

(ϕ◦[[p2]])(σ) if [[c≤n]](σ) = 1 Γ(β)(ρ)(ϕ)(σ) =

(σ ifβ(σ) = 0 (ϕ◦ρ)(σ) ifβ(σ) = 1

Korrekte Software 19 [22]

Axiomatische Semantik

IKernkonzept: Charakterisierung von Programmen durch Zusicherungen

IZusicherungen sind zustandsabhängige Prädikate IBeispiel (mitn= 3)

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

// (4) p = p ∗ c ; c = c + 1 ; } // (5)

(1) n= 3

(2) p= 1∧n= 3

(3) p= 1∧c= 1∧n= 3

(4) ???

(p= 1∧c= 1∨p= 1∧c= 2∨ p= 2∧c= 3∨p= 6∧c= 4)

n= 3

p= (c−1)!∧n= 3

(5) p= 6∧c= 4∧n= 3

Korrekte Software 20 [22]

Drei Semantiken — Eine Sicht

p = 1;

c := 1;

while (c <= n) { p= p * c;

c= c + 1;

}

Operational

Axiomatisch Denotational

Programm

Korrekte Software 21 [22]

Zusammenfassung

IWir wollen dieBedeutung(Semantik) von Programmen beschreiben, um ihre Korrektheit beweisen zu können.

IDazu gibt es verschiedene Ansätze, die wir betrachten werden.

INächste Woche geht es mit dem ersten los:operationaleSemantik

Korrekte Software 22 [22]

(4)

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]

(5)

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]

(6)

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]

(7)

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]

(8)

Korrekte Software: Grundlagen und Methoden Vorlesung 3 vom 11.04.19

Denotationale Semantik

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

11:27:20 2019-07-04 1 [27]

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

Überblick

IKleinster Fixpunkt

IDenotationale Semantik für C0

Korrekte Software 3 [27]

Fixpunkt

ISeif :A*Aeine partielle Funktion. EinFixpunktvonf ist ein aA, so dassf(a) =a.

IBeispiele

IFixpunkte vonf(x) =√

xsind 0 und 1; ebenfalls fürf(x) =x2. IFür die Sortierfunktion sind alle sortierten Listen Fixpunkte

Korrekte Software 4 [27]

Regeln und Regelinstanzen

Definition

SeiReine Menge von Regelnx1...xy n,n≥0.

Die Anwendung einer Regel auf spezifischea1. . .anist eine Regelinstanz IBetrachte folgende RegelmengeR

− 22

− 23

n m

n·m

IRegelinstanzen sind

− 4

− 8

4 8

32

4 4

16

16 32 512

3 5

15 . . .

Korrekte Software 5 [27]

Induktive Definierte Mengen

Definition

SeitReine Menge von Regelinstanzen undBeine Menge. Dann definieren wir

R(B) =ˆ {y| ∃x1, . . . ,xkB.x1, . . . ,xk yR}und Rˆ0(B) =Bund ˆRi+1(B) = ˆR( ˆRi(B))

Korrekte Software 6 [27]

Beispiel

IBetrachte folgende RegelmengeR

− 22

− 23

n m

n·m

IWas sind Rˆ0(∅) =∅

Rˆ1(∅) = ˆR(∅) ={4,8}

Rˆ2(∅) =?{16,32,64,4,8}

Rˆ3(∅) =?{128,256,512,1024,2048,4096,16,32,64,4,8}

Rˆi+1(∅) =?{22k+3l|1≤k+l≤2i}

Korrekte Software 7 [27]

Induktive Definierte Mengen

Definition

SeitReine Menge von Regelinstanzen undBeine Menge. Dann definieren wir

R(B) =ˆ {y| ∃x1, . . . ,xkB.x1, . . . ,xk yR}und Rˆ0(B) =Bund ˆRi+1(B) = ˆR( ˆRi(B))

Definition (Abgeschlossen und Monoton)

IEine MengeSisabgeschlossen unterR(R-abgeschlossen)gdw.

R(S)ˆ ⊆S

IEine Operationf ist monotongdw.

∀A,B.ABf(A)⊆f(B)

Korrekte Software 8 [27]

(9)

Kleinster Fixpunkt Operator

Lemma

Für jede Menge von Regelinstanzen R ist die induzierte OperationRˆ monoton.

Lemma

Sei Ai= ˆRi(∅)für alle i∈Nund A=S

i∈NAi. Dann gilt (a)A ist R-abgeschlossen,

(b)R(A) =ˆ A, und

(c)A ist die kleinste R-abgeschlossene Menge.

Korrekte Software 9 [27]

Beweis von Lemma (a).

AistR-abgeschlossen:

Seix1,...,xy kRundx1, . . . ,xkA.

DaA=S

i∈NAigibt es einjso dassx1, . . . ,xkAj. Also auch:

yR(Aˆ j) = ˆR( ˆRj(∅))

= ˆRj+1(∅)

=Aj+1A.

Korrekte Software 10 [27]

Beweis von Lemma (b): ˆR(A) =A.

IR(A)ˆ ⊆A:

DaA R-abgeschlossen gilt auch ˆR(A)A.

IAR(A):ˆ

SeiyA. Dann∃n>0.yAnundy6∈An−1. Folglich muss es eine Regelinstanzx1,...,xy kRgeben mit x1, . . . ,xkAn−1A.

Da ˆRmonoton gilt ˆR(An−1)⊆R(A).ˆ DayAn= ˆR(An−1) folgt darausyR(A).ˆ

Korrekte Software 11 [27]

Beweis von Lemma (c).

Aist die kleinsteR-abgeschlossene Menge, d.h. für jede R-abgeschlossene MengeBgiltAB.

Beweis per Induktion überndass giltAnB:

IBasisfall:

A0=∅ ⊆B IInduktionsschritt:

DaB R-abgeschlossen ist gilt: ˆR(B)B.

Induktionsannahme:AnB.

Dann giltAn+1= ˆR(An)⊆R(B)ˆ ⊆Bweil ˆRmonoton undBist R-abgeschlossen.

Korrekte Software 12 [27]

Kleinster Fixpunkt Operator

Definition

fix( ˆR) =[ n∈N

Rˆn(∅) ist derkleinste Fixpunkt.

Korrekte Software 13 [27]

Kleinster Fixpunkt

IBetrachte folgende RegelmengeR

− 22

− 23

n m

n·m

IWas sind

Rˆ1(∅) = ˆR(∅) ={4,8}

Rˆ2(∅) =?

Rˆ3(∅) =?

Rˆi+1(∅) =?

IWie siehtfix( ˆR) aus?

Korrekte Software 14 [27]

Denotationale Semantik — Motivation

IOperationale Semantik

Eine Menge von Regeln, die einen Zustand und ein Programm in einen neuen Zustand oder Fehler überführen

hc, σi →Stmtσ0|⊥

IDenotationale Semantik

Eine Menge von Regeln, die ein Programm in einepartielle Funktion

| {z } Denotat von Zustand nach Zustand überführen

C[[c]] : Σ*Σ

Korrekte Software 15 [27]

Denotationale Semantik — Motivation

Zwei Programme sind äquivalent gdw. sie immer zum selben Zustand (oder Fehler) auswerten

c0c1iff (∀σ, σ0.hc0, σi →Stmtσ0⇔ hc1, σi →Stmtσ0) oder

Zwei Programme sind äquivalent gdw. sie dieselbe partielle Funktion denotieren

c0c1iff{(σ, σ0)|hc0, σi →Stmtσ0}={(σ, σ0)|hc1, σi →Stmtσ0}

Korrekte Software 16 [27]

(10)

Denotierende Funktionen

Ijedera:Aexpdenotiert eine partielle Funktion Σ*Z Ijederb:Bexpdenotiert eine partielle Funktion Σ*B Ijedesc:Stmtdenotiert eine partielle Funktion Σ*Σ

Definition (Partielle Funktion)

Einepartielle Funktionf :X*Y ist eine RelationfX×Y so dass wenn (x,y1)∈f und (x,y2)∈f danny1=y2(Rechtseindeutigkeit) Notation: fürf:X*Y, (x,y)f ⇐⇒f(x) =y.

Korrekte Software 17 [27]

Denotat von Aexp

A[[a]] :Aexp→(Σ*Z) A[[n]] = {(σ,n)|σ∈Σ}

A[[x]] = {(σ, σ(x))|σ∈Σ,xDom(σ)}

A[[a0+a1]] = {(σ,n0+n1)|(σ,n0)∈ A[[a0]]∧(σ,n1)∈ A[[a1]]}

A[[a0−a1]] = {(σ,n0n1)|(σ,n0)∈ A[[a0]]∧(σ,n1)∈ A[[a1]]}

A[[a0a1]] = {(σ,n0n1)|(σ,n0)∈ A[[a0]]∧(σ,n1)∈ A[[a1]]}

A[[a0/a1]] = {(σ,n0/n1)|(σ,n0)∈ A[[a0]]∧(σ,n1)∈ A[[a1]]∧n16= 0}

Korrekte Software 18 [27]

Denotat von Bexp

B[[a]] :Bexp→(Σ*B) B[[1]] = {(σ,true)|σ∈Σ}

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

B[[a0==a1]] = {(σ,true)|σ∈Σ,(σ,n0)∈ A[[a0]](σ), (σ,n1)∈ A[[a1]],n0=n1}

∪{(σ,false)|σ∈Σ,(σ,n0)∈ A[[a0]](σ), (σ,n1)∈ A[[a1]],n06=n1} B[[a0<a1]] = {(σ,true)|σ∈Σ,(σ,n0)∈ A[[a0]](σ),

(σ,n1)∈ A[[a1]],n0<n1}

∪{(σ,false)|σ∈Σ,(σ,n0)∈ A[[a0]](σ), (σ,n1)∈ A[[a1]],n0n1}

Korrekte Software 19 [27]

Denotat von Bexp

B[[a]] :Bexp→(Σ*B) B[[!b]] = {(σ,true)|σ∈Σ,(σ,false)∈ B[[b]]}

∪{(σ,false)|σ∈Σ,(σ,true)∈ B[[b]]}

B[[b1&&b2]] = {(σ,false)|σ∈Σ,(σ,false)∈ B[[b1]]}

∪{(σ,t2)|σ∈Σ,(σ,true)∈ B[[b1]],(σ,t2)∈ B[[b2]]}

B[[b1||b2]] = {(σ,true)|σ∈Σ,(σ,true)∈ B[[b1]]}

∪{(σ,t2)|σ∈Σ,(σ,false)∈ B[[b1]],(σ,t2)∈ B[[b2]]}

Korrekte Software 20 [27]

Denotat von Stmt

C[[.]] :Stmt→(Σ*Σ)

C[[x=a]] = {(σ, σ[n/x])|σ∈Σ∧(σ,n)∈ A[[a]]}

C[[c1;c2]] = C[[c2]]◦ C[[c1]] Komposition von Relationen C[[{ }]] = Id Id:={(σ, σ)|σ∈Σ}

C[[if(b)c0 elsec1]] = {(σ, σ0)|(σ,true)∈ B[[b]]∧(σ, σ0)∈ C[[c0]]}

∪{(σ, σ0)|(σ,false)∈ B[[b]]∧(σ, σ0)∈ C[[c1]]}

Aber was ist

C[[while(b)c]] =??

Korrekte Software 21 [27]

Denotationale Semantik für while

Seiwwhile(b)c(undσ∈Σ). Operational gilt:

wif(b){c;w} else{ } C[[w]] =? C[[if(b){c;w} else{ }]]

Konstruktion: Auffalten der Schleife

Γ(s)def=C[[if(b){c;s} else{ }]]

Γ0(s)def=s,Γi+1(s)def= Γ(Γi(s)) Semantik vonw: Beliebig oft auffalten

C[[w]] =[ n∈N

Γn(?) =fix(Γ) Was ist?

Korrekte Software 22 [27]

Denotationale Semantik von while

Formale Konstruktion (sist einDenotat):

Γ(s)def=C[[if(b){c;s} else{ }]]

Γ(s)def={(σ, σ0)| ∃σ00.(σ,true)∈ B[[b]]∧(σ, σ00)∈ C[[c]]∧(σ00, σ0)∈s}

∪ {(σ, σ)|(σ,false)∈ B[[b]]}

Γ ist wie ˆR, mitRdefiniert wie folgt:

R= (σ00, σ0)

(σ, σ0) |(σ,true)∈ B[[b]]∧(σ, σ00)∈ C[[c]]

(σ, σ)|(σ,false)∈ B[[b]]

Dann istC[[w]] der Fixpunkt von Γ:

C[[w]] =fix(Γ)

Korrekte Software 23 [27]

Denotation für Stmt

C[[.]] :Stmt→(Σ*Σ)

C[[x=a]] = {(σ, σ[n/x])|σ∈Σ∧(σ,n)∈ A[[a]]}

C[[c1;c2]] = C[[c2]]◦ C[[c1]] Komposition von Relationen C[[{ }]] = Id Id:={(σ, σ)|σ∈Σ}

C[[if(b)c0 elsec1]] = {(σ, σ0)|(σ,true)∈ B[[b]]∧(σ, σ0)∈ C[[c0]]}

∪ {(σ, σ0)|(σ,false)∈ B[[b]]∧(σ, σ0)∈ C[[c1]]}

C[[while(b)c]] = fix(Γ) mit

Γ(ψ) = {(σ, σ0)|(σ,true)∈ B[[b]]∧(σ, σ0)∈ψ◦ C[[c]]}

∪ {(σ, σ)|(σ,false)∈ B[[b]]}

Korrekte Software 24 [27]

(11)

Der Fixpunkt bei der Arbeit

Beispielprogramme:

x= 0 ;

w h i l e ( n > 0 ) { x= x+n ; n= n−1;

}

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

x= x +1;

}

x= 0 ;

w h i l e ( n < 0 ) { x= x +1;

}

Korrekte Software 25 [27]

Weitere Intuition zur Fixpunkt Konstruktion

ISeiwwhile(b)c

IZur Erinnerung: Wir haben begonnen mitwif(b){c;w} else{ } IDann müsste auch gelten

C[[w]]=!C[[if(b){c;w}else { }]]

IBeweis an der Tafel.

IEs müsste ferner gelten

(σ, σ0)∈ C[[w]] =⇒(σ0,false)∈ B[[b]]

IBeweis an der Tafel.

Korrekte Software 26 [27]

Zusammenfassung

IDie denotationale Semantik bildet Programme (Ausdrücke) auf partielle FunktionenΣ*Σ ab.

IZentral ist der Begriff deskleinsten Fixpunktes, der die Semantik der while-Schleife bildet.

IUndefiniertheit wirdimplizitbehandelt (durch die Partialität von Σ*Σ).

INicht-Termination und Undefiniertheit sind semantisch äquivalent.

IGenaues Verhältnis zuroperationalen Semantik? Nächste Vorlesung

Korrekte Software 27 [27]

(12)

Korrekte Software: Grundlagen und Methoden Vorlesung 4 vom 23.04.19

Äquivalenz der Operationalen und Denotationalen Semantik

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

11:27:21 2019-07-04 1 [16]

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

Operationale vs. denotationale Semantik

Operationalha, σi →Aexpn DenotationalA[[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)∈ A[[a1]],(σ,m)∈ A[[a2]]}

ha1, σi →Aexpn ha2, σi →Aexpm n=⊥oderm=⊥ ha1a2, σi →Aexp

◦ ∈ {+,∗,−}

Korrekte Software 3 [16]

Operationale vs. denotationale Semantik

Operationalha, σi →Aexpn DenotationalA[[a]]

a1/a2

ha1, σi →Aexpn ha2, σi →Aexpm m6= 0 m,n6=⊥

ha1a2, σi →AexpnIm {(σ,n/m)|σ∈Σ,(σ,n)∈ A[[a1]],(σ,m)∈ A[[a2]],m6=

0}

ha1, σi →Aexpn ha2, σi →Aexpm n=⊥,m=⊥oderm= 0

ha1/a2, σi →Aexp

Korrekte Software 4 [16]

Ä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 5 [16]

Operationale vs. denotationale Semantik

Operationalhb, σi →Bexp0|1 DenotationalB[[b]]

1 h1, σi →Bexp1 {(σ,1)|σ∈Σ}

0 h0, σi →Bexp0 {(σ,0)|σ∈Σ}

Korrekte Software 6 [16]

Operationale vs. denotationale Semantik

Operat.hb, σi →Bexpt DenotationalB[[b]]

a0==a1

ha0, σi →Aexpn ha1, σi →Aexpm n,m6=⊥ n=m ha0==a1, σi →Bexp1

ha0, σi →Aexpn ha1, σi →Aexpm n,m6=⊥ n6=m ha0==a1, σi →Bexp0

ha0, σi →Aexpn ha1, σi →Aexpm n=⊥oderm=⊥ ha0==a1, σi →Bexp

{(σ,1)|σ∈Σ, (σ,n0)∈ A[[a0]], (σ,n1)∈ A[[a1]], n0=n1}

{(σ,0)|σ∈Σ, (σ,n0)∈ A[[a0]], (σ,n1)∈ A[[a1]], n06=n1}

a1<=a2 analog

Korrekte Software 7 [16]

Operationale vs. denotationale Semantik

Operationalha, σi →Bexpb DenotationalB[[b]]

b1&&b0

hb1, σi →Bexp0

hb1&&b2, σi →0 {(σ,0)|(σ,0)∈ B[[b1]]}

hb1, σi →Bexp1 hb2, σi →Bexpb

hb1&&b2, σi →b {(σ,b)|(σ,1)∈ B[[b1]],(σ,b)∈ B[[b2]]}

hb1, σi →Bexp⊥ hb1&&b2, σi → ⊥

b1||b2 analog

!n . . .

Korrekte Software 8 [16]

(13)

Ä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 9 [16]

Operationale vs. denotationale Semantik

Operational hc, σi →Stmtσ0|⊥

DenotationalC[[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

C[[c2]]◦ C[[c1]]

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 10 [16]

Operationale vs. denotationale Semantik

Operational hc, σi →Stmtσ0|⊥

DenotationalC[[c]]

if(b)c0

hb, σi →Bexp⊥ hc, σi →Stmt⊥ hb, σi →Bexp1 hc0, σi →Stmtσ0 hc, σi →Stmtσ0

{(σ, σ0)|(σ,1)∈ B[[b]],(σ, σ0)∈ C[[c0]]}

elsec1

hb, σi →Bexp0 hc1, σi →Stmtσ0

hc, σi →Stmtσ0 {(σ, σ0)|(σ,0)∈ B[[b]],(σ, σ0)∈ C[[c1]]}

Korrekte Software 11 [16]

Operationale vs. denotationale Semantik

Operational hc, σi →Stmtσ0|⊥

DenotationalC[[c]]

while(b)c

| {z } w

hb, σi →Bexp0 hw, σi →Stmtσ

hb, σi →Bexp⊥ hw, σi →Stmt

hb, σi →Bexp1 hc, σi →Stmtσ06=⊥ hw, σ0i →Stmtσ00 hw, σi →Stmtσ00

fix(Γ)

hb, σi →Bexp1 hc, σi →Stmt⊥ hw, σi →Stmt⊥ mit

Γ(ϕ) = {(σ, σ0)|(σ,1)∈ B[[b]],(σ, σ0)∈ϕ◦ C[[c]]}

∪{(σ, σ)|(σ,0)∈ B[[b]]}

Korrekte Software 12 [16]

Ä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 über die Ableitung in 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 13 [16]

Knackpunkt

C[[w]] =fix(Γ) = Γ(fix(Γ)) = Γ([

i≥0

Γi(∅)) =[

i≥0

Γ(Γi(∅))

=[

i≥0

{(σ, σ0)|(σ,1)∈ B[[b]],(σ, σ00)∈ C[[c]],(σ00, σ0)∈Γi(∅)}

∪ {(σ, σ)|(σ,0)∈ B[[b]]}

mitwwhile(b)cInduktion überi≥0 {(σ, σ0)|(σ,1)∈ B[[b]]

| {z }

hb,σi→Bexp1

, (σ, σ00)∈ C[[c]]

| {z }

(strukt.IH)hc,σi→Stmtσ0

,00, σ0)∈Γi(∅)

| {z }

(≤i IH)hw,σ00i→Stmtσ0

∪{(σ, σ)|(σ,0)∈ B[[b]]

| {z }

hw,σi→Stmtσ

}

hw, σi →Stmtσ0

Korrekte Software 14 [16]

Ä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]])

IGegenbeispiel für⇐in der zweiten Aussage: wählecwhile(1){}:

C[[c]] =∅aberhc, σi →Stmt⊥gilt nicht (sondern?).

Korrekte Software 15 [16]

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

(14)

Korrekte Software: Grundlagen und Methoden Vorlesung 5 vom 07.05.19

Die Floyd-Hoare-Logik

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

11:27:22 2019-07-04 1 [23]

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

Drei Semantiken — Eine Sicht

p = 1;

c := 1;

while (c <= n) { p= p * c;

c= c + 1;

}

Operational

Axiomatisch Denotational

Programm

Korrekte Software 3 [23]

Floyd-Hoare-Logik: Idee

IWas wird hier berechnet?p=n!

IWarum? Wie können wir das beweisen?

IWir berechnen symbolisch, welche Werte Variablen über den Programmverlauf annehmen.

p= 1 ; c= 1 ;

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

IOperationale/denotionale Semantik nicht fürKorrektheitsbeweise geeignet: Ausdrücke werden zu groß, skaliert nicht.

IAbstraktionnötig.

IGrundidee:Zusicherungenüber den Zustand an bestimmten Punkten im Programmablauf.

Korrekte Software 4 [23]

Bob Floyd und Tony Hoare

Bildquelle: Stanford University

Robert Floyd 1936 – 2001

Bildquelle: Wikipedia

Sir Anthony Charles Richard Hoare

1934

Korrekte Software 5 [23]

Grundbausteine der Floyd-Hoare-Logik

IZusicherungenüber den Zustand IBeispiele:

I(B): Hier giltp=c= 1

I(D): Hier istcist um eines größer als der Wert voncan Punkt (C) IGesamtaussage: Wenn am Punkt(A)

der Wert vonn≥0, dann ist am Punkt (E)p=n!.

// (A) p= 1 ; c= 1 ; // (B)

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

Korrekte Software 6 [23]

Grundbausteine der Floyd-Hoare-Logik

ILogische Variablen(zustandsfrei) undProgrammvariablen IZusicherungenmit logischen und Programmvariablen IFloyd-Hoare-Tripel{P}c{Q}

IVorbedingungP(Zusicherung) IProgrammc

INachbedingungQ(Zusicherung)

IFloyd-Hoare-Logik abstrahiert Programme durch logische Formeln.

Korrekte Software 7 [23]

Zusicherungen (Assertions)

IErweiterung vonAexpandBexpdurch

ILogischeVariablenVar v:=N,M,L,U,V,X,Y,Z IDefinierte Funktionen und Prädikate überAexp n!,Pn

i=1i, . . . IImplikation und Quantoren b1−→b2,∀v. .b,∃v. .b IFormal:

Aexpv a::= Z|Idt|Var|a1+a2|a1a2|a1×a2

|f(e1, . . . ,en) Assn b::=

1|0|a1==a2|a1! =a2|a1<=a2

|!b|b1b2|b1||b2

|b1−→b2|p(e1, . . . ,en)|forallv;b|existsv;b Assn b::= true|false|a1=a2|a16=a2|a1a2

| ¬b|b1b2|b1b2

|b1−→b2|p(e1, . . . ,en)| ∀v. .b| ∃v. .b

Korrekte Software 8 [23]

Referenzen

ÄHNLICHE DOKUMENTE

I Funktionen sind zentrales Modularisierungskonzept I Wir müssen Funktionen modular verifizieren können I Erweiterung der Semantik:. I Semantik von Deklarationen und Parameter

Partial cor- rectness means that if the programs starts in a state where the precondition P holds, and it terminates, then it does so in a state which satisfies the postcondition

Korrekte Software: Grundlagen und Methoden Vorlesung 11 vom 19.06.18: Funktionen und Prozeduren. Serge Autexier, Christoph Lüth Universität Bremen

Serge Autexier, Christoph Lüth Universität Bremen Sommersemester 2018?. 11:50:47 2018-06-05

I return ohne Argument darf nur bei einer Nachbedingung Q auftreten, die kein \result enthält. I Bei return mit Argument ersetzt der Rückgabewert den \result in

Partial cor- rectness means that if the programs starts in a state where the precondition P holds, and it terminates, then it does so in a state which satisfies the postcondition

Korrekte Software: Grundlagen und Methoden Vorlesung 6 vom 14.05.17: Korrektheit der Floyd-Hoare-Logik. Serge Autexier, Christoph Lüth Universität Bremen

Korrekte Software: Grundlagen und Methoden Vorlesung 1 vom 06.04.17: Einführung.. Serge Autexier, Christoph Lüth Universität Bremen