• Keine Ergebnisse gefunden

Korrekte Software: Grundlagen und Methoden Vorlesung 11 vom 19.06.17: Vorwärtsrechnung Revisited

N/A
N/A
Protected

Academic year: 2022

Aktie "Korrekte Software: Grundlagen und Methoden Vorlesung 11 vom 19.06.17: Vorwärtsrechnung Revisited"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Korrekte Software: Grundlagen und Methoden Vorlesung 11 vom 19.06.17: Vorwärtsrechnung Revisited

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

14:07:21 2017-07-03 1 [12]

Fahrplan

I Einführung

I Die Floyd-Hoare-Logik I Operationale Semantik I Denotationale Semantik

I Äquivalenz der Operationalen und Denotationalen Semantik I Korrektheit des Hoare-Kalküls

I Vorwärts und Rückwärts mit Floyd und Hoare I Funktionen und Prozeduren

I Referenzen und Speichermodelle I Verifikationsbedingungen Revisited I Vorwärtsrechnung Revisited

I Programmsicherheit und Frame Conditions I Ausblick und Rückblick

Korrekte Software 2 [12]

Es geht Vorwärts.

I Verifikation nach dem Hoare-Kalkül mit Zeigern:

I Viel Schreibarbeit.

I Berechnung von Verifikationsbedingungen:

I Besser, aber:

I Es entstehen viele “unbestimmte” Zwischenzustände, die nicht vereinfacht werden können.

I Daher heute Vorwärtsrechnung:

I Die Vorwärtsregel nach Floyd (für explizite Zustandsprädikate)

I Berechnung derstärksten Nachbedingung

Korrekte Software 3 [12]

Vorwärts?

I Wie kann eine Vorwärtsregel aussehen?

I Alt:

V6∈FV(P)

` {P}x=e{∃V.P[V/x] &&x=e[V/x]}

I Jetzt: Explizite Zustandsprädikate

I Nachbedingung:∃S.P[S/σ] &&σ=upd(S,x,e#)

ISist der Vorzustand

IAber:xundemüssen im VorzustandSausgewertet werden!

I Daher nötig: Zustand als zusätzlicher Parameter für−und−#

Korrekte Software 4 [12]

Formal: Konversion in Zustandsprädikate

(−)s:StLexpLexp vs=v (vVariable) l.ids=ls.id

l[e]s=ls[e#s]

∗ls=ls#

x=xσ

(−)#s :StAexpAexp e#s =read(s,es) (e∈Lexp) n#s =n

vs#=v (vlogische Variable)

&e#s =es (e1+e2)#s =e1#

s +e2# s

\result#s =\result

\old(e)#s =eρ# e#=eσ# I σaktueller Zustand

I ρinitialer Zustand der gerade analysierten Funktion.

Korrekte Software 5 [12]

Vorwärts!

I Alternative Zuweisungsregel (nach Floyd):

S6∈FV(P)

` {P}x=e{∃S.P[S/σ] &&σ==upd(S,xS,eS#)}

IFV(P) sind diefreienVariablen inP.

I Jetzt ist die Vorbedingung offen — Regel kann vorwärts angewandt werden

I Gilt auch für die anderen Regeln

Korrekte Software 6 [12]

Das übliche Beispiel I

v o i df o o ( ) { i n t x , y ,∗z ;

/∗∗{ True } ∗/

z= &x ;

/∗∗\ e x i s t s S .s= upd ( s ,z+_S , &x#_S )∗/

/∗∗\ e x i s t s S .s= upd ( S , z , x )∗/

x= 0 ;

/∗∗\ e x i s t s S ’ .( \ e x i s t s S . s= upd ( S , z , x ) ) [ S ’ / s ] && \ s i g m a= upd ( S ’ , x+_S ’ , 0#_S ’ )∗/

/∗∗\ e x i s t s S ’ .( \ e x i s t s S . S ’= upd ( S , z , x ) ) && \ s i g m a= upd ( S ’ , x ,0 )∗/

/∗With \ e x i s t s x . x= t && P ( x ) <==> P ( t ) we g e t :∗/

/∗∗\ e x i s t s S . \ s i g m a= upd ( upd ( S , z , x ) , x ,0 )∗/

∗z= 5 ;

/∗∗\ e x i s t s S ’ .( \ e x i s t s S . S ’= upd ( upd ( S , z , x ) , x , 0 ) ) && \ s i g m a= upd ( S ’ , (∗z )+_S ’ , 5#_S ’ ) ∗(/

/∗∗\ e x i s t s S . \ s i g m a= upd ( upd ( upd ( S , z , x ) , x , 0 ) ,

r e a d ( upd ( upd ( S , z , x ) , x , 0 ) , z ) , /∗t h i s r e w r i t e s t o x 5 )∗/

/∗∗\ e x i s t s S . \ s i g m a= upd ( upd ( upd ( S , z , x ) , x , 0 ) , x ,5 )∗/

/∗∗\ e x i s t s S . \ s i g m a= upd ( upd ( S , z , x ) , x ,5 )∗/

y= x ;

/∗∗\ e x i s t s S ’ .( \ e x i s t s S . S ’= upd ( upd ( S , z , x ) , x , 5 ) ) && \ s i g m a= upd ( S ’ , y+_S ’ , x#_S ’ )∗/

/∗∗\ e x i s t s S . \ s i g m a= upd ( upd ( upd ( S , z , x ) , x , 5 ) , y ,

r e a d ( upd ( upd ( S , z , x ) , x , 5 ) , x ) ) /∗t h i s r e w r i t e s t o 5∗/

/∗∗\ e x i s t s S . \ s i g m a= upd ( upd ( upd ( S , z , x ) , x , 5 ) , y ,5 )∗/

/∗∗\ e x i s t s S . \ s i g m a= upd ( upd ( upd ( S , z , x ) , x , 5 ) , y ,5 ) && r e a d ( \ s i g m a , y ) == 5∗/

}

Korrekte Software 7 [12]

Berechnung der stärksten Nachbedingung

I Analog zur schwächsten Vorbedingung berechnen wir die approximative stärkste Nachbedingungasp(Γ,P,c) zusammen mit einer Menge vonVerifikationsbedingungensvc(Γ,P,c)

I Es gilt:

^

pi∈svc(Γ,P,c)

∀σ.pi=⇒|={P}c{asp(Γ,P,c)|asp(Γ,P,c)}

I Zu beachten:

Ireturnbeendet den Kontrollfluss

IBei Funktionsaufruf: Auswertung der Argumente imVorzustand

Korrekte Software 8 [12]

(2)

Berechnung von awp und wvc

I Ausgehend von Spezifikation mit Vor- und Nachbedingung:

asp(Γ,f(x1, . . . ,xn)/** prePpostQ*/{ds blk})def= asp(Γ0,P#,blk,Q#) svc(Γ,f(x1, . . . ,xn)/** prePpostQ*/{ds blk})def= svc(Γ0,P#,blk,Q#) Γ0= Γ[fdef 7→ ∀x1, . . . ,xn.(P,Q)]

I Für diese Formmussjede Funktion mit einemreturnenden.

I Die Verifikationsbedingungen sind implizit überσundρallquantifiziert

Korrekte Software 9 [12]

Approximative stärkste Nachbedingung

asp(Γ,P,{ },Q) =def P

asp(Γ,P,x=e,Q) =def ∃S.P[S/σ] &&σ==upd(S,xS,e#S) asp(Γ,P,{return e; cs},Q) =def P

asp(Γ,P,{return; cs},Q) =def P

asp(Γ,P,{c; cs},Q) =def asp(Γ,asp(Γ,P,c,Q),cs,Q) asp(Γ,P,if(b)c0 elsec1,P,Q) =def asp(Γ,b#&&P,c0,Q)

||asp(Γ,!(b#) &&P,c1,Q) asp(Γ,P,/∗∗{q}∗/,Q) =def q#

asp(Γ,P,while(b)/∗∗inv i∗/c,Q)def=i#&& !b#

asp(Γ,P,f(e1, . . . ,en),Q) =def ∃S.P[S/σ] &&R2[(ei)#S/xi] asp(Γ,P,l=f(e1, . . . ,en),Q) =def ∃S. P[S/σ]&&

R2[(ei)#S/xi][lS/\result]

mit Γ(f) =∀x1, . . . ,xn.(R1,R2)

Korrekte Software 10 [12]

Verifikationsbedingungen

svc(Γ,P,{ },Q) def= ∅ svc(Γ,P,x=e,Q) def= ∅

svc(Γ,P,{return e;cs},Q) def= {P=⇒Q[e#/\result]}

svc(Γ,P,{return;cs},Q) def= {P=⇒Q}

svc(Γ,P,{c cs},Q) def= svc(Γ,P,c,Q)

svc(Γ,asp(Γ,P,c,Q),{cs},Q) svc(Γ,P,if(b)c0 elsec1,Q) def= svc(Γ,b#&&P,c0,Q)

∪svc(!(b#) &&P,c1,Q) svc(Γ,P,/∗∗{q}∗/,Q) def= {P=⇒q#}

svc(P,whileb/∗∗inv i∗/c,Q) def= {P=⇒i#}

∪ {asp(Γ,b#&&i#,c,Q) =i#}

∪svc(Γ,b#&&i#,c,Q) svc(Γ,P,f(e1, . . . ,en),Q) def= {P=⇒R1[ei#/xi]}

svc(Γ,P,l=f(e1, . . . ,en),Q) def= {P=⇒R1[ei#/xi][l/\result]}

mit Γ(f) =∀x1, . . . ,xn.(R1,R2)

Korrekte Software 11 [12]

Beispiel: findmax revisited

#i n c l u d e < l i m i t s . h>

i n t f i n d m a x (i n t a [ ] , i n t a _ l e n ) /∗ ∗ p r e \ a r r a y ( a , a _ l e n ) ; ∗/

/∗ ∗ p o s t \ f o r a l l i n t i ; 0 <= i && i < a _ l e n

−−> a [ i ] <= \ r e s u l t ; ∗/

{

i n t x ; i n t j ; x= INT_MIN ; j= 0 ; w h i l e ( j < a _ l e n )

/∗ /\∗∗ ∗/ i n v \ f o r a l l i n t i ; 0 <= i && i < j−−> a [ i ]<= x && j <= 1 0 ; ∗/

{

i f ( a [ j ]> x ) x= a [ j ] ; j= j +1;

} r e t u r n x ; }

Korrekte Software 12 [12]

Referenzen

ÄHNLICHE DOKUMENTE

[r]

3 Beweise innerhalb der Schleife

aber mit erheblichen Konsequenzen: Substitution. Korrekte Software

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

−→ Genauere Unterscheidung in der Semantik Kontrollstrukturen:. I switch −→ Ist im allgemeinen Fall

I Die Regeln des Floyd-Hoare-Kalküls lassen sich, weitgehend schematisch, rückwärts (vom Ende her) anwenden — nur Schleifen machen Probleme?. I Wir annotieren daher die Invarianten

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