Zentralübung: Schleifeninvarianten

Größe: px
Ab Seite anzeigen:

Download "Zentralübung: Schleifeninvarianten"

Transkript

1 Zentralübung: Schleifeninvarianten zur VL. Funktionale Programmierung und Verifikation (EIDI2) M.Sc. Nico Hartmann 24. November /134

2 Inhalt Warum Schleifeninvarianten? Invarianten wählen Die Besten Invarianten Finden - 10 Tipps Praktische Beispiele 2/134

3 Inhalt Vorausgesetzt (und nicht im Detail besprochen) werden folgende Kenntnisse: MiniJava Anweisungen und deren konkrete Semantik Bedeutung der schwächsten Vorbedingungen (WPs) Verifikationsverfahren mittels WP-Kalkül Terminierungsbeweise mittels WP-Kalkül Definitionen der WP-Operatoren (WP[[.]]) Aussagenlogik (insb. Umformungsregeln, Implikation) 3/134

4 Warum Schleifeninvarianten? 4/134

5 Warum Schleifeninvarianten? Wie können wir die schwächsten Vorbedingungen für F finden? Start s 1 A : WP[[s 1 ]](B) C : WP[[s 2 ]](E) no B : WP[[b]](C, D) yes b D : WP[[s 3 ]](E) s 2 s 3 s 4 F Stop E : WP[[s 4 ]](F ) Direkt rückwärts durch den Kontrollfluss berechnen 5/134

6 Warum Schleifeninvarianten? Wie können wir die schwächsten Vorbedingungen für F finden? A : WP[[b]](B, F ) F yes b no B : WP[[s 1 ]](C) C : WP[[s 2 ]](D) s 1 s 2 s 4 s 3 E : WP[[s 4 ]](A) D : WP[[s 3 ]](E) WPs hängen zyklisch voneinander ab 6/134

7 Warum Schleifeninvarianten? In der Schleife hängen alle WPs voneinander ab Keine lässt sich ohne die andere berechnen Lösung: Wir geben eine Zusicherung vor dann berechnen wir die übrigen WPs in der Schleife und zeigen, dass unsere gewählte Zusicherung gilt 7/134

8 Warum Schleifeninvarianten? An welcher Stelle geben wir eine Zusicherung vor? Jeder Programmpunkt in der Schleife ist möglich Wir entscheiden uns für den Join -Punkt der Schleife Ist ein markanter Punkt jeder Schleife Wird vor und nach jedem Schleifendurchlauf erreicht Zusicherungen sind etwas einfacher zu bestimmen Wir können unsere Lösungen besser vergleichen 8/134

9 Warum Schleifeninvarianten? Wie können wir zeigen, dass unsere Vorgabe richtig war? Was bedeutet richtig hier überhaupt? 9/134

10 Warum Schleifeninvarianten? A WP[[b]](B, F ) F yes b no B : WP[[s 1 ]](C) C : WP[[s 2 ]](D) s 1 s 2 s 4 s 3 E : WP[[s 4 ]](A) D : WP[[s 3 ]](E) 10/134

11 Warum Schleifeninvarianten? WP[[b]](B, F ) ist die schwächste Vorbedingung von A, also genau das was mindestens gelten muss, damit A gilt Die Frage ist also: Erfüllt A seine eigene Mindestvoraussetzung? A muss also so stark sein wie WP[[b]](B, F ) oder stärker Es muss A = WP[[b]](B, F ) gelten Das nennen wir dann lokal konsistent 11/134

12 Invarianten wählen 12/134

13 Invarianten wählen Wie können wir zeigen, dass unsere Vorgabe richtig war? Was bedeutet richtig hier überhaupt? Es bedeutet: Die resultierenden Zusicherungen sind lokal konsistent Die vorgegebene Zusicherung ist geeignet um unsere Aussage (F ) allgemein zu zeigen 13/134

14 Invarianten wählen Was ist, wenn wir die Schleifeninvariante zu schwach wählen? 14/134

15 Invarianten wählen Start n = read() x = 0 i = 0 x 0 x = 3n Stop yes i == n no i = i + 1 x = x /134

16 Invarianten wählen Start n = read() x = 0 x 0 = (i n x 3) (i = n x = 3n) i = 0 x = 3n Stop yes i == n no x 3 i = i + 1 x 3 x = x /134

17 Invarianten wählen Was ist, wenn wir die Schleifeninvariante zu schwach wählen? Es lässt sich keine lokale Konsistenz zeigen Aussage lässt sich nicht beweisen Was ist, wenn wir die Schleifeninvariante zu stark wählen? 17/134

18 Invarianten wählen Start n = read() x = 0 i = 0 x = 3i i 0 n 0 x = 3n Stop yes i == n no i = i + 1 x = x /134

19 Invarianten wählen Start false n = read() n 0 x = 0 x = 0 n 0 i = 0 x = 3i i 0 n 0 x = 3n Stop yes i == n no x = 3i i 1 n 0 i = i + 1 x = 3i 3 i 0 n 0 x = x /134

20 Invarianten wählen Was ist, wenn wir die Schleifeninvariante zu schwach wählen? es lässt sich keine lokale Konsistenz zeigen Aussage lässt sich nicht beweisen Was ist, wenn wir die Schleifeninvariante zu stark wählen? Aussage lässt sich nur noch für einen Teil der Programmausführungen/Eingaben beweisen Formeln werden größer, Rechnungen u.u. aufwändiger 20/134

21 Invarianten wählen Das Problem: n 0 gilt einfach nicht allgemein im Programm Eine Invariante, die nur gültige Aussagen enthält Ist möglicherweise stärker als nötig Macht Formeln und Rechnungen u.u. länger als nötig Ist niemals zu stark um für alle Ausführungen zu beweisen 21/134

22 Invarianten wählen Wie findet man nun eine geeignete Invariante? NICHT durch Raten! Indem man die Schleife/das Programm versteht Solange wir nur gültige Aussagen verwenden, können wir wenig falsch machen Mit einer stärkeren Invariante wird der Beweis immer funktionieren Mit einer schwächeren Invariante wird der Beweis zwar scheitern, uns aber einen guten Hinweis darauf geben, was uns in der Invariante fehlt 22/134

23 Invarianten wählen Das eröffnet zwei Herangehensweisen 1. Alle gültigen Zusicherungen verwenden Beweis klappt garantiert (wenn sich die Aussage beweisen lässt) Beweis wird länger und komplizierter Es kann mitunter sehr schwierig sein alle geltenden Zusammenhänge zu finden 2. Mit einer schwächeren Zusicherung starten und bei Bedarf verstärken Beweis ist kürzer und einfacher Rechnungen müssen u.u (mehrfach) wiederholt werden 23/134

24 Invarianten wählen Die beste Herangehensweise ist ein Mittelweg: Mit Aussagen starten, bei denen man bereits vorher vermutet, dass man diese benötigen wird (natürlich nur gültige) Wenn der Beweis scheitert, um die nötigen Aussagen verstärken und wiederholen bis er gelingt Was hilft um eine (möglichst) ideale Startaussage zu finden? Gutes Verständnis von (imperativen) Programmen Übung und Erfahrung Die folgenden Tipps 24/134

25 Die Besten Invarianten Finden - 10 Tipps 25/134

26 Die Besten Invarianten Finden - Definitionen Im Folgenden verwenden wir diese Variablen: x - Ergebnisvariable, über die wir etwas Beweisen wollen y - Für zusätzliche Berechnungen i - Schleifenzähler n, m - Programmeingaben, die mit read() eingelesen werden k - Zusäztliche Hilfsvariable I - Schleifeninvariante Wir gehen außerdem davon aus, dass alle Variablen entsprechend des Beispiels initialisiert sind, ohne dass wir dies explizit angeben. In der Regel sind x, y, i dabei 0. 26/134

27 Tipp 0 27/134

28 Die Besten Invarianten finden - Tipp 0 Tipp 0 Kein Tipp funktioniert immer. Für alle Tipps lassen sich Beispiele finden, bei denen sie nicht funktionieren. 28/134

29 Tipp 1 29/134

30 Die Besten Invarianten finden - Tipp 1 i 0 x = 2n yes i == n no i = i + 1 x = x /134

31 Die Besten Invarianten finden - Tipp 1 WP[[x = x + 2]](i 0) i 0 WP[[i = i + 1]](i 0) i i 1 31/134

32 Die Besten Invarianten finden - Tipp 1 i 0 = (i n i 1) (i = n x = 2n) Warum können wir das nicht zeigen? Wir wissen nichts über x Also muss eine Aussage über x in die Invariante 32/134

33 Die Besten Invarianten finden - Tipp 1 x 0 x = 2n yes i == n no i = i + 1 x = x /134

34 Die Besten Invarianten finden - Tipp 1 WP[[x = x + 2]](x 0) x x 2 WP[[i = i + 1]](x 2) x 2 34/134

35 Die Besten Invarianten finden - Tipp 1 x 0 = (i n x 2) (i = n x = 2n) Warum können wir das nicht zeigen? Weil unsere Informationen über x in der Schleife zu unpräzise sind Wir benötigen eine genauere Aussage über den Wert von x innerhalb der Schleife 35/134

36 Die Besten Invarianten finden - Tipp 1 x = 2i x = 2n yes i == n no i = i + 1 x = x /134

37 Die Besten Invarianten finden - Tipp 1 WP[[x = x + 2]](x = 2i) x + 2 = 2i x = 2i 2 x = 2(i 1) WP[[i = i + 1]](x = 2(i 1)) x = 2i I 37/134

38 Die Besten Invarianten finden - Tipp 1 Tipp 1 Wir benötigen eine Aussage über den Wert der Variablen, über die wir etwas beweisen wollen (x) in der Schleifeninvariante. Die Aussage muss dabei mindestens so präzise (,,, =) sein, wie die Aussage, die wir beweisen wollen. 38/134

39 Tipp 2 39/134

40 Die Besten Invarianten finden - Tipp 2 i x = 3k k=0 n x = 3k k=0 yes i == n no i = i + 1 y = y + 3 x = x + y 40/134

41 Die Besten Invarianten finden - Tipp 2 i i WP[[x = x + y]](x = 3k) x + y = 3k k=0 k=0 i x = 3k y k=0 i i WP[[y = y + 3]](x = 3k y) x = 3k y 3 k=0 k=0 i i+1 WP[[i = i + 1]](x = 3k y 3) x = 3k y 3 k=0 k=0 41/134

42 Die Besten Invarianten finden - Tipp 2 x = i 3k k=0 i+1 = x = Warum können wir das nicht zeigen? Wir wissen nichts über y k=0 3k y 3 Also muss eine Aussage über y in die Invariante 42/134

43 Die Besten Invarianten finden - Tipp 2 i x = 3k y = 3i k=0 n x = 3k k=0 yes i == n no i = i + 1 y = y + 3 x = x + y 43/134

44 Die Besten Invarianten finden - Tipp 2 i i WP[[x = x + y]](x = 3k y = 3i) x + y = 3k k=0 k=0 i x = 3k y y = 3i k=0 i x = 3k 3i y = 3i k=0 i 1 x = 3k y = 3i k=0 44/134

45 Die Besten Invarianten finden - Tipp 2 i 1 i 1 WP[[y = y + 3]](x = 3k y = 3i) x = 3k y + 3 = 3i k=0 k=0 i 1 x = 3k y = 3i 3 k=0 i 1 x = 3k y = 3(i 1) k=0 i 1 i WP[[i = i + 1]](x = 3k y = 3(i 1)) x = 3k y = 3i k=0 k=0 I 45/134

46 Die Besten Invarianten finden - Tipp 2 i x = 3k k=0 n x = 3k k=0 yes i == n no i = i + 1 y = i 3 x = x + y 46/134

47 Die Besten Invarianten finden - Tipp 2 i i WP[[x = x + y]](x = 3k) x + y = 3k k=0 k=0 i x = 3k y k=0 i i WP[[y = i 3]](x = 3k y) x = 3k 3i k=0 k=0 i 1 x = 3k k=0 i 1 i WP[[i = i + 1]](x = 3k) x = 3k k=0 k=0 I 47/134

48 Die Besten Invarianten finden - Tipp 2 Tipp 2 Variablen, die an der Berechnung von x beteiligt sind und Werte von einer Schleifeniteration in die nächste transportieren ( loop-carried ), müssen in die Schleifeninvariante aufgenommen werden. 48/134

49 Tipp 3 49/134

50 Die Besten Invarianten finden - Tipp 3 Wir müssen die Schleife/das Programm verstehen, um eine sinnvolle Invariante finden zu können. Dabei kann eine Tabelle für einige Schleifeniterationen helfen. 50/134

51 Die Besten Invarianten finden - Tipp 3 x =... yes i == n no i = i + 1 y = y i x = x + 2 y 51/134

52 Die Besten Invarianten finden - Tipp 3 Wir machen eine Tabelle: # i x y Welche Formeln gelten nun für x und y? 52/134

53 Die Besten Invarianten finden - Tipp 3 Wir machen eine Tabelle: # i x y Welche Formeln gelten nun für x und y? 53/134

54 Die Besten Invarianten finden - Tipp 3 Wir machen eine nützlichere Tabelle: # i i i x i y i 54/134

55 Die Besten Invarianten finden - Tipp 3 Jetzt noch eine -freie Darstellung finden i = i! = y 2 + (2 1) + (2 1 2) + ( ) + + ( i) = 2 ( (1 2) + (1 2 3) + + (1 2 3 i)) = 2 (0! + 1! + 2! + 3! + + i!) i = 2 k! = x k=0 55/134

56 Die Besten Invarianten finden - Tipp 3 i x = 2 k! y = i! k=0 n x = 2 k! k=0 yes i == n no i = i + 1 y = y i x = x + 2 y 56/134

57 Die Besten Invarianten finden - Tipp 3 Tipp 3 Die Schleife zu verstehen ist unerlässlich. Eine Tabelle für einige Schleifendurchläufe kann helfen die Zusammenhänge der Variablen (insbesondere mit dem Schleifenzähler i) aufzudecken. Oft lassen sich mit einer Tabelle, in der man die einzelnen Berechnungsschritte notiert, diese Zusammenhänge deutlich leichter erkennen, als mit einer Tabelle, die nur konkrete Werte enthält. 57/134

58 Tipp 4 58/134

59 Die Besten Invarianten finden - Tipp 4 n = read() yes n < 0 no k = n k = n k = k + 4 x = 2i 2 32 x = 2n n yes i == k no 59/134

60 Die Besten Invarianten finden - Tipp 4 Warum kann die Invariante x = 2i 2 32 niemals ausreichen um x = 2n n zu beweisen? Betrachten wir die WP-Berechnung an der Verzweigung: x = 2i 2 32 = (i = k x = 2n n ) (... ) Aus x = 2i 2 32 und i = k können wir x = 2k 2 32 folgern, aber wir wissen nicht, wie wir x = 2n n dahin umformen können. Es fehlt eine Beziehung von n zu i oder k. 60/134

61 Die Besten Invarianten finden - Tipp 4 Gibt es eine Beziehung von n zu i oder k? n = read() yes k = n n < 0 no k = n k = k + 4 k = n + 4 x = 2i 2 32 x = 2n n yes i == k no 61/134

62 Die Besten Invarianten finden - Tipp 4 k = n + 4 x = 2i 2 32 = i = k x = 2n n n = k 4 x = 2i 2 32 = i = k x = 2(k 4) k 64 n = k 4 x = 2i 2 32 = i = k x = 2k 2 32 n = k 4 x = 2i 2 32 = i = k x = 2i 2 32 Diese Implikation lässt sich nun (zusammen mit der anderen Seite der Verzweigung) leicht zeigen. 62/134

63 Die Besten Invarianten finden - Tipp 4 Tipp 4 Die Variablen, die zur Berechnung von x im Beweisziel verwendet werden und diejenigen, die dazu in der Invariante verwendet werden, müssen in Beziehung stehen. Wenn diese Beziehung nicht aus der Verzweigungsbedingung folgt, müssen weitere Aussagen zur Invariante hinzugefügt werden. 63/134

64 Tipp 5 64/134

65 Die Besten Invarianten finden - Tipp 5 x = 2i x = 2n yes i >= n no i = i + 1 x = x /134

66 Die Besten Invarianten finden - Tipp 5 WP[[x = x + 2]](x = 2i) x + 2 = 2i x = 2(i 1) WP[[i = i + 1]](x = 2(i 1)) x = 2i I 66/134

67 Die Besten Invarianten finden - Tipp 5 x = 2i = (i < n x = 2i) (i n x = 2n) Warum können wir das nicht zeigen? wir wissen am Schleifenausgang nur, dass i n und können deshalb nicht x = 2n zu x = 2i umschreiben wir benötigen die Aussage, dass dort genau i = n gilt Wir verstärken die Aussage (WP): (i < n x = 2i) (i n x = 2n) = (i < n x = 2i) (i = n x = 2n) (i < n x = 2i) (i = n x = 2i) x = 2i (i < n i = n) x = 2i i n 67/134

68 Die Besten Invarianten finden - Tipp 5 x = 2i = x = 2i i n Warum können wir das dennoch immer noch nicht zeigen? weil uns jetzt ein i n in der Invariante fehlt 68/134

69 Die Besten Invarianten finden - Tipp 5 x = 2i i n x = 2n yes i >= n no i = i + 1 x = x /134

70 Die Besten Invarianten finden - Tipp 5 WP[[x = x + 2]](x = 2i i n) x + 2 = 2i i n x = 2(i 1) i n WP[[i = i + 1]](x = 2(i 1) i n) x = 2i i < n WP[[i >= n]](x = 2i i < n, x = 2n) (i < n x = 2i i < n) (i n x = 2n) = (i < n x = 2i) (i = n x = 2n) (i < n x = 2i) (i = n x = 2i) x = 2i i n I 70/134

71 Die Besten Invarianten finden - Tipp 5 Tipp 5 Bei einer Bedingung mit Ungleichung (<,, >, ) kann der Schleifenzähler (i) von der anderen Seite (, ) begrenzt werden, sodass am Ende der Schleife Gleichheit folgt. Natürlich darf das nur dann geschehen, wenn diese Begrenzung im Programm auch tatsächlich gilt. 71/134

72 Tipp 6 72/134

73 Die Besten Invarianten finden - Tipp 6 Betrachten wir noch einmal das Programm: x = 2n yes i >= n no i = i + 1 x = x + 2 Berechnet dieses Programm überhaupt x = 2n für negative n? 73/134

74 Die Besten Invarianten finden - Tipp 6 no n < 0 yes n = read() n = n m = read() 0 m < n... n m < n yes i >= n no yes i >= n no 74/134

75 Die Besten Invarianten finden - Tipp 6 Tipp 6 Werden Programmeingaben begrenzt, z.b. durch Ziehen von Beträgen, vorzeitigen Programmabbruch bei unerwünschten Eingaben oder durch gegebene Zusicherungen, so kann die Information über die Werte der Eingabevariablen (n, m,... ), die innerhalb der Schleife zulässig sind, in der Invariante sinnvoll sein. 75/134

76 Tipp 7 76/134

77 Die Besten Invarianten finden - Tipp 7 Was fällt in diesem Programm auf? y = n x = m yes y == 0 no y = y 8 x = x x 77/134

78 Die Besten Invarianten finden - Tipp 7 Die Schleife enthält keinen klassischen Schleifenzähler (i). Wie lässt dennoch eine Beziehung zwischen den Variablen herstellen und eine Invariante definieren? Wir denken uns einen Schleifenzähler δ Anschließend setzen wir die relevanten Variablen mit diesem in Beziehung Dann lösen wir nach δ auf und setzen ein y = n 8δ δ = n y 8 x = m 2δ x = m 2 n y 8 78/134

79 Die Besten Invarianten finden - Tipp 7 x = m 2 n y 8 y = n x = m yes y == 0 no y = y 8 x = x x 79/134

80 Die Besten Invarianten finden - Tipp 7 Tipp 7 Existiert kein klassischer Schleifenzähler, kann ein gedanklicher Zähler verwendet werden um den Zusammenhang zwischen den Variablen herzustellen. 80/134

81 Tipp 8 81/134

82 Die Besten Invarianten finden - Tipp 8 Wie könnte hier eine Invariante aussehen? yes i == n no yes b == 0 no x = x + 1 x = x + 3 i = i + 1 b = 1 b 82/134

83 Die Besten Invarianten finden - Tipp 8 Wie könnte hier eine Invariante aussehen? # i x /134

84 Die Besten Invarianten finden - Tipp 8 Wie könnte hier eine Invariante aussehen? # i b x /134

85 Die Besten Invarianten finden - Tipp 8 Wie könnte hier eine Invariante aussehen? x = 4i + b yes i == n no yes b == 0 no x = x + 1 x = x + 3 i = i + 1 b = 1 b 85/134

86 Die Besten Invarianten finden - Tipp 8 Wie könnte hier eine Invariante aussehen? (b = 0 = x = 4i) (b 0 = x = 4i + 1) yes i == n no yes b == 0 no x = x + 1 x = x + 3 i = i + 1 b = 1 b 86/134

87 Die Besten Invarianten finden - Tipp 8 (i k = x = 3i) (i > k = x = 3k 2 i k ) yes i == n no yes i >= k no x = x 2 x = x + 3 i = i /134

88 Die Besten Invarianten finden - Tipp 8 Tipp 8 Sind in der Schleife Verzweigungen enthalten, so hängt x, neben dem Schleifenzähler, meist auch von einer Variablen ab, die in der Bedingung der Verzweigung vorkommt. In der Invariante muss diese Abhängigkeit dann aufgenommen werden. Lässt sich keine einfache Beziehung finden, so kann in der Invariante eine Fallunterscheidung verwendet werden. 88/134

89 Tipp 9 89/134

90 Die Besten Invarianten finden - Tipp 9 r = 4n 4i k r = 4n 4i k no i < n yes k = 0 no k < 3 yes k = k + 1 i = i + 1 r = 4n 4i k 90/134

91 Die Besten Invarianten finden - Tipp 9 Tipp 9 In einem Terminierungsbeweis wird eine Aussage über r in der Invariante benötigt. Es gilt dabei immer die für r ermittelte Berechnungsvorschrift. 91/134

92 Tipp 10 92/134

93 Die Besten Invarianten finden - Tipp 10 Wir betrachten das Programm erneut. Was muss für A und B gezeigt werden um Terminierung zu beweisen? 93/134

94 Die Besten Invarianten finden - Tipp 10 r = 4n 4i k r = 4n 4i k no i < n yes A k = 0 no k < 3 yes k = k + 1 i = i + 1 B r = 4n 4i k 94/134

95 Die Besten Invarianten finden - Tipp 10 Wir betrachten das Programm erneut. Was muss für A und B gezeigt werden um Terminierung zu beweisen? A = r > 0 B = r > 4n 4i k 95/134

96 Die Besten Invarianten finden - Tipp 10 WP[[r = 4n 4i k]](r = 4n 4i k) true = r > 4n 4i k : B WP[[k = k + 1]](r > 4n 4i k) r > 4n 4i k 1 WP[[i = i + 1]](r > 4n 4i k) r > 4n 4i k 4 WP[[k = 0]](r > 4n 4i k 4) r > 4n 4i 4 96/134

97 Die Besten Invarianten finden - Tipp 10 WP[[k < 3]](r > 4n 4i 4, r > 4n 4i k 1) (k 3 r > 4n 4i 4) (k < 3 r > 4n 4i k 1) Welche Möglichkeiten haben wir hier, um die beiden Seiten in die gleiche Form zu bekommen? Können wir die 4 in der linken Klammer irgendwie in k 1 umschreiben? Ja, wenn wir wüssten, dass dort k = 3 gilt. Betrachtet man das Programm, wird klar, dass dort tatsächlich immer k = 3. Also Verstärken wir... 97/134

98 Die Besten Invarianten finden - Tipp 10 WP[[k < 3]](r > 4n 4i 4, r > 4n 4i k 1) (k 3 r > 4n 4i 4) (k < 3 r > 4n 4i k 1) = (k = 3 r > 4n 4i 4) (k < 3 r > 4n 4i k 1) (k = 3 r > 4n 4i k 1) (k < 3 r > 4n 4i k 1) r > 4n 4i k 1 k 3 = r > 4n 4i k 1 k 3 i < n : A 98/134

99 Die Besten Invarianten finden - Tipp 10 WP[[i < n]](true, r > 4n 4i k 1 k 3 i < n) (i n) (i < n r > 4n 4i k 1 k 3) = (i n r > 4n 4i k 1 k 3) (i < n r > 4n 4i k 1 k 3) r > 4n 4i k 1 k 3 99/134

100 Die Besten Invarianten finden - Tipp 10 r = 4n 4i k = r > 4n 4i k 1 k 3 Warum können wir das nicht zeigen? Weil uns ein k 3 in der Invariante fehlt. Hätten wir das erahnen können? Warum benötigen wir nichts über i und n in der Invariante? 100/134

101 Die Besten Invarianten finden - Tipp 10 r = 4n 4i k k 3 r = 4n 4i k no i < n yes A : r > 4n 4i k 1 k 3 i < n k = 0 no k < 3 yes k = k + 1 i = i + 1 B r = 4n 4i k 101/134

102 Die Besten Invarianten finden - Tipp 10 Tipp 10 Für die Terminierung benötigen wir Aussagen über alle Variablen in der Invarianten, die für die Berechnung von r benötigt werden und über die sich keine starken Beziehungen aus der Schleifenbedingung folgern lassen (wobei stark hier mindestens, meint). 102/134

103 Praktische Beispiele 103/134

104 Beispiel 1 104/134

105 Praktische Beispiele - Beispiel 1 Start n = read() x = 0 yes y >= n n no y = 0 i = 0 write(x) y = y + 2 i + 1 n x = k 2 + n Stop k=1 i = i + 1 x = x + y /134

106 Praktische Beispiele - Beispiel 1 Was lässt sich sofort über die Invariante sagen? Wir brauchen eine präzise Aussage (=) über x (Tipp 1) Wir brauchen eine präzise Aussage (=) über y (Tipp 2) Wir erkennen die Zusammenhänge mit einer Tabelle (Tipp 3) 106/134

107 Praktische Beispiele - Beispiel 1 # i i i y = 0 = 1 = 4 = 9 = 16 = i 2 x i /134

108 Praktische Beispiele - Beispiel (1 + 1) + (4 + 1) + (9 + 1) + (16 + 1) + + (i 2 + 1) = i 2 + i 1 i = k 2 + i = x k=0 108/134

109 Praktische Beispiele - Beispiel 1 Was lässt sich sofort über die Invariante sagen? Wir brauchen eine präzise Aussage (=) über x (Tipp 1) Wir brauchen eine präzise Aussage (=) über y (Tipp 2) Wir erkennen die Zusammenhänge mit einer Tabelle (Tipp 3) Wir haben also: i x = k 2 + i y = i 2 k=0 Können wir noch mehr erkennen? 109/134

110 Praktische Beispiele - Beispiel 1 Start n = read() x = 0 yes y >= n n no y = 0 i = 0 write(x) y = y + 2 i + 1 n x = k 2 + n Stop k=1 i = i + 1 x = x + y /134

111 Praktische Beispiele - Beispiel 1 Was lässt sich sofort über die Invariante sagen? Wir brauchen eine präzise Aussage (=) über x (Tipp 1) Wir brauchen eine präzise Aussage (=) über y (Tipp 2) Wir erkennen die Zusammenhänge mit einer Tabelle (Tipp 3) Wir haben also: i x = k 2 + i y = i 2 k=0 Können wir noch mehr erkennen? Wir sollten y durch y n 2 beschränken (Tipp 5) 111/134

112 Praktische Beispiele - Beispiel 1 Los geht s mit: I : x = i k 2 + i y = i 2 y n 2 k=0 i WP[[x = x + y + 1]](x = k 2 + i y = i 2 y n 2 ) k=0 i x + y + 1 = k 2 + i y = i 2 y n 2 k=0 i x = k 2 + i y 1 y = i 2 y n 2 k=0 i x = k 2 i 2 + (i 1) y = i 2 y n 2 k=0 i 1 x = k 2 + (i 1) y = i 2 y n 2 k=0 112/134

113 Praktische Beispiele - Beispiel 1 i 1 WP[[i = i + 1]](x = k 2 + (i 1) y = i 2 y n 2 ) k=0 i x = k 2 + i y = (i + 1) 2 y n 2 k=0 i WP[[y = y + 2i + 1]](x = k 2 + i y = (i + 1) 2 y n 2 ) x = x = k=0 i k 2 + i y + 2i + 1 = i 2 + 2i + 1 y n 2 k=0 i k 2 + i y = i 2 y n 2 k=0 113/134

114 Praktische Beispiele - Beispiel 1 n i WP[[y >= n n]](x = k 2 + i y = i 2 y n 2, x = k 2 + n ) k=0 k=1 i (y < n 2 x = k 2 + i y = i 2 y n 2 ) k=0 n (y n 2 x = k 2 + n ) k=1 i = (y < n 2 x = k 2 + i y = i 2 ) k=0 n (y = n 2 x = k 2 + n y = i 2 ) k=1 114/134

115 Praktische Beispiele - Beispiel 1 i (y < n 2 x = k 2 + i y = i 2 ) k=0 n (y = n 2 x = k 2 + n y = i 2 ) k=1 i (y < n 2 x = k 2 + i y = i 2 ) k=1 i (y = n 2 x = k 2 + i y = i 2 ) k=1 115/134

116 Praktische Beispiele - Beispiel 1 i (y < n 2 x = k 2 + i y = i 2 ) k=1 i (y = n 2 x = k 2 + i y = i 2 ) k=1 Warum können wir jetzt nicht weitermachen? Wir müssen die Beträge loswerden Das geht nur dann, wenn wir wissen, dass i 0 Wir verstärken die Invariante um i 0 116/134

117 Praktische Beispiele - Beispiel 1 Die neue Invariante ist also: x = i k 2 + i y = i 2 y n 2 i 0 k=0 Jetzt müssen wir die WP-Berechnung mit der neuen Invariante wiederholen Das ersparen wir uns hier Der Beweis wird damit aber gelingen 117/134

118 Beispiel 2 118/134

119 Praktische Beispiele - Beispiel 2 Start n = read() yes i == n no i = 0 k = 0 Stop k = 0 no k < 5 yes k = k + 1 i = i /134

120 Praktische Beispiele - Beispiel 2 Wie können wir die Berechnungsvorschrift für r bestimmen? Mit einer Tabelle: # i k r[2] Einen streng monotonen Zähler können wir mit 6i + k bauen. Wir können r dann gegen 0 laufen lassen mit r = 6n 6i k. 120/134

121 Praktische Beispiele - Beispiel 2 Start n = read() i = 0 k = 0 Stop yes i == n no k = 0 no A k < 5 yes k = k + 1 r = 6 n 6 i k i = i + 1 B r = 6 n 6 i k 121/134

122 Praktische Beispiele - Beispiel 2 Was lässt sich sofort über die Invariante sagen? Wir brauchen die Aussage r = 6n 6i k (Tipp 9) Wir brauchen k 5 (Tipp 10) Und wir brauchen i n (Tipp 10) Wir haben also: r = 6n 6i k i n k 5 Zeigen müssen wir: A = r > 0 B = r > 6n 6i k 122/134

123 Praktische Beispiele - Beispiel 2 WP[[r = 6n 6i k]](r = 6n 6i k i n k 5) i n k 5 = r > 6n 6i k i n k 5 : B WP[[i = i + 1]](B) r > 6n 6i k 6 i + 1 n k 5 WP[[k = 0]](r > 6n 6i k 6 i + 1 n k 5) r > 6n 6i 6 i < n : C WP[[k = k + 1]](B) r > 6n 6i k 1 i n k r > 6n 6i k 1 i n k < 5 : D 123/134

124 Praktische Beispiele - Beispiel 2 WP[[k < 5]](C, D) (k 5 r > 6n 6i 6 i < n) (k < 5 r > 6n 6i k 1 i n k < 5) = (k = 5 r > 6n 6i 6 i < n) (k < 5 r > 6n 6i k 1 i < n) (k = 5 r > 6n 6i k 1 i < n) (k < 5 r > 6n 6i k 1 i < n) r > 6n 6i k 1 i < n k 5 : A 124/134

125 Praktische Beispiele - Beispiel 2 WP[[i == n]](a, true) (i n r > 6n 6i k 1 i < n k 5) i = n = (i < n r > 6n 6i k 1 k 5) (i = n r > 6n 6i k 1 k 5) r > 6n 6i k 1 i n k 5 = r = 6n 6i k i n k 5 = I 125/134

126 Praktische Beispiele - Beispiel 2 Damit haben wir: Unsere Invariante ist korrekt Zusicherungen in der Schleife sind lokal konsistent Beide Terminierungsbedingungen sind erfüllt Jetzt müssen wir noch zum Programmstart rechnen Das ersparen wir uns hier Wir erhalten vor n = read() die Zusicherung n 0 Wir erhalten daher false am Startknoten Das Programm terminiert auch nur für positive Eingaben 126/134

127 Beispiel 3 127/134

128 Praktische Beispiele - Beispiel 3 Start n = read() x = 0 i = n yes write(x) x = (8n) 2n Stop i == n no no i < 0 yes x = x x x = x + 8 n < 0 no yes i = i + 1 Stop 128/134

129 Praktische Beispiele - Beispiel 3 Was lässt sich sofort über die Invariante sagen? Wir brauchen eine präzise Aussage (=) über x (Tipp 1) Wir müssen die Fälle i < 0 und i 0 unterscheiden (Tipp 8) Wir merken, dass das Programm nur n 0 zulässt (Tipp 6) Wir könnten eine Tabelle machen (Tipp 3) Wir haben also: (i 0 = x = 8(n + i)) (i > 0 = x = (8n) 2i ) n 0 129/134

130 Praktische Beispiele - Beispiel 3 Start n = read() x = 0 i = n yes write(x) x = (8n) 2n Stop i == n no no i < 0 yes x = x x x = x + 8 n < 0 no yes i = i + 1 Stop 130/134

131 Praktische Beispiele - Beispiel 3 WP[[i = i + 1]](I ) (i 1 = x = 8(n + i + 1)) (i > 1 = x = (8n) 2i+1 ) n 0 : A WP[[x = x + 8]](A) (i 1 = x = 8(n + i)) (i > 1 = x = (8n) 2i+1 8) n 0 : B WP[[x = x x]](a) (i 1 = x 2 = 8(n + i + 1)) (i > 1 = x = (8n) 2i ) n 0 : C 131/134

132 Praktische Beispiele - Beispiel 3 WP[[i < 0]](C, B) (i 0 = (i 1 = x 2 = 8(n + i + 1)) (i > 1 = x = (8n) 2i ) n 0) (i < 0 = (i 1 = x = 8(n + i)) (i > 1 = x = (8n) 2i+1 8) n 0)) (i 0 = x = (8n) 2i n 0) (i < 0 = x = 8(n + i) n 0) (i 0 = x = (8n) 2i ) (i < 0 = x = 8(n + i)) n 0 : D 132/134

133 Praktische Beispiele - Beispiel 3 WP[[i == n]](d, x = (8n) 2n ) (i n = (i 0 = x = (8n) 2i ) (i < 0 = x = 8(n + i)) n 0) (i = n = x = (8n) 2n ) (i n = (i 0 = x = (8n) 2i ) (i < 0 = x = 8(n + i) n 0) (i = n = (i 0 = x = (8n) 2i ) (i < 0 = x = 8(n + i)) n 0) (i 0 = x = (8n) 2i ) (i < 0 = x = 8(n + i)) n 0 (i > 0 = x = (8n) 2i ) (i 0 = x = 8(n + i)) n 0 I 133/134

134 Praktische Beispiele - Beispiel 3 Die gewählte Invariante war also ausreichend (und tatsächlich auch notwendig). Die WP-Berechnungen zum Startknoten sind trivial und wir sparen uns diese hier. Es resultiert true am Startknoten. 134/134

WS 05/06 mod Verifikation

WS 05/06 mod Verifikation 3.3 Verifikation WS 05/06 mod 351 Verifikation ist der Beweis der Korrektheit eines Algorithmus relativ zu seiner Spezifikation. Die Aussagen gelten für alle Ausführungen des Algorithmus. Sie werden statisch

Mehr

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2008/09 Einführung in die Informatik 2 Klausur Prof. Dr. Helmut Seidl, T. M. Gawlitza, S. Pott,

Mehr

Korrektheit und Hoare-Kalkül für Imperative Programme

Korrektheit und Hoare-Kalkül für Imperative Programme Korrektheit und Hoare-Kalkül für Imperative Programme Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer SS 06 Ziele Partielle und totale Korrektheit kennen lernen Die Regeln des Hoare-Kalkül

Mehr

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel Inhalt Hoare-Kalkül Formale Verifizierung Hoare-Kalkül while-sprache Terminierung Partielle / totale Korrektheit 4.0 Hoare-Kalkül entwickelt von C.A.R. (Tony) Hoare (britischer Informatiker), 1969 formales

Mehr

Abschnitt 11: Korrektheit von imperativen Programmen

Abschnitt 11: Korrektheit von imperativen Programmen Abschnitt 11: Korrektheit von imperativen Programmen 11. Korrektheit von imperativen Programmen 11.1 11.2Testen der Korrektheit in Java Peer Kröger (LMU München) in die Programmierung WS 16/17 931 / 961

Mehr

Grundlagen der Theoretischen Informatik

Grundlagen der Theoretischen Informatik FH Wedel Prof. Dr. Sebastian Iwanowski GTI33 Folie 1 Grundlagen der Theoretischen Informatik Sebastian Iwanowski FH Wedel Kap. 3: Verifikationstechniken Teil 3: FH Wedel Prof. Dr. Sebastian Iwanowski GTI33

Mehr

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation Spezifikation: Angabe, was ein Programm tun

Mehr

n 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays)

n 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays) n 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation n Spezifikation: Angabe, was ein

Mehr

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation Spezifikation: Angabe, was ein Programm tun

Mehr

Man sieht hier einzelne Fragmente, die man häufig bei der Programmierung mit Schleifen antrifft. Es gibt eine lokale Variable, die vor dem

Man sieht hier einzelne Fragmente, die man häufig bei der Programmierung mit Schleifen antrifft. Es gibt eine lokale Variable, die vor dem 214 215 Man sieht hier einzelne Fragmente, die man häufig bei der Programmierung mit Schleifen antrifft. Es gibt eine lokale Variable, die vor dem Schleifenstart initialisiert und die innerhalb der Schleife

Mehr

! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - ! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation! Spezifikation: Angabe, was ein Programm

Mehr

Korrektheit imperativer Algorithmen

Korrektheit imperativer Algorithmen LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE Abschnitt 9 Korrektheit imperativer Algorithmen Skript zur Vorlesung Einführung in die Programmierung im Wintersemester

Mehr

Problem: Gegeben Spezifikation (P,Q) und Implementierung S Gesucht formaler (automatisierbarer?) Beweis, dass S (P,Q) erfüllt.

Problem: Gegeben Spezifikation (P,Q) und Implementierung S Gesucht formaler (automatisierbarer?) Beweis, dass S (P,Q) erfüllt. Formale Verifikation von Algorithmen 1.3 Verifikation Problem: Gegeben Spezifikation (P,Q) und Implementierung S Gesucht formaler (automatisierbarer?) Beweis, dass S (P,Q) erfüllt. Bisher nicht möglich

Mehr

Partielle Korrektheit von Programmen. Beispiele an der Tafel

Partielle Korrektheit von Programmen. Beispiele an der Tafel Partielle Korrektheit von Programmen Beispiele an der Tafel ALP II: Margarita Esponda, 12. Vorlesung, 24.5.2012 36 Beispiel: Partielle Korrektheit von Programmen Nehmen wir an, wir möchten beweisen, dass

Mehr

C. A. R. Hoare. An Axiomatic Basis for Computer Programming. Nicolas Schelp. Proseminar Assertions SS 2007

C. A. R. Hoare. An Axiomatic Basis for Computer Programming. Nicolas Schelp. Proseminar Assertions SS 2007 C. A. R. Hoare An Axiomatic Basis for Computer Programming Nicolas Schelp Proseminar Assertions SS 2007 Inhalt Motivation Kurze Biographie Der Hoare-Kalkül Axiome und Inferenzregeln des Hoare-Kalküls Die

Mehr

Informatik I - Programmierung Globalübung Hoare-Kalkül. Thomas Weiler. Fachgruppe Informatik RWTH Aachen. T. Weiler, RWTH Aachen - 1 -

Informatik I - Programmierung Globalübung Hoare-Kalkül. Thomas Weiler. Fachgruppe Informatik RWTH Aachen. T. Weiler, RWTH Aachen - 1 - Informatik I - Programmierung Globalübung 11.11.2003 Hoare-Kalkül Thomas Weiler Fachgruppe Informatik RWTH Aachen T. Weiler, RWTH Aachen - 1 - Ariane 5 Die Ariane 5 ist das jüngste Modell der Trägerrakete

Mehr

4.3 Verifikation von Aussagen über Algorithmen

4.3 Verifikation von Aussagen über Algorithmen 4.3 Verifikation von Aussagen über Algorithmen Hoaresche Logik: Kalkül zum Beweisen von Aussagen über Algorithmen und Programme, Programm-Verifikation, [C.A.R. Hoare, 1969]. Mod - 4.51 Statische Aussagen

Mehr

Einführung in die Programmiertechnik

Einführung in die Programmiertechnik Einführung in die Programmiertechnik Verifikation 2 Vermeidung von Fehlern Verwendung geeigneter Werkzeuge Auswahl einer dem Problem angemessenen Programmiersprache Verwendung eines zuverlässigen Compilers

Mehr

Einführung in die Programmierung I Systematisches Programmieren. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung I Systematisches Programmieren. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung I 10.0 Systematisches Programmieren Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved. Uebersicht

Mehr

Formale Systeme Logik: Verifikation von Aussagen über Algorithmen. Ana Sokolova statt Robert Elsässer

Formale Systeme Logik: Verifikation von Aussagen über Algorithmen. Ana Sokolova statt Robert Elsässer Formale Systeme Logik: Verifikation von Aussagen über Algorithmen 20.12.2012 Ana Sokolova statt Robert Elsässer Verifikation von Aussagen über Algorithmen Hoaresche Logik: Kalkül zum Beweisen von Aussagen

Mehr

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. Beispiel 2 zur Verifikation eines bedingten Anweisung

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. Beispiel 2 zur Verifikation eines bedingten Anweisung Hoare-Regel für die bedingte Anweisung I1 : I2 : {B und P } S 1 {Q} { nicht B und P } {Q} {P } if (B) then S 1 {Q} {B und P } S 1 {Q} { nicht B und P } S 2 {Q} {P } if (B) then S 1 S 2 {Q} In der Regel

Mehr

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. else

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. else Hoare-Regel für die bedingte Anweisung I1 : I2 : {B P } S 1 {Q} { nicht B P } {Q} {P } if (B) then S 1 {Q} {B P } S 1 {Q} { nicht B P } S 2 {Q} {P } if (B) then S 1 else S 2 {Q} In der Regel für bedingte

Mehr

2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung:

2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung: 2.4 Schleifen Schleifen beschreiben die Wiederholung einer Anweisung bzw. eines Blocks von Anweisungen (dem Schleifenrumpf) bis eine bestimmte Bedingung (die Abbruchbedingung) eintritt. Schleifen unterscheiden

Mehr

Informatik II - Tutorium

Informatik II - Tutorium 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,

Mehr

Schleifen: Immer wieder dasselbe tun

Schleifen: Immer wieder dasselbe tun Schleifen: Immer wieder dasselbe tun Bei einer Schleife werden Anweisungen immer wieder ausgeführt, solange die Bedingung wahr ist. Dafür muss man eine Variable immer wieder ändern, solange bis eine Überprüfung

Mehr

Technische Universität München SoSe 2015 Institut für Informatik I Mai 2015 Dr. Tobias Lasser. Aufgabe 1 Rechnen mit Landau-Symbolen

Technische Universität München SoSe 2015 Institut für Informatik I Mai 2015 Dr. Tobias Lasser. Aufgabe 1 Rechnen mit Landau-Symbolen Technische Universität München SoSe 2015 Institut für Informatik I-16 27. Mai 2015 Dr. Tobias Lasser Lösungsvorschläge zur Musterklausur zu Algorithmen und Datenstrukturen Aufgabe 1 Rechnen mit Landau-Symbolen

Mehr

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte Elementare Schritte Ein elementarer Berechnungsschritt eines Algorithmus ändert im Allgemeinen den Wert von Variablen Zuweisungsoperation von fundamentaler Bedeutung Zuweisungsoperator In Pascal := In

Mehr

Semantik von Programmiersprachen SS 2012

Semantik von Programmiersprachen SS 2012 Lehrstuhl für Programmierparadigmen Andreas Lochbihler Joachim Breitner andreas.lochbihler@kit.edu breitner@kit.edu Semantik von Programmiersprachen SS 2012 http://pp.info.uni-karlsruhe.de/lehre/ss2012/semantik

Mehr

Algorithmen und Programmieren II Programmverifikation {V} P {N}

Algorithmen und Programmieren II Programmverifikation {V} P {N} Algorithmen und Programmieren II Programmverifikation {V} P {N} SS 2012 Prof. Dr. Margarita Esponda ALP II: Margarita Esponda, 11. Vorlesung, 22.5.2012 1 Assertions oder Zusicherungen Das Konzept der Zusicherungen

Mehr

Verifizierende Testverfahren

Verifizierende Testverfahren Spezifikation Um einen Algorithmus zu schreiben, muss das zu lösende Problem genau beschrieben sein. Eine Spezifikation ist Verifizierende Testverfahren vollständig, wenn alle Anforderungen/alle relevanten

Mehr

Kontrollstrukturen -- Schleifen und Wiederholungen

Kontrollstrukturen -- Schleifen und Wiederholungen Kontrollstrukturen -- Schleifen und Wiederholungen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14

Mehr

Einführung in die Theoretische Informatik

Einführung in die Theoretische Informatik Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Dr. Werner Meixner, Dr. Alexander Krauss Sommersemester 2010 Lösungsblatt 11 15. Juli 2010 Einführung in die Theoretische

Mehr

Kurs 1612 Konzepte imperativer Programmierung Musterlösung zur Nachklausur am

Kurs 1612 Konzepte imperativer Programmierung Musterlösung zur Nachklausur am 1 Aufgabe 1 a) Da Effizienzbetrachtungen bei der Lösung der Aufgabe keine Rolle spielen, wählen wir einen einfachen, aber ineffizienten Algorithmus mit zwei ineinander verschachtelten for-schleifen. Dadiefor-Schleifen

Mehr

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie 1 Einführung 2 Typ-0- und Typ-1-Sprachen 3 Berechnungsmodelle 4 Unentscheidbarkeit 5 Unentscheidbare Probleme 6 Komplexitätstheorie WS 11/12 155 Überblick Zunächst einmal definieren wir formal den Begriff

Mehr

Einführung in die Theoretische Informatik

Einführung in die Theoretische Informatik Einführung in die Theoretische Informatik Maximilian Haslbeck Fabian Mitterwallner Georg Moser David Obwaller cbr.uibk.ac.at Zusammenfassung der letzten LVA Definition Eine Registermaschine (RM) R ist

Mehr

Technische Universität München Zentrum Mathematik Mathematik 1 (Elektrotechnik) Übungsblatt 1

Technische Universität München Zentrum Mathematik Mathematik 1 (Elektrotechnik) Übungsblatt 1 Technische Universität München Zentrum Mathematik Mathematik 1 (Elektrotechnik) Prof. Dr. Anusch Taraz Dr. Michael Ritter Übungsblatt 1 Hausaufgaben Aufgabe 1.1 Zeigen Sie mit vollständiger Induktion:

Mehr

5.3 Korrektheit und Verifikation

5.3 Korrektheit und Verifikation 5.3 Korrektheit und Verifikation Korrektheit bedeutet, dass ein Algorithmus oder ein Programm das in der Spezifikation beschriebene Problem für beliebige Eingabedaten korrekt löst. Die Korrektheit kann

Mehr

Tutoraufgabe 1 (Casting): Programmierung WS17/18 Übungsblatt 2 (Abgabe ) Allgemeine Hinweise:

Tutoraufgabe 1 (Casting): Programmierung WS17/18 Übungsblatt 2 (Abgabe ) Allgemeine Hinweise: Prof. aa Dr. J. Giesl Programmierung WS17/18 M. Hark, J. Hensel, D. Korzeniewski Allgemeine Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet

Mehr

5.3 Korrektheit und Verifikation

5.3 Korrektheit und Verifikation 5.3 Korrektheit und Verifikation Korrektheit bedeutet, dass ein Algorithmus oder ein Programm das in der Spezifikation beschriebene Problem für beliebige Eingabedaten korrekt löst. Die Korrektheit kann

Mehr

Zusammenfassung. Definition. 1 (x i ) 1 i n Sequenz von Registern x i, die natürliche Zahlen beinhalten. 2 P ein Programm. Befehle: 1 x i := x i + 1

Zusammenfassung. Definition. 1 (x i ) 1 i n Sequenz von Registern x i, die natürliche Zahlen beinhalten. 2 P ein Programm. Befehle: 1 x i := x i + 1 Zusammenfassung Zusammenfassung der letzten LVA Einführung in die Theoretische Informatik Christina Kohl Alexander Maringele Georg Moser Michael Schaper Manuel Schneckenreither Eine Registermaschine (RM)

Mehr

Ein Beispielbeweis zur Verifikation des Programms zur Division mit Rest auf der Basis der Hoare-Regeln

Ein Beispielbeweis zur Verifikation des Programms zur Division mit Rest auf der Basis der Hoare-Regeln Ein Beispielbeweis zur Verifikation des Programms zur Division mit Rest auf der Basis der Hoare-Regeln Ralf Lämmel 24. Dezember 2014 1 Hoare-Regeln Im folgenden müssen wie folgende Hoare-Regeln benutzen:

Mehr

Übung zu Grundbegriffe der Informatik. Simon Wacker. 15. November 2013

Übung zu Grundbegriffe der Informatik. Simon Wacker. 15. November 2013 Übung zu Grundbegriffe der Informatik Simon Wacker 15. November 2013 Vollständige Induktion über die Wortlänge Es sei B ein Alphabet. Dann ist B = n N 0 B n. Für jedes Wort w B sei A w eine Aussage, die

Mehr

2. Algorithmenbegriff

2. Algorithmenbegriff 2. Algorithmenbegriff Keine Algorithmen: Anleitungen, Kochrezepte, Wegbeschreibungen,... Algorithmus: Berechnungsvorschrift, die angibt, wie durch Ausführung bestimmter Elementaroperationen aus Eingabegrößen

Mehr

Mathem.Grundlagen der Computerlinguistik I, WS 2004/05, H. Leiß 1

Mathem.Grundlagen der Computerlinguistik I, WS 2004/05, H. Leiß 1 Mathem.Grundlagen der Computerlinguistik I, WS 2004/05, H. Leiß 1 1 Vorbemerkungen Mathematische Begriffe und Argumentationsweisen sind in vielen Fällen nötig, wo man über abstrakte Objekte sprechen und

Mehr

2.1 Lineare Temporallogiken: LTL

2.1 Lineare Temporallogiken: LTL 2.1 Lineare Temporallogiken: LTL N bezeichne die Menge der nicht-negativen ganzen Zahlen (inklusive der Null). Sei Σ ein Alphabet. Ein endliches Wort ü b e r Σ ist eine endliche Folge a 1 a 2...a n,sodassa

Mehr

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung C Sprachelemente für Übung 2 Typumwandlungen (type casts) Bei Ausdrücken, in denen Operanden mit unterschiedlichem Typ vorkommen, werden diese vom Compiler vor der Ausführung automatisch in einen gemeinsamen

Mehr

Kapitel 4: Formale Verifikation

Kapitel 4: Formale Verifikation Kapitel 4: Formale Verifikation Inhalt 4.1 Grundlagen 4.2 Verifikation auf axiomatischer Basis 4.3 Verifikation einzelner Eigenschaften 4.4 Stärken und Schwächen formaler Verifikation Schlüsselbegriffe

Mehr

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn Ideen und Konzepte der Informatik Programme und Algorithmen Kurt Mehlhorn 26. Oktober 2015 Programme und Algorithmen Programmiersprache = Kunstsprache mit genau definierter Syntax (was ist ein zulässiger

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Skript zur Vorlesung: Einführung in die Programmierung WiSe 2009 / 2010 Skript 2009 Christian Böhm, Peer Kröger, Arthur Zimek Prof. Dr. Christian Böhm Annahita Oswald Bianca Wackersreuther Ludwig-Maximilians-Universität

Mehr

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen 16OH21005 gefördert. Die Verantwortung für den Inhalt dieser

Mehr

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8 Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22 C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven

Mehr

Einführung in die Programmierung II. 3. Kontrollstrukturen

Einführung in die Programmierung II. 3. Kontrollstrukturen Einführung in die Programmierung II 3. Kontrollstrukturen Thomas Huckle, Stefan Zimmer 2.5.2007-1- Anweisungen: was bisher geschah Bisher kennen wir zwei Formen von Anweisungen Ein Ausdruck mit Semikolon

Mehr

Übersicht Formale Semantik. Übersicht Axiomatische Semantik. Inhaltsübersicht HPS WS 2003/04. Vorlesung Höhere Programmiersprachen,

Übersicht Formale Semantik. Übersicht Axiomatische Semantik. Inhaltsübersicht HPS WS 2003/04. Vorlesung Höhere Programmiersprachen, Vorlesung Höhere Programmiersprachen, WS 2003/04 Teil 2: Formale Semantik Axiomatische Semantik Inhaltsübersicht - Grundlagen (1,2) - Konzepte imperativer Programmiersprachen (2,3) - Deklarative Programmiersprachen

Mehr

3 Terme und Algebren 3.1 Terme

3 Terme und Algebren 3.1 Terme 3 Terme und Algebren 3.1 Terme Mod - 3.1 In allen formalen Kalkülen benutzt man Formeln als Ausdrucksmittel. Hier betrachten wir nur ihre Struktur - nicht ihre Bedeutung. Wir nennen sie Terme. Terme bestehen

Mehr

Verschiedene Fehlerarten. Verifikation. Arten der Qualitätssicherung. Verifikation. Zusicherungen (Assertions) Beispiel für Zusicherungen

Verschiedene Fehlerarten. Verifikation. Arten der Qualitätssicherung. Verifikation. Zusicherungen (Assertions) Beispiel für Zusicherungen Verifikation Weitere gute Gründe für Verifikation: Juni 1996: Erster Start der Ariane 5 akete Gewinn durch Nichtverifikation eines Codestücks: ein paar $ Verlust durch Selbstzerstörung der akete: ca. $

Mehr

2 - Konvergenz und Limes

2 - Konvergenz und Limes Kapitel 2 - Folgen Reihen Seite 1 2 - Konvergenz Limes Definition 2.1 (Folgenkonvergenz) Eine Folge komplexer Zahlen heißt konvergent gegen, wenn es zu jeder positiven Zahl ein gibt, so dass gilt: Die

Mehr

3. Grundanweisungen in Java

3. Grundanweisungen in Java 3. Grundanweisungen in Java Die Grundanweisungen entsprechen den Prinzipien der strukturierten Programmierung 1. Zuweisung 2. Verzweigungen 3. Wiederholungen 4. Anweisungsfolge (Sequenz) Die Anweisungen

Mehr

Semantik von Programmiersprachen SS 2017

Semantik von Programmiersprachen SS 2017 Lehrstuhl für Programmierparadigmen Denis Lohner Sebastian Ullrich denis.lohner@kit.edu sebastian.ullrich@kit.edu Semantik von Programmiersprachen SS 2017 http://pp.ipd.kit.edu/lehre/ss2017/semantik Lösungen

Mehr

Kompaktkurs Einführung in die Programmierung. 4. Kontrollstrukturen

Kompaktkurs Einführung in die Programmierung. 4. Kontrollstrukturen Kompaktkurs Einführung in die Programmierung 4. Kontrollstrukturen Stefan Zimmer 28.2.2008-1- Anweisungen: was bisher geschah Bisher kennen wir zwei Formen von Anweisungen Ein Ausdruck mit Semikolon ist

Mehr

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn Ideen und Konzepte der Informatik Programme und Algorithmen Kurt Mehlhorn Algorithmen und Programme Algorithmus Schritt-für-Schritt Vorschrift zur Lösung eines Problems. Formuliert man umgangssprachlich,

Mehr

Programmsteuerung mit PHP - if/else, elseif,switch

Programmsteuerung mit PHP - if/else, elseif,switch Programmsteuerung mit PHP - if/else, elseif,switch Bei der Programmierung geht es meist vor allem darum festzulegen, welche Aktionen wie oft unter welchen Bedingungen ausgeführt werden sollen. Hierzu steht

Mehr

3 Exkurs: Der λ-kalkül

3 Exkurs: Der λ-kalkül 3 Exkurs: Der λ-kalkül Alonso Churchs λ-kalkül (ca. 1940) ist der formale Kern jeder funktionalen Programmiersprache. Der λ-kalkül ist eine einfache Sprache, mit nur wenigen syntaktischen Konstrukten und

Mehr

Rekursion. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Rekursion. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung Philipp Wendler Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung https://www.sosy-lab.org/teaching/2017-ws-infoeinf/ WS17/18 Divide et Impera im Römischen

Mehr

Praktikum Ingenieurinformatik. Termin 2a. Schleifen und Verzweigungen in C und mit MATLAB

Praktikum Ingenieurinformatik. Termin 2a. Schleifen und Verzweigungen in C und mit MATLAB Praktikum Ingenieurinformatik Termin 2a Schleifen und Verzweigungen in C und mit MATLAB 1 1. Fibonacci-Zahlen in C 2. Fibonacci-Zahlen mit MATLAB 3. Zahlendreieck in C 4. Zahlendreieck mit MATLAB 5. Klausuraufgabe

Mehr

Tag 3 Repetitorium Informatik (Java)

Tag 3 Repetitorium Informatik (Java) Tag 3 Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Typkonvertierung

Mehr

Mathematische Beweise und Symbolische Tests

Mathematische Beweise und Symbolische Tests Mathematische Beweise und Symbolische Tests Arne Meier Universität Hannover Institut für praktische Informatik Fachgebiet Software Engineering Seminar Werkzeuggestützte Softwareprüfungen 19. April 2006

Mehr

Rekursion. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Rekursion. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung Dr. Philipp Wendler Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung WS18/19 https://www.sosy-lab.org/teaching/2018-ws-infoeinf/ Divide et Impera im Römischen

Mehr

Terme und Gleichungen

Terme und Gleichungen Terme und Gleichungen Rainer Hauser November 00 Terme. Rekursive Definition der Terme Welche Objekte Terme genannt werden, wird rekursiv definiert. Die rekursive Definition legt zuerst als Basis fest,

Mehr

Intensivübung zu Algorithmen und Datenstrukturen

Intensivübung zu Algorithmen und Datenstrukturen Intensivübung zu Algorithmen und Datenstrukturen Silvia Schreier Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht Programmierung Fallunterscheidung Flussdiagramm Bedingungen Boolesche

Mehr

Grundlagen: Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen Technische Universität München Fakultät für Informatik Lehrstuhl für Effiziente Algorithmen Dr. Hanjo Täubig Tobias Lieber Sommersemester 2011 Übungsblatt 1 16. September 2011 Grundlagen: Algorithmen und

Mehr

Programmierpraktikum

Programmierpraktikum TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Praktikum: Grundlagen der Programmierung Programmierpraktikum Woche 05 (24.11.2016) Stefan Berktold s.berktold@tum.de PRÄSENZAUFGABEN Heutige Übersicht

Mehr

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

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

Mehr

Logik. Ernest Peter Propädeutikum Mathematik Informatik/Wirtschaftsinformatik, Block Aussage

Logik. Ernest Peter Propädeutikum Mathematik Informatik/Wirtschaftsinformatik, Block Aussage Logik Die Logik ist in der Programmierung sehr wichtig. Sie hilft z.b. bei der systematischen Behandlung von Verzweigungen und Schleifen. z.b. if (X Y und Y>0) then Oder beim Beweis, dass ein Algorithmus

Mehr

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2 Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016

Mehr

Imperative Programmierung in Java: Kontrollfluß II

Imperative Programmierung in Java: Kontrollfluß II 2 Imperative Programmierung in va: Kontrollfluß II Martin Wirsing Ziele Lernen imperative Programme in va mit Zuweisung, Block, Fallunterscheidung, Iteration zu schreiben Lernen Kontrollflußdiagramme zur

Mehr

Übung zu Einführung in die Informatik # 11

Übung zu Einführung in die Informatik # 11 Übung zu Einführung in die Informatik # 11 Tobias Schill tschill@techfak.uni-bielefeld.de 22. Januar 2016 Aktualisiert am 22. Januar 2016 um 11:36 Erstklausur: Mi, 24.02.2016 von 10-12Uhr Aufgabe 1* Aufgabe

Mehr

3.4 Struktur von Programmen

3.4 Struktur von Programmen 3.4 Struktur von Programmen Programme sind hierarchisch aus Komponenten aufgebaut. Für jede Komponente geben wir Regeln an, wie sie aus anderen Komponenten zusammengesetzt sein können. program ::= decl*

Mehr

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn Ideen und Konzepte der Informatik Programme und Algorithmen Kurt Mehlhorn November 2016 Algorithmen und Programme Algorithmus = Schritt-für-Schritt Vorschrift zur Lösung eines Problems. Formuliert man

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Wintersemester 2012/13 1. Vorlesung Kapitel 1: Sortieren Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I Das Problem Eingabe Gegeben: eine Folge A = a 1, a 2,..., a

Mehr

Teil 1 Gleichungen und Ungleichungen

Teil 1 Gleichungen und Ungleichungen Teil 1 Gleichungen und Ungleichungen Gleichungen Eine mathematische Gleichung ist eine logische Aussage über die Gleichheit von Termen. Das, was links vom Gleichheitszeichen (=) steht, hat den gleichen

Mehr

Ideen und Konzepte der Informatik

Ideen und Konzepte der Informatik Ideen und Konzepte der Informatik Programme und Algorithmen Antonios Antoniadis 23. Oktober 2017 Algorithmen und Programme Algorithmus Schritt-für-Schritt Vorschrift zur Lösung eines Problems. Formuliert

Mehr

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 5. Kontrollstrukturen Allgemein Kontrollstrukturen dienen zur Steuerung des Programmablaufs. (Bemerkung: C und C++ besitzen die selben Kontrollstrukturen.)

Mehr

Grundlagen der Theoretischen Informatik: Übung 10

Grundlagen der Theoretischen Informatik: Übung 10 Grundlagen der Theoretischen Informatik: Übung 10 Joachim Selke Fachgebiet Theoretische Informatik Universität Hannover 20. Januar 2005 Turing-Maschinen als Rechenmaschinen gegeben sei eine Funktion f

Mehr

13 Schnittpunkte von Geraden Seite 1 von Kreis und Gerade

13 Schnittpunkte von Geraden Seite 1 von Kreis und Gerade 13 Schnittpunkte von Geraden Seite 1 von 5 13 Kreis und Gerade Aus der klassischen Euklidischen Geometrie wissen wir, dass eine Gerade einen Kreis in keinem, genau einem oder in genau zwei Punkten schneiden

Mehr

Übung zur Vorlesung Programmierung

Übung zur Vorlesung Programmierung RWTH Aachen Lehrgebiet Theoretische Informatik Frohn Reidl Rossmanith Sánchez Ströder WS 013/14 Übungsblatt 4 18.11.013 Übung zur Vorlesung Programmierung Aufgabe T8 Ein Stack ist eine Datenstruktur, die

Mehr

Kapitel 4. Kontrollstrukturen

Kapitel 4. Kontrollstrukturen Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen

Mehr

Kontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht

Kontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht Kontrollanweisungen Kontrollfluss o bisher linear (von oben nach unten) o Für interessante Programme braucht man Verzweigungen und Sprünge Kontrollfluss o bisher linear (von oben nach unten) o Für interessante

Mehr

2.5 Die Ackermannfunktion

2.5 Die Ackermannfunktion Die zweistellige Ackermannfunktion definieren wir so: a(0, y) =y + 1 2.5 Die Ackermannfunktion a(x, 0) =a(x 1, 1) für x > 0 a(x, y) =a(x 1, a(x, y 1)) für x, y > 0 Die Ackermann-Funktion ist wohldefiniert

Mehr

Kapitel 4. Kontrollstrukturen

Kapitel 4. Kontrollstrukturen Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen

Mehr

eine reelle (oder komplexe) Folge. Dann heißt l der Limes oder der Grenzwert dieser Folge, notiert als

eine reelle (oder komplexe) Folge. Dann heißt l der Limes oder der Grenzwert dieser Folge, notiert als Analysis, Woche 9 Stetigkeit I A 9. Grenzwerte bei Funktionen 9.. Der einfachste Fall Wir erinnern noch mal an den Grenzwert bei einer Folge. Sei {a n } n=0 eine reelle (oder komplexe) Folge. Dann heißt

Mehr

Folgen und Reihen Folgen

Folgen und Reihen Folgen Folgen und Reihen 30307 Folgen Einstieg: Wir beginnen mit einigen Beispielen für reelle Folgen: (i),, 4, 8, 6, (ii) 4,, 6, 3, 7, (iii) 0,,,, 3,, (iv), 3, 7,,, Aufgabe : Setzt die Zahlenfolgen logisch fort

Mehr

Aufgaben zu Kapitel 8

Aufgaben zu Kapitel 8 Aufgaben zu Kapitel 8 Aufgabe 1 a) Berechnen Sie einen U-Test für das in Kapitel 8.1 besprochene Beispiel mit verbundenen n. Die entsprechende Testvariable punkte2 finden Sie im Datensatz Rangdaten.sav.

Mehr

2.2.4 Logische Äquivalenz

2.2.4 Logische Äquivalenz 2.2.4 Logische Äquivalenz (I) Penélope raucht nicht und sie trinkt nicht. (II) Es ist nicht der Fall, dass Penélope raucht oder trinkt. Offenbar behaupten beide Aussagen denselben Sachverhalt, sie unterscheiden

Mehr

Vorlesung. Vollständige Induktion 1

Vorlesung. Vollständige Induktion 1 WS 015/16 Vorlesung Vollständige Induktion 1 1 Einführung Bei der vollständigen Induktion handelt es sich um ein wichtiges mathematisches Beweisverfahren, mit dem man Aussagen, die für alle natürlichen

Mehr

Übungen zu Einführung in die Analysis

Übungen zu Einführung in die Analysis Übungen zu Einführung in die Analysis (Nach einer Zusammengestellung von Günther Hörmann) Sommersemester 2011 Vor den folgenden Aufgaben werden in den ersten Wochen der Übungen noch jene zur Einführung

Mehr

Der Hilbert-Kalkül für die Aussagenlogik (Notizen zur Vorlesung Logik im Wintersemester 2003/04 an der Universität Stuttgart)

Der Hilbert-Kalkül für die Aussagenlogik (Notizen zur Vorlesung Logik im Wintersemester 2003/04 an der Universität Stuttgart) Der Hilbert-Kalkül für die Aussagenlogik (Notizen zur Vorlesung Logik im Wintersemester 2003/04 an der Universität Stuttgart) Javier Esparza und Barbara König 4. Dezember 2003 Für eine gegebene aussagenlogische

Mehr