Prof. Dr. Michael Philippsen / Prof. Dr. Herbert Stoyan

Größe: px
Ab Seite anzeigen:

Download "Prof. Dr. Michael Philippsen / Prof. Dr. Herbert Stoyan"

Transkript

1 Algorithmik 1 Prof. Dr. Michael Philippsen / Prof. Dr. Herbert Stoyan Friedrich-Alexander-Universität Erlangen-Nürnberg Informatik 2/8 Programmiersysteme / Künstliche Intelligenz

2 Kapitel 11 - Korrektes Programmieren 11.1 Fehlerquellen 11.2 Verifikation 11.3 wp-kalkül 11.4 Schleifeninvarianten 11.5 Beispiel Handy aus! Algorithmik 1, WS 2004/05, Folie 11-2

3 Algorithmenwahl Dienst Algorithmen und Datenstrukturen Zuverlässigkeit Korrektheit Robustheit Aufwand Skalierbarkeit Algorithmik 1, WS 2004/05, Folie 11-3

4 11.1 Fehlerquellen Anforderungsdefinition korrekte Anforderungen Ideen, Wünsche, Bedürfnisse fehlerhafte Anforderungen Spezifikationsfehler Systemspezifikation korrekte Spezifikation induzierte Fehler aus Anforderungen Entwurf korrekter Entwurf Entwurfsfehler induzierte Fehler aus Anforderungen Spezifikation Verifikation Realisierung korrektes Programm Implementierungsfehler induzierte Fehler aus Anforderungen Spezifikation Entwurf Testen korrektes Verhalten korrektes korrigierte Programm Fehler bekannte unkorrigierte Fehler unbekannte Fehler Programm mit bekannten und unbekannten Mängeln Algorithmik 1, WS 2004/05, Folie 11-4

5 11.1 Fehlerquellen Regel: Je später ein Fehler in der Programmentwicklung aufgedeckt wird, desto (vielfach) teurer wird seine Behebung. Daher Ziel: Feststellung der Richtigkeit eines Programms schon ab Anforderungsdefinition und speziell bei der Realisierung. Ansatz: Verifikation: formale Korrektheitsüberlegungen schon bei der Realisierung anstellen. Mathematischer Beweis, dass (formale) Spezifikation erfüllt wird. Beachte: Entdeckung von Anforderungsfehlern im Allgemeinen nicht möglich. Wirtschaftlichkeitskonflikt: Formale Fehlerüberprüfung während der Realisierung ist meist sehr aufwändig (wenn nicht z. T. unentscheidbar), daher muss man Aufwand und späteren Gewinn gegeneinander abwägen. Algorithmik 1, WS 2004/05, Folie 11-5

6 1.4 Algorithmus Euklids Algorithmus zur Berechnung von ggt(a,b): Falls a=b, dann gilt: ggt(a,b)=a; //1. Fall Falls a<b, dann wende den Algorithmus ggt auf (a, b-a) an; //2. Fall Falls b<a, dann wende den Algorithmus ggt auf (a-b,b) an. //3. Fall Berechne ggt(18,12): 3. Fall berechne ggt(18-12,12) = ggt(6,12) 2. Fall berechne ggt(6,12-6) = ggt(6,6) 1. Fall Resultat ist 6. Berechne ggt(-18,-12): 2. Fall berechne ggt(-18,-12-18) = ggt(-18,-30) 3. Fall berechne ggt(-18-30,-30) = ggt(-48,-30) 2. Fall berechne ggt(-48,-30-48) = ggt(-48,-78) Algorithmus terminiert = nach endlich vielen Schritten ist Schluss Bei Eingabe a<0,b<0 und a b terminiert der Algorithmus nicht. Beweis? Eine Animation ist auf der Web-Seite zu finden. Algorithmik 1, WS 2004/05, Wiederholungsfolie

7 11.2 Verifikation Zusicherungen: Aussagen über Daten Beim Schreibtischlauf werden konkrete Eingaben durchgerechnet. Der Anfangszustand wird dabei durch die Anweisungen im Programm in den Endzustand überführt. Bei einer formalen Vorgehensweise zum Beweis der Korrektheit müssen aber alle möglichen Eingabedaten betrachtet werden und es muss überprüft werden, ob die gewünschte Ausgabe immer erreicht wird. Statt einer Aufzählung dieser Eingabewerte bzw. Ausgabewerte wird eine Beschreibung derselben durch Prädikate P(v) verwendet. Beispiele: P(v) : v = <Wert> //Zustand, Belegung der Variable v P(v) : Variable v liegt im Intervall [a, b]" P(v) : a v b Algorithmik 1, WS 2004/05, Folie 11-7 / H. Stoyan

8 11.2 Verifikation Zusicherungen ( assertions ) Die Wirkung eines Programms oder Codestücks kann durch die Angabe von Prädikaten zu Beginn und am Ende des Codes spezifiziert werden. Zusicherungen sind prädikatenlogische Aussagen über die Werte der Programmvariablen an den Stellen im Programm, an denen die jeweiligen Zusicherungen stehen. Eine Zusicherung vor einer bestimmten Anweisungsfolge wird in Bezug auf diese Vorbedingung ( pre-condition ) genannt. Entsprechend ist eine Nachbedingung ( post-condition ) eine Zusicherung nach einer Anweisungsfolge. Vorbedingung und Nachbedingung des gesamten Programms bilden eine prädikatenlogische Spezifikation. Algorithmik 1, WS 2004/05, Folie 11-8

9 11.2 Verifikation Beispiele für Spezifikationen Funktionsspezifikation f:x Y, y=f(x): Vorbedingung: P = {x=x 0, x0x} Nachbedingung: Q = {y=f(x 0 ), y0y} Spezifikation = (P,Q) ADT Axiom pop(push(k,x)) = k Kellerzustand = alle Elemente + Reihenfolge Vorbedingung: P = {k ist ein Keller mit Zustand k 0, x ist vom Elementtyp T des Kellers} Nachbedingung: Q = {Nach Ausführung von k :=push(k,x) und pop(k ) gilt k = k 0 } Spezifikation = (P,Q) Spezifikationen nur für funktionales Verhalten. Nicht-funktionale Eigenschaften ( nette Benutzeroberfläche, maximale zulässige Programmlaufzeit, ) gehen nicht aus der Spezifikation hervor. Algorithmik 1, WS 2004/05, Folie 11-9

10 11.2 Verifikation Ansatz des Schreibtischlaufs : y = 2 x := y 2 x=4, y=2 genaue Vorbedingung Anweisungsfolge genaue Nachbedingung Aussage: Wenn vor dem Code y=2 wahr ist, dann ist nach Ausführung des Codes x=4 (und y=2) wahr Allgemeinerer Ansatz: y > 1 x := y 2 x > y > 1 Algorithmik 1, WS 2004/05, Folie schwächere Vorbedingung Anweisungsfolge schwächere Nachbedingung Aussage: Wenn vor dem Code y>1 wahr ist, dann ist nach Ausführung des Codes x>y>1 wahr

11 11.2 Verifikation Verifikation von imperativen Programmen Eine Verifikation prüft, ob ein Programm bestimmte Zusicherungen erfüllt, d.h. ob die Nachbedingung Q einer Anweisungsfolge A erfüllt ist, wenn diese im Falle einer erfüllten Vorbedingung P abgearbeitet worden ist. Partielle Korrektheit: Wenn die Ausführung von A in einem Zustand, der P genügt, beginnt und falls die Ausführung von A nach endlich vielen Schritten terminiert, dann erfüllt der erreichte Zustand Q. Schreibweise: P {A} Q Totale Korrektheit verlangt außerdem den Beweis der Terminierung. Schreibweise: {P} A {Q} Ganzer Ausdruck P {A} Q ist logische Formel, die wahr oder falsch sein kann Algorithmik 1, WS 2004/05, Folie / H. Stoyan

12 11.2 Verifikation Beispiele: {P: i beliebig} i=7 {Q: i=7} Nach endlich vielen (hier: einem) Schritt terminiert die Anweisung. Wenn vor Ausführung der Zustand P erfüllt war, dann ist nach Ausführung der Zustand Q erfüllt. {P: i beliebig, j beliebig} j=2; i=7 {Q: i=7 v j=2} aber {P: i beliebig, j beliebig} i=2; i=7 {Q: i=7 v j beliebig} Will man etwas über j wissen? {P: i beliebig} i=2; i=7 {Q: i=7} Man muss nicht nur bedenken, was die einzelne Anweisung bewirkt, sondern auch, welche Teile der Vorbedingung in die Nachbedingung übernommen bzw. verändert werden. Algorithmik 1, WS 2004/05, Folie 11-12

13 11.2 Verifikation Beweis der Terminierung kann schwierig oder gar unmöglich sein. Terminiert das folgende Programm oder nicht? (Goldbachsche Vermutung) x = 4 while (istsummevon2primzahlen(x)) x+=2; x > 2 Auf das sog. Halteproblem geht die Theoretische Informatik ein. Algorithmik 1, WS 2004/05, Folie / H. Stoyan

14 11.2 Verifikation Verifikation von imperativen Programmen Wir haben es nicht mit einem Zustand zu tun, über den wir Aussagen machen wollen, sondern mit einer Folge von Zuständen z 0, z 1,..., z n während des Ablaufs eines Programms. Da imperative Programme lineare Kontrollstrukturen haben, folgt aus der Korrektheit von Teilen die Korrektheit der Sequenz. Verifikationskalküle verwenden (rein syntaktische) Regelwerke zur Ableitung zu verifizierender Aussagen: Regeln sind rein mechanisch anwendbar; können korrekt sein: alles, was abgeleitet werden kann, ist wahr; können vollständig sein: alles, was wahr ist, kann abgeleitet werden. Algorithmik 1, WS 2004/05, Folie 11-14

15 11.2 Verifikation Vorgehensweise bei Verifikationskalkülen Vorwärts: P Programm? gegeben P und Programm bestimme gute Nachbedingung beweise: gute Nachbedingung angegebene Nachbed. Rückwärts:? Programm Q gegeben Q und Programm bestimme gute Vorbedingung beweise: angegebene Vorbed. gute Vorbedingung Algorithmik 1, WS 2004/05, Folie / H. Stoyan

16 11.2 Verifikation P heißt schwächer als P' genau dann, wenn P' Y P Für Zusicherungen gibt es viele Möglichkeiten. Es gibt schwächere oder stärkere Zusicherungen: ist schwächer als y > 1 x := y 2 x > y > 1 y > 1 x := y 2 x > 1 3 < y < 5 x := y 2 x > 10 v y < 5 ist stärker als ist schwächer als Algorithmik 1, WS 2004/05, Folie / H. Stoyan

17 11.2 Verifikation Vorwärts- und Rückwärtsanalyse Vorwärtsanalyse eine Vorbedingung eine Nachbedingung viele Vorbedingungen Es gibt viele Einflussfaktoren, die zur Nachbedingung führen. Welche sind wichtig? Algorithmik 1, WS 2004/05, Folie Rückwärtsanalyse viele Nachbedingungen Es ist schwer, genau die Ziel-Bedingung, die man zeigen will, zu treffen und unbedeutendes zu ignorieren.

18 11.2 Verifikation Stärke/Schwäche von Zusicherungen Disjunktion ( oder, ) von Prädikaten entspricht der Vereinigung ( ) der durch sie beschriebenen Zustandsmengen. Konjunktion ( und, ) von Prädikaten entspricht der Schnittmenge ( ) der durch sie beschriebenen Zustandsmengen. a(b) c(d,e) d(f) true a(b) c(d,e) Zunehmende Schwäche a(b) c(d,e) d(f) Algorithmik 1, WS 2004/05, Folie 11-18

19 11.3 wp-kalkül wp-kalkül als Mittel der Rückwärtsanalyse (1) y = 2 ist stärker als y > 1 ist stärker als Minimum: wp x := y 2 x > y > 1 x := y 2 x > y > 1 Zu beweisender Zustand am Programmende (Nachbeding.) Idee: Untersuche statt vieler Vorbedingungen nur die schwächste Vorbedingung (weakest precondition): Ausgehend von dieser wird die Nachbedingung gerade noch erfüllt. Algorithmik 1, WS 2004/05, Folie 11-19

20 11.3 wp-kalkül wp-kalkül als Mittel der Rückwärtsanalyse (2) i beliebig, j beliebig j := 2 j := 2 i beliebig, j=2 i beliebig, j=2 bestimme schwächste Vorbedingung als Nachbedingung der vorhergehenden Anweisung auffassen. i := 7 i=7, j=2 zu zeigen bestimme schwächste Vorbedingung Algorithmik 1, WS 2004/05, Folie 11-20

21 11.3 wp-kalkül wp-kalkül als Mittel der Rückwärtsanalyse (3) Definition: Wenn Q ein Prädikat ist und A eine Anweisungsfolge, dann ist die schwächste Vorbedingung von A in Bezug auf Q, wp(a,q), ein Prädikat, das die Menge aller Startzustände beschreibt, so dass wenn die Ausführung von A in einem dieser Zustände beginnt, dann endet (terminiert) die Ausführung in einem Zustand, der Q genügt. wp("programm", Nachbedingung) = schwächste Vorbedingung Beachte: wp enthält Terminierung. Wenn wp(a,true) false, dann heißt das, dass A terminiert. Algorithmik 1, WS 2004/05, Folie 11-21

22 11.3 wp-kalkül Formal Wenn eine Vorbedingung P die Terminierung von A garantiert und wenn gilt {P} A {Q}, dann gilt P Y wp (A, Q) Somit: { wp(a,q) } A {Q} Beispiel: {P: y = 1} x := y {Q: x = 1} wp( "x := y", x=1) = (y=1) bedeutet: wenn nach Ausführung von x := y gelten soll: x=1, dann muss vorher mindestens y=1 gegolten haben Anders ausgedrückt: { wp("x := y", x=1) } x := y { x = 1 } Es gilt wegen P Y wp (A, Q) : (y = 1) Y (y = 1) Algorithmik 1, WS 2004/05, Folie 11-22

23 11.3 wp-kalkül Vorgehen bei der Programmverifikation mit wp-kalkül Q := Endebedingung des Programms A := letzte Anweisung des Programms P := wp(a, Q) Anfang des Programms erreicht? P impliziert durch Spezifikation der Eingabedaten? ja ja nein nein Q := P A := vorhergehende Anweisung Programm ist korrekt Programm ist fehlerhaft Algorithmik 1, WS 2004/05, Folie 11-23

24 11.3 wp-kalkül Sequenzregel Zwei Programmstücke S 1 und S 2 können zu einem Programmstück S 1 ; S 2 zusammengesetzt werden, wenn die Nachbedingung von S 1 mit der Vorbedingung von S 2 identisch ist. P S 1 Q Q S 2 P S 1 wp ( "S 1 ; S 2 ",R) = wp ( S S 1, wp ( S 2,R)) 2 R R Algorithmik 1, WS 2004/05, Folie 11-24

25 11.3 wp-kalkül Erweiterung der Sequenzregel Q Y Q' Wenn Q' eine Konsequenz von Q ist, gilt auch: P S 1 Q P S 1 aus {P} S 1 {Q} und {Q'} S 2 folgt {R} Q' S 2 {P} S 1 ; S 2 {R} S 2 R R Algorithmik 1, WS 2004/05, Folie Klar: Wenn Q' schon schwächste Vorbedingung, dann kann Q nicht noch schwächer sein!

26 11.3 wp-kalkül Zuweisungsregel wp ("x := e", Q) = zulässig(x) v zulässig(e) v Q[x/e] wobei x eine Variable und e ein Ausdruck ist. Die Nachbedingung Q kann nur erreicht werden, wenn sowohl x als auch e fehlerfrei ausgewertet werden können. (Die zulässig()-prädikate werden oft weggelassen.) Zur Konstruktion der Vorbedingung wird mit der Nachbedingung Q begonnen, darin werden alle Vorkommen der Variablen x durch den Ausdruck e substituiert; man nimmt also sozusagen den Effekt der Anweisung zurück. Algorithmik 1, WS 2004/05, Folie 11-26

27 11.3 wp-kalkül Zuweisungsregel am Beispiel: wp("v:=v+1", v = m) = (v = m)[v/(v+1)] = (v+1 = m) = (v = m-1) Algorithmik 1, WS 2004/05, Folie 11-27

28 11.3 wp-kalkül Beispiel: Vertauschen der Werte der Variablen x und y Zu verifizieren: {P: y=x x=y} h:=x; x:=y; y:=h {Q: x=x y=y} Verifikation: wp ( "h:=x; x:=y; y:=h", x=x y=y ) = wp ( "h:=x; x:=y", wp( "y:=h", x=x y=y) ) = wp ( "h:=x; x:=y", (x=x h=y) ) = wp ( "h:=x", wp( "x:=y", (x=x h=y) ) ) = wp ( "h:=x", (y=x h=y) ) = (y=x x=y) stimmt mit P überein, daher ist das Programmstück korrekt. Sequenzregel Zuweisungsregel Algorithmik 1, WS 2004/05, Folie 11-28

29 11.3 wp-kalkül Definitionen wp (leer, Q) = Q Wenn nichts passiert, ändern sich die Bedingungen nicht. leer bewirkt keine Zustandsänderung. Damit nach leer Q gelten kann, muss vor leer mindestens Q gegolten haben. wp (crash, Q) = false Fehler dürfen nicht passieren. crash ist der Versuch, eine Anweisung auszuführen, deren Vorbedingung nicht erfüllt ist. Analog: false beliebige Aussage Algorithmik 1, WS 2004/05, Folie 11-29

30 11.3 wp-kalkül Ein paar einfache Rechenregeln (1) Ausgeschlossene Wunder wp ( A, false ) = false Da false nicht erfüllbar ist, muss auch die zugehörige Vorbedingung unerfüllbar sein. Aus P Y P, Q Y Q und {P} A {Q} folgt {P } A {Q } Vorbedingung kann verschärft werden, Nachbedingung kann abgeschwächt werden. Monotonie (folgt sofort aus obigem) Wenn Q Y R dann wp ( A, Q ) Y wp ( A, R ) Algorithmik 1, WS 2004/05, Folie 11-30

31 11.3 wp-kalkül Ein paar einfache Rechenregeln (2) Distributivität der Konjunktion wp ( A, Q ) wp ( A, R ) = wp ( A, Q R ) Y: Zustand Z, der durch A zu Q führt und der durch A zu R führt, führt natürlich auch zu QvR Z: Zustand Z führt durch A zu QvR. Dann führt Z durch A auch zu Q und ebenso zu R (abgeschwächte Nachbedingung.) Algorithmik 1, WS 2004/05, Folie 11-31

32 11.3 wp-kalkül Ein paar einfache Rechenregeln (3) Distributivität der Disjunktion wp ( A, Q ) wp ( A, R ) Y wp ( A, Q R ) Z gilt i.a. nicht: wp( wirf Münze, Zahl w Wappen) Es gibt bei dieser zufallsabhängigen Aktion keine Vorbedingung, so dass auf jeden Fall Zahl oben liegt. Daher: wp( wirf Münze, Zahl) = false Ebenso: wp( wirf Münze, Wappen) = false. Falsch ist: false w false Z true = gilt bei deterministischen Programmen Algorithmik 1, WS 2004/05, Folie 11-32

33 11.3 wp-kalkül Fallunterscheidung: if-then-else-regel wp ("if b then S 1 else S 2 ", Q ) = [ b Y wp (S 1, Q) ] [ b Y wp (S 2,Q) ] Wenn b gilt, dann muss als Vorbedingung mindestens wp (S 1, Q) gelten, damit Q als Nachbedingung gilt. Wenn b nicht gilt, dann muss als Vorbedingung mindestens wp (S 2,Q) gelten, damit Q als Nachbedingung gilt. Zusätzlich muss zulässig(b) gelten. b muss seiteneffektfrei sein. Algorithmik 1, WS 2004/05, Folie 11-33

34 Algorithmik 1, WS 2004/05, Folie wp-kalkül Kleiner Logik-Exkurs (B Y Q) v ( B Y R) ] ( B w Q) v (B w R) ] (B v ( B w Q)) w (R v ( B w Q)) //Distributivgesetz ] ((B v B) w (B v Q)) w ((R v B) w (R v Q)) //Distributivgesetz ] (B v B) w (B v Q) w (R v B) w (R v Q) //Assoziativgesetz ] (B v Q) w ( B v R) w (R v Q) //B v B = false ] (B v Q) w ( B v R) I I I B w Q I I Q I I B I I I I I I I BYQ Q B I I R v Q I I I I R I I I I (BvQ)w( BvR) I I BvR I I I I I I I I I I BvQ Q B

35 11.3 wp-kalkül Es gilt (A Y B) ( A Y C) ] (A B) ( A C) Daher kann die if-then-else-regel auch umgeformt werden zu: wp ("if b then S 1 else S 2 ", Q ) = [ b Y wp (S 1, Q) ] [ b Y wp (S 2,Q) ] = [ b wp (S 1, Q) ] [ b wp (S 2,Q) ] Es muss b und mindestens die Vorbedingung wp (S 1, Q) gelten......oder aber nicht b und mindestens die Vorbedingung wp(s 2,Q) gelten. Algorithmik 1, WS 2004/05, Folie 11-35

36 11.3 wp-kalkül Fallunterscheidung: if-regel wp ("if b then A", Q ) = [ b Y wp (A, Q) ] [ b Y Q ] Fehlt der else-teil, ist dies identisch mit wp ("if b then A else leer", Q ) = [ b Y wp (A, Q) ] [ b Y wp (leer,q) ] = [ b Y wp (A, Q) ] [ b Y Q ] = [ b wp(a, Q)] w [ b Q ] Algorithmik 1, WS 2004/05, Folie 11-36

37 11.3 wp-kalkül Beispiel: Bestimmung des Maximums zweier Zahlen Was muss vor der folgenden if-anweisung mindestens gelten, damit nachher max=x erfüllt ist? wp("if (x > y) max:=x; else max:=y;", max = x) = [ x > y wp("max := x", max = x) ] if-then-else-regel [ x y wp("max := y", max = x) ] = [ x > y x = x ] [ x y y = x ] Zuweisungsregel = ( x > y x = y ) = (x y) Algorithmik 1, WS 2004/05, Folie 11-37

38 11.3 wp-kalkül Beispiel: wp einer if-anweisung wp("if a>(b+4) then x:=b-4 else x:=a-4",((x a)w(x b)) (a x b)) = (a>(b+4)) v wp ("x:=b-4", ((x a)w(x b)) (a x b)) w (a (b+4)) v wp ("x:=a-4", ((x a)w(x b)) (a x b)) = (a>(b+4)) v ((b-4 a) w (b-4 b)) (a b-4 b) w (a (b+4)) v ((a-4 a) w (a-4 b)) (a a-4 b) = (a>(b+4)) v ((b-4 a) w true) (a b-4 b) w (a (b+4)) v (true w (a-4 b)) (a a-4 b) = (a>(b+4)) v (true (a b-4 b)) w (a (b+4)) v (true (a a-4 b)) = (a>(b+4)) v (a b-4 b) w (a (b+4)) v (a a-4 b) = (b+4<a) v false w (a (b+4)) v false = false w false = false Algorithmik 1, WS 2004/05, Folie / H. Stoyan

39 11.3 wp-kalkül Zeigen Sie, dass folgende Programm-Transformation korrekt ist: if b then { A1; A2; A3 } else { A1; A4; A3 } A1; if b then { A2; } else { A4; } A3; Achtung! Die Transformation ist natürlich nur korrekt, wenn der Wert von b durch die Ausführung von A1 nicht geändert wird! In wp-sprache: b = wp("a1", b) v b = wp("a1", b) Ansatz: Zeige, dass für alle Prädikate Q gilt wp("if b then {A1;A2;A3} else {A1;A4;A3}",Q) = wp("a1; if b then {A2} else {A4}; A3}",Q) Algorithmik 1, WS 2004/05, Folie 11-39

40 11.3 wp-kalkül Zeige, dass für alle Prädikate Q gilt wp("if b then {A1;A2;A3} else {A1;A4;A3}",Q) = wp("a1; if b then {A2} else {A4}; A3",Q) Beweis: wp("if b then {A1;A2;A3} else {A1;A4;A3}",Q) = (b v wp("a1", wp("a2", wp("a3",q)))) w ( b v wp("a1", wp("a4", wp("a3",q)))) = (wp("a1", b) v wp("a1", wp("a2", wp("a3",q)))) w (wp("a1", b) v wp("a1", wp("a4", wp("a3",q)))) //Voraussetzg. = wp("a1", b v wp("a2", wp("a3",q))) w wp("a1", b v wp("a4", wp("a3",q))) //Distrib. v = wp("a1", (b v wp("a2", wp("a3",q))) w ( b v wp("a4", wp("a3",q)))) //Distrib. w, determinist. = wp("a1", wp("if b then {A2} else {A4}", wp("a3",q))) = wp("a1; if b then {A2} else {A4}; A3",Q))) Algorithmik 1, WS 2004/05, Folie 11-40

41 11.3 wp-kalkül Allgemeine Fallunterscheidung: case-regel (1) switch-anweisung gemäß Semantik von Java: wp ( "switch b case b 1 : S 1 ; case b 2 : S 2 ;... case b n : S n ; else S n+1 ", Q ) semantisch äquivalente bzw. verhaltensäquivalente Anweisungsfolgen A/B: {P} A {Q} ] {P} B {Q} = wp ( "if b == b 1 then S 1 ; S 2 ;...; S n else if b == b 2 then S 2 ;...; S n... else S n+1 ", Q ) Algorithmik 1, WS 2004/05, Folie 11-41

42 11.3 wp-kalkül Allgemeine Fallunterscheidung: case-regel (2) wp ( "if b == b 1 then S 1 ; S 2 ;...; S n else if b == b 2 then S 2 ;...; S n... "und"-verknüpfung: für else S n+1 ", Q ) jedes einzelne B i gilt die = [ i: (B i Y wp (S i ;...; S n, Q)) ] Implikation B i Y wp( ) [( i: B i ) Y wp (S n+1,q)) ] //B i steht für b==b i falls keines der B i erfüllt ist, dann Wenn irgendein B i gilt, dann gilt als schwächste Vorbedingung wp (S i ;...; S n, Q), wobei gilt, falls S k = break wp (S i ;...; S k ;...; S n, Q) = wp (S i ;...; S k-1, Q) Algorithmik 1, WS 2004/05, Folie 11-42

43 11.4 Schleifeninvariante Korrektheit von Schleifen Korrektheitsüberlegungen für Schleifen lassen sich auf die Betrachtung von while-schleifen beschränken, da sich alle Schleifenkonstrukte in while-schleifen umwandeln lassen: do A while b A; while b do A do A until b A; while b do A for (A,b,C) D A; while b do { D ; C } Algorithmik 1, WS 2004/05, Folie 11-43

44 11.4 Schleifeninvariante Gesucht wird wp ("while b do A", Q ) =? Idee: Schreibe die Anweisung um zu if b {A ; if b {A ; if b {A ; if b {...}}}} Zur Erinnerung: wp ("if b then A", Q ) = ( b Y Q) (b Y wp (A, Q)) Somit ergibt sich wp ("while b do A", Q ) = b Y Q b Y wp ( A, b Y Q b Y wp ( A, b Y Q b Y wp ( A,... ) ) ) Algorithmik 1, WS 2004/05, Folie 11-44

45 11.4 Schleifeninvariante Beispiel: Herunterzählen eines Werts/Zählschleife (1) wp ("while b do A", Q ) = b Y Q b Y wp ( A, b Y Q b Y wp ( A, b Y Q b Y wp ( A,... ) ) ) Beispielschleife: wp ("while (x>0) do x:=x-1", x=0 ) = (x>0) Y (x=0) (x>0) Y [ (x-1>0) Y (x-1=0) (x-1>0) Y [ (x-1-1>0) Y (x-1-1=0) (x-1-1>0) Y [... ] ] ] Algorithmik 1, WS 2004/05, Folie 11-45

46 11.4 Schleifeninvariante Beispiel: Herunterzählen eines Werts/Zählschleife (2) wp ("while (x>0) do x:=x-1", (x=0) ) = (x>0) Y (x=0) (x>0) Y [ (x-1>0) Y (x-1=0) (x-1>0) Y [ (x-1-1>0) Y (x-1-1=0) (x-1-1>0) Y [... ] ] ] Es gilt A Y ( B C ) ] (A Y B) (A Y C) Nachrechnen! Daher kann vereinfacht werden zu: wp ("while (x>0) do x:=x-1", (x=0) ) = (x 0) Y (x = 0) (x > 0) Y [ (x 1) Y (x = 1) ] (x > 0) Y [ (x > 1) Y [ (x 2) Y (x = 2) ] ] (x > 0) Y [ (x > 1) Y [ (x > 2) Y [ (x 3) Y (x = 3) ] ] ]... Noch einfacher: x 0 Algorithmik 1, WS 2004/05, Folie 11-46

47 11.4 Schleifeninvariante Die obige Form der unbeschränkten Konjunktion ist nicht praktikabel, führt wp des k-ten Schleifendurchlaufs auf das wp des k-1-ten Schleifendurchlauf zurück. Hier steckt das Induktionsprinzip drin! 1. Vereinfachung: Besserer Umgang mit der unbeschränkten Konjunktion: Definition: H k (Q) schwächste Vorbedingung, die garantiert, dass die Schleife höchstens k-mal (k 0) durchlaufen wird und dann Q gilt. Definition: H(Q) ::= wp( "while b do A", Q ) Algorithmik 1, WS 2004/05, Folie 11-47

48 11.4 Schleifeninvariante Formalisierung wp ("while b do A", Q ) = b Y Q b Y wp ( A, b Y Q b Y wp ( A, b Y Q b Y wp ( A,... ) ) ) Wegen Distributivität der Konjunktion umformen zu: wp ("while b do A", Q ) = H b Y Q 0 (Q) b Y wp ( A, b Y Q ) H 1 (Q) b Y wp ( A, b Y wp ( A, b Y Q )) H 2 (Q)... Somit gilt: H(Q) = wp ("while b do A", Q ) = H 0 (Q) H 1 (Q) H 2 (Q)... = ( k 0 : H k (Q)) Algorithmik 1, WS 2004/05, Folie H(Q) ist die schwächste Vorbedingung, dass die Schleife endlich oft durchlaufen wird und danach Q gilt.

49 11.4 Schleifeninvariante Rekurrente Schleifenregel Die Schleifenzustandsfunktion H(Q) lässt sich als Rekurrenz definieren: H(Q) = ( k 0 : H k (Q)) H 0 (Q) = ( b Y Q ) H k+1 (Q) = ( b Y wp ( A, H k (Q))) Statt mit der unbeschränkten Konjunktion umgehen zu müssen, suchen wir jetzt eine Lösung der Rekurrenz, also ein H, für das gilt: H Y ( b Y Q ) und H Y ( b Y wp ( A, H )) Mit einem solchen H kann die totale Korrektheit (=partielle Korrektheit und Terminierung) der Schleife gezeigt werden. Algorithmik 1, WS 2004/05, Folie / H. Stoyan

50 11.4 Schleifeninvariante Beispiel: Herunterzählen eines Werts/Zählschleife (3) wp ("while (x>0) do x:=x-1", x=0 ) = = H 0 (x=0) H 1 (x=0) H 2 (x=0)... Nachbedingung der Schleife ist zugleich Terminierungsbedingung. wobei H 0 (x=0) = (x>0) Y (x=0) und H k+1 (x=0) = (x>0) Y wp ("x:=x-1", H k (x=0)) Jetzt wird ein H gesucht, das die Rekurrenz erfüllt. Errate: H = (x 0) 1. Teil der Rekurrenzprüfung: H Y ( b Y Q ) (x 0) Y (x>0) Y (x=0) // H Y H 0 (x=0) ] (x 0) Y ( (x>0) w (x=0) ) ] (x < 0) w (x>0) w (x=0) ] true Algorithmik 1, WS 2004/05, Folie 11-50

51 11.4 Schleifeninvariante Beispiel: Herunterzählen eines Werts/Zählschleife (4) wp ("while (x>0) do x:=x-1", x=0 ) = = H 0 (x=0) H 1 (x=0) H 2 (x=0)... wobei H 0 (x=0) = (x>0) Y (x=0) und H k+1 (x=0) = (x>0) Y wp ("x:=x-1", H k (x=0)) 2. Teil der Rekurrenzprüfung: H Y ( b Y wp ( A, H )) (x 0) Y [ (x > 0) Y wp ("x:=x-1", (x 0)) ] ] (x 0) Y [ (x > 0) Y (x-1 0) ] ] (x 0) Y [ (x > 0) Y (x 1) ] ] (x 0) Y [ (x 0) w (x 1) ] ] (x < 0) w (x 0) w (x 1) ] true Algorithmik 1, WS 2004/05, Folie 11-51

52 11.4 Schleifeninvariante Beispiel: Herunterzählen eines Werts/Zählschleife (5) Damit ist gezeigt: (x 0) = wp ("while (x>0) do x:=x-1", x=0 ) Das bedeutet: Wenn vor der Schleife H: (x 0) gilt, dann terminiert die Schleife und es gilt nach der Schleife Q: (x=0). Bei diesem Beispiel stehen die schwächste Vorbedingung, der Schleifentest und die Nachbedingung in recht engem Zusammenhang. Algorithmik 1, WS 2004/05, Folie 11-52

53 11.4 Schleifeninvariante Beispiel: Summation natürlicher Zahlen Wir wollen verifizieren: {P: n 0} s := 0; for (i=1; i<=n; i++) s := s + i; {Q: s=(n+1)n/2} Schleife in "Normalform" umwandeln: {P: n 0} s := 0; i := 1; while (i<=n) { s := s + i; i := i + 1; } {Q: s =(n+1)n/2} Algorithmik 1, WS 2004/05, Folie 11-53

54 11.4 Schleifeninvariante Gesucht wird also wp("s:=0;i:=1; while(i<=n){s:=s+i; i:=i+1;}", s =(n+1)n/2 ) Mit der Sequenzregel ergibt sich wp("s:=0;i:=1;", wp("while(i<=n){s:=s+i; i:=i+1;}", s =(n+1)n/2 ) ) Betrachte zunächst nur den inneren Ausdruck mit der Schleife. Gesucht wird schwächste Vorbedingung H: H(s =(n+1)n/2) = wp("while(i<=n){s:=s+i; i:=i+1;}", s =(n+1)n/2 ) Algorithmik 1, WS 2004/05, Folie 11-54

55 11.4 Schleifeninvariante Somit ergeben sich: H 0 (s =(n+1)n/2) = ( i n ) Y (s =(n+1)n/ 2) H k+1 (s =(n+1)n/2) = ( i n ) Y wp ("s:=s+i; i:=i+1;",h k (s =(n+1)n/2)) Korrektheitsanteil Welches H erfüllt die Rekurrenz? Errate: H : = s=(i-1)i/2 ( i n + 1) 1. Teil der Rekurrenzprüfung: H Y ( b Y Q) Terminierungsanteil zeige: [ s=(i-1)i/2 ( i n + 1) ] Y [ ( i n ) Y (s =(n+1)n/2) ] wenn i n: wenn i = n+1: wenn i > n+1: [ s=(i-1)i/2 ] Y [ false Y (s =(n+1)n/2) ] = true [ s=(n+1)n/2 ] Y [ true Y (s =(n+1)n/2) ] = true [ false ] Y [ true Y (s =(n+1)n/2) ] = true q.e.d. Algorithmik 1, WS 2004/05, Folie 11-55

56 11.4 Schleifeninvariante 2. Teil der Rekurrenzprüfung: H Y ( b Y wp ( A, H )) zeige: [ s=(i-1)i/2 ( i n + 1) ] Y [( i n ) Y wp ("s:=s+i; i:=i+1;", Mit Sequenzregel: [ s=(i-1)i/2 ( i n + 1) ] Y [( i n ) Y wp ("s:=s+i;", s=(i-1)i/2 ( i n + 1) ) ] wp("i:=i+1;", s=(i-1)i/2 ( i n + 1) ))] Mit Zuweisungsregel: [ s=(i-1)i/2 ( i n + 1) ] Y [( i n ) Y [ s+i = i(i+1)/2 ( i n) ) ] ] wenn i n+1: [ s=(i-1)i/2 ] Y [ true Y s+i = i(i+1)/2 ] = true wenn i = n+1: [ false ] Y [ false Y false ] = true wenn i > n+1: [ false ] Y [ false Y false ] = true q.e.d. Algorithmik 1, WS 2004/05, Folie 11-56

57 11.4 Schleifeninvariante Gesucht wird immer noch wp("s:=0;i:=1;", wp("while(i<=n){s:=s+i; i:=i+1;}", s =(n+1)n/2 )) Schleife auflösen, indem gefundenes H eingesetzt wird: wp("s:=0;i:=1;", s=(i-1)i/2 ( i n + 1) ) = wp("s:=0;", wp ("i:=1;", s=(i-1)i/2 ( i n + 1) ) = wp("s:=0;", s=0 ( 1 n + 1 ) ) = ( 0 n ) Somit muss vor Beginn des Codestückes mindestens 0 n gelten. Dies entspricht genau der oben angegebenen Vorbedingung P. Daher wurde die totale Korrektheit bewiesen. q.e.d. Algorithmik 1, WS 2004/05, Folie 11-57

58 11.4 Schleifeninvariante Der Rekurrenz-Ansatz ist einfacher als die unbeschränkte Konjunktion aber, es ist schwierig, die Lösung der Rekurrenz H zu erraten es wird gleichzeitig partielle Korrektheit und die Terminierung gezeigt. Trennung in 2 Schritt ist leichter. 2. Vereinfachung: Schleifeninvarianten Idee: teile die schwächste Vorbedingung H einer Schleife auf in: eine Bedingung b, so dass bei b die Schleife terminiert und eine Schleifeninvariante I: ein Prädikat, das vor und nach jeder Iteration einer Schleife immer wahr ist. Algorithmik 1, WS 2004/05, Folie 11-58

59 11.4 Schleifeninvariante Schleifeninvariante (1) Definition: Eine Invariante der Schleife while b do A ist eine Bedingung I, für die gilt: { I b } A { I } Unmittelbar vor A muss auch b gelten. Nach A (vor der nächsten Iteration) kann b gelten oder nicht. Wenn vor dem Schleifenrumpf I b gilt, dann terminiert die Ausführung von A und anschließend ist I erfüllt. I ist also vor und nach dem Schleifenrumpf erfüllt, daher Invariante. I ist leichter zu finden als H, weil man die Terminierung der Schleife nicht berücksichtigen muss. In wp-terminologie muss man zeigen: I b Y wp(a, I) I b ist also stärker als die schwächste Vorbedingung der Schleife. Algorithmik 1, WS 2004/05, Folie 11-59

60 11.4 Schleifeninvariante Schleifeninvariante (2) Aus { I b } A { I } bzw. aus I b Y wp(a, I) folgt, falls die Schleife terminiert: Kennt man eine Invariante I des Schleifenrumpfs, dann kann man die schwächste Vorbedingung der Schleife erschließen. Man muss zusätzlich lediglich die Terminierung zeigen. { I } while b do A { I b } bzw. I Y wp("while b do A", I b) Wenn das Schleifenende erreicht wird, dann darf b nicht mehr erfüllt sein. Algorithmik 1, WS 2004/05, Folie 11-60

61 11.4 Schleifeninvariante Schleifeninvariante (3) Der Zusammenhang { I b } A { I } Y { I } while b do A { I b } lässt sich für terminierende Schleifen durch Induktion beweisen. Beweisskizze: Induktionsanfang: Schleifenrumpf wird keinmal/einmal durchlaufen. Ersetze Schleife durch: if b then A Da keine weitere Iteration folgt, gilt nach A auf jeden Fall auch b. Induktionsschritt: Schleife wird k mal durchlaufen. Ersetze Schleife durch: if b then A; while b do A Dann kann Induktionsvoraussetzung für k-1 Schleifendurchläufe angewendet werden. Algorithmik 1, WS 2004/05, Folie 11-61

62 11.4 Schleifeninvariante Konstruktives Vorgehen bei Schleifen Bestimme I und konstruiere Rumpf S. { I } while b do { I b } S { I } { I b } { Q } Vier Schritte zum Nachweis der totalen Korrektheit: 1. Beweise, dass I vor Eintritt in die Schleife gilt. 2. Beweise, dass { I b } S { I }, dass also I tatsächlich eine Invariante ist. 3. Beweise, dass ( I b ) Y Q, so dass bei Terminierung das gewünschte Ergebnis erreicht wird. 4. Beweise, dass die Schleife terminiert. Algorithmik 1, WS 2004/05, Folie 11-62

63 11.5 Beispiele Euklids Algorithmus zur Berechnung von ggt(a,b): a=x; b=y; while (a!=b) { if (a>b) a=a-b; if (a<b) b=b-a; } //{Q: a=b=ggt(a,b)=ggt(x,y)} 1. Beweise, dass I vor Eintritt in die Schleife gilt. 2. Beweise, dass { I b } S { I }, dass also I tatsächlich eine Invariante ist. 3. Beweise, dass ( I b ) Y Q, so dass bei Terminierung das gewünschte Ergebnis erreicht wird. 4. Beweise, dass die Schleife terminiert. Terminierungsanteil: b: a==b Invariante: I: ggt(a,b)=ggt(x,y) Es gilt/kann verwendet werden: ggt(a+b,b)=ggt(a,b) Algorithmik 1, WS 2004/05, Folie 11-63

64 11.5 Beispiele Euklids Algorithmus zur Berechnung von ggt(a,b): a=x; b=y; while (a!=b) { if (a>b) a=a-b; if (a<b) b=b-a; } //{Q: a=b=ggt(a,b)=ggt(x,y)} 1. Beweise, dass I vor Eintritt in die Schleife gilt. Was ist schwächste Vorbedingung P, die vor dem Programmstart gelten muss, damit vor der Schleife I erfüllt ist. Zeige: P ist erfüllt. wp("a:=x;b:=y;", ggt(a,b)=ggt(x,y)) =wp("a:=x", ggt(a,y)=ggt(x,y)) = ggt(x,y)=ggt(x,y) = true. Vor dem Schleifeneintritt ist I erfüllt. Algorithmik 1, WS 2004/05, Folie 11-64

65 11.5 Beispiele Euklids Algorithmus zur Berechnung von ggt(a,b): while (a!=b) { if (a>b) a=a-b; if (a<b) b=b-a; } 2. Beweise, dass { I b } S { I }, dass also I tatsächlich eine Invariante ist. implizit Zulässigkeit: ganzzahlig(a) ganzzahlig(b) wp("if (a>b) a=a-b; if (a<b) b=b-a", ggt(a,b)=ggt(x,y)) = wp("if (a>b) a=a-b", wp("if (a<b) b=b-a", ggt(a,b)=ggt(x,y))) = wp("if (a>b) a=a-b", [a<b v wp("b=b-a", ggt(a,b)=ggt(x,y))] w [a b v ggt(a,b)=ggt(x,y)]) = wp("if (a>b) a=a-b", [a<b v ggt(a,b-a)=ggt(x,y)] w [a b v ggt(a,b)=ggt(x,y)]) = [a>b v wp("a=a-b", [a<b v ggt(a,b-a)=ggt(x,y)] w [a b v ggt(a,b)=ggt(x,y)])] w [a b v ([a<b v ggt(a,b-a)=ggt(x,y)] w [a b v ggt(a,b)=ggt(x,y)])] = [a>b v [a-b<b v ggt(a-b,b-a+b)=ggt(x,y)] w [a-b b v ggt(a-b,b)=ggt(x,y)])] w [a<b v ggt(a,b-a)=ggt(x,y)] w [a=b v ggt(a,b)=ggt(x,y)] = [b<a<2b v ggt(a-b,2b-a)=ggt(x,y)] w [a 2b v ggt(a-b,b)=ggt(x,y)])] w [a<b v ggt(a,b-a)=ggt(x,y)] w [a=b v ggt(a,b)=ggt(x,y)] Man sieht, dass aus I b obiges folgt. Algorithmik 1, WS 2004/05, Folie 11-65

66 11.5 Beispiele Euklids Algorithmus zur Berechnung von ggt(a,b): a=x; b=y; while (a!=b) { if (a>b) a=a-b; if (a<b) b=b-a; } //{Q: a=b=ggt(a,b)=ggt(x,y)} 3. Beweise, dass ( I b ) Y Q, so dass bei Terminierung das gewünschte Ergebnis erreicht wird. Aus I b: ggt(a,b)=ggt(x,y) a=b folgt Q trivialerweise sofort. Algorithmik 1, WS 2004/05, Folie 11-66

67 11.5 Beispiele Euklids Algorithmus zur Berechnung von ggt(a,b): a=x; b=y; while (a!=b) { if (a>b) a=a-b; if (a<b) b=b-a; } //{Q: a=b=ggt(a,b)=ggt(x,y)} 4.Beweise, dass die Schleife terminiert. Die Terminierung kann nur gezeigt werden für a>0,b>0: Bei jeder Iteration werden a oder b echt kleiner, bleiben aber wegen der if-bedingung größer als Null. Nach endlich vielen Verkleinerungsschritten müssen a und b entweder gleich sein, oder beide 1 erreicht haben. Mit allen 4 Schritten ist die totale Korrektheit des Algorithmus gezeigt. Algorithmik 1, WS 2004/05, Folie 11-67

68 11.5 Beispiele Beispiel: Anderer ggt-algorithmus { P: a = A b = B a > 0 b 0} while (b!= 0) { h := a; a := b; b := h % b; } { Q: a = ggt(a, B) } Zulässigkeit: ganz(a) ganz(b) Schleifeninvariante: I = ( a > 0 b 0 ggt(a,b) = ggt(a, B) ) Begründung: I gilt zu Beginn, nach Durchlaufen des Schleifenrumpfes: (b 0) Y ( ggt(a, b) = ggt(b, a % b) ) und am Ende, wenn die Schleife anhält: (b = 0) Y ( ggt(a, 0) = a = ggt(a, B) ) Animation auf der Algo-1-Web-Seite Algorithmik 1, WS 2004/05, Folie 11-68

69 11.5 Beispiele Beispiel: Kleinstes gemeinsames Vielfaches kgv(a, b, c) { P: a = A b = B c = C a > 0 b > 0 c > 0 } a0 = a; b0 = b; c0 = c; while (a!= b b!= c) { if (a < b) a = a + a0; else if (b < c) b = b + b0; else c = c + c0; } { Q: a = kgv(a,b,c) } Vergleiche kgv-algorithmus in Abschnitt 4.2 Algorithmik 1, WS 2004/05, Folie 11-69

70 11.5 Beispiele Denkbare Schleifeninvariante: a, b, c sind Vielfache von A, B bzw. C und a, b, c kgv(a, B, C): I 1 = (A,B,C>0) p, q, r : ( (p,q,r>0) (a = p A) (b = q B) (c = r C) ) I 2 = (a kgv(a, B, C)) (b kgv(a, B, C)) (c kgv(a, B, C)) I = I 1 I 2 Dann gilt bei Schleifenabbruch p A = q B = r C = a = b = c kgv(a, B, C) und somit notwendig a = b = c = kgv(a, B, C) Terminierung: a, b, c können nur wachsen. Da kgv(a, B, C) A B C, fällt die Differenz 3 A B C - a - b - c streng monoton und ist durch 0 nach unten beschränkt. Algorithmik 1, WS 2004/05, Folie 11-70

71 11.5 Beispiele Verifikation am Beispiel: class Math { public static long potenzieren (long a, long b) { //{P:a>0 v b 0} long x = a; long y = b; } } long z = 1; long result = 0; while (y!=0) { if ((y%2)==1) { z=z*x; y=y-1; } x=x*x; y=y/2; } //{Q:?} return z; 1.) Welcher prädikatenlogische Ausdruck ist eine angemessene Nachbedingung Q? Bei "richtiger" Verifikation kennt man natürlich die Nachbedingung, deren Erfülltheit man zeigen will. Wenn das nicht gelingt, entdeckt man (hoffentlich) den Fehler im Programm. Hier "erraten" wir zu Übungszwecken das zu zeigende Q. Algorithmik 1, WS 2004/05, Folie 11-71

72 11.5 Beispiele 1. Algorithmus intuitiv verstehen (a) class Math { public static long potenzieren (long a, long b) { //{P:a>0 v b 0} } } long x = a; long y = b; long z = 1; long result = 0; while (y!=0) { if ((y%2)==1) { z=z*x; y=y-1; } x=x*x; y=y/2; } //{Q:?} return z; Schritt x y z Wegen modulo-2-peration betrachten wir Binärdarstellung 1 0 (6=) II (5=) II I 1 II^I II (=6) (II^I)^I I II (=6) 2 3 II ^I II*(II^I) (=6^5) Algorithmik 1, WS 2004/05, Folie 11-72

73 11.5 Beispiele 1. Algorithmus intuitiv verstehen (b) class Math { public static long potenzieren (long a, long b) { //{P:a>0 v b 0} long x = a; long y = b; } } long z = 1; long result = 0; while (y!=0) { if ((y%2)==1) { z=z*x; y=y-1; } x=x*x; y=y/2; } //{Q:?} return z; Algorithmik 1, WS 2004/05, Folie Der Algorithmus berechnet a^b, indem er x=a, y=b, z=1 setzt z und x schrittweise vergrößert y schrittweise verkleinert Ist die letzte Ziffer von y 1 (binär), wird z mit x multipliziert. Ist sie 0, dann wird x quadriert Dann wird die vorletzte Ziffer von y betrachtet Der Algorithmus nutzt also aus: a^b = a^(2 * b div 2 + b mod 2)

74 11.5 Beispiele 2. Schleifeninvariante erraten class Math { public static long potenzieren (long a, long b) { //{P:a>0 v b 0} } } long x = a; long y = b; long z = 1; long result = 0; while (y!=0) { if ((y%2)==1) { z=z*x; y=y-1; } x=x*x; y=y/2; } //{Q:?} return z; Am Anfang gilt auch a^b = z * x ^ y, weil z=1, x=a und y=b. Das könnte die Invariante I sein! Am Ende soll natürlich Q:z=a^b gelten. Kann man etwas über x und y in Bezug auf z sagen? An Ende gilt: z = z * x ^ y, weil y=0. Algorithmik 1, WS 2004/05, Folie 11-74

75 11.5 Beispiele 3. Potentielles I mit wp-kalkül durchrechnen (a) Vor der Schleife gilt I kann leicht mit wp gezeigt werden. I als Nachbedingung der letzten Zuweisung vor while Dann rückwärts mehrfach Zuweisungsregel Dann zeigen, dass resultierendes wp schwächer ist als P. Nach der Schleife ist zu zeigen I b Y Q I b = z*x^y = a^b (y!=0) = z*x^0 = a^b = z = a^b In der Schleife? Zeige: I b Y wp(schleifenrumpf, I) Algorithmik 1, WS 2004/05, Folie 11-75

76 11.5 Beispiele 3. Potentielles I mit wp-kalkül durchrechnen (b) wp("x=x*x;y=y/2",z*x^y=a^b) = wp("x=x*x",z*x^(y div 2)=a^b) = z*(x*x)^(y div 2)=a^b = z*x^(2 * (y div 2))=a^b if ((y%2)==1) { z=z*x; y=y-1; } x=x*x; y=y/2; wp("if (y%2)==1 { }", z*x^(2 * (y div 2))=a^b) = y gerade Y z * x^(2 * (y div 2))=a^b Für gerade y gilt: 2*(y div 2) = y v y ungerade Y Damit folgt I. wp("z=z*x; y=y-1", z*x^(2 * (y div 2))=a^b) if ((y%2)==1) { z=z*x; y=y-1; } x=x*x; y=y/2; Algorithmik 1, WS 2004/05, Folie 11-76

77 11.5 Beispiele 3. Potentielles I mit wp-kalkül durchrechnen (c) Zweiter Teil der Konjunktion (y ungerade): wp("z=z*x; y=y-1", z*x^(2 * (y div 2))=a^b) = wp("z=z*x", z*x^(2 * ((y-1) div 2))=a^b) = z*x*x^(2 * ((y-1) div 2))=a^b = z*x*x^(y-1)=a^b //y-1 gerade = z*x^y=a^b = I Damit ist gezeigt y gerade Y I v y ungerade Y I = I = wp(schleifenrumpf, I) Da b v I Y I ist die partielle Korrektheit gezeigt! Algorithmik 1, WS 2004/05, Folie 11-77

78 11.5 Beispiele 4. Terminierung Die Anweisungen vor und nach der Schleife verhindern die Terminierung nicht. Vor der Schleife ist y>0. Zeige: y wird in jeder Iteration mindestens um 1 verkleinert: explizite Subtraktion um 1 Halbierung verkleinert auch um mindestens 1: y/2 y-1 ] y 2y-2 ] 2 y Für y=1 gilt y div 2 = 0. Damit ist nach endlich vielen Schritten y=0 erreicht und die Schleife terminiert. Damit ist die totale Korrektheit gezeigt. Algorithmik 1, WS 2004/05, Folie while (y!=0) { if ((y%2)==1) { z=z*x; y=y-1; } x=x*x; y=y/2; }

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik Stefan Lucks Diskrete Strukturen (WS 2009/10) 57 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik Uhr: Stunden mod 24, Minuten mod 60, Sekunden mod 60,... Rechnerarithmetik: mod 2 w, w {8, 16, 32,

Mehr

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Algorithmen und deren Programmierung Prof. Dr. Nikolaus Wulff Definition Algorithmus Ein Algorithmus ist eine präzise formulierte Handlungsanweisung zur Lösung einer gleichartigen

Mehr

Teil X. Programmverifikation. Spezifikation eines Algorithmus einer Funktion einer Prozedur. Vorbedingungen Parameter Wertebereiche

Teil X. Programmverifikation. Spezifikation eines Algorithmus einer Funktion einer Prozedur. Vorbedingungen Parameter Wertebereiche Teil X Programmverifikation STRUKTURIERTES PROGRAMMIEREN Vorlesung im Wintersemester 2015 Prof. E.G. Schukat-Talamazzini Stand: 24. Juli 2015 Robert W Floyd 1936 2001 Sir Charles Antony Richard Hoare *1934

Mehr

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15 Übersicht Schleifen Schleifeninvarianten Referenztypen, Wrapperklassen und API CoMa I WS 08/09 1/15 CoMa I Programmierziele Linux bedienen Code umschreiben strukturierte Datentypen Anweisungen und Kontrollstrukturen

Mehr

5. Spezifikation und Verifikation von Programmen. Hier: Spezifikation einfacher Programme

5. Spezifikation und Verifikation von Programmen. Hier: Spezifikation einfacher Programme 5. Spezifikation und Verifikation von Programmen Programmentwicklung: genaue Kenntnis der gewünschten Leistungen offensichtlich unabdingbar In größeren Systemen: Anforderungsdefinition legt fest: - Funktionalität

Mehr

Entwurf von Algorithmen - Kontrollstrukturen

Entwurf von Algorithmen - Kontrollstrukturen Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer

Mehr

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz 4.5. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz 4.5. www.kit.edu. Institut für Angewandte Informatik Programmieren I Kontrollstrukturen Heusch 8 Ratz 4.5 KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Arten von Kontrollstrukturen

Mehr

Teil 2 - Softwaretechnik. Modul: Programmierung B-PRG Grundlagen der Programmierung 1 Teil 2. Übersicht. Softwaretechnik

Teil 2 - Softwaretechnik. Modul: Programmierung B-PRG Grundlagen der Programmierung 1 Teil 2. Übersicht. Softwaretechnik Grundlagen der Programmierung 1 Modul: Programmierung B-PRG Grundlagen der Programmierung 1 Teil 2 Softwaretechnik Prof. Dr. O. Drobnik Professur Architektur und Betrieb verteilter Systeme Institut für

Mehr

I. Aussagenlogik. Aussagenlogik untersucht Verknüpfungen wie "und", "oder", "nicht", "wenn... dann" zwischen atomaren und komplexen Sätzen.

I. Aussagenlogik. Aussagenlogik untersucht Verknüpfungen wie und, oder, nicht, wenn... dann zwischen atomaren und komplexen Sätzen. I. Aussagenlogik 2.1 Syntax Aussagenlogik untersucht Verknüpfungen wie "und", "oder", "nicht", "wenn... dann" zwischen atomaren und komplexen Sätzen. Sätze selbst sind entweder wahr oder falsch. Ansonsten

Mehr

Einfache Rechenstrukturen und Kontrollfluss II

Einfache Rechenstrukturen und Kontrollfluss II Einfache Rechenstrukturen und Kontrollfluss II Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer http://www.pst.informatik.uni-muenchen.de/lehre/ss06/infoii/ SS 06 Ziele Lernen imperative

Mehr

Algorithmen & Programmierung. Aspekte von Algorithmen

Algorithmen & Programmierung. Aspekte von Algorithmen Algorithmen & Programmierung Aspekte von Algorithmen Algorithmus (Wdh.) Aufgabe Beschreibung einer Abfolge von Schritten zur Lösung eines Problems in einer beliebigen Sprache Charakteristika eines Algorithmus

Mehr

Übersicht Programmablaufsteuerung

Übersicht Programmablaufsteuerung Übersicht Programmablaufsteuerung Konditionale Verzweigung: if - else switch-anweisung Schleifenkonstrukte: while, do - while for Schleife Sprung-Anweisungen: break, continue, goto, return Anweisungen

Mehr

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik Informatik I WS 2012/13 Tutorium zur Vorlesung 1. Alexander Zietlow zietlow@informatik.uni-tuebingen.de Wilhelm-Schickard-Institut für Informatik Eberhard Karls Universität Tübingen 11.02.2013 1. 2. 1.

Mehr

5. Tutorium zu Programmieren

5. Tutorium zu Programmieren 5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting

Mehr

Spezifikation der zulässigen Parameter. Bemerkungen: Bemerkungen: (2) Design by Contract:

Spezifikation der zulässigen Parameter. Bemerkungen: Bemerkungen: (2) Design by Contract: Spezifikation der zulässigen Parameter Bemerkungen: Bei jeder (partiellen) Funktion muss man sich überlegen und dokumentieren, welche aktuellen Parameter bei einer Anwendung zulässig sein sollen. Der Anwender

Mehr

Logik für Informatiker

Logik für Informatiker Logik für Informatiker 2. Aussagenlogik Teil 3 30.04.2012 Viorica Sofronie-Stokkermans Universität Koblenz-Landau e-mail: sofronie@uni-koblenz.de 1 Letztes Mal Aussagenlogik Syntax: welche Formeln? Semantik:

Mehr

VBA-Programmierung: Zusammenfassung

VBA-Programmierung: Zusammenfassung VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung

Mehr

Assertions (Zusicherungen)

Assertions (Zusicherungen) April 10, 2005 Oberseminar Software-Entwicklung Inhalt 1. Einführung (Motivation, Tony Hoare, Programmverifikation) 2. Design by Contract (Idee, Eiffel) 3. Praxis: Programming by Contract for Python 4.

Mehr

620.900 Propädeutikum zur Programmierung

620.900 Propädeutikum zur Programmierung 620.900 Propädeutikum zur Programmierung Andreas Bollin Institute für Informatik Systeme Universität Klagenfurt Andreas.Bollin@uni-klu.ac.at Tel: 0463 / 2700-3516 Lösung der Aufgaben (1/2) Lösung Aufgabe

Mehr

Theorie der Informatik

Theorie der Informatik Theorie der Informatik 6. Formale Sprachen und Grammatiken Malte Helmert Gabriele Röger Universität Basel 17. März 2014 Einführung Beispiel: Aussagenlogische Formeln Aus dem Logikteil: Definition (Syntax

Mehr

Das Briefträgerproblem

Das Briefträgerproblem Das Briefträgerproblem Paul Tabatabai 30. Dezember 2011 Inhaltsverzeichnis 1 Problemstellung und Modellierung 2 1.1 Problem................................ 2 1.2 Modellierung.............................

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen. 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

Java-Programmierung mit NetBeans

Java-Programmierung mit NetBeans Java-Programmierung mit NetBeans Steuerstrukturen Dr. Henry Herper Otto-von-Guericke-Universität Magdeburg - WS 2012/13 Steuerstrukturen Steuerstrukturen Verzweigungen Alternativen abweisende nichtabweisende

Mehr

5.1 Drei wichtige Beweistechniken... 55 5.2 Erklärungen zu den Beweistechniken... 56

5.1 Drei wichtige Beweistechniken... 55 5.2 Erklärungen zu den Beweistechniken... 56 5 Beweistechniken Übersicht 5.1 Drei wichtige Beweistechniken................................. 55 5. Erklärungen zu den Beweistechniken............................ 56 Dieses Kapitel ist den drei wichtigsten

Mehr

Informatik I WS 07/08 Tutorium 24

Informatik I WS 07/08 Tutorium 24 Info I Tutorium 24 Informatik I WS 07/08 Tutorium 24 20.12.07 Bastian Molkenthin E-Mail: infotut@sunshine2k.de Web: http://infotut.sunshine2k.de Rückblick Semi-Thue-Systeme Ein Semi-Thue-System besteht

Mehr

Diskrete Strukturen und Logik WiSe 2007/08 in Trier. Henning Fernau Universität Trier fernau@uni-trier.de

Diskrete Strukturen und Logik WiSe 2007/08 in Trier. Henning Fernau Universität Trier fernau@uni-trier.de Diskrete Strukturen und Logik WiSe 2007/08 in Trier Henning Fernau Universität Trier fernau@uni-trier.de 1 Diskrete Strukturen und Logik Gesamtübersicht Organisatorisches Einführung Logik & Mengenlehre

Mehr

Theoretische Informatik

Theoretische Informatik Theoretische Informatik Einheit 1 Mathematische Methodik 1. Problemlösen 2. Beweistechniken 3. Wichtige Grundbegriffe Methodik des Problemlösens Klärung der Voraussetzungen Welche Begriffe sind zum Verständnis

Mehr

Rekursionsanfang, Rekursionsschritt oder äquivalente Antworten. (z.b.: Abbruchbedingung (= Basisfall), eigentliche Rekursion (= Selbstaufruf))

Rekursionsanfang, Rekursionsschritt oder äquivalente Antworten. (z.b.: Abbruchbedingung (= Basisfall), eigentliche Rekursion (= Selbstaufruf)) Formale Methoden der Informatik WS / Lehrstuhl für Datenbanken und Künstliche Intelligenz Prof.Dr.Dr.F.J.Radermacher H. Ünver T. Rehfeld J. Dollinger 8. Aufgabenblatt Besprechung in den Tutorien vom..

Mehr

Semantik von Formeln und Sequenzen

Semantik von Formeln und Sequenzen Semantik von Formeln und Sequenzen 33 Grundidee der Verwendung von Logik im Software Entwurf Syntax: Menge von Formeln = Axiome Ax K ist beweisbar Formel ϕ beschreiben Korrektkeit Vollständigkeit beschreibt

Mehr

Kapitel 7: Formaler Datenbankentwurf

Kapitel 7: Formaler Datenbankentwurf 7. Formaler Datenbankentwurf Seite 1 Kapitel 7: Formaler Datenbankentwurf Die Schwierigkeiten der konzeptuellen Modellierung sind zu einem großen Teil dadurch begründet, dass sich die relevanten Strukturen

Mehr

Grundlagen der Programmierung (Vorlesung 14)

Grundlagen der Programmierung (Vorlesung 14) Grundlagen der Programmierung (Vorlesung 14) Ralf Möller, FH-Wedel Vorige Vorlesung Verifikation von Anweisungen und Anweisungsfolgen Schleifen Inhalt dieser Vorlesung Funktionen und Prozeduren Lernziele

Mehr

Algorithmen und algorithmische Sprachkonzepte

Algorithmen und algorithmische Sprachkonzepte Algorithmen und algorithmische Sprachkonzepte Programme und Algorithmen Foliensatz von A. Weber zur Vorlesung Informatik I, Bonn, 2002/03 Überarbeitet und ergänzt von W. Küchlin zu Informatik I, Tübingen

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

Mehr

Programmierung in Python

Programmierung in Python Programmierung in Python imperativ, objekt-orientiert dynamische Typisierung rapid prototyping Script-Sprache Funktionales und rekursives Programmieren P raktische Informatik 1, W S 2004/05, F olien P

Mehr

2. Vorlesung. Slide 40

2. Vorlesung. Slide 40 2. Vorlesung Slide 40 Knobelaufgabe Was tut dieses Programm? Informell Formal Wie stellt man dies sicher? knobel(a,b) { Wenn a = 0 dann return b sonst { solange b 0 wenn a > b dann { a := a - b sonst b

Mehr

Aufgaben Theoretische Informatik

Aufgaben Theoretische Informatik Aufgaben Theoretische Informatik Elmar Eder 26. Dezember 2015 Lösungen der Aufgaben bitte abgeben auf dem Abgabesystem von Dominik Kaaser auf https://ti.cosy.sbg.ac.at/ als ASCII- oder UTF-8-Dateien mit

Mehr

Informationsblatt Induktionsbeweis

Informationsblatt Induktionsbeweis Sommer 015 Informationsblatt Induktionsbeweis 31. März 015 Motivation Die vollständige Induktion ist ein wichtiges Beweisverfahren in der Informatik. Sie wird häufig dazu gebraucht, um mathematische Formeln

Mehr

der einzelnen Aussagen den Wahrheitswert der zusammengesetzten Aussage falsch falsch falsch falsch wahr falsch wahr falsch falsch wahr wahr wahr

der einzelnen Aussagen den Wahrheitswert der zusammengesetzten Aussage falsch falsch falsch falsch wahr falsch wahr falsch falsch wahr wahr wahr Kapitel 2 Grundbegriffe der Logik 2.1 Aussagen und deren Verknüpfungen Eine Aussage wie 4711 ist durch 3 teilbar oder 2 ist eine Primzahl, die nur wahr oder falsch sein kann, heißt logische Aussage. Ein

Mehr

Lenstras Algorithmus für Faktorisierung

Lenstras Algorithmus für Faktorisierung Lenstras Algorithmus für Faktorisierung Bertil Nestorius 9 März 2010 1 Motivation Die schnelle Faktorisierung von Zahlen ist heutzutage ein sehr wichtigen Thema, zb gibt es in der Kryptographie viele weit

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Rückblick Datentypen (int, long, double, boolean, String) Variablen und Variablendeklarationen

Mehr

Grundlagen der Theoretischen Informatik - Sommersemester 2012. Übungsblatt 1: Lösungsvorschläge

Grundlagen der Theoretischen Informatik - Sommersemester 2012. Übungsblatt 1: Lösungsvorschläge Lehrstuhl für Softwaretechnik und Programmiersprachen Professor Dr. Michael Leuschel Grundlagen der Theoretischen Informatik - Sommersemester 2012 Übungsblatt 1: Lösungsvorschläge Disclaimer: Bei Folgendem

Mehr

Zusammenfassung. Satz. 1 Seien F, G Boolesche Ausdrücke (in den Variablen x 1,..., x n ) 2 Seien f : B n B, g : B n B ihre Booleschen Funktionen

Zusammenfassung. Satz. 1 Seien F, G Boolesche Ausdrücke (in den Variablen x 1,..., x n ) 2 Seien f : B n B, g : B n B ihre Booleschen Funktionen Zusammenfassung Zusammenfassung der letzten LV Einführung in die Theoretische Informatik Woche 6 Harald Zankl Institut für Informatik @ UIBK Wintersemester 2014/2015 Satz 1 Seien F, G Boolesche Ausdrücke

Mehr

Master Technische Informatik. Seminar Informatik- SS 2010. Formale Programmverifikation: theoretische Grundlagen und Beispiele

Master Technische Informatik. Seminar Informatik- SS 2010. Formale Programmverifikation: theoretische Grundlagen und Beispiele Master Technische Informatik Seminar Informatik- SS 2010 (Betreuer: Prof. Nissen) Formale Programmverifikation: theoretische Grundlagen und Beispiele Bearbeiterin: Dorota Buczynski Matrikelnr. 11035857

Mehr

Informatik I WS 07/08 Tutorium 24

Informatik I WS 07/08 Tutorium 24 Info I Tutorium 24 Informatik I WS 07/08 Tutorium 24 3.2.07 astian Molkenthin E-Mail: infotut@sunshine2k.de Web: http://infotut.sunshine2k.de Organisatorisches / Review is zum 2.2 müssen alle Praxisaufgaben

Mehr

Pratts Primzahlzertifikate

Pratts Primzahlzertifikate Pratts Primzahlzertifikate Markus Englert 16.04.2009 Technische Universität München Fakultät für Informatik Proseminar: Perlen der Informatik 2 SoSe 2009 Leiter: Prof. Dr. Nipkow 1 Primzahltest Ein Primzahltest

Mehr

Codierung. Auszug aus dem Skript von Maciej Liśkiewicz und Henning Fernau

Codierung. Auszug aus dem Skript von Maciej Liśkiewicz und Henning Fernau Codierung Auszug aus dem Skript von Maciej Liśkiewicz und Henning Fernau Ein bisschen Informationstheorie Betrachten wir das folgende Problem: Wie lautet eine sinnvolle Definition für das quantitative

Mehr

Also kann nur A ist roter Südler und B ist grüner Nordler gelten.

Also kann nur A ist roter Südler und B ist grüner Nordler gelten. Aufgabe 1.1: (4 Punkte) Der Planet Og wird von zwei verschiedenen Rassen bewohnt - dem grünen und dem roten Volk. Desweiteren sind die Leute, die auf der nördlichen Halbkugel geboren wurden von denen auf

Mehr

P r o g r a m m a b l a u f s t e u e r u n g

P r o g r a m m a b l a u f s t e u e r u n g Jede Programmiersprache braucht Konstrukte zur Steuerung des Programmablaufs. Grundsätzlich unterscheiden wir Verzweigungen und Schleifen. Schleifen dienen dazu, bestimmte Anweisungen wiederholt auszuführen,

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 4 Einführung in die Programmiersprache Java (Teil II)... 4-2 4.4 Strukturierte Programmierung... 4-2 4.4.1 Strukturierung im Kleinen... 4-2 4.4.2 Addierer (do-schleife)... 4-3 4.4.3 Ein- Mal- Eins

Mehr

Lösungen zu Kapitel 7

Lösungen zu Kapitel 7 Lösungen zu Kapitel 7 Lösung zu Aufgabe 1: Nach Definition 7.1 ist eine Verknüpfung auf der Menge H durch eine Abbildung : H H H definiert. Gilt H = {a 1,..., a m }, so wird eine Verknüpfung auch vollständig

Mehr

Optimalitätskriterien

Optimalitätskriterien Kapitel 4 Optimalitätskriterien Als Optimalitätskriterien bezeichnet man notwendige oder hinreichende Bedingungen dafür, dass ein x 0 Ω R n Lösung eines Optimierungsproblems ist. Diese Kriterien besitzen

Mehr

Softwareentwicklung Allgemeines und prozedurale Konstrukte

Softwareentwicklung Allgemeines und prozedurale Konstrukte Mag. iur. Dr. techn. Michael Sonntag Softwareentwicklung Allgemeines und prozedurale Konstrukte E-Mail: sonntag@fim.uni-linz.ac.at http://www.fim.uni-linz.ac.at/staff/sonntag.htm Institut für Informationsverarbeitung

Mehr

Oft kommt es darauf an, Potenzen a n mod m zu berechnen. Dabei kann n eine sehr groÿe Zahl sein.

Oft kommt es darauf an, Potenzen a n mod m zu berechnen. Dabei kann n eine sehr groÿe Zahl sein. Oft kommt es darauf an, Potenzen a n mod m zu berechnen. Dabei kann n eine sehr groÿe Zahl sein. 3 1384788374932954500363985493554603584759389 mod 28374618732464817362847326847331872341234 Wieso kann ein

Mehr

Praktikum Diskrete Optimierung (Teil 11) 17.07.2006 1

Praktikum Diskrete Optimierung (Teil 11) 17.07.2006 1 Praktikum Diskrete Optimierung (Teil 11) 17.07.2006 1 1 Primzahltest 1.1 Motivation Primzahlen spielen bei zahlreichen Algorithmen, die Methoden aus der Zahlen-Theorie verwenden, eine zentrale Rolle. Hierzu

Mehr

HOCHSCHULE KONSTANZ TECHNIK, WIRTSCHAFT UND GESTALTUNG. Das Luzifer-Rätsel. Prof. Dr. Hartmut Plesske Wintersemester 2008/09. von.

HOCHSCHULE KONSTANZ TECHNIK, WIRTSCHAFT UND GESTALTUNG. Das Luzifer-Rätsel. Prof. Dr. Hartmut Plesske Wintersemester 2008/09. von. HOCHSCHULE KONSTANZ TECHNIK, WIRTSCHAFT UND GESTALTUNG Fakultät Informatik Das Luzifer-Rätsel Prof. Dr. Hartmut Plesske Wintersemester 2008/09 von Max Nagl nagl@fh-konstanz.de Inhaltsverzeichnis Inhaltsverzeichnis

Mehr

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging. Algorithmische Kernsprache Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging. Ausdrücke Anweisungen Ausdrücke bezeichnen einen Wert Kontext stellt Werte von Variablen Werte

Mehr

Formale Methoden II. Gerhard Jäger. SS 2008 Universität Bielefeld. Teil 8, 11. Juni 2008. Formale Methoden II p.1/30

Formale Methoden II. Gerhard Jäger. SS 2008 Universität Bielefeld. Teil 8, 11. Juni 2008. Formale Methoden II p.1/30 Formale Methoden II SS 2008 Universität Bielefeld Teil 8, 11. Juni 2008 Gerhard Jäger Formale Methoden II p.1/30 Beispiele Anmerkung: wenn der Wahrheitswert einer Formel in einem Modell nicht von der Belegungsfunktion

Mehr

Abschnitt: Algorithmendesign und Laufzeitanalyse

Abschnitt: Algorithmendesign und Laufzeitanalyse Abschnitt: Algorithmendesign und Laufzeitanalyse Definition Divide-and-Conquer Paradigma Divide-and-Conquer Algorithmen verwenden die Strategien 1 Divide: Teile das Problem rekursiv in Subproblem gleicher

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 4 Anweisungen... 4-2 4.1 Strukturierte Programmierung... 4-2 4.1.1 Geschichte... 4-2 4.1.2 Strukturierung im Kleinen... 4-2 4.2 Einige Beispielanwendungen... 4-4 4.2.1 Addierer (do-schleife)...

Mehr

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Kontrollstrukturen, Pseudocode und Modulo-Rechnung Kontrollstrukturen, Pseudocode und Modulo-Rechnung CoMa-Übung III TU Berlin 29.10.2012 CoMa-Übung III (TU Berlin) Kontrollstrukturen, Pseudocode und Modulo-Rechnung 29.10.2012 1 / 1 Themen der Übung 1

Mehr

5 Logische Programmierung

5 Logische Programmierung 5 Logische Programmierung Logik wird als Programmiersprache benutzt Der logische Ansatz zu Programmierung ist (sowie der funktionale) deklarativ; Programme können mit Hilfe zweier abstrakten, maschinen-unabhängigen

Mehr

Theoretische Grundlagen der Informatik

Theoretische Grundlagen der Informatik Theoretische Grundlagen der Informatik Vorlesung am 12.01.2012 INSTITUT FÜR THEORETISCHE 0 KIT 12.01.2012 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik

Mehr

Primitive Datentypen

Primitive Datentypen Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.

Mehr

Prädikatenlogik - Micromodels of Software

Prädikatenlogik - Micromodels of Software Prädikatenlogik - Micromodels of Software Philipp Koch Seminar Logik für Informatiker Universität Paderborn Revision: 30. Mai 2005 1 Inhaltsverzeichnis 1 Motivation 3 2 Modelle 3 2.1 Definition eines Modells.......................

Mehr

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7 Java 7 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Dezember 2011 JAV7 5 Java 7 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Wiederholungen - while - do-while - for

Mehr

Sprachbeschreibung und Erweiterung

Sprachbeschreibung und Erweiterung Sprachbeschreibung und Erweiterung Worte, Sprachen, reguläre Ausdrücke, Automaten, BNF, Grammatik, Syntax- Diagramme, Spracherweiterungen do, for, break, switch Formale Beschreibung von Programmiersprachen

Mehr

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c) 5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c) mit V = {1,...,n} und E {(v, w) 1 apple v, w apple n, v 6= w}. c : E!

Mehr

Theoretische Informatik I

Theoretische Informatik I Theoretische Informatik I Einheit 2.4 Grammatiken 1. Arbeitsweise 2. Klassifizierung 3. Beziehung zu Automaten Beschreibungsformen für Sprachen Mathematische Mengennotation Prädikate beschreiben Eigenschaften

Mehr

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete Kapitel 4: Dynamische Datenstrukturen Algorithmen und Datenstrukturen WS 2012/13 Prof. Dr. Sándor Fekete 4.4 Binäre Suche Aufgabenstellung: Rate eine Zahl zwischen 100 und 114! Algorithmus 4.1 INPUT: OUTPUT:

Mehr

Erfüllbarkeit und Allgemeingültigkeit

Erfüllbarkeit und Allgemeingültigkeit Theoretische Informatik: Logik, M. Lange, FB16, Uni Kassel: 3.3 Aussagenlogik Erfüllbarkeit 44 Erfüllbarkeit und Allgemeingültigkeit Def.: eine Formel ϕ heißt erfüllbar, wennesein I gibt, so dass I = ϕ

Mehr

Teil II. Nichtlineare Optimierung

Teil II. Nichtlineare Optimierung Teil II Nichtlineare Optimierung 60 Kapitel 1 Einleitung In diesem Abschnitt wird die Optimierung von Funktionen min {f(x)} x Ω betrachtet, wobei Ω R n eine abgeschlossene Menge und f : Ω R eine gegebene

Mehr

Was bisher geschah Kryptographische Systeme (M, C, K, e, d) Verfahren: symmetrisch klassisch: Verschiebechiffren (Spezialfall Caesar-Code)

Was bisher geschah Kryptographische Systeme (M, C, K, e, d) Verfahren: symmetrisch klassisch: Verschiebechiffren (Spezialfall Caesar-Code) Was bisher geschah Kryptographische Systeme (M, C, K, e, d) Verfahren: symmetrisch klassisch: Verschiebechiffren (Spezialfall Caesar-Code) Multiplikative Chiffren monoalphabetische Substitutions-Chiffren:

Mehr

Informatik A ( Frank Hoffmann)

Informatik A ( Frank Hoffmann) Teillösungen zum 1. Aufgabenblatt zur Vorlesung Informatik A ( Frank Hoffmann) 1. Improvisieren Stellen Sie die Zahl 6 dar durch einen Ausdruck, der genau dreimal die Ziffer i enthält und ansonsten neben

Mehr

Grundlagen der Künstlichen Intelligenz

Grundlagen der Künstlichen Intelligenz Grundlagen der Künstlichen Intelligenz 22. Constraint-Satisfaction-Probleme: Kantenkonsistenz Malte Helmert Universität Basel 14. April 2014 Constraint-Satisfaction-Probleme: Überblick Kapitelüberblick

Mehr

Steueranweisungen. Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 32

Steueranweisungen. Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 32 Steueranweisungen Bisher Programme mit Funktionen als einfache Folge von Befehlen Ablauf von Programmen darüber hinaus steuerbar über Bedingte Ausführung: Ausführung von Programmteilen (Befehlen oder Programmblöcken)

Mehr

Kapitel 5: Applikative Programmierung

Kapitel 5: Applikative Programmierung Kapitel 5: Applikative Programmierung In der applikativen Programmierung wird ein Programm als eine mathematische Funktion von Eingabe-in Ausgabewerte betrachtet. Das Ausführen eines Programms besteht

Mehr

Kapitel 4. Euklidische Ringe und die Jordansche Normalform. 4.1 Euklidische Ringe

Kapitel 4. Euklidische Ringe und die Jordansche Normalform. 4.1 Euklidische Ringe Kapitel 4 Euklidische Ringe und die Jordansche Normalform 4.1 Euklidische Ringe Die Ringe der ganzen Zahlen, Z, sowie Polynomringe über Körpern, K[X], wobei K ein Körper ist, haben die folgenden Gemeinsamheiten:

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Zusammenfassung Grundzüge der Informatik 4

Zusammenfassung Grundzüge der Informatik 4 Zusammenfassung Grundzüge der Informatik 4 Sommersemester 04 Thorsten Wink 21. September 2004 Version 1.2 Dieses Dokument wurde in L A TEX 2εgeschrieben. Stand: 21. September 2004 Inhaltsverzeichnis 1

Mehr

2 3 x3 17. x k dx = x k x k+1 k +1. Mit jeder weiteren partiellen Integration reduziert sich der Grad des Faktors x n, induktiv erhalten wir also

2 3 x3 17. x k dx = x k x k+1 k +1. Mit jeder weiteren partiellen Integration reduziert sich der Grad des Faktors x n, induktiv erhalten wir also Universität Konstanz Fachbereich Mathematik und Statistik Repetitorium Analysis 0 Dr DK Huynh Blatt 8 Aufgabe 6 Bestimmen Sie (a) (x + x 7x+)dx (c) (f) x n exp(x)dx (n N fest) sin (x)dx (g) (b) (d) ln(x)dx

Mehr

Programmierung, Algorithmen und Techniken. von Thomas Ohlhauser

Programmierung, Algorithmen und Techniken. von Thomas Ohlhauser Programmierung, Algorithmen und Techniken von Thomas Ohlhauser 1. Begriff Programmierung Entwicklung von Programmen inklusive der dabei verwendeten Methoden und Denkweisen. Ein Programm ist eine eine Zusammensetzung

Mehr

WS 2009/10. Diskrete Strukturen

WS 2009/10. Diskrete Strukturen WS 29/ Diskrete Strukturen Prof. Dr. J. Esparza Lehrstuhl für Grundlagen der Softwarezuverlässigkeit und theoretische Informatik Fakultät für Informatik Technische Universität München http://www7.in.tum.de/um/courses/ds/ws9

Mehr

Ferienakademie 2001: Kryptographie und Sicherheit offener Systeme. Faktorisierung. Stefan Büttcher stefan@buettcher.org

Ferienakademie 2001: Kryptographie und Sicherheit offener Systeme. Faktorisierung. Stefan Büttcher stefan@buettcher.org Ferienakademie 2001: Kryptographie und Sicherheit offener Systeme Faktorisierung Stefan Büttcher stefan@buettcher.org 1 Definition. (RSA-Problem) Gegeben: Ò ÔÕ, ein RSA-Modul mit unbekannten Primfaktoren

Mehr

Theoretische Grundlagen des Software Engineering

Theoretische Grundlagen des Software Engineering Theoretische Grundlagen des Software Engineering 11: Abstrakte Reduktionssysteme schulz@eprover.org Reduktionssysteme Definition: Reduktionssystem Ein Reduktionssystem ist ein Tupel (A, ) Dabei gilt: A

Mehr

Automaten und formale Sprachen: Vorlesungsskript G. Brewka, A. Nittka

Automaten und formale Sprachen: Vorlesungsskript G. Brewka, A. Nittka Automaten und formale Sprachen: Vorlesungsskript G. Brewka, A. Nittka Literatur: John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman, Einführung in die Automatentheorie, Formale Sprachen und Komplexitätstheorie,

Mehr

Klausur für Studiengänge INF und IST

Klausur für Studiengänge INF und IST Familienname: Matrikelnummer: Studiengang: (bitte ankreuzen) INF IST MED Vorname: Email-Adresse: Immatrikulationsjahr: Klausur für Studiengänge INF und IST sowie Leistungsschein für Studiengang Medieninformatik

Mehr

Theoretische Informatik

Theoretische Informatik Theoretische Informatik - das Quiz zur Vorlesung Teil I - Grundzüge der Logik In der Logik geht es um... (A) die Formen korrekten Folgerns (B) die Unterscheidung von wahr und falsch (C) das Finden von

Mehr

Grundlagen der Informationverarbeitung

Grundlagen der Informationverarbeitung Grundlagen der Informationverarbeitung Information wird im Computer binär repräsentiert. Die binär dargestellten Daten sollen im Computer verarbeitet werden, d.h. es müssen Rechnerschaltungen existieren,

Mehr

Teil 1: Digitale Logik

Teil 1: Digitale Logik Teil 1: Digitale Logik Inhalt: Boolesche Algebra kombinatorische Logik sequentielle Logik kurzer Exkurs technologische Grundlagen programmierbare logische Bausteine 1 Analoge und digitale Hardware bei

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

RSA-Verschlüsselung. von Johannes Becker Gießen 2006/2008

RSA-Verschlüsselung. von Johannes Becker Gießen 2006/2008 RSA-Verschlüsselung von Johannes Becker Gießen 2006/2008 Zusammenfassung Es wird gezeigt, wieso das nach Ronald L. Rivest, Adi Shamir und Leonard Adleman genannte RSA-Krptosstem funktioniert, das mittlerweile

Mehr

Fakultät Wirtschaftswissenschaft

Fakultät Wirtschaftswissenschaft Fakultät Wirtschaftswissenschaft Matrikelnr. Name Vorname KLAUSUR: Entwurf und Implementierung von Informationssystemen (32561) TERMIN: 11.09.2013, 14.00 16.00 Uhr PRÜFER: Univ.-Prof. Dr. Stefan Strecker

Mehr

HEUTE. Effizienzbeispiel: bekannte Version (Übung 04.11.04) Mathematik: Was ist Effizienz? vollständige Induktion

HEUTE. Effizienzbeispiel: bekannte Version (Übung 04.11.04) Mathematik: Was ist Effizienz? vollständige Induktion 17.11.04 1 HEUTE 17.11.04 3 Effizienzbeispiel: bekannte Version (Übung 04.11.04) Mathematik: was ist Effizienz? vollständige Induktion JAVA: Arrays die for -Schleife die Sprunganweisungen break und continue

Mehr

Codierungstheorie Rudolf Scharlau, SoSe 2006 9

Codierungstheorie Rudolf Scharlau, SoSe 2006 9 Codierungstheorie Rudolf Scharlau, SoSe 2006 9 2 Optimale Codes Optimalität bezieht sich auf eine gegebene Quelle, d.h. eine Wahrscheinlichkeitsverteilung auf den Symbolen s 1,..., s q des Quellalphabets

Mehr

Erster Bug: eine Motte

Erster Bug: eine Motte SOFTWAREFEHLER Der erste Bug Erster Bug: eine Motte Der Begriff Bug (deutsch: Motte) stammt aus dem Jahre 1945, als Ingenieure in einem Schaltrelais eines Computers (Harvard Mark II-System) eine Motte

Mehr

Kongruenzrechnung. 2 Kongruenzrechnung 7 2.1 Rechnenregeln Addition und Multiplikation... 7 2.2 Rechenregeln bzgl. verschiedener Moduln...

Kongruenzrechnung. 2 Kongruenzrechnung 7 2.1 Rechnenregeln Addition und Multiplikation... 7 2.2 Rechenregeln bzgl. verschiedener Moduln... Kongruenzrechnung Inhaltsverzeichnis 1 Einführung und Definitionen 2 1.1 Einige Beispiele aus dem Alltag..................... 2 1.2 Kongruenzrechnung im Alltag und Rechenproben........... 3 1.3 Kongruenzen

Mehr

Fallunterscheidung: if-statement

Fallunterscheidung: if-statement Fallunterscheidung: if-statement A E 1 E 2 V 1 V 2 Syntax: if ( ausdruck ) Semantik: else anweisungsfolge_1 anweisungsfolge_2 1. Der ausdruck wird bewertet 2. Ergibt die Bewertung einen Wert ungleich 0

Mehr

2.11 Kontextfreie Grammatiken und Parsebäume

2.11 Kontextfreie Grammatiken und Parsebäume 2.11 Kontextfreie Grammatiken und Parsebäume Beispiel: Beispiel (Teil 3): Beweis für L(G) L: Alle Strings aus L der Länge 0 und 2 sind auch in L(G). Als Induktionsannahme gehen wir davon aus, dass alle

Mehr