• Keine Ergebnisse gefunden

Sortierte Arrays?

N/A
N/A
Protected

Academic year: 2022

Aktie "Sortierte Arrays?"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Korrekte Software: Grundlagen und Methoden Vorlesung 8 vom 29.05.18: Modellierung und Spezifikation

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

11:50:53 2018-06-05 1 [27]

Fahrplan

I Einführung

I Operationale Semantik I Denotationale Semantik

I Äquivalenz der Operationalen und Denotationalen Semantik I Die Floyd-Hoare-Logik

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

I Modellierung und Spezifikation I Verifikationsbedingungen I Vorwärts mit Floyd und Hoare I Funktionen und Prozeduren I Referenzen

I Ausblick und Rückblick

Korrekte Software 2 [27]

Erstes Beispiel: Ein Feld initialisieren

1 //{n≤0}

2 i = 0 ;

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

4 a [ i ]= i ;

5 i = i +1;

6 //{(∀j.0≤j<i−→a[j] =j)in}

7 }

8 //{∀j.0≤j<n−→a[j] =j}

I Wichtiges Theorem:

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

Korrekte Software 3 [27]

Längeres 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 4 [27]

Sortierte Arrays?

I Wie 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]}

I Alternativ 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 5 [27]

Formelsprache mit Quantoren

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

IEtwa eine Fakultätsfunkion

I Wir müssen neue Prädikate definieren können

IEtwa einensorteduntil I Wir 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 6 [27]

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

Korrekte Software 7 [27]

Zusicherungen (Assertions)

I Erweiterung 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 Quantoren b1−→b2,b1←→b2,∀v(Z|C|Array).b,∃v(Z|C|Array).b I Formal:

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(Z|C|Array).b| ∃v(Z|C|Array).b

Korrekte Software 8 [27]

(2)

Erfüllung von Zusicherungen

I Wann gilt eine ZusicherungbAssnin einem Zustandσ?

I Auswertung (denotationale Semantik) ergibttrue

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

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

Korrekte Software 9 [27]

Denotationale Semantik

I Denotation fürLexpunter der BelegungI:

Lv[[x]]I={(σ,x)|σ∈Σ}

Lv[[m[a]]]I={(σ,l[i])|(σ,l)∈ Lv[[m]]I,(σ,i)∈ A[[a]]I} Lv[[m.i]]I={(σ,m.i)|(σ,l)∈ Lv[[m]]I}

I Denotation fürAexpunter der BelegungI:

Av[[l]]I={(σ, σ(i)|(σ,i)∈ Lv[[l]]I,iDom(σ)} lLexp

Av[[v]]I={(σ,I(v))} vVar

Korrekte Software 10 [27]

Grenzen der Denotationalen Semantik

I Problem mit selbst-definierten Funktionen:Av[[f(a1, . . . ,an)]]I=?

I Problem mit selbst-definierten Prädikaten:Bv[[p(a1, . . . ,an)]]I=?

I Betrachte Gleichung:

∀vZ.f(v) =t

so dass all intvorkommenden Operationen eine denotationale Semantik haben (undf nicht intvorkommt).

I Dies gibt der Funktionfeine Semantik, nämlich f.a. Programmzuständeσ:

Av[[f(a)]]I(σ) =Av[[t]]I0(σ) mitI0:=I[Av[[a]]I(σ)/v]

I Was ist wenn es mehrere solche Gleichungen gibt? Was ist wenn das nicht terminiert?

=⇒Nur eindeutig definierte, terminierende Definition (konservative Erweiterungen)

=⇒Wird nicht weiter vertieft in dieser Vorlesung; alle im Folgenden verwendete Definition sind derart.

I Analog für Prädikate

Korrekte Software 11 [27]

Erfüllung von Zusicherungen

I Wann gilt eine ZusicherungbAssnin einem Zustandσ?

IAuswertung (denotationale Semantik) ergibttrue

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

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

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

∪ {(σ,0)|für alleiZgilt (σ,0)∈ Bv[[b]]I[i/v]} Analog für∀vC.b,∃vC.b,∀vArray.bund∃vArray.b

Korrekte Software 12 [27]

Erfülltheit von Zusicherungen

Erfülltheit von Zusicherungen

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

Denotation fürZuweisungen

Cv[[m=e]]I={(σ, σ[v/l])|(σ,l)∈ Lv[[m]]I,(σ,v)∈ Av[[e]]I}

Korrekte Software 13 [27]

Formeln ohne Programmvariablen, ohne Arrays, ohne Strukturen

I Eine FormelbAssnistpur, 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 SeiAssncAssndie 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 allebi∈Γ,Γ6=∅

1 falls Γ =∅

Korrekte Software 14 [27]

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

Floyd-Hoare-Tripel mit Kontext

I Sei Γ∈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 16 [27]

(3)

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

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(σ) = 1 (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 18 [27]

Spezifikation von Funktionen

I Verwendung von geschlossenen Formeln zur Spezifikation von Funktionen und Prädikaten als Kontext

I Fakultät:n! aka factorial(n):

factorial(0) == 1

∀nZ.(n>0)−→factorial(n+ 1) == (n+ 1)×factorial(n)

I Pn

i=0aka sumup(n):

sumup(0) == 0

∀xZ.(x≥0)−→sumup(x+ 1) == (x+ 1) + sumup(x)

Korrekte Software 19 [27]

Spezifikation von Prädikaten

I Gerade und Ungerade:

∀nZ.Gerade(n)←→ ∃qZ.n== 2×q

∀nZ.UnGerade(n)←→ ∃qZ.n== 2×q+ 1

I Sortierte Arrays:

∀aArray[Z].sorteduntil(a,0)←→1

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

sorteduntil(a,i)))

Korrekte Software 20 [27]

Das Fakultätsbeispiel

Γ ={Def. von factorial}:

/∗∗ { 1 == f a c t o r i a l ( 0 ) && 0 <= n } ∗/

/∗∗ { 1 == f a c t o r i a l (1− 1 ) && 1 <= 1 && 1−1 <= n } ∗/

p= 1 ;

/∗∗ { p == f a c t o r i a l (1− 1 ) && 1 <= 1 && 1−1 <= n } ∗/

c= 1 ;

/∗∗ { p == f a c t o r i a l ( c−1 ) && 1 <= c && c−1 <= n } ∗/

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

/∗∗ { p == f a c t o r i a l ( c−1) && 1<= c && c−1 <= n && c <= n } ∗/

/∗∗ { p∗c == f a c t o r i a l ( c−1)∗ c && 1 <= c && c <= n } ∗/

/∗∗ { p∗c == f a c t o r i a l ( c ) && 1 <= c && c <= n } ∗/

/∗∗ { p∗c == f a c t o r i a l ( ( c+1)− 1 ) && 1 <= c+1 && ( c+1)−1 <= n } ∗/

p= p∗c ;

/∗∗ { p == f a c t o r i a l ( ( c +1)−1) && 1<= c+1 && ( c+1)−1 <= n } ∗/

c= c +1;

/∗∗ { p == f a c t o r i a l ( c−1) && 1 <= c && c−1 <= n } ∗/

}

/∗∗ { p == f a c t o r i a l ( c−1) && 1<= c && c−1 <= n &&

f a c t o r i a l ( c <= n ) } ∗/

/∗∗ { p == f a c t o r i a l ( c−1) && 1<= c && c−1 <= n && c > n } ∗/

/∗∗ { p == f a c t o r i a l ( c−1) && 1<= c && c−1 == n } ∗/

/∗∗ { p == f a c t o r i a l ( n ) } ∗/

Korrekte Software 21 [27]

Zurück zum Problem

I Man braucht Rechenverfahren, um Γ−→(A0−→A) etc. zu beweisen

I Man braucht Regeln um Wahre Aussagen herleiten zu können

IAnalog zu operationaler Semantik, aber für logisches Schließen

IRegelmenge K (Kalkülregeln) die Formeln aus anderen Formeln ableiten.

Korrekte Software 22 [27]

Natürliches Schließen — Die Regeln

φ ψ

φ&&ψ &&I φ&&ψ φ &&EL

φ&&ψ ψ &&ER [φ]

... ψ φ−→ψ −→I

φ φ−→ψ

ψ −→E

0 φ0

[φ−→0]

... 0

φ raa

Korrekte Software 23 [27]

Die fehlenden Schlußregeln

[φ]

... 0

¬φ ¬I φ ¬φ

0 ¬E

φ φ||ψ||IL

ψ φ||ψ||IR

φ||ψ [φ]

... σ

[ψ]

... σ

σ ||E

φ−→ψ ψ−→φ

φ←→ψ ←→I φ φ←→ψ

ψ ←→EL ψ φ←→ψ

φ ←→ER

Korrekte Software 24 [27]

(4)

Regeln für die Gleichheit

I Reflexivität,Symmetrie,Transitivität:

x==x refl x==y

y==x sym x==y y==z

x==z trans

I Kongruenz:

x1==y1, . . . ,xn==yn f(x1, . . . ,xn) ==f(y1, . . . ,yn)cong

I Substitutivität:

x1=y1, . . . ,xm=ym P(x1, . . . ,xm) P(y1, . . . ,ym) subst

Korrekte Software 25 [27]

Prädikatenlogik mit Induktion

I Sei fix( ˆK) die Menge aller mittels Kalkülregeln ableitbaren Formeln.

I Kist korrekt:

f.a.F∈fix(K) gilt: f.a.σ,I.Bv[[F]]I(σ) = 1.

I Kist vollständig:

f.a.Fmit f.a.σ,I.Bv[[F]]I(σ) = 1 gilt:F∈fix(K).

I Eine LogikList entscheidbar, wenn für alle FormelnFentschieden werden kann obBv[[F]]I(σ) = 1 oderBv[[F]]I(σ) = 0

I Für unsere Belange brauchen wir als Logik Prädikatenlogik mit Gleichheit und Induktion (wegen Rekursion):

IEs gibt für diese Logik korrekte Kalküle, aber keine vollständigen (und sie ist auch nicht entscheidbar).

Korrekte Software 26 [27]

Fahrplan

I Einführung

I Operationale Semantik I Denotationale Semantik

I Äquivalenz der Operationalen und Denotationalen Semantik I Die Floyd-Hoare-Logik

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

I Modellierung und Spezifikation I Verifikationsbedingungen I Vorwärts mit Floyd und Hoare I Funktionen und Prozeduren I Referenzen

I Ausblick und Rückblick

Korrekte Software 27 [27]

Referenzen

ÄHNLICHE DOKUMENTE

For one sin- gle plane wave, the conversion improves the performance in terms direction dependent loudness, source width, and angular mapping accuracy. The improvement compared to

Skizziere an einem Beispiel, welche Zeiger beim Einf¨ ugen eines neuen Elementes in eine bereits vorhandene Liste in welcher Form umgeh¨ angt werden

Die folgenden Fragen beziehen sich immer auf eine einfach verkettete, sortierte Liste oder deren Elemente.. Wie viele Nachfolger hat

[r]

läuft durch die array Elemente setzt das erste array Element auf 500 setzt das zweite array Element auf 1000 setzt das dritte array Element auf 3000. setzt das vierte

 Falls alle Elemente kleiner als ihr rechter Nachbar sind, gib true zurück. 7

Methode kontoEroeffnen in der Klasse Bank public boolean kontoEroeffnen(int kontoNr,.

Teil 1: Schreiben Sie ein Programm, das das innere Produkt zweier Vektoren berechnet, wobei die Berechnung innerhalb einer Schleife erfolgen soll. Der korrekte Programmlauf muss