• Keine Ergebnisse gefunden

Korrekte Software: Grundlagen und Methoden Vorlesung 10 vom 11.06.19 Modellierung und Spezifikation

N/A
N/A
Protected

Academic year: 2022

Aktie "Korrekte Software: Grundlagen und Methoden Vorlesung 10 vom 11.06.19 Modellierung und Spezifikation"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Korrekte Software: Grundlagen und Methoden Vorlesung 10 vom 11.06.19 Modellierung und Spezifikation

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

11:27:29 2019-07-04 1 [28]

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

Beispiel: Suche nach dem maximalen Element

1 //{0<n}

2 i = 0 ;

3 r= 0 ;

4 w h i l e ( i < n ) {

5 i f ( a [ r ] < a [ i ] ) {

6 r= i ;

7 }

8 e l s e {

9 }

10 i = i +1;

11 //{(∀j.0≤j<i−→a[j]a[r])∧0≤in∧0≤r<n}

12 }

13 //{(∀j.0≤j<n−→a[j]a[r])∧0≤r<n}

Korrekte Software 3 [28]

Beispiel: Sortierte Felder

IWie formulieren wir, dass ein Array sortiert ist? Ggf. bis zu einem bestimmten Punktnsortiert ist?

i n t a [ 8 ] ;

//{∀0≤jn<6.a[j]≤a[j+ 1]}

IAlternativ würden man auch gerne ein Prädikat definieren können //{∀a.sorteduntil(a,0)←→true}

//{∀a.∀i.i≥0−→(sorteduntil(a,i+ 1)←→(a[i]≤a[i+ 1]∧sorteduntil(a,i)))}

Korrekte Software 4 [28]

Generelles Problem: Modellbildung

i= 0;

while (i< n) { a[i]= i;

i= i+1;

}

a.out

Executable Developer

Source code i= 0;

while (i< n) { a[i]= i;

i= i+1;

}

a.out

Executable Developer

Source code

Model

?

Korrekte Software 5 [28]

Was brauchen wir?

IExpressivelogische Sprache(Assn) IKonzeptbildung auf der Modellebene

IFunktionen ITypen IBeispiele:

ISeparate Modellierungssprache, bspw. UML/OCL

IModellierungskonzepte in der Annotationssprache (ACSL, JML)

Korrekte Software 6 [28]

Modellierung von Typen: Integers

IVereinfachung:intwird abgebildet aufZ

IDaskannsehr falsch sein

IManchmalunerwarteteEffekte

IBehebung: statisch aufÜberlaufprüfen

INachteil: Plattformspezifisch

Korrekte Software 7 [28]

Binäre Suche

1 i n t b i n a r y _ s e a r c h (i n t v a l , i n t b u f [ ] , u n s i g n e d l e n )

2 {

3 //{0≤len}

4 i n t low , h i g h , mid , r e s ;

5 l o w = 0 ; h i g h = l e n ;

6 w h i l e ( l o w < h i g h ) {

7 mid= ( l o w+ h i g h ) / 2 ;

8 i f ( b u f [ mid ] < v a l )

9 l o w = mid + 1 ;

10 e l s e

11 h i g h = mid ;

12 }

13 i f ( l o w < l e n && b u f [ l o w ] == v a l )

14 r e s= l o w ;

15 e l s e

16 r e s= −1;

17 //{res6=−1−→buf[res] =val

res=−1−→ ∀j.0≤j<len−→buf[j]6=val }

18 }

Korrekte Software 8 [28]

(2)

Binäre Suche, korrekt

1 i n t b i n a r y _ s e a r c h (i n t v a l , i n t b u f [ ] , u n s i g n e d l e n )

2 {

3 //{0≤len}

4 i n t low , h i g h , mid , r e s ;

5 l o w = 0 ; h i g h = l e n ;

6 w h i l e ( l o w < h i g h ) {

7 mid= l o w+ ( h i g h−l o w ) / 2 ;

8 i f ( b u f [ mid ] < v a l )

9 l o w = mid + 1 ;

10 e l s e

11 h i g h = mid ;

12 }

13 i f ( l o w < l e n && b u f [ l o w ] == v a l )

14 r e s= l o w ;

15 e l s e

16 r e s= −1;

17 //{res6=−1−→buf[res] =val

res=−1−→ ∀j.0≤j<len−→buf[j]6=val }

18 }

Korrekte Software 9 [28]

Typen: reelle Zahlen

IVereinfachung:doublewird abgebildet aufR

IAuch hierFehlerundunerwartete Effektemöglich:

IKein Überlauf, aberRundungsfehler IFließkommazahlen: Standard IEEE 754-2008

IMögliche Abhilfe:

ISpezifikation der Abweichung vonexakter(ideeller) Berechnung

Korrekte Software 10 [28]

Typen: labelled records

IPassen gut zu Klassen (Klassendiagramme in der UML)

IBis auf Methoden: impliziter Parameter self

IWerden nicht behandelt

Korrekte Software 11 [28]

Typen: Felder

IWas repräsentiertFelder?

ISequenzen(Listen)

IModellierungssprache:

IAnnotation +OCL

Korrekte Software 12 [28]

Ein längeres Beispiel: reverse in-place

1 i = 0 ;

2 //{∀i.0i<n−→a[i] =b[i]}

3 w h i l e ( i < n ) {

4 // ???

5 tmp= a [ n−1−i ] ;

6 a [ n−1−i ]= a [ i ] ;

7 a [ i ]= tmp ;

8 i = i +1;

9 }

10 //{∀j.0≤j<n−→a[i] =b[n−1−i]}

Korrekte Software 13 [28]

Ein längeres Beispiel: reverse in-place

1 i = 0 ;

2 //{∀i.0≤i<n−→a[i] =b[i]}

3 w h i l e ( i < n / 2 ) {

4 //{ ∀j.0≤j<i−→a[j] =b[n−1−j]∧

∀j.n−1−i<j<n−→a[j] =b[n−1−j]∧

∀j.i≤jn−1−i−→a[j] =b[j] }

5 tmp= a [ n−1−i ] ;

6 a [ n−1−i ]= a [ i ] ;

7 a [ i ]= tmp ;

8 i = i +1;

9 }

10 //{∀j.0≤j<n−→a[i] =b[n−1−i]}

Korrekte Software 14 [28]

Vereinfacht mit Modellbildung

Iseq(a,n) ist ein Feld der Längenrepräsentiert als Liste (Sequenz)

IAktionen auf Sequenzen:

Irev(a) — Reverse

Ia[i:j] — Slicing (à la Python)

I++ — Konkatenation

Korrekte Software 15 [28]

Ein längeres Beispiel, vereinfacht

1 i = 0 ;

2 //{bs= seq(a,n)}

3 w h i l e ( i < n / 2 ) {

4 //{as= seq(a,n) =⇒

rev(as[n−i:n])++as[i:ni]++ rev(as[0 :i]) =bs}

5 tmp= a [ n−1−i ] ;

6 a [ n−i−1]= a [ i ] ;

7 a [ i ]= tmp ;

8 i = i +1;

9 }

10 //{as= seq(a,n) =⇒rev(as) =bs}

Korrekte Software 16 [28]

(3)

Formelsprache mit Quantoren

IWir brauchen Programmausdrücken wieAexp IWir müssen neue Funktionen verwenden können

IEtwa eine Fakultätsfunkion

IWir müssen neue Prädikate definieren können Irev,sorted, . . .

IWir müssen Formeln bilden können IAnalog zuBexp

IZusätzlich mit Implikation−→, Äquivalenz←→

IZusätzlich Quantoren über logische Variablen wie in

(∀j.0≤j<n−→P[j])∧P[n]−→ ∀j.0≤j<n+ 1−→P[j]

∀i.i≥0−→(sorteduntil(a,i+ 1)←→(a[i]≤a[i+ 1]∧sorteduntil(a,i)))

Korrekte Software 17 [28]

Was brauchen wir?

IDefiniere Terme als Variablen und Funktionen besimmter Stelligkeit

IDefiniere Literale und Formeln

IInterpretation von Formeln

Imit und ohne Programmvariablen

Korrekte Software 18 [28]

Zusicherungen (Assertions)

IErweiterung vonAexpandBexpdurch

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

i=1i, . . . IFunktionen und Prädikate selbst definieren

IImplikation,Äquivalenzenund Quantorenb1−→b2,b1←→b2,∀v.b,∃v.b IFormal:

Lexp l::=Idt|l[a]|l.Idt Aexpv a::= Z|Idt|Var|C|Lexp

|a1+a2|a1a2|a1×a2

|f(e1, . . . ,en)

Assn b::= 1|0|a1==a2|a1! =a2|a1<=a2

|!b|b1&&b2|b1||b2

|b1−→b2|b1←→b2|p(e1, . . . ,en)

|∀v.b| ∃v.b

Korrekte Software 19 [28]

Erfüllung von Zusicherungen

IWann gilt eine ZusicherungbAssnin einem Zustandσ?

IAuswertung (denotationale Semantik) ergibttrue

IBelegungder logischen Variablen:I:Var→(Z∪C)

ISemantik vonbunter der BelegungI:Bv[[b]]I,Av[[a]]I Av[[l]]I={(σ, σ(i)|(σ,i)∈ Lv[[l]]I,iDom(σ)}

Korrekte Software 20 [28]

Erfüllung von Zusicherungen

IWann gilt eine ZusicherungbAssnin einem Zustandσ?

IAuswertung (denotationale Semantik) ergibttrue

IBelegungder logischen Variablen:I:Var→(Z∪C∪Array) ISemantik vonbunter der BelegungI:

Bv[[∀v.b]]I={(σ,true)|für alleiZgilt (σ,true)∈ Bv[[b]]I[i/v]}

∪ {(σ,false)|für einiZgilt (σ,false)∈ Bv[[b]]I[i/v]} Bv[[∃v.b]]I={(σ,true)|für einiZgilt (σ,true)∈ Bv[[b]]I[i/v]}

∪ {(σ,false)|für alleiZgilt (σ,false)∈ Bv[[b]]I[i/v]} Analog für andere Typen.

Korrekte Software 21 [28]

Erfülltheit von Zusicherungen

Erfülltheit von Zusicherungen

bAssnist in Zustandσmit BelegungIerfüllt (σ|=Ib), gdw Bv[[b]]I(σ) =true

Korrekte Software 22 [28]

Formeln ohne Programmvariablen, ohne Arrays, ohne Strukturen

IEine FormelbAssnistpur, wenn sie weder Programmvariablen, noch Strukturen, noch Felder enthält (also keine Teilterme ausLexp undIdt.

IEine Formel istgeschlossen, wenn siepurist und keine freien logischen Variablen enthält.

ISeiAssncAssndie Menge der geschlossenen Formeln Lemma

Für eine geschlossene Formel b ist der WahrheitswertBv[[b]]I(σ)von b unabhängig von I undσ.

ISei Γ eine endliche Menge von Formeln, dann definieren wir

^Γ :=

(b1. . .bn für allebi∈Γ,Γ6=∅

true falls Γ =∅

Korrekte Software 23 [28]

Erfülltheit von Zusicherungen unter Kontext

Erfülltheit von Zusicherungen unter Kontext

Sei Γ⊆Assnceine endliche Menge undbAssn. ImKontext Γistbin Zustandσmit BelegungIerfüllt (Γ, σ|=Ib), gdw

Bv[[Γ−→b]]I(σ) =true

Korrekte Software 24 [28]

(4)

Floyd-Hoare-Tripel mit Kontext

ISei Γ∈AssncundP,QAssn

Partielle Korrektheit unter Kontext (Γ|={P}c{Q})

cistpartiell korrekt, wenn für alle Zuständeσund alle BelegungenI die unter Kontext ΓPerfüllen, gilt:

wenndie Ausführung voncmitσinσ0terminiert,dannerfüllenσ0und Iim Kontext Γ auchQ.

Γ|={P}c{Q} ⇐⇒ ∀I.∀σ.Γ, σ|=IP∧∃σ0.(σ, σ0)∈ C[[c]] =⇒Γ, σ0|=IQ

Korrekte Software 25 [28]

Floyd-Hoare-Kalkül mit Kontext

Γ` {P[e/x]}x=e{P}

Γ` {A∧b}c0{B} Γ` {A∧ ¬b}c1{B}

Γ` {A}if(b)c0 elsec1{B}

Γ` {A∧b}c{A}

Γ` {A}while(b)c{A∧ ¬b}

Γ` {A}c1{B} Γ` {B}c2{C}

Γ` {A}c1;c2{C}

Korrekte Software 26 [28]

Floyd-Hoare-Kalkül mit Kontext

Γ−→(A0−→A) Γ` {A}c{B} Γ−→(B−→B0) Γ` {A0}c{B0}

und es muss gezeigt werden für alle Zuständeσund BelegungenIdass Γ−→(A0−→A) wahr bzw. dass

Bv[[Γ−→(A0−→A)]]I(σ) =true (Analog für Γ−→(B−→B0)).

Problem

Bv[[.]]I(σ)im Allgemeinen nicht berechenbar wegen

Bv[[∀Zv.b]]I={(σ,1)|für alleiZgilt(σ,1)∈ Bv[[b]]I[i/v]}

∪ {(σ,0)|für ein iZgilt(σ,0)∈ Bv[[b]]I[i/v]}

Korrekte Software 27 [28]

Zusammenfassung

ISpezifikation erfordertModellbildung IHerangehensweisen:

IModellbildung in der Annotation (“ghost-code”) ISeparate Modellierungssprache

IErweiterung der Annotationssprache um logische Anteile IQuantoren, Typen, Kontexte

IProblem: Unvollständigkeit der Logik

Korrekte Software 28 [28]

Referenzen

ÄHNLICHE DOKUMENTE

I Wir müssen neue Prädikate definieren können I rev, sorted,.. Korrekte Software: Grundlagen und Methoden Vorlesung 11 vom 18.06.19 Spezifikation von Funktionen. Serge

[r]

I Wir brauchen Programmausdrücken wie Aexp I Wir müssen neue Funktionen verwenden können. I Etwa

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

Korrekte Software: Grundlagen und Methoden Vorlesung 8 vom 29.05.18: Modellierung und Spezifikation.. Serge Autexier,

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

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

[r]