• Keine Ergebnisse gefunden

5. Übungsblatt Ausgabe:

N/A
N/A
Protected

Academic year: 2022

Aktie "5. Übungsblatt Ausgabe:"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Serge Autexier Christoph Lüth Korrekte Software: Grundlagen und Methoden SoSe 2016

5. Übungsblatt

Ausgabe: 19.05.16 Abgabe: 30.05.16

5.1 Verification Condition Generation 10 Punkte

In diesem Übungsblatt wollen wir das C-Analysewerkzeugcatum eine Funktion zur Berechnung der Verifi- kationsbedingungen erweitern, in Fachkreisen auch alsverification condition generation (vcg)bekannt.

Wir konzentrieren uns erst einmal auf die Verifikationsbedingungen aus der schwächsten Vorbedingung. Die Eingabe ist dabei immer ein C-Programm, bei dem Funktionen mit Vor- und Nachbedingungen (erste optional) annotiert sind, und zwingend jede Schleife mit einer Invariante. Hier ist das notorische Beispiel:

i n t f a c (i n t n ) /∗∗ pre 1 <= n ;

p o s t p == f a c u l t y ( n ) ;

∗/

{ i n t p ; i n t c ; p= 1 ; c= 1 ;

while ( c <= n )

/∗∗ inv p == f a c u l t y ( c− 1 ) && c <= n + 1 ; ∗/ { p= p∗c ;

c= c + 1 ; } }

Unser Analysewerkzeug nimmt ein annotiertes Programm, und berechnet daraus die Verifikationsbedingun- gen mit Hilfe der approximierten schwächsten Vorbedingung (awp). Wir könnten dazu zwei Funktionen schrei- ben

def wvc ( c t x t : Env ) ( s : Stmt , p o s t : Term ) : L i s t [ Term ] def awp ( c t x t : Env ) ( s : Stmt , p o s t : Term ) : Term

die exakt den in der Vorlesung vorgestellten entsprechen (7 Punkte); aus Effizienzgründen, damit das Pro- gramm nicht zweimal traversiert werden muss, bietet es sich an, beide ineinerFunktion zusammenzufassen (10 Punkte):

def awpvc ( c t x t : Env ) ( s : Stmt , p o s t : Term ) : ( Term , L i s t [ Term ] ) Sie finden den entsprechenden Rahmen im git-Repository der Veranstaltung.

Die VCG ist in der KlasseWeakestPreconditionzu implementieren.

1

(2)

14:01:17 19. Mai 2016

5.2 Now Prove It! 10 Punkte

Das Werkzeug kann aus der Kommandozeile heraus aufgerufen werden. Die so erzeugten Beweisziele wollen wir jetzt in Isabelle beweisen:

1. Übersetzen Sie die Beweisverpflichtungen in eine Isabelle-Theorie mit sechs Beweiszielen.

(2 Punkte) 2. Zeigen Sie die Beweisverpflichtungen der Funktionquotrem(Isabelle bringt alle benötigten arithmeti-

schen Funktionen bereits mit).

(3 Punkt) 3. Um die Beweisverpflichtugen für faczu zeigen, definieren Sie eine Funktion faculty auf natürlichen

Zahlen, welche rekursiv die Fakultät berechnet, und zeigen Sie folgendes Lemma:

(2 Punkte) fun f a c u l t y : : " nat => nat "

where . . .

lemma fac_unwind : " 0 < m ==> f a c u l t y (m) = m∗( f a c u l t y (m−1)) "

. . .

4. Zeigen Sie jetzt die Beweisverpflichtungen für fac. Bei der zweiten Beweisverpflichtung werden Sie bemerken, dass die Invariante nicht stark genug ist. Stärken Sie die Invariante, so dass Sie auch die zweite Beweisverpflichtung zeigen können.

(3 Punkte) Hinweise:

• Wenn einfache Beweise in Isabelle nicht funktionieren liegt das meist daran, dass Isabelle den falschen Typen ableitet. Mit einerDeklarationder Form

d e c l a r e [ [ show_types ] ]

kann Isabelle dazu gebracht werden, die Typen aller Variablen anzuzeigen.

• Der Beweis der dritten Beweisverpflichtung für die Fakultät ist langwieriger als die anderen. Hier ist es hilfreich, ein Lemma zu zeigen:

lemma aux : " [| ( c : : nat ) <= n+1 ; ~( c <= n ) |] ==> c−1 = n "

Ferner ist eventuell ein (mitsubgoal_tac "...") manuell eingefügtes Beweisziel notwendig.

2

Referenzen

ÄHNLICHE DOKUMENTE

In einem austenitischen Stahl betrage der Abstand der Verankerungspunkte auf ei- ner Versetzungslinie L = 1 µm. a) Wie groß ist die Schubspannung τ FR , bei der die

Nehmen Sie dazu an, dass die Schleife zun¨ achst in der xz-Ebene liegt und mit Radius R um den Ursprung zentriert

Wenn bei neueFiliale eine Filiale mit einem Namen hinzugefügt wird, der schon irgendwo im ersten Ar- gument enthalten ist 2 , dann soll der erste Bezirk unverändert

Serge Autexier Christoph Lüth Korrekte Software: Grundlagen und Methoden SoSe

Nachdem der Pump Controller gestartet wurde, wird irgendwann die Pumpe gestoppt (stopPump).. Wenn die Aussage Emergency = FALSE wahr ist, wird immer im nächsten Schritt der Sequenz

• Intelligente Cursor: Der Cursor ( type Cursor = Int ) des Benutzers bewegt sich in der aktuellen Ver- sion nicht, wenn jemand anders eine Änderung macht, die die Länge

Für ihr Lager wünscht sich Barbara noch eine Funktion, die beim Backen überprüft, ob sie alle Zutaten für ihr Brot im Lager und das diese Zutaten auch direkt aus dem Lager

Serge Autexier Christoph Lüth Korrekte Software: Grundlagen und Methoden SoSe