Zentralübung: Schleifeninvarianten
|
|
- Kristin Fiedler
- vor 5 Jahren
- Abrufe
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
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
MehrAllgemeine 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,
MehrKorrektheit 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
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
MehrAbschnitt 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
MehrGrundlagen 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
Mehr1. 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
Mehrn 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
Mehr1. 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
MehrMan 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 - 4. Verifikation! Spezifikation: Angabe, was ein Programm
MehrKorrektheit 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
MehrProblem: 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
MehrPartielle 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
MehrC. 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
MehrInformatik 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
Mehr4.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
MehrEinfü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
MehrEinfü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
MehrFormale 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
MehrBeispiel 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
MehrBeispiel 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
Mehr2.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
MehrInformatik 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,
MehrSchleifen: 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
MehrTechnische 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
MehrKapitel 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
MehrSemantik 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
MehrAlgorithmen 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
MehrVerifizierende 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
MehrKontrollstrukturen -- 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
MehrEinfü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
MehrKurs 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
Mehr1 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
MehrEinfü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
MehrTechnische 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:
Mehr5.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
MehrTutoraufgabe 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
Mehr5.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
MehrZusammenfassung. 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)
MehrEin 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 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
Mehr2. Algorithmenbegriff
2. Algorithmenbegriff Keine Algorithmen: Anleitungen, Kochrezepte, Wegbeschreibungen,... Algorithmus: Berechnungsvorschrift, die angibt, wie durch Ausführung bestimmter Elementaroperationen aus Eingabegrößen
MehrMathem.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
Mehr2.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
MehrFACHHOCHSCHULE 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
MehrKapitel 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
MehrIdeen 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
MehrEinfü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
MehrDas 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
MehrJava 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
MehrC++ 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
MehrEinfü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,
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
Mehr3 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
MehrVerschiedene 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. $
Mehr2 - 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
Mehr3. 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
MehrSemantik 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
MehrKompaktkurs 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
MehrIdeen 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,
MehrProgrammsteuerung 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
Mehr3 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
MehrRekursion. 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
MehrPraktikum 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
MehrTag 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
MehrMathematische 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
MehrRekursion. 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
MehrTerme 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,
MehrIntensivü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
MehrGrundlagen: 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
MehrProgrammierpraktikum
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
Mehrn 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
MehrLogik. 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
MehrModul 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
MehrImperative 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 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
Mehr3.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*
MehrIdeen 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
MehrAlgorithmen 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
MehrTeil 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
MehrIdeen 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
MehrProgrammiersprache 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.)
MehrGrundlagen 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
Mehr13 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
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
MehrKapitel 4. Kontrollstrukturen
Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen
MehrKontrollfluss. 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
Mehr2.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
MehrKapitel 4. Kontrollstrukturen
Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen
Mehreine 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
MehrFolgen 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
MehrAufgaben 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.
Mehr2.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
MehrVorlesung. 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 (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
MehrDer 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