Sommersemester 2008 http://info2tut.blogspot.com 29. April 2007 Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Quellennachweis & Dank an: Joachim Wilke, Susanne Dinkler, Bernhard Müller, Michael Rother, Max Kramer
Übersicht 1 Organisatorisches 2 Und nochmal... 3 Invarianten 4 WP-Kalkül 5 Entwicklungsumgebung 6 Abschluss
1 Organisatorisches 2 Und nochmal... 3 Invarianten 4 WP-Kalkül 5 Entwicklungsumgebung 6 Abschluss
Beachte: Abgabe des ersten Übungsblattes ist am Freitag 02.05.2008 13:00 Uhr. Die korrigierten Blätter gibt es in der Regel am Dienstag zurück. Jede Praxisaufgabe muss per Email angegeben werden info2-tutor@gmx.de Vergesst nicht die 2 - Wochen - Regel!
1 Organisatorisches 2 Und nochmal... 3 Invarianten 4 WP-Kalkül 5 Entwicklungsumgebung 6 Abschluss
Und nochmal... Das UML Aktivitätdiagramm enthält... 1... Aktivitäten. 2... eine Systemgrenze 3... Anwender. Assoziationen... 1... ohne Kardinalitäten haben implizit eine Kardinalität von 1. 2... müssen mit Richtungspfeilen in Leserichtung versehen werden. 3... werden mit einer Linie dargestellt..
Und nochmal... Das UML Aktivitätdiagramm enthält... 1... Aktivitäten. 2... eine Systemgrenze 3... Anwender. Assoziationen... 1... ohne Kardinalitäten haben implizit eine Kardinalität von 1. 2... müssen mit Richtungspfeilen in Leserichtung versehen werden. 3... werden mit einer Linie dargestellt..
Und nochmal... Das UML Aktivitätdiagramm enthält... 1... Aktivitäten. 2... eine Systemgrenze 3... Anwender. Assoziationen... 1... ohne Kardinalitäten haben implizit eine Kardinalität von 1. 2... müssen mit Richtungspfeilen in Leserichtung versehen werden. 3... werden mit einer Linie dargestellt..
1 Organisatorisches 2 Und nochmal... 3 Invarianten 4 WP-Kalkül 5 Entwicklungsumgebung 6 Abschluss
(Schleifen-)Invarianten Sinn und Zweck Aussagen, die am Anfang und am Ende eines (Schleifen-)Durchlaufs gelten Helfen, die Korrektheit eines Programmes zu beweisen Beweis durch vollständige Induktion *juhu*
LCM - Aufgabe 1 funktion LCM (a, b) // LCM = kgv 2 i := 1; 3 z := b; 4 solange ( z mod a) > 0 5 z := z + b; 6 i := i + 1; 7 antworte z; Aufgaben Ist z = i b eine Invariante für die solange-schleife? Gilt nach jedem Schleifendurchlauf die Invariante LCM(a, b) = LCM(a, z)? Wie hoch ist die Anzahl der Additionen im schlimmsten Fall und welche Eigenschaft haben die Paare (a,b) dann?
LCM - Lösung Induktion über die Anzahl der Schleifendurchläufe n IA: n = 0 : z 0 = b = 1 b = i 0 b (Zeile 2) IV: n N : z n = i n b IS: n n + 1 Z4 z n+1 = z n + b IV = i n b + b = (i n + 1) b Z5 = i n+1 b Wir finden ein Gegenbeispiel a = 3, b = 5 so dass LCM(a, b) = LCM(a, z 0 ) = LCM(3, 5) = 15 aber nach dem ersten Druchlauf gilt: LCM(3, z 1 ) = LCM(3, 10) = 30 LCM(a, b) Im Worst-Case LCM(a, b) = a b wird die Schleife a-mal durchlaufen und es finden a Additionen statt. a und b sind teilerfremd.
1 Organisatorisches 2 Und nochmal... 3 Invarianten 4 WP-Kalkül 5 Entwicklungsumgebung 6 Abschluss
Hilfsdefinition: Spezifikation von Programmen Eine Programm-Spezifikation besteht aus Vorbedingung Q, Nachbedingung R und dem eigentlichen Programmcode P. Wird trotz Einhaltung der Vorbedingung die Nachbedingung nach Ablauf des Programms nicht immer eingehalten, ist die Spezifikation inkorrekt oder das Programm fehlerhaft. Schreibweise: {Vorbedingung}Programmcode{Nachbedingung} oder {Q}P{R}. Schreibweise jedoch für uns vorerst irrelevant.
WP-Kalkül: Einführung Ein Kalkül ist ein Verfahren zur Verifikation eines imperativen Programmcodes. wp steht für weakest precondition, also die schwächste Vorbedingung. Überprüfung der Korrektheit geschieht durch Rückwärtsanalyse des Programmcodes. Ausgehend von der Nachbedingung wird geprüft, ob diese durch die Vorbedingung und den Programmcode garantiert wird. Es existieren auch Kalküle die eine Vorwärtsanalyse durchführen.
WP-Kalkül: Aufbau Schreibweise wp( [Programmcode], [Nachbedingung]) = [schwächste Vorbedingung] Die [schwächste Vorbedingung] entsteht hauptsächlich durch einfache Termersetzung vom [Programmcode] in die [Nachbedingung]. Sie gibt größtmögliche Menge Daten an, welche (nach Ablauf des Programmcodes) die [Nachbedingung] erfüllen. Jede Untermenge davon erfüllt später die [Nachbedingung] auch.
WP-Kalkül: Aufbau Schreibweise wp( [Programmcode], [Nachbedingung]) = [schwächste Vorbedingung] Der Programmcode wird immer in Hochkommata angeben und kann Zusweisungen, Bedingungen oder Schleifen enthalten. Wird kein Code ausgeführt setht im Programmcode - Teil leer. Beispiel: x := 3
WP-Kalkül: Aufbau Schreibweise wp( [Programmcode], [Nachbedingung]) = [schwächste Vorbedingung] Die [Nachbedingung] wird ohne Hochkommata angeben und kann Vergleiche, logische Verknüpfungen oder logische Werte enthalten. Logische Werte sind true und false, logische Verknüpfungen sind (und) und (oder). Ist true (false) die einzige [Nachbedingung], so ist die [schwächste Vorbedingung] true (false). Beispiel: x < 3 y > 27
WP-Kalkül: Aufbau Schreibweise wp( [Programmcode], [Nachbedingung]) = [schwächste Vorbedingung] Die [schwächste Vorbedingung] kann ebenfalls Vergleiche, logische Verknüpfungen oder logische Werte enthalten. Ist sie true (false) erfüllen alle möglichen Daten später die [Nachbedingung]. Beispiel: x > 0
WP-Kalkül: einige Regeln einfache Zuweisung wp( x := x + 3, x < 5) = {x + 3 < 5} = {x < 2} Termersetzung der Zuweisung (rechte Seite) in alle Vorkommen der Nachbedingung Ausnahme: Durch All- oder Existenzquantoren gebundene Variablen der Nachbedingung
WP-Kalkül: einige Regeln mehrere Anweisung wp( x := x + 3;x := 0, x < 5) = wp( x := x + 3, wp( x := 0,x < 5)) Rückführung auf einfache Anweisung durch Ausklammerung von rechts nach links Reihenfolge wichtig!
WP-Kalkül: einige Regeln Vereinfachung der Nachbedingung wp( x := x + 3, 0 < 5) = wp( x := x + 3, true) = {true} Widersprüche und Tautlogien elimieren vereinfachte Nachbedingungen können auch hilfreich sein
WP-Kalkül: einige Regeln Vereinfachung gleicher Anweisungsteile wp( x := x + 3;y := 0, x < 5) wp( x := x + 3;y := 0, y < 3) = wp( x := x + 3;y := 0, (x < 5) (y < 3)) Bei gleichem Programm lassen sich die Nachbedingungen zu einer zusammenfassen.
WP-Kalkül: einige Regeln if - Anweisung wp( if (y > 0) then x := x + 3, x < 5) = ((y > 0) wp( x := x + 3, (x < 5))) ((y <= 0) wp( leer, (x < 5))) Betrachtung beider Fälle (Bedingung erfüllt bzw. nicht erfüllt) logische ODER-Verknüpfung zwischen true - und false - Zweig Reduktion der Bedingung im wp-kalkül auf den then - bzw. else - Zweig.
Einstiegsaufgaben wp( x := x-3;, x > 3) wp( x := x-3;, y < 5) wp( x := x-3;, y : y 5) wp( if (x > 3)then y++; else y--;, y = 2)
Einstiegsaufgaben wp( x := x-3;, x > 3) = {x 3 > 3} = {x > 6} wp( x := x-3;, y < 5) wp( x := x-3;, y : y 5) wp( if (x > 3)then y++; else y--;, y = 2)
Einstiegsaufgaben wp( x := x-3;, x > 3) = {x 3 > 3} = {x > 6} wp( x := x-3;, y < 5) = {y < 5} wp( x := x-3;, y : y 5) wp( if (x > 3)then y++; else y--;, y = 2)
Einstiegsaufgaben wp( x := x-3;, x > 3) = {x 3 > 3} = {x > 6} wp( x := x-3;, y < 5) = {y < 5} wp( x := x-3;, y : y 5) wp(x := x-3;, true) = {true} wp( if (x > 3)then y++; else y--;, y = 2)
Einstiegsaufgaben wp( x := x-3;, x > 3) = {x 3 > 3} = {x > 6} wp( x := x-3;, y < 5) = {y < 5} wp( x := x-3;, y : y 5) wp(x := x-3;, true) = {true} wp( if (x > 3)then y++; else y--;, y = 2) = {(x > 3) wp(y++;, y = 2) (x > 3) wp(y--;, y = 2)} = {(x > 3) (y = 1) (x 3) (y = 3)}
1 Organisatorisches 2 Und nochmal... 3 Invarianten 4 WP-Kalkül 5 Entwicklungsumgebung 6 Abschluss
IDEs Wozu? Die Programmieraufgaben werden anspruchsvoller und umfangreicher Gerade bei Verwendung des Collection-Frameworks ist eine IDE hilfreich: Autocompletion Übersicht durch Strukturierung und Färbung Debugging integrierte Dokumentationsanzeige Als Klausurvorbereitung zunächst ohne dann mit IDE programmieren zu empfehlen: Eclipse: www.eclipse.org zur besseren Übersicht: www.easyeclipse.org evtl. intuitiver, ähnlicher Funktionsumfang: Netbeans, www.netbeans.org
1 Organisatorisches 2 Und nochmal... 3 Invarianten 4 WP-Kalkül 5 Entwicklungsumgebung 6 Abschluss
Zum Schluss... Was ihr nun wissen solltet! Wie beweise ich eine Schleifeninvariante?
Zum Schluss... Was ihr nun wissen solltet! Wie beweise ich eine Schleifeninvariante? Was ist eine Spezifikation eines Programmes?
Zum Schluss... Was ihr nun wissen solltet! Wie beweise ich eine Schleifeninvariante? Was ist eine Spezifikation eines Programmes? Was ist das wp-kalkül?
Zum Schluss... Was ihr nun wissen solltet! Wie beweise ich eine Schleifeninvariante? Was ist eine Spezifikation eines Programmes? Was ist das wp-kalkül? Wie berechne ich es?
Zum Schluss... Was ihr nun wissen solltet! Wie beweise ich eine Schleifeninvariante? Was ist eine Spezifikation eines Programmes? Was ist das wp-kalkül? Wie berechne ich es? Wann und wo ist das erste Übungsblatt abzugeben? Ihr wisst was nicht? Stellt jetzt Fragen!