1 / 36

Kapitel 5: Semantik und Verifikation

Kapitel 5: Semantik und Verifikation. Univ.-Prof. Dr. Peter Brezany Institut für Softwarewissenschaft Universität Wien, Liechtensteinstraße 22 1090 Wien Tel. : 01/4277 38825 E-mail : brezany@par.univie.ac.at Sprechstunde: Dienstag, 11.30-12.30.

cecile
Download Presentation

Kapitel 5: Semantik und Verifikation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Kapitel 5: Semantik und Verifikation Univ.-Prof. Dr. Peter Brezany Institut für Softwarewissenschaft Universität Wien, Liechtensteinstraße 22 1090 Wien Tel. : 01/4277 38825 E-mail : brezany@par.univie.ac.at Sprechstunde: Dienstag, 11.30-12.30

  2. Geschichte: Wir haben gerade das Schreiben eines großen Programms (3000 Zeilen) beendet. Außer anderer Sachen, als Zwischenresultat, berechnet das Programm den Quotient q und den Rest r aus dem Ausdruck xy (x – nichtnegatives integer, y – positives integer). Z.B. aus x=7, y=2, das Programm berechnet q=3 und r=1. Unser Programmsegment: ... r:=x; q:=0; while r>y do begin r:=r-y; q:=q+1 end; ... Prolog: Warum Logik? Warum Programme auf Korrektheit prüfen?

  3. Wir fügen einige Ausgabeanweisungen hinzu, um die Berechnungen zu kontrollieren. Wir sind fähig, einige Bedingungen leicht zu erkennen: anfänglich muß y>0 und nach der Beendigung des Programms x = y  q + r. ... write (´divident x =´, x, ´divisor y =´, y); r:=x; q:=0; while r>y do begin r:=r-y; q:=q+1 end; write (´y  q+r =´, y  q+r); ... Wenn sich das Segment in einer Schleife befindet, bekommen wir eine umfangreiche Ausgabe. Wir brauchen die Werte wissen, nur wenn ein Fehler festgestellt ist. Lösung : assertions (Behauptungen). Prolog (2)

  4. ... {y > 0} r:=x; q:=0; while r>y do begin r:=r-y; q:=q+1 end; {x = y  q+r} ... Kontrolle von assertions kann man durch Compileroptionen steuern. Prolog (3)

  5. Dann stellen wir fest, dass die Berechnung endete mit x=6, y=3, q=1, r=3 Wir müssen ändern: r > y => r  y Auch die Resultat-assertion war nicht genug stark. {y > 0} r:=x; q:=0; while r  y do begin r:=r-y; q:=q+1 end; {x = y  q+r  r < y} ... Prolog (4)

  6. Nach einiger Zeit bekommen wir r = -2, weil anfänglich x = -2 ... {0  x  0 < y} r:=x; q:=0; while r  y do begin r:=r-y; q:=q+1 end; {x = y  q+r  0  r < y} ... Prolog (5)

  7. Jetzt machen wir alle asserions so stark als möglich. ... {0  x  0 < y} r:=x; q:=0; {0  r  0 < y  x = y  q+r} while r  y do begin {0  r  0 < y  r  x = y  q+r} r:=r-y; q:=q+1 {0  r  0 < y  x = y  q+r} end; {x = y  q+r  0  r < y} ... Prolog (6)

  8. Semantik und Verifikation • Die Semantik von Programmiersprachen kann auf viele verschiedene Arten spezifiziert werden. Dies schließt unter anderem ein • Operationelle Semantik: Abbildung von Programmen auf Abläufe in einer abstrakten Maschine (z.Bsp. VDL -- Vienna Definition Language). • Axiomatische Semantik (Hoare'sche Semantik): Charakterisierung von Programmen durch Vor- und Nachbedingungen. • wp-Semantik (weakest preconditions) • Denotationelle Semantik: Abbildung von Programmen auf Funktionen. • Methoden für die Verifikation von Programmen hängen eng mit der semantischen Spezifikation der Programmiersprache zusammen.

  9. Definition: Seien Q und R Prädikate, und S ein Programm. Dann hat der Ausdruck {Q} S {R} folgende Bedeutung: Wenn die Ausführung von S in einem Zustand beginnt, der Q erfüllt, dann gelten die folgenden beiden Bedingungen: die Ausführung von S terminiert nach endlich vielen Schritten 2. der nach Ausführung von S erreichte Zustand erfüllt R.  Q wird in diesem Zusammenhang als Vorbedingung (engl. precondition) oder Eingabezusicherung (engl.input assertion) bezeichnet. R heißt die Nachbedingung (engl. postcondition) oder Ausgabezusicherung (engl.output assertion). Die obenstehende Definition liefert keine Aussage über Ausführungen von S, die in einem Zustand beginnen, der Q nicht erfüllt. Diese Definition ist selbst ein Prädikat. Wir wollen in der Regel zeigen, dass sie eine Tautologie ist. Axiomatische Programmspezifikation nach Hoare

  10. Beispiel: vertausche : t:=x; x:=y; y:=t x, y, z, t integer Variablen (t ist „lokal“). { x=X  y=Y } vertausche {x=Y  y=X) ist eine Tautologie und äquivalent zu:  X, Y ( { x=X  y=Y } vertausche {x=Y  y=X} ) Beispiel: { x=X  y=Y } t:=x; { t=X  x=X  y=Y } x:=y; { t=X  x=Y  y=Y } y:=t; { y=X  x=Y }

  11. Beispiel: { x=X } if x<0 then { x=X  x<0 } x:=-x { x:=-X  x>0 } { x = abs(X) } else { x=X  x  0} skip { x=X  x  0 } { x = abs(X) } { x = abs(X) }

  12. Definition: Sei R ein Prädikat und S eine Anweisung. Dann ist wp(S,R) ein Prädikat, das die Menge aller Zustände mit der folgenden Eigenschaft definiert: Die Ausführung von S, ausgehend von einem beliebigen Zustand in wp(S,R), erfüllt die folgenden beiden Bedingungen: 1. die Ausführung von S terminiert nach endlich vielen Schritten 2. der nach Ausführung von S erreichte Zustand erfüllt R.  Der Unterschied zur Definition im Rahmen der Hoare'schen Semantik liegt also darin, dass wp(S,R) durch S und R bestimmt ist und das schwächste Prädikat ist, das die beiden obenstehenden Bedingungen erfüllt. Der Prädikatentransformer wp

  13. Bemerkung: P  Q bedeutet: P ist stärker als Q bzw. Q ist schwächer als P. Je stärker ein Prädikat in diesem Sinne ist, desto stärkeren Restriktionen sind die assoziierten Zustände unterworfen. Zum Beispiel ist das Prädikat x < -100 stärker als das Prädikat x  0. Das stärkste Prädikat ist false (es gibt keinen Zustand, der dieses Prädikat erfüllt); das schwächste ist true (es wird von allen Zuständen erfüllt). {Q} S {R} ist äquivalent zu Q  wp{S,R}. 

  14. wp( i := i+1, i  1 ) = ( i  0 ) Wenn zu Beginn der Ausführung von i := i+1 gilt i  0, dann kann nach Beendigung der Ausführung nicht die Endbedingung i  1 gelten. Die Bedingung i  0 ist die schwächste Vorbedingung, die dies erreicht. Eine stärkere Vorbedingung ist zum Beispiel i  -5. wp ( if x  y then z := x else z := y, z = max(x,y) ) = true wp ( if x  y then z := x else z := y, z = y ) = ( y > x ) wp ( if x  y then z := x else z := y, z = y –1 ) = false wp ( S, true) = Pterm Hier bezeichnet Pterm die Menge aller Zustände, die als Anfangszustände für die Ausführung von S die Terminierung von S garantieren. Beispiele für wp-Semantik

  15. wp(S,false) = false wp(S,Q)  wp(S,R) = wp(S, Q  R) Distributivität der Konjuktion Aus Q  R folgt wp(S,Q)  wp(S,R) Monotonie wp(S,Q)  wp(S,R)  wp(S, Q  R) Distributivität der Disjunktion Bemerkung: Für deterministische Anweisungen S´läßt sich (4) ersetzen durch: 4´. wp(S´,Q)  wp(S´,R) = wp(S´, Q  R) Eigenschaften von wp

  16. Definition einer Programmiersprache durch wp

  17. Der Effekt einer Ausführung von skip ist leer. Definition:wp(skip, R) = R Die Leeranweisung skip

  18. Der Versuch einer Ausführung von abort wird als Fehler interpretiert: ein Abbruch ist erforderlich Definition:wp(abort, R) = F ( F = falsch, false) Bemerkung: Es kann kein S geben, so dass wp(S,R) = W (W = wahr, true) für alle R (Widerspruch zur Eigenschaft 1.). Die Anweisung abort

  19. Definition:wp(“S1; S2“, R) = wp(S1, wp(S2,R)) Beispiele: wp(“skip; skip“, R) = wp(skip, wp(skip, R)) = wp(skip, R) = R wp(“S; abort“, R) = wp(S, wp(abort, R)) = wp(S, F) = F unabhängig von S wp(“S1; S2“, F) = wp(S1, wp(S2,F)) = F Sequenz

  20. x := e x einfache Variable e Ausdruck Neuer Operator cand (conditional and) a b a cand b W W W W F F F W F F F F W U U F U F U W U U F U U U U Zuweisung an einfache Variablen Als Operanden können F, W und U (Undefiniert) auftreten.

  21. Definition: wp(“x := e“, R) = DEF(e) cand Rx[e] DEF(e) : Prädikat, das die Menge aller Zustände bezeichnet in denen e berechnet werden kann. Rx[e]: Ein Prädikat, das aus R dadurch entsteht, dass in R x ersetzt wird durch den Wert von e. Informelle Erläuterung:Nach der Ausführung von x := e wird der Wert von x gleich dem Wert von e sein. R ist daher nach Ausführung der Zuweisung genau dann wahr, wenn Rx[e] vor Ausführung der Zuweisung wahr ist. Zuweisung an einfache Variablen (2)

  22. Sehr oft neigen wir, DEF(e) ganz auszulassen und schreiben nur: wp(“x := e“, R) = Rx[e] weil Zueisungen immer in Kontexten geschrieben werden sollen, in denen Ausdrücke ordentlich evaluiert werden können.

  23. wp( “x := 1“, x = 1) = (x=1)x [1] = (1=1) = W Sei R: x=1 und daher Rx [1] = W Es gilt nicht wp ( “x := 1“, Rx [1] ) = R, also wp( “x := 1“, W) = (x=1) 3. wp( “x := 1“, x  1) = (1  1) = F 4. wp( “x := 1“, y = Y) = (y = Y)x [1] = (y = x  Y = 1)  (y  x  y = Y) 5. wp( “a := a+1“, a  10) = (a  10)a [a+1] = (a+1  10) = (a  9) Zuweisung an einfache Variablen - Beispiele aliasing

  24. 6. wp( “a := 2b+1“, a = 13) = (a = 13)a [2b+1] = (2b+1 = 13) = (b = 6) 7. wp( “x := a  b“, p(x) ) = (b  0 cand p(a  b)) für ein beliebiges einstelliges Prädikatensymbol p. 8. Sei b deklariert gemäß var b : array[1..100] ofinteger. wp( “x := b[i]“, x = b[i] ) = ( 1  i  100 ) cand (b[i] = b[i]) = ( 1  i  100 ) 9. wp( “x := e“, y = c) = (y = c) , falls x  y und c Konstant Zuweisung an einfache Variablen – Beispiele (2)

  25. 10. wp( “t := x; x := y; y := t“, x = X  y = Y) = wp( “t := x; x := y“, wp(“y := t“, x = X  y = Y)) = wp( “t := x; x := y“, x = X  t = Y) = wp( “t := x“, wp(“x := y“, x = X  t = Y)) = wp( “t := x“, y = X  t = Y) = (y = X  x = Y) Zuweisung an einfache Variablen – Beispiele (3)

  26. Wir beschränken uns auf die Betrachtung eindimensionaler Arrays. Ein Array wird durch eine Funktion von seinem Indexbereich in den Wertebereich der Elemente aufgefaßt. Sei b deklariert gemäß: var b : array[0..2] ofinteger. Der Wert der Variablen b ist dann zu jedem Zeitpunkt ein Array, also eine partielle Funktion von Indexbereich {0,1,2} in die Menge der darstellbaren ganzen Zahlen. Eine Zuweisung b[i]:=... bewirkt die Assoziation von b mit einem neuen Array, also einer neuen Funktion. Im folgenden bezeichnet DEFX(b) den Indexbereich von b (im Beispiel die Menge {0,1,2} ). Arrays und Zuweisungen an indizierte Variablen

  27. Arrays und Zuweisungen an indizierte Variablen (2) Definition: Sei b ein Array mit Indextyp X und Elementtyp E. Sei i ein Ausdruck des Typs X und e ein Ausdruck des Typs E. Dann bezeichne b<i,e> den Array b´, der sich von b dadurch unterscheidet, dass die Anwendung von b´auf den Wert i den Wert von e liefert: i = j  e (b<i,e>)[ j ]= i  j  b[j] b´

  28. Arrays und Zuweisungen an indizierte Variablen (3) Beispiel: Sei b[0..2] = (2, 4, 6). Dann gilt: b[1] = 4 b<1,5> [1] = 5 b<0,8> = (8, 4, 6) Die Zuweisung b[i] := e kann daher durch b := b<i,e> modelliert werden. Es kann eine analoge Regel wie für Zuweisungen an einfache Variablen angegeben werden: Definition: wp( “b[i] := e“, R) = i  DEFX(b) cand DEF(e) cand Rb[b<i,e>]

  29. Alternativanweisung Beispiel: if x  0 then z:=x else z:=-x Alternative Notation: if x  0 :: z:=x [] x  0 :: z:=-x fi Allgemeine Form der Alternativanweisung: if B1 :: S1 n [] B2 :: S2 Sei BB := Bi . . . (IF) i=1 [] Bn :: Sn fi n  0, Bi - Boolescher Ausdruck, Si - Anweisung (1in). Jedes Paar Bi :: Si heißt eine bewachte Anweisung (guarded command); Bi heißt Wächter (guard).

  30. Alternativanweisung (2) • Falls alle Wächter total definiert sind, läßt sich die wp • Definition der Alternativanweisung wie folgt formulieren. • wp(IF, R) = i[1:n] (Bi)  i[1:n] (Bi  wp(Si, R)) • Bemerkungen: • Die Alternativanweisung kann eine beliebige Zahl von • Alternativen spezifizieren (vgl. if-then-else, case). • 2. Alle Möglichkeiten müssen explizit erfaßt werden. • 3. Die Alternativanweisung ist eine nichtdetermnistische • Konstruktion. Über die Auswahl eines wahren Wächters • wird nichts ausgesagt.

  31. Alternativanweisung (3) Satz: Sei IF gegeben, und seien Q, R Prädikate mit: (1) Q  BB (2) Q  Bi wp(Si, R) für alle i[1:n] . Dann gilt Q  wp(IF, R).

  32. Die Wiederholungsanweisung do B1 :: S1 [] B2 :: S2 . . . (DO) [] Bn :: Sn od mit n0, Bi :: Si bewachte Anweisung (1in). Informelle Beschreibung: Wiederhole so lange wie möglich: (a) Wähle einen Wächter Bi (1in) aus, dessen Wert W ist. (b) Führe die entsprechende Anweisung Si aus. Bei Terminierung von DO sind alle Wächter falsch. Die Auswahl eines wahren Wächters und die Ausführung des zugehörigen Anweisung heißt die Ausführung einer Iteration der Schleife.

  33. Formale Definition von DO • Seien Hk(R) (k  0) Prädikate, die wie folgt definiert sind: • Hk(R) ist die schärfste Vorbedigung dafür, dass DO nach • höchstens k Iterationen terminiert und die Gültigkeit der • Nachbedingung R garantiert: • H0(R) = BB  R • Hk(R) = H0(R)  wp(IF, Hk-1(R)) k  1 • Wir betrachten (2) für die Werte k=1 und k=2. • H1(R) = H0(R)  wp(IF, H0(R)) 1 Iterationen Terminierung nach 0

  34. Formale Definition von DO (2) H2(R) = H0(R)  wp(IF, H1(R)) = H0(R)  wp(IF, H0(R)  wp(IF, H0(R))) Terminierung nach 0 1 2 Iterationen wp(DO, R) wird nun so definiert, dass es die Menge aller Zustände repräsentiert, in denen die Ausführung von DO nach einer endlichen Zahl von Iterationen mit dem Ausgabe- prädikat R terminiert. Definition: wp(DO, R) =  k0 ( Hk(R) )

  35. Formale Definition von DO (3) • Satz: Sei DO gegeben und für ein Prädikat P gelte: • P  Bi wp(Si, P) 1in Schleifeninvariante • Sei t eine ganzzahlige Funktion und t1 ein neuer Name. • Es gelte: • (2) P  BB  (t > 0) Grenzfunktion • (3) P  Bi wp(“t1 := t; Si“, t < t1) 1in • Dann folgt: P  wp(DO, P BB).

  36. Verifikation einer Schleife: Zusammenfassung • Für die Verifikation einer Schleife mit Invariante P und • Grenzfunktion t sind die folgenden Beweise zu führen: • P gilt vor Beginn der Schleife. • Für alle i mit 1in gilt: {P  Bi} Si {P} • P BB  R • P  BB  (t > 0) • {P  Bi} t1 := t;Si {t < t1} für alle i, 1in.

More Related