• Keine Ergebnisse gefunden

7. Übungsblatt Ausgabe:

N/A
N/A
Protected

Academic year: 2022

Aktie "7. Übungsblatt Ausgabe:"

Copied!
1
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

15:56:34 6. Juni 2016 Serge Autexier

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

7. Übungsblatt

Ausgabe: 6.06.16 Abgabe: 16.06.16

7.1 Verification Condition Generation Revisited 15 Punkte

In diesem Übungsblatt werden diewir Funktionen zur Berechnung der Verifikationsbedingungen des C-Ana- lysewerkzeugcataus Übung 5.1 erweitern, um mit Funktionen, Prozeduren, Strukturen, Feldern und Loka- tionen (Lexp) umgehen zu können.

Hierzu sind mehrere Schritte notwendig:

(1) die korrekte Behandlung von Zuweisungen (Lexpauf der linken Seiten statt nur eine Variable, Ersetzung des ganzen Termslstatt der einzelnen Variablen);

(2) die korrekte Behandlung von Funktionsdefinition mitreturnund Spezifikation mit\resultund\old; (3) die korrekte Behandlung von Funktionsaufrufen.

Für Schritt (1) und (2) haben wir das Rahmenwerk erweitert, so dass eine Methode c l a s s Term {

def r e p l a c e ( l h s : Term , rh s : Term ) : Term

bereitsteht, die in dem Term die linke Seite lhs durch die rechte Seiterhsersetzt. Die Methode ersetzt nicht unterhalb von\old.

Die KlasseEnvwird so erweitert, dass die Nachbedingung der momentan analysierten Funktion im Environ- ment gehalten werden kann, so dass beireturndarauf zugegriffen werden kann.

Für Schritt (3) muss das Environment so erweitert werden, dass man einem Funktionsbezeicher die Spezifika- tion (Vor- und Nachbedingung) zuordnen kann.

Folgende Dateien (insrc/test/examples) können als Testdateien für Schritt (1) und (2) genutzt werden (die Ausgabe der Referenzimplementierung ist im Repository zu finden):

test-vc-structs.c,test-vc-fun.c,test-vc.fun-with-arrays.c,test-vc-arrays.c,test-vc-fac.c

7.2 Proving It 5 Punkte

Die meisten Beispiele aus dem vorherigen Aufgabenteil erzeugten triviale Beweisverpflichtungen, lediglich diejenigen für die Funktionenzeround max(austest-vc-fun-with-arrays.c) sind nicht komplett trivial.

Deshalb wollen wir diese jetzt in Isabelle beweisen.

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

(2 Punkte) 2. Beweisen Sie folgendes Hilfslemma in Isabelle:

lemma s t e p : " ( ! j . 0 <= j & j < ( n : : i n t )−1 −−> P ( j ) ) & P ( n−1)

−−> ( ! j . 0 <= j & j < n −−> P ( j ) ) "

(1 Punkte) 3. Beweisen Sie die Beweisverpflichtungen. Einige sind einfach, für andere werden Sie das Lemmastep

benötigen.

(2 Punkte)

1

Referenzen

ÄHNLICHE DOKUMENTE

Die Funktion REDUCE erwartet eine Range und kombiniert alle enthaltenen Zellen mit dem angegebenen binären Operator zu einem Wert (wie die gleichnamige Scala-Funktion); der Range

(i) Spezifizieren Sie eine Funktion count ( a, n, i ) , die zählt, wie oft die Zahl i im Feld a der Größe n vorkommt.. (ii) Spezifizieren Sie ein Prädikat dup ( a, n ) , die prüft,

Dazu vervoll- ständigen Sie in der Datei DenotationalSemantics.scala die Funktionen dsExpr und dsStmt um die Fälle für alle in C0 betrachteten arithmetischen und boolschen Ausdrücke

Die Beweise werden als Annotationen (speziell formatierte Kommentare, die nur für cat und nicht für den Compiler eine Bedeutung tragen) am Programm vermerkt.. 1 zeigt als Beispiel

Ein Hindernis besteht aus einem Polygon (seiner Fläche), und zusätzlich einem Attribut dangerous; das Au- to wiederum besteht auch aus einem Polygon (seiner Fläche), einer Menge

Dann ist ein Hamilton-Zyklus ein Zyklus es, so dass es eine Liste vs von Knoten gibt, die alle Knoten von g enthält, und die von dem Pfad es besucht wird. •

Autonom agierende Roboter dürfen als Grundlage für ihre Steuerung nur die Daten aus dem Radar (welches das direkt sichtbare Umfeld anzeigt) und dem Langstreckenscanner (welches für

Um sicherzustellen, dass dies nicht aufgrund eines Modellierungsfehlers geschieht, soll eine Testfunktion entwickelt werden, die feststellt, ob ein Blockieren von einem