• 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!
37
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

(2)

Fahrplan

I Einführung

I Operationale Semantik I Denotationale Semantik

I Äquivalenz der Operationalen und Denotationalen Semantik I Der Floyd-Hoare-Kalkül

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

I Verifikationsbedingungen I Vorwärts mit Floyd und Hoare I Modellierung

I Spezifikation von Funktionen I Referenzen und Speichermodelle

I Funktionsaufrufe und das Framing-Problem I Ausblick und Rückblick

(3)

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.0j<i−→a[j]a[r])0in0r <n}

12 }

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

(4)

Beispiel: Sortierte Felder

I Wie formulieren wir, dass ein Array sortiert ist? Ggf. bis zu einem bestimmten Punktn sortiert ist?

i n t a [ 8 ] ;

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

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

//{∀a.∀i.i0−→(sorteduntil(a,i+ 1)←→(a[i]a[i+ 1]sorteduntil(a,i)))}

(5)

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

?

(6)

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

?

(7)

Was brauchen wir?

I Expressivelogische Sprache (Assn) I Konzeptbildung auf der Modellebene

I Funktionen I Typen

I Beispiele:

I Separate Modellierungssprache, bspw. UML/OCL

I Modellierungskonzepte in der Annotationssprache (ACSL, JML)

(8)

Modellierung von Typen: Integers

I Vereinfachung: int wird abgebildet aufZ

I Daskannsehr falsch sein

I ManchmalunerwarteteEffekte

I Behebung: statisch aufÜberlauf prüfen

I Nachteil: Plattformspezifisch

(9)

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 // {0len}

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 // { res 6=−1−→buf[res] =val

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

(10)

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 // {0len}

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 // { res 6=−1−→buf[res] =val

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

(11)

Typen: reelle Zahlen

I Vereinfachung:doublewird abgebildet auf R

I Auch hierFehlerund unerwartete Effektemöglich:

I Kein Überlauf, aberRundungsfehler I Fließkommazahlen: Standard IEEE 754-2008

I Mögliche Abhilfe:

I Spezifikation der Abweichung vonexakter(ideeller) Berechnung

(12)

Typen: labelled records

I Passen gut zu Klassen (Klassendiagramme in der UML)

I Bis auf Methoden: impliziter Parameter self

I Werden nicht behandelt

(13)

Typen: Felder

I Was repräsentiertFelder?

I Sequenzen(Listen)

I Modellierungssprache:

I Annotation +OCL

(14)

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.0j<n−→a[i] =b[n1i]}

(15)

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 / 2 ) {

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.0j<n−→a[i] =b[n1i]}

(16)

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 / 2 ) {

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

∀j.n1i<j <n−→a[j] =b[n1j]∧

∀j.ijn1i−→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.0j<n−→a[i] =b[n1i]}

(17)

Vereinfacht mit Modellbildung

I seq(a,n) ist ein Feld der Längen repräsentiert als Liste (Sequenz)

I Aktionen auf Sequenzen:

I rev(a) — Reverse

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

I ++ — Konkatenation

(18)

Ein längeres Beispiel, vereinfacht

1 i = 0 ;

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

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

4 //

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}

(19)

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[ni: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}

(20)

Formelsprache mit Quantoren

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

I Etwa eine Fakultätsfunkion

I Wir müssen neue Prädikate definieren können I rev,sorted, . . .

I Wir müssen Formeln bilden können I Analog zuBexp

I Zusätzlich mit Implikation−→, Äquivalenz ←→

I Zusätzlich Quantoren über logische Variablen wie in

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

∀i.i0−→(sorteduntil(a,i+ 1)←→(a[i]a[i+ 1]sorteduntil(a,i)))

(21)

Was brauchen wir?

I Definiere Terme als Variablen und Funktionen besimmter Stelligkeit

I Definiere Literale und Formeln

I Interpretation von Formeln

I mit und ohne Programmvariablen

(22)

Zusicherungen (Assertions)

I Erweiterung vonAexpand Bexpdurch

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

i=1i, . . . I Implikation,Äquivalenzenund Quantorenb1−→b2,b1←→b2,∀v.b,∃v.b I Formal:

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

(23)

Zusicherungen (Assertions)

I Erweiterung vonAexpand Bexpdurch

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

i=1i, . . . I Implikation,Äquivalenzenund Quantorenb1−→b2,b1←→b2,∀v.b,∃v.b I Formal:

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

(24)

Zusicherungen (Assertions)

I Erweiterung vonAexpand Bexpdurch

I LogischeVariablenVar v :=N,M,L,U,V,X,Y,Z I Funktionen und Prädikate selbst definieren

I Implikation,Äquivalenzenund Quantorenb1−→b2,b1←→b2,∀v.b,∃v.b I Formal:

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

(25)

Erfüllung von Zusicherungen

I Wann gilt eine ZusicherungbAssn in einem Zustandσ?

I Auswertung (denotationale Semantik) ergibttrue

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

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

(26)

Erfüllung von Zusicherungen

I Wann gilt eine ZusicherungbAssn in einem Zustandσ?

I Auswertung (denotationale Semantik) ergibttrue

I Belegungder logischen Variablen: I:Var→(Z∪C∪Array) I Semantik vonb unter der BelegungI:

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

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

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

(27)

Erfülltheit von Zusicherungen

Erfülltheit von Zusicherungen

bAssn ist in Zustandσ mit BelegungI erfüllt (σ |=I b), gdw Bv[[b]]I(σ) =true

(28)

Formeln ohne Programmvariablen, ohne Arrays, ohne Strukturen

I Eine FormelbAssn istpur, wenn sie weder Programmvariablen, noch Strukturen, noch Felder enthält (also keine Teilterme ausLexp undIdt.

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

I SeiAssncAssn die Menge der geschlossenen Formeln Lemma

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

I Sei Γ eine endliche Menge von Formeln, dann definieren wir

^Γ :=

( b1. . .bn für alle bi ∈Γ,Γ6=∅ true falls Γ =∅

(29)

Erfülltheit von Zusicherungen unter Kontext

Erfülltheit von Zusicherungen unter Kontext

Sei Γ⊆Assnc eine endliche Menge und bAssn. ImKontext Γ ist b in Zustand σ mit BelegungI erfüllt (Γ, σ|=I b), gdw

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

(30)

Floyd-Hoare-Tripel mit Kontext

I Sei Γ∈Assnc und P,QAssn

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

c ist partiell korrekt, wenn für alle Zustände σ und alle BelegungenI die unter Kontext ΓP erfüllen, gilt:

wenn die Ausführung vonc mitσ in σ0 terminiert, dann erfüllenσ0 und I im Kontext Γ auchQ.

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

(31)

Floyd-Hoare-Kalkül mit Kontext

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

Γ` {A∧b}c0{B} Γ` {A∧ ¬b}c1{B} Γ` {A}if(b) c0 else c1{B}

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

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

(32)

Floyd-Hoare-Kalkül mit Kontext

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

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

Γ` {A}if(b) c0 else c1{B}

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

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

(33)

Floyd-Hoare-Kalkül mit Kontext

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

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

Γ` {A}if(b) c0 else c1{B}

Γ` {A∧b}c{A}

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

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

(34)

Floyd-Hoare-Kalkül mit Kontext

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

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

Γ` {A}if(b) c0 else c1{B}

Γ` {A∧b}c{A}

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

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

(35)

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 Belegungen I dass Γ−→(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 alle iZ gilt(σ,1)∈ Bv[[b]]I[i/v]}

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

(36)

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 Belegungen I dass Γ−→(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 alle iZ gilt(σ,1)∈ Bv[[b]]I[i/v]}

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

(37)

Zusammenfassung

I Spezifikation erfordertModellbildung I Herangehensweisen:

I Modellbildung in der Annotation (“ghost-code”) I Separate Modellierungssprache

I Erweiterung der Annotationssprache um logische Anteile I Quantoren, Typen, Kontexte

I Problem: Unvollständigkeit der Logik

Referenzen

ÄHNLICHE DOKUMENTE

[r]

aber mit erheblichen Konsequenzen: Substitution. Korrekte Software

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]