• Keine Ergebnisse gefunden

¨Ubungsblatt 8 Beispiell¨osung f¨ur Aufgabe 1

N/A
N/A
Protected

Academic year: 2021

Aktie "¨Ubungsblatt 8 Beispiell¨osung f¨ur Aufgabe 1"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Praktische Informatik I WS 2008/09

Ubungsblatt 8 ¨

Beispiell¨ osung f¨ ur Aufgabe 1

Aufgabe 1 : Beweise, wir brauchen Beweise...

Aufgabe 1.1 ggT reloaded

Die folgende JAVA Methode soll dengr¨ossten gemeinsamen Teiler (ggT) zweier positiver ganzer Zahlen ermittelt.

public static int ggt(int wert1, int wert2) {

while (wert1 != wert2) {

if (wert1 > wert2) wert1 = wert1 -wert2;

else

wert2 = wert2 - wert1;

}

return wert1;

}

Formal gesehen ist zu zeigen, dass dieses Programm korrekt ist bez¨uglich der Vorbedingung P RE ≡ZP RE(wert1)>0∧ZP RE(wert2)>0

und der Nachbedingung

P OST ≡ZP OST(wert1) =ggT(ZP RE(wert1), ZP RE(wert2))

F¨ur unsere Betrachtungen wollen wir den Methodenaufruf und -r¨ucksprung hier ignorieren, zu zeigen ist also

{ZP RE(wert1)>0∧ZP RE(wert2)>0}

while (wert1 != wert2) {

if (wert1 > wert2) wert1 = wert1 -wert2;

else

wert2 = wert2 - wert1;

}

{ZP OST(wert1) =ggT(ZP RE(wert1), ZP RE(wert2))}

(2)

PI 1, WS 2008/09

In Anlehnung an das Vorlesungsskript wenden wir die dort eingef¨uhrteinduktive Verifikationss- trategie an.

Wir definieren

IN V ≡Z(wert1)>0∧Z(wert2)>0∧ggt(Z(wert1), Z(wert2)) =ggT(ZP RE(wert1), ZP RE(wert2)).

Wir zeigen zun¨achst, dass die Invariante IN V vor dem Erreichen der while-Schleife gilt, d.h.

hier im Anfangszustand ZP RE.

LEMMA 1:Es gilt: P RE ⇒IN V[ZP RE/Z].

Beweis: Zu zeigen w¨are

(ZP RE(wert1)>0∧ZP RE(wert2)>0)⇒ (ZP RE(wert1)>0∧ZP RE(wert2)>0∧

ggt(ZP RE(wert1), ZP RE(wert2)) =ggT(ZP RE(wert1), ZP RE(wert2))) Dieser Ausdruck ist offensichtlich wahr!

Als n¨achstes ist zu zeigen, dass IN V tats¨achlich eine Invariante f¨ur die while-Schleife ist, d.h.

dass, wenn IN V bei Eintritt in den while-Block im aktuellen Zustand Z gilt, IN V auch am Ende deswhile-Blocks im dann erreichten Zustand Z0 gilt.

LEMMA 2:GiltIN V bei Eintritt in denwhile-Block mit Valuation Z gilt, so giltIN V auch nach Ausf¨uhrung des while-Blocks in der dann vorliegenden Valuation Z0 .

Beweis: Wir berechnen, wie sich ZustandZ0ausZergibt durch Anwendung der semantischen Regel f¨ur dasif-Statement.

Z0 = [[if(wert1> wert2)wert1 =wert1−wert2; else wert2 =wert2−wert1; ]](Z) Aufgel¨ost f¨uhrt dies zu

Z0 =

[[wert1 =wert1−wert2; ]](Z) fallsZ(wert1)> Z(wert2) [[wert2 =wert2−wert1; ]](Z) fallsZ(wert1)≤Z(wert2) Jetzt wird gezeigt, dassIN V[Z0/Z] gilt, mit der gleichen Fallunterscheidung.

Fall 1: Sei Z(wert1)> Z(wert2).

Dann giltZ0=Z⊕ {wert17→Z(wert1)−Z(wert2)}.

• Insbesondere gilt Z0(wert2) =Z(wert2) und somitZ0(wert2)>0.

• AusZ(wert1)>0∧Z(wert2)>0 undZ(wert1)> Z(wert2) folgt, dass Z(wert1)−Z(wert2)>0, alsoZ0(wert1)>0.

• ggT(Z0(wert1), Z0(wert2)) =ggT(Z(wert1)−Z(wert2), Z(wert2)),

ggT(Z(wert1)−Z(wert2), Z(wert2)) =ggT(Z(wert2), Z(wert1)−Z(wert2)) und Z(wert1)> Z(wert2), also mit den Euklidischen Axiomen

ggT(Z0(wert1), Z0(wert2)) =ggT(Z(wert1), Z(wert2))

=ggT(ZP RE(wert1), ZP RE(wert2)).

2

(3)

PI 1, WS 2008/09

Fall 2: SeiZ(wert1)≤Z(wert2). Dann gilt tats¨achlichZ(wert1)< Z(wert2), da die Schleifen- bedingungZ(wert1)6=Z(wert2) f¨urZ gilt. Also giltZ0=Z⊕{wert27→Z(wert2)−Z(wert1)}.

• Insbesondere gilt Z0(wert1) =Z(wert1) und somitZ0(wert1)>0.

• AusZ(wert1)>0∧Z(wert2)>0 undZ(wert2)> Z(wert1) folgt, dass Z(wert2)−Z(wert1)>0, alsoZ0(wert2)>0.

• ggT(Z0(wert1), Z0(wert2)) =ggT(Z(wert1), Z(wert2)−Z(wert1)) und Z(wert1)< Z(wert2), also mit den Euklidischen Axiomen

ggT(Z0(wert1), Z0(wert2)) =ggT(Z(wert1), Z(wert2))

=ggT(ZP RE(wert1), ZP RE(wert2)).

Damit bleibt nur noch zu zeigen:

LEMMA 3:Aus G¨ultigkeit der Invariante und aus der Schleifenbedingung folgt, dass die Nach- bedingung POSTeingehalten wird, sobald die Schleife terminiert.

(IN V[ZP OST/Z]∧ ¬(ZP OST(wert1)6=ZP OST(wert2))⇒P OST

Beweis: ¬(ZP OST(wert1)6=ZP OST(wert2) bedeutet nat¨urlichZP OST(wert1) =ZP OST(wert2).

AusIN V[ZP OST/Z] erhalten wir

ggt(ZP OST(wert1), ZP OST(wert2)) =ggT(ZP RE(wert1), ZP RE(wert2)) und wegen ZP OST(wert1) =ZP OST(wert2) und dem Euklidischen Axiom

ZP OST(wert1) =ggT(ZP RE(wert1), ZP RE(wert2)).

Aufgabe 1.2 Ein paar Punkte vom Weihnachtsjan

Zeigt, dass die Methode terminiert, falls wert1und wert2positive ganze Zahlen sind!

Erweiterte Strategie: Wir m¨ussen die Strategie aus dem Skript etwas erweitern.. Das Stra- tegieprinzip bei gegebener while-Schleife

1 while ( b(x_1,...,x_n) ) {

2 B

3 }

lautet

•Finde eine Abbildung f : Σ7→W, mit (W,≺) eine Wohlordnung (Σ bezeichne hier die Menge aller Zust¨ande).

1. Finde also ein solches f, so dass f¨ur jeden beliebigen Zustand Z ∈Σ und eine Konstante c∈W gilt:

f(Z)≺c⇒ ¬b(Z(x1), . . . , Z(xn))

2. Zeige, dass wenn Z den Zustand bei Eintritt in den while-Block (also vor B) bezeichnet, f¨ur den Zustand Z0 nach Ausf¨urung vonBgilt:

f(Z0)≺f(Z)

3

(4)

PI 1, WS 2008/09

F¨ur diese Aufgabe k¨onnen wir f : Σ 7→ N nehmen, denn N ist Wohlordnung. F¨ur den ggT- Algorithmus ist eine geeignete Funktionen etwaf(Z) =Z(wert1) +Z(wert2).

W¨ahlen wirf(Z) =Z(wert1) +Z(wert2). F¨urc= 3 gilt f(Z)< c⇒Z(wert1) =Z(wert2), da Z(wert1)>0 undZ(wert2)>0 aus der Invariante folgt.

Ebenso gilt wegen Z(wert1)> 0∧Z(wert2)> 0 bei Eintritt in den while-Block, dass ansch- liessendZ0(wert1)>0∧Z0(wert2)>0 gilt (siehe oben).

Aus der Fallunterscheidung zur Berechnung vonZ0 folgt dar¨uberhinaus, das entweder Z0(wert1)< Z(wert1) gilt oderZ0(wert2)< Z(wert2).

In jedem Fall istZ0(wert1) +Z0(wert2)< Z(wert1) +Z(wert2), d.h.f(Z0)< f(Z).

4

Referenzen

ÄHNLICHE DOKUMENTE

• Erweitern Sie Ihren generischen Datentyp Tree um die Methode merge- Inorder(Tree&lt;E&gt; tree), die alle Elemente aus dem Baum tree gem¨aß Inorder-Traversierung in den aktuellen

– Planen (Pseudocode notwendig!) und implementieren Sie eine mit merge- Inorder vergleichbare Methode, die einen Baum mit (deutlich) kleinerer H¨ohe liefert (Hinweis: ¨ Uberlegen

• Erweitern Sie nun Ihren bin¨ aren Suchbaum um die Methode mergeInorder, die alle Elemente aus einem zweiten Baum gem¨ aß Inorder-Traversierung in den aktuellen Baum einf¨ ugt,

(nach Staatsexamensaufgabe Fr¨ uhjahr 2001)... (nach Staatsexamensaufgabe

Erweitern Sie das Shell-Skript dahingehend, dass wenn es sich bei der als Ar- gument angegebenen Datei um eine gew¨ ohnliche Datei handelt, soll gepr¨ uft werden, ob sie ausf¨

KNOPPIX ist eine freie GNU/Linux-Distribution, die sich als Live-CD direkt von einer CD/DVD starten l¨asst, ohne Installation auf der

Berechnen Sie den Zeitpunkt T, zu welchem 90% der Bev¨ olkerung infiziert sind. Abgabetermin:

Fachbereich Mathematik und Statistik Prof.