• Keine Ergebnisse gefunden

Beispiel: Suche nach dem maximalen Element

N/A
N/A
Protected

Academic year: 2022

Aktie "Beispiel: Suche nach dem maximalen Element"

Copied!
5
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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

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

13:55:57 2020-07-14 1 [36]

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 IAusblick und Rückblick

Korrekte Software 2 [36]

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

Beispiel: Sortierte Felder

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

i n t a [ 8 ] ;

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

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

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

I. . . und damit beweisen dass:

//{∀a∀n.sorted(a,n)−→ ∀i,j.0≤ijn−→a[i]a[j]}

Korrekte Software 4 [36]

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

?

Modell istabstrakte Repräsentation:

IVerhalten des Programmes kann kürzer beschrieben werden

IEinfachere Beweise

Modell isttreue Repräsentation:

IEigenschaften des Modelles gelten auch für das Programm

Korrekte Software 5 [36]

Was brauchen wir?

IExpressivelogische Sprache(Assn) IKonzeptbildung auf der Modellebene

IReichere Typen (bspw. Repräsentation von Feldern durch Listen) IMehr Funktionen (bspw. auf Listen)

IBeispiele:

ISeparate Modellierungssprache, bspw. UML/OCL

IModellierungskonzepte in der Annotationssprache (ACSL, JML)

Korrekte Software 6 [36]

Modellierung von Typen: Integer

IVereinfachung:intwird abgebildet aufZ

IDaskannsehr falsch sein

IManchmalunerwarteteEffekte IBehebung: statisch aufÜberlaufprüfen

INachteil: Plattformspezifisch

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 }

(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 [36]

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

Typen: labelled records

IPassen gut zu Klassen (Klassendiagramme in der UML)

IBis auf Methoden: impliziter Parameter self

IWerden nicht behandelt

Korrekte Software 11 [36]

Typen: Felder

IWas repräsentiertFelder?

ISequenzen(Listen)

IModellierungssprache:

IAnnotation +OCL

Korrekte Software 12 [36]

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

Korrekte Software 13 [36]

reverse-in-place: die Invariante

Mathematisch:

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

Korrekte Software 14 [36]

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.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 15 [36]

Arbeitsblatt 10.1: Jetzt seit ihr dran

IBerechnet die Beweisverpflichtungen aus der While-Schleife bei reverse-in-place:

Ib−→awp(c,I)

IDazu berechnet ihr awp(c,I), mit c=

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

I={ ∀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] } IIhr braucht noch nichts zu beweisen. . .

Korrekte Software 16 [36]

(3)

Vereinfacht mit Modellbildung

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

I:, [] — Listenkonstruktoren Irev(a) — Reverse

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

Korrekte Software 17 [36]

Interaktion mit der Substitution

Iset(a,i,v) ist derfunktionale Updatean Indeximit dem Wertv:

set([],i,v) == []

set(a:as,0,v) ==v:as

i>0−→set(a:as,i,v) ==a: set(as,i−1,v) i<0−→set(as,i,v) ==as

IDamit ist

seq(a,n)[v/a[i]] = set(seq(a,n),i,v)

Korrekte Software 18 [36]

Reverse-in-Place mit Listen

1 i = 0 ;

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

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

4 /∗∗ inv as= seq(a,n) =⇒

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

5 ∗/ {

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

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

8 a [ i ]= tmp ;

9 i = i +1;

10 }

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

IDamit vereinfachte VCs und vereinfachter Beweis.

Korrekte Software 19 [36]

Arbeitsblatt 10.2: Beweise mit Listen

IBeweist durchstrukturelle Induktionauf Sequenzen:

rev(as++bs) == rev(bs)++ rev(as)

IStrukturelle Induktion heißt:

1 Induktionsbasis: zeige Aussage fürasdef= [].

2 Induktionsschritt: Annahme der Aussage, zeige Aussage fürasdef=a:as IBeweis durch Umformung, Anwendung der Gleichungen für rev, ++

rev([]) == []

rev(x:xs) == rev(xs)++[x]

[]++ys==ys

(x:xs)++ys==x: (xs++ys)

Korrekte Software 20 [36]

Fazit

IDie Abstraktion ermöglicht wesentlichkürzereVorbedingungen und Verifikationsbedingungen.

IDie Beweise auf Ebene der Listen sind wesentlicheinfacher.

IDie Theorie der Listen ist wesentlichreicher.

Korrekte Software 21 [36]

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−→(sorted(a,i+ 1)←→(a[i]≤a[i+ 1]∧sorted(a,i)))

Korrekte Software 22 [36]

Was brauchen wir?

IDefiniere Terme als Variablen und Funktionen besimmter Stelligkeit

IDefiniere Literale und Formeln

IInterpretation von Formeln

Imit und ohne Programmvariablen

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,Äquivalenzen, Quantoren b1−→b2,b1←→b2,∀v.b,∃v.b IFormal:

Lexpl::=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

(4)

Die bisherigen Funktionen

Die bisherigen Funktionen selbst definiert:

n! ==factorial(n) i≤0−→factorial(i) == 1

i>0−→factorial(i) ==i·factorial(i−1) b

X

i=a

i==sum(a,b) a>b−→sum(a,b) == 0

a<=b−→sum(a,b) ==a+sum(a+ 1,b) Kombination aus eingebautemsyntaktische Zuckerund eigenen Definitionen.

Korrekte Software 25 [36]

Die bisherigen Funktionen

IPb i=ae,Qb

i=aebenötigen Funktionenhöherer Ordnungund anonyme Funktionen:

IGanz allgemein:

ab−→[a. .b] ==a: [a+ 1. .b]

a>b−→[a. .b] == []

foldl(f,c,a:as) == foldl(f,f(c,a),as) foldl(f,c,[]) ==c

b X

i=a

e(i) == foldl(λxi.x+e(i),0,[a. .b]) b

Y

i=a

e(i) == foldl(λxi.x·e(i),0,[a. .b])

Korrekte Software 26 [36]

Ein Zoo von Logiken

IDas grundlegende Dilemma:

Entscheidbarkeit Ausdrucksmächtigkeit

IDer Logik-Zoo:

Entscheidbar Vollständig Aussagenlogik (OPL) X X (A∧B)C

Pressburger Arithmetik X X n<x−→n+a<x+a Prädikatenlogik (PL) X X ∀x.∃y.x=y

Peano-Arithmetik X X n·0 = 0 PL mit Ind. & Fkt. X X Z3

Prädikatenlogik 2. Stufe X X ∀P.P(0)−→ ∀n.P(n) Logik höherer Stufe (HOL) X X Haskell

IAuswahl der Logik: Kompromiss (sweet spot)

Korrekte Software 27 [36]

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: [[b]]IBv,[[a]]IAv

[[l]]IAv={(σ, σ(i)|(σ,i)∈[[l]]ILv,iDom(σ)}

Korrekte Software 28 [36]

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:

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

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

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

Korrekte Software 29 [36]

Erfülltheit von Zusicherungen

Erfülltheit von Zusicherungen

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

Korrekte Software 30 [36]

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 Wahrheitswert[[b]]IBv(σ)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 31 [36]

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

[[Γ−→b]]IBv(σ) =true

Korrekte Software 32 [36]

(5)

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 33 [36]

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 34 [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 BelegungenIdass Γ−→(A0−→A) wahr bzw. dass

[[Γ−→(A0−→A)]]IBv(σ) =true

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

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

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

IUnvollständigkeit der Prädiktenlogik

Korrekte Software 35 [36]

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

Referenzen

ÄHNLICHE DOKUMENTE

Bei outermost-first wird zuerst das äußerste dbl reduziert, was dem Aufruf der Funktion dbl mit dem nicht ausgewerteten Argument dbl (dbl (7+3)) entspricht (verzögerte Auswertung).

I Reichere Typen (bspw. Repräsentation von Feldern durch Listen) I Mehr Funktionen

Wenn der Webbrowser oder Image Panel verfügbar sind, können Sie durch eine Verknüpfung mit PageScope My Panel Manager die Einstellungen des Webbrowsers und die Informationen der

Wenn der Webbrowser oder Image Panel verfügbar sind, können Sie durch eine Verknüpfung mit PageScope My Panel Manager die Einstellungen des Webbrowsers und die Informationen der

In der Regel sollte es allen Prüflingen gelin- gen, sich nach dem Hören eines Textes zum Inhalt zu äußern. Hierbei können die unter- schiedlichsten Aufgabenformen angelegt werden,

ID1an ljat f 0 lange gefragt, maß bn\'S beutfd)e lBntedanb ift, biß bie ®efd)icJ?te barauf eine mntmort gab; man loUte nun einmal fragen, l1)a\'S unb mo bet beutfd)e @eift ift, um

@50 ift aud} eine rein ~iftorifcge, rüdltlärtß geltlenbete 58etrad}tung ber geiftigen l,ßerfönHd}feit 9?emllranbt'ß Itlie feineß ~olfetl 31tlar niel}t u&gt;ert~lotl i aber fie

@50 ift aud} eine rein ~iftorifcge, rüdltlärtß geltlenbete 58etrad}tung ber geiftigen l,ßerfönHd}feit 9?emllranbt'ß Itlie feineß ~olfetl 31tlar niel}t u&gt;ert~lotl i aber fie