Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9
Algorithmen und Datenstrukturen 09
Stefan Ploner
21. Dezember 2011
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9
1 Besprechung Blatt 8 Fragen
2 WP-Kalk¨ul
Syntax und Rechenregeln Pr¨a- und Postinkrement Bedingungen
Schleifen
3 Vorbereitung Blatt 9 Hinweise
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Fragen
Fragen zu Blatt 8?
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Syntax und Rechenregeln
Syntax
• ¬: nicht
• ∧: und
• ∨: oder
• ∀: f¨ur alle
• ∃: es gibt (mindestens) ein Rechenregeln
• ¬(a∧b)≡ ¬a∨ ¬b
• ¬(a∨b)≡ ¬a∧ ¬b
• a⇒b≡ ¬a∨b
• mehr: Vorlesungsfolien 9 - 86
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Syntax und Rechenregeln
a = abc;
b = 5a;
c = a+b;
d = c+b;
// Q = d > 0
P ≡wp(A,Q)
≡wp(0a=abc;b= 5a;c =a+b;d =c +b0,d >0)
≡wp(0a=abc;b= 5a;c =a+b0,c+b >0)
≡wp(0a=abc;b= 5a0,a+ 2b >0)
≡wp(0a=abc0,11a>0)
≡11(abc)>0
≡abc >0
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Pr¨a- und Postinkrement
Mehrere Anweisungen in einer Zeile
a = 2d;
b = 3e;
c = b++ - --a;
// Q = b<c
...ist identisch zu...
a = 2d;
b = 3e;
a = a-1;
c = b-a;
b = b+1;
// Q = b<c
P ≡wp(A,Q)≡...≡d <0
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Pr¨a- und Postinkrement
Komplexe Beispiele I
i = a + a++;
a0 = a;
a1 = a;
a = a + 1; // Inc nach auslesen des zweiten Summanden i = a0 + a1;
Was w¨are, wenna = a++ + a;? (Inkrement geht verloren)
i = a++ + a;
a0 = a;
a = a + 1; // Inc vor auslesen des zweiten Summanden a1 = a;
i = a0 + a1;
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Pr¨a- und Postinkrement
Komplexe Beispiele II
c += c++ + ++c; // aehnlich fuer c += ++c + c++;
c = c + (c++ + ++c); // vereinfacht
c0 = c;
c1 = c;
c = c + 1; // Post-Increment c = c + 1; // Pre-Increment c2 = c;
res = c1 + c2; // Addition von + res = c0 + res; // Addition von +=
c = res;
Merke: Immer erst Aufdr¨oseln und dann das WP-Kalk¨ul anwenden!
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Bedingungen
Syntax f¨ ur if-else-Bedingungen
if (<b>) {
<s1>
} else {
<s2>
}
<Q>
P ≡[(b)∧wp(S1,Q)]∨[(¬b)∧wp(S2,Q)]
Analog dazu wird bei switch mehr verodert.
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Bedingungen
if (a < 0) { b = 3e;
d = b + a;
} else { b = 3a;
d = ab;
}
Q = d > 2b;
P ≡[(b)∧wp(s1,Q)]∨[(¬b)∧wp(s2,Q)]
≡[(a<0)∧wp(0b= 3e0,b+a>2b)]∨[(a>= 0)∧wp(0b= 3a0,ab >2b)]
≡[(a<0)∧wp(0b= 3e0,a>b)]∨[(a>= 0)∧wp(0b= 3a0,a>2)]
≡[(a<0)∧(a>3e)]∨[(a>= 0)∧(a>2)]
≡(3e <a<0)∨(a>2)
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Schleifen
Syntax f¨ ur while-Schleifen
x = a;
y = b;
p = 0;
while (x > 0) { p = p+y;
x = x-1;
}
P ≡a>= 0
Q ≡p =ab I ≡(xy) +p=ab
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Schleifen
Vor der Schleife (VS)
P ⇒wp(VS,I)
P ⇒wp(0x =a;y =b;p = 00,xy+p =ab) P ⇒wp(0x =a;y =b0,xy =ab)
P ⇒wp(0x =a0,xb=ab) P ⇒ab=ab
(a>= 0)⇒true
true
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Schleifen
Schleifenrumpf (SR)
I∧b⇒wp(SR,I)
I∧b⇒wp(0p =p+y;x=x−10,xy +p =ab) I∧b⇒wp(0p =p+y0,(x−1)y+p =ab) I∧b⇒wp(0p =p+y0,xy−y+p =ab) I∧b⇒xy −y+p+y =ab
I∧b⇒xy +p =ab xy +p =ab∧(x >0)⇒xy +p =ab
true
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Schleifen
Nach der Schleife (NS)
Die Invariante ist immernoch g¨ultig, die Abbruchbedingung ist nach der Schleife falsch:
I ∧ ¬b ⇒wp(NS,Q) I ∧ ¬b ⇒wp(00,p =ab) I ∧ ¬b ⇒p=ab
xy+p=ab∧(x <= 0)⇒p=ab
xy+p=ab∧(x= 0)⇒p=ab p =ab ⇒p=ab
true
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Schleifen
Terminierungsbeweis
Schleifenvariante: V := x
P =a>= 0
⇒V =x>= 0 positiv (1)
Vk =x→Vk−1 =x−1 streng monoton fallend
⇒x = 0 wird irgendwann erreicht (2) x ist ganzzahlig (3)
⇒ Schleife terminiert
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Schleifen
Schleife innerhalb einer if-Bedingung
x = a; y = b; p = 0;
if (y > 0) {
while (x > 0) { p = p+y;
x = x-1;
} }
P ⇒wp(VS,I)
P ⇒wp(0x=a;y =b;p = 0;if(y >0)...0,xy +p =ab)
P ⇒wp(0x=a;y =b;p = 0;0,[y >0∧xy +p =ab)]∨[y ≤0∧true]) P ⇒...
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Hinweise
wp-Kalk¨ ul
• Punkte gibt es sowohl auf den Rechenweg als auch auf das richtige Ergebnis
• Rechenweg muss erkennbar sein!
• keine Zwischenschritte ¨uberspringen
• Werden Eigenschaften eines Variablentypes verwendet, so muss das notiert werden, z.B. (Typ == Integer)
• Rundungsfehler, Overflow und Underflow d¨urfen ignoriert werden
• 9.4d) Stichwort oder Teilaufgabenk¨urzel als Begr¨undung!
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Hinweise
Exception vs. Assertion
• Anwendung:
• IllegalArgumentExceptionbei Schnittstellen die ¨offentlich sichtbar sind
• Assertions bei internen Checks oder bei Argumenten von internen Funktionen
• beim Testen von Assertions das VM-Argument “-ea” (enable assertions) nicht vergessen!
Besprechung Blatt 8 WP-Kalk¨ul Vorbereitung Blatt 9 Hinweise