• Keine Ergebnisse gefunden

Outline. 1 Einleitung. 2 Einführung in C. 3 C - Fehler finden und vermeiden. 4 Fortgeschrittenes in C. 5 C - Binärer Suchbaum

N/A
N/A
Protected

Academic year: 2022

Aktie "Outline. 1 Einleitung. 2 Einführung in C. 3 C - Fehler finden und vermeiden. 4 Fortgeschrittenes in C. 5 C - Binärer Suchbaum"

Copied!
66
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Outline

1 Einleitung 2 Einführung in C

3 C - Fehler finden und vermeiden 4 Fortgeschrittenes in C

5 C - Binärer Suchbaum 6 Einführung in Common Lisp 7 Lisp - Beispiele

8 Einführung in Prolog 9 Formale Semantik

(2)

Formale Semantik und Verifikation - Wiederholung

• Mathematischer Nachweise über Korrektheit von Programmen

• Formale Beschreibung der Bedeutung von Programmen

Übersetzersemantik

Operationale Semantik

Denotationelle Semantik

Axiomatische Semantik

• Literatur:

Appelrath, Ludewig,Skriptum Informatik, B. G. Teubner, 2000.

(3)

Operationale Semantik

• Die Operationale Semantik definiert für eine Programmiersprache eine mathematische Maschine, welche als Programminterpreter dient.

Eine solchemathematische Maschine Mist ist ein Tupel

M = (I

,

O

,

K

, α, ω, τ, π

) mit folgenden Elementen:

I . . .EingabedatenundProgrammanweisungen O . . . Menge vonAusgabedaten

K . . . Menge vonKonfigurationen

α

:I

K . . .Eingabefunktion

ω

:K

O . . .Ausgabefunktion

τ

:K

K . . .Übergangsfunktion

π

:K

→ {

false

,

true

}

. . .Halteprädikat

(4)

Operationale Semantik am Beispiel Mini

• K =A

×

Z, wobeiA die Menge aller Anweisungfolgen undZ die Menge aller möglichen Programmzustände ist.

• Ein Mini-Programm terminiert genau dann, wenn die aktuelle Anweisungsfolge leer ist. Also:

π

(a

,

z) =truegdw.a=

ε

• Beispiel:Das folgende Mini-Programm liefert die Summe zweier Zahlenx undy, fallsy

0 gilt. Andernfalls terminiert es nicht.

read x, y;

while y != 0 do x := x + 1; y := y - 1 end;

write x.

Im Folgenden berechnen wir schrittweise die Konfigurationsübergänge dieses Programms.

(5)

Übergangsfunktion

τ

für Mini

alter alte neuer neue

Zustand Anweisungsfolge Zustand Anweisungsfolge

z ε;hAi z hAi

z bB0;hAi zhb0i hAi

z b1Bb2+ 1;hAi zhb1z(b2) + 1i hAi z b1Bb21;hAi zhb1z(b2)1i hAi

z ifb= 0 thenhA1i z hA1i;hAi fallsz(b) = 0

elsehA2iend;hAi hA2i;hAi sonst

z whileb,0 dohA1i z hAi fallsz(b) = 0

end;hAi hA1i; whileb,0 sonst

dohA1iend;hAi

Hierbeizist die Abbildungz:B

→ Ž

, die jedem Bezeichner einen Wert zuweist.z

h

b

w

i

bezeichnet die Variablenblegung die mitz

übereinstimmt, wobei nur die Variableb den Wertw hat.

(6)

Übergangsfunktion

τ

für Mini

alter alte neuer neue

Zustand Anweisungsfolge Zustand Anweisungsfolge

z ε;hAi z hAi

z bB0;hAi zhb0i hAi

z b1Bb2+ 1;hAi zhb1z(b2) + 1i hAi z b1Bb21;hAi zhb1z(b2)1i hAi

z ifb= 0 thenhA1i z hA1i;hAi fallsz(b) = 0

elsehA2iend;hAi hA2i;hAi sonst

z whileb,0 dohA1i z hAi fallsz(b) = 0

end;hAi hA1i; whileb,0 sonst

dohA1iend;hAi

(whiley,0 doxBx+ 1;y By−1 end;ε,z0) z0(x) = 3,z0(y) = 2

Hinweis: Beachten Sie, dass die Anweisungensfolge durch die leere Anweisungε ergänzt wird.

(7)

Übergangsfunktion

τ

für Mini

alter alte neuer neue

Zustand Anweisungsfolge Zustand Anweisungsfolge

z ε;hAi z hAi

z bB0;hAi zhb0i hAi

z b1Bb2+ 1;hAi zhb1z(b2) + 1i hAi z b1Bb21;hAi zhb1z(b2)1i hAi

z ifb= 0 thenhA1i z hA1i;hAi fallsz(b) = 0

elsehA2iend;hAi hA2i;hAi sonst

z whileb,0 dohA1i z hAi fallsz(b) = 0

end;hAi hA1i; whileb,0 sonst

dohA1iend;hAi

(xBx+ 1;y By−1;whiley,0 doxBx+ 1;yBy−1 end;ε,z0) z0(x) = 3,z0(y) = 2

(8)

Übergangsfunktion

τ

für Mini

alter alte neuer neue

Zustand Anweisungsfolge Zustand Anweisungsfolge

z ε;hAi z hAi

z bB0;hAi zhb0i hAi

z b1Bb2+ 1;hAi zhb1z(b2) + 1i hAi z b1Bb21;hAi zhb1z(b2)1i hAi

z ifb= 0 thenhA1i z hA1i;hAi fallsz(b) = 0

elsehA2iend;hAi hA2i;hAi sonst

z whileb,0 dohA1i z hAi fallsz(b) = 0

end;hAi hA1i; whileb,0 sonst

dohA1iend;hAi

(yBy−1;whiley ,0 doxBx+ 1;yBy−1 end;ε,z1) z1(x) = 4,z1(y) = 2

(9)

Übergangsfunktion

τ

für Mini

alter alte neuer neue

Zustand Anweisungsfolge Zustand Anweisungsfolge

z ε;hAi z hAi

z bB0;hAi zhb0i hAi

z b1Bb2+ 1;hAi zhb1z(b2) + 1i hAi z b1Bb21;hAi zhb1z(b2)1i hAi

z ifb= 0 thenhA1i z hA1i;hAi fallsz(b) = 0

elsehA2iend;hAi hA2i;hAi sonst

z whileb,0 dohA1i z hAi fallsz(b) = 0

end;hAi hA1i; whileb,0 sonst

dohA1iend;hAi

(whiley,0 doxBx+ 1;y By−1 end;ε,z2) z2(x) = 4,z2(y) = 1

(10)

Übergangsfunktion

τ

für Mini

alter alte neuer neue

Zustand Anweisungsfolge Zustand Anweisungsfolge

z ε;hAi z hAi

z bB0;hAi zhb0i hAi

z b1Bb2+ 1;hAi zhb1z(b2) + 1i hAi z b1Bb21;hAi zhb1z(b2)1i hAi

z ifb= 0 thenhA1i z hA1i;hAi fallsz(b) = 0

elsehA2iend;hAi hA2i;hAi sonst

z whileb,0 dohA1i z hAi fallsz(b) = 0

end;hAi hA1i; whileb,0 sonst

dohA1iend;hAi

(xBx+ 1;y By−1;whiley,0 doxBx+ 1;yBy−1 end;ε,z2) z2(x) = 4,z2(y) = 1

(11)

Übergangsfunktion

τ

für Mini

alter alte neuer neue

Zustand Anweisungsfolge Zustand Anweisungsfolge

z ε;hAi z hAi

z bB0;hAi zhb0i hAi

z b1Bb2+ 1;hAi zhb1z(b2) + 1i hAi z b1Bb21;hAi zhb1z(b2)1i hAi

z ifb= 0 thenhA1i z hA1i;hAi fallsz(b) = 0

elsehA2iend;hAi hA2i;hAi sonst

z whileb,0 dohA1i z hAi fallsz(b) = 0

end;hAi hA1i; whileb,0 sonst

dohA1iend;hAi

(yBy−1;whiley ,0 doxBx+ 1;yBy−1 end;ε,z3) z3(x) = 5,z3(y) = 1

(12)

Übergangsfunktion

τ

für Mini

alter alte neuer neue

Zustand Anweisungsfolge Zustand Anweisungsfolge

z ε;hAi z hAi

z bB0;hAi zhb0i hAi

z b1Bb2+ 1;hAi zhb1z(b2) + 1i hAi z b1Bb21;hAi zhb1z(b2)1i hAi

z ifb= 0 thenhA1i z hA1i;hAi fallsz(b) = 0

elsehA2iend;hAi hA2i;hAi sonst

z whileb,0 dohA1i z hAi fallsz(b) = 0

end;hAi hA1i; whileb,0 sonst

dohA1iend;hAi

(whiley,0 doxBx+ 1;y By−1 end;ε,z4) z4(x) = 5,z4(y) = 0

(13)

Übergangsfunktion

τ

für Mini

alter alte neuer neue

Zustand Anweisungsfolge Zustand Anweisungsfolge

z ε;hAi z hAi

z bB0;hAi zhb0i hAi

z b1Bb2+ 1;hAi zhb1z(b2) + 1i hAi z b1Bb21;hAi zhb1z(b2)1i hAi

z ifb= 0 thenhA1i z hA1i;hAi fallsz(b) = 0

elsehA2iend;hAi hA2i;hAi sonst

z whileb,0 dohA1i z hAi fallsz(b) = 0

end;hAi hA1i; whileb,0 sonst

dohA1iend;hAi

(ε,z4)

z4(x) = 5,z4(y) = 0

(14)

Denotationelle Semantik - kurze Vorlesungswiederholung

• . . . Maschinenmodell zur Beschreibung der Zuständsänderungen aller Variablen

• SeiZp die Menge aller möglichen Zustände

Zp

W(v1)

×

W(v2)

× . . .

W(vn), wobeiv1

, . . . ,

vndie im Programm

auftretenden Variablen undW(vi) der jeweilige Wertebereich der Variableviist.

Jede Anweisung kann dann als Funktion gesehen werden, die von einem Zustand in einem anderen abbildet:

F[Anweisung] :Zp

Zp

F ist diesemantische Funktion. Sie entspricht der Abstraktion von der Wirkung von Programmen auf Variablenbelegungen, hin zu der Wirkung von Einzelanweisungen und Anweisungsfolgen auf die

(15)

Denotationelle Semantik - Beispiel

• Zur Vorbereitung auf das Übungsblatt ein kleines Beispiel zu Anweisungssequenzen:

x:=x+1; y:=y-1

Hieraus ergibt sich die folgende semantische Funktion F:

F[x:=x+ 1;y :=y

1](z) =F[y:=y

1](F[x :=x+ 1](z))

• . . . an dieser Stelle endet das Beispiel, denn die semantischen Funktion für eine Zuweisung soll im Selbststudium, dass heißt im Rahmen des aktuellen Übungsblatts, definiert werden.

(16)

Denotationelle Semantik - Beispiel

• Zur Vorbereitung auf das Übungsblatt noch ein kleines Beispiel zu Schleifen:

WHILEy! = 0 DO

h

A

i

END

Hieraus ergibt sich die folgende semantische Funktion F:

F[WHILEy! = 0 DO

h

A

i

END](z) =

(

z

z∈Zp :z(y) = 0

F[WHILEy! = 0 DO

h

A

i

END](F[

h

A

i

]z) sonst

(17)

Axiomatische Semantik

• Meist für imperative Programmiersprachen

• Bekannteste Vertreter: wp-Kalkül, Hoare-Kalkül

• Statt konkreter Zustände: Eigenschaften von Zuständen oder Aussagen über Zustände.

(18)

Schwächste Vorbedingung

• Wenn vor der AnweisungS, die BedingungP gilt, so gilt nach ihr die BedingungQ.

{

P

}

S

{

Q

}

• Beispiel:

{

x=N

}

x :=x+ 1

{

x=N+ 1

}

(19)

Schwächste Vorbedingung

• Problem: Zu einer Nachbedinung kann es viele verschiedene Vorbedingungen geben:

{

?

}

x :=x+y;

{

x

>

0

}

• Gültige Vorbedingungen:

{

x

≥ −

3

y

>

3

}

{

x+y

>

0

}

{

x

>

0

y

>

0

}

(20)

Schwächste Vorbedingung

• Gesucht ist diejenige VorbedingungP, für die gilt: Jede Vorbedingung P0fürS, unter der nach Ausführung vonSdie NachbedingungQ gilt, impliziertP

• Wir schreiben auch:P0

P

• P ist schwächer alsP0(da spezieller) undP0 ist stärker alsP (da allgemeiner)

• Solch eine schwächste Vorbedingung heisst:wp(S

,

Q)

(21)

Anwendung Schwächste Vorbedingung

• Gibt es zu einem gegebenen ProgrammS, spezifizierte Vor- und NachbedingungenPSPEC undQSPEC, sowie die BedingungenPund Q, so dassPSPEC

P,P

{

S

}

Q, undQ

QSPEC gilt, so ist das Programm korrekt.

• Finde zu einem ProgrammSund einer NachbedingungQSPEC die schwächste Vorbedingungwp(S

,

QSPEC). Das Programm ist dann korrekt, wennPSPEC

wp(S

,

QSPEC) gilt. StattQSPEC darf auch ein stärkeresQgewählt werden.

(22)

Schwächste Vorbedingung

• Leere Anweisung:

wp(

ε,

Q)

Q

• Sequenz:

wp(A1;A2

,

Q)

wp(A1

,

wp(A2

,

Q))

• Bedingte Verzweigung:

wp(IFB THEN

h

A1

i

ELSE

h

A2

i

END

,

Q)

(B

wp(

h

A1

i ,

Q))

(

¬

B

wp(

h

A2

i ,

Q))

• Zuweisung:

wp(x

B

V

,

Q(x))

Q(x

V)

• Schleife:

wp(WHILEB DO

h

A

i

END

,

Q)

(

¬

B

Q)

((B

I)

(

¬

B

I

Q)

(B

I

wp(

h

A

i ,

I))) Inennt man die Schleifeninvariante

(23)

Schwächste Vorbedingung

• Leere Anweisung:

wp(

ε,

Q)

Q

• Sequenz:

wp(A1;A2

,

Q)

wp(A1

,

wp(A2

,

Q))

• Bedingte Verzweigung:

wp(IFB THEN

h

A1

i

ELSE

h

A2

i

END

,

Q)

(B

wp(

h

A1

i ,

Q))

(

¬

B

wp(

h

A2

i ,

Q))

• Zuweisung:

wp(x

B

V

,

Q(x))

Q(x

V)

• Schleife:

wp(WHILEB DO

h

A

i

END

,

Q)

(

¬

B

Q)

((B

I)

(

¬

B

I

Q)

(B

I

wp(

h

A

i ,

I))) Inennt man die Schleifeninvariante

(24)

Schwächste Vorbedingung

• Leere Anweisung:

wp(

ε,

Q)

Q

• Sequenz:

wp(A1;A2

,

Q)

wp(A1

,

wp(A2

,

Q))

• Bedingte Verzweigung:

wp(IFB THEN

h

A1

i

ELSE

h

A2

i

END

,

Q)

(B

wp(

h

A1

i ,

Q))

(

¬

B

wp(

h

A2

i ,

Q))

• Zuweisung:

wp(x

B

V

,

Q(x))

Q(x

V)

• Schleife:

wp(WHILEB DO

h

A

i

END

,

Q)

(

¬

B

Q)

((B

I)

(

¬

B

I

Q)

(B

I

wp(

h

A

i ,

I))) Inennt man die Schleifeninvariante

(25)

Schwächste Vorbedingung

• Leere Anweisung:

wp(

ε,

Q)

Q

• Sequenz:

wp(A1;A2

,

Q)

wp(A1

,

wp(A2

,

Q))

• Bedingte Verzweigung:

wp(IFB THEN

h

A1

i

ELSE

h

A2

i

END

,

Q)

(B

wp(

h

A1

i ,

Q))

(

¬

B

wp(

h

A2

i ,

Q))

• Zuweisung:

wp(x

B

V

,

Q(x))

Q(x

V)

• Schleife:

wp(WHILEB DO

h

A

i

END

,

Q)

(

¬

B

Q)

((B

I)

(

¬

B

I

Q)

(B

I

wp(

h

A

i ,

I))) Inennt man die Schleifeninvariante

(26)

Schwächste Vorbedingung

• Leere Anweisung:

wp(

ε,

Q)

Q

• Sequenz:

wp(A1;A2

,

Q)

wp(A1

,

wp(A2

,

Q))

• Bedingte Verzweigung:

wp(IFB THEN

h

A1

i

ELSE

h

A2

i

END

,

Q)

(B

wp(

h

A1

i ,

Q))

(

¬

B

wp(

h

A2

i ,

Q))

• Zuweisung:

wp(x

B

V

,

Q(x))

Q(x

V)

• Schleife:

wp(WHILEBDO

h

A

i

END

,

Q)

(

¬

B

Q)

((B

I)

(

¬

B

I

Q)

(B

I

wp(

h

A

i ,

I))) I nennt man die Schleifeninvariante

(27)

Schwächste Vorbedingung - Beispiele

• Zuweisung:y = 2 muss vorx

B

y+ 1 gelten, damit anschließend x = 3 gilt:

wp(x

B

y+ 1

,

x= 3)

(y+ 1 = 3)

(y= 2)

• Bedingte Verzweigung: Das folgende Programm liefert fürjede Variablenbelegung die Nachbedingungx=

|

y

|

.

wp(IFy

<

0 THENx

B −

yELSEx

B

yEND

,

x=

|

y

|

)

(y

<

0

wp(x

B −

y

,

x =

|

y

|

))

(y

0

wp(x

B

y

,

x =

|

y

|

))

(y

<

0

∧ −

y=

|

y

|

)

(y

0

y=

|

y

|

)

y

<

0

y

0

true

(28)

Schwächste Vorbedingung - Beispiele

• SeiQ

x

n

t =xi die Nachbedingung für das Programm

t := t * x; i := i + 1

:

wp(t

B

t

x;i

B

i+ 1

,

i

n

t =xi)

wp(t

B

t

x

,

wp(i

B

i+ 1

,

i

n

t =xi))

wp(t

B

t

x

,

i+ 1

n

t =xi+1)

i+ 1

n

t

x=xi+1

i

<

n

t =xi

• Die Vorbedingung im zweiten Teil stimmt mit der NachbedingungQ trotz der Zuweisung überein und wird als Invariante bezeichnet.

(29)

Schwächste Vorbedingung - Beispiele

• Auf den folgenden beiden Folien suchen wir die schwächste Vorbedingung für eine Schleife:

WHILE( i < n ) DO t := t * x i := i + 1 END

• Dazu betrachten wir zuerst nur die einzelnen Terme, ohne den gesamten logischen Ausdruck für diewpder Schleife am Ende zu notieren.

(30)

Schwächste Vorbedingung - Beispiele

• Die Nachbedingung soll, analog zur vorletzten Folie, wie folgt lauten:

Q

i =n

t =xi

t =xn

.

• kein Schleifendurchlauf

(

¬

B

Q)

i

n

t =xn

t =xn

Q

.

• vor Schleifeneintritt:

(B

I)

(i

<

n)

(i

n

t =xi)

i

<

n

t =xi

(31)

Schwächste Vorbedingung - Beispiele

• Schleifenende:

(

¬

B

I)

(i

n)

(i

n

t =xi)

i=n

t =xi

Q

(

¬

B

I) impliziert also die NachbedingungQ.

• Schleifendurchlauf (siehe vorher):

wp(t

B

t

x;i

B

i+ 1

,

i

n

t =xi)

i

<

n

t =xi

(B

I) impliziert also wieder die Vorbedingung für einen weiteren Schleifendurchlauf.

(32)

Schwächste Vorbedingung - Programmkonstruktion

• Wie aus der Vorlesung bekannt, kann man mittels axiomatischer Semantik auch Programme konstruieren. Dabei geht man von einer Nachbedingung aus und fügt sukzessive Anweisungen zum

Programm hinzu, so dass die schwächste Vorbedingung allgemeiner ist als die aktuelle Zwischenbedingung oder spezialisiert die

ZwischenbedingungenQ zuQ0, so dassQ0

Qgilt.

• Im Folgenden finden Sie ein Beispiel zur Programmkonstruktion, welches Ihnen als Beispiel beim weiteren Selbststudium helfen soll.

(33)

Anwendung axiomatischer Semantik - Binomialkoeffizient

Ziel:Konstruiere ein Programm, dass den Binomialkoeffizientenbausn undk berechnet:

n

k

=

Q

k

i=1 n(ki)

i .

• QSPEC

b=

n

k

• wähle spezielleresQ

b=

n

k

0

k

n

• Idee:löse iterativ mittels Schleife und suche nach SchleifeninvarianteI mit (

¬

B

I

Q)

(B

I

wp(A

,

I))

• wähle als SchleifeninvarianteI

b=

n

i

0

i

k

n und als Abbruchbedingung der while-SchleifeB

i

<

k

⇒ ¬

B

I

(i

k

b =

n

i

0

i

k

n)

(b =

n

i

0

i =k

n)

b=

n

k

0

k

n

Q

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I)

(34)

Anwendung axiomatischer Semantik - Binomialkoeffizient

Ziel:Konstruiere ein Programm, dass den Binomialkoeffizientenbausn undk berechnet:

n

k

=

Q

k

i=1 n(ki)

i .

• QSPEC

b=

n

k

• wähle spezielleresQ

b=

n

k

0

k

n

• Idee:löse iterativ mittels Schleife und suche nach SchleifeninvarianteI mit (

¬

B

I

Q)

(B

I

wp(A

,

I))

• wähle als SchleifeninvarianteI

b=

n

i

0

i

k

n und als Abbruchbedingung der while-SchleifeB

i

<

k

⇒ ¬

B

I

(i

k

b =

n

i

0

i

k

n)

(b =

n

i

0

i =k

n)

b=

n

k

0

k

n

Q

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I)

(35)

Anwendung axiomatischer Semantik - Binomialkoeffizient

Ziel:Konstruiere ein Programm, dass den Binomialkoeffizientenbausn undk berechnet:

n

k

=

Q

k

i=1 n(ki)

i .

• QSPEC

b=

n

k

• wähle spezielleresQ

b=

n

k

0

k

n

• Idee:löse iterativ mittels Schleife und suche nach SchleifeninvarianteI mit (

¬

B

I

Q)

(B

I

wp(A

,

I))

• wähle als SchleifeninvarianteI

b=

n

i

0

i

k

n und als Abbruchbedingung der while-SchleifeB

i

<

k

⇒ ¬

B

I

(i

k

b =

n

i

0

i

k

n)

(b =

n

i

0

i =k

n)

b=

n

k

0

k

n

Q

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I)

(36)

Anwendung axiomatischer Semantik - Binomialkoeffizient

Ziel:Konstruiere ein Programm, dass den Binomialkoeffizientenbausn undk berechnet:

n

k

=

Q

k

i=1 n(ki)

i .

• QSPEC

b=

n

k

• wähle spezielleresQ

b=

n

k

0

k

n

• Idee:löse iterativ mittels Schleife und suche nach SchleifeninvarianteI mit (

¬

B

I

Q)

(B

I

wp(A

,

I))

• wähle als SchleifeninvarianteI

b=

n

i

0

i

k

n und als Abbruchbedingung der while-SchleifeB

i

<

k

⇒ ¬

B

I

(i

k

b =

n

i

0

i

k

n)

(b =

n

i

0

i =k

n)

b=

n

k

0

k

n

Q

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I)

(37)

Anwendung axiomatischer Semantik - Binomialkoeffizient

Ziel:Konstruiere ein Programm, dass den Binomialkoeffizientenbausn undk berechnet:

n

k

=

Q

k

i=1 n(ki)

i .

• QSPEC

b=

n

k

• wähle spezielleresQ

b=

n

k

0

k

n

• Idee:löse iterativ mittels Schleife und suche nach SchleifeninvarianteI mit (

¬

B

I

Q)

(B

I

wp(A

,

I))

• wähle als SchleifeninvarianteI

b=

n

i

0

i

k

n und als Abbruchbedingung der while-SchleifeB

i

<

k

⇒ ¬

B

I

(i

k

b =

n

i

0

i

k

n)

(b =

n

i

0

i =k

n)

b=

n

k

0

k

n

Q

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I)

(38)

Anwendung axiomatischer Semantik - Binomialkoeffizient

Ziel:Konstruiere ein Programm, dass den Binomialkoeffizientenbausn undk berechnet:

n

k

=

Q

k

i=1 n(ki)

i .

• QSPEC

b=

n

k

• wähle spezielleresQ

b=

n

k

0

k

n

• Idee:löse iterativ mittels Schleife und suche nach SchleifeninvarianteI mit (

¬

B

I

Q)

(B

I

wp(A

,

I))

• wähle als SchleifeninvarianteI

b=

n

i

0

i

k

n und als Abbruchbedingung der while-SchleifeB

i

<

k

⇒ ¬

B

I

(i

k

b =

n

i

0

i

k

n)

(b =

n

i

0

i =k

n)

b=

n

k

0

k

n

Q

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I)

(39)

Anwendung axiomatischer Semantik - Binomialkoeffizient

Ziel:Konstruiere ein Programm, dass den Binomialkoeffizientenbausn undk berechnet:

n

k

=

Q

k

i=1 n(ki)

i .

• QSPEC

b=

n

k

• wähle spezielleresQ

b=

n

k

0

k

n

• Idee:löse iterativ mittels Schleife und suche nach SchleifeninvarianteI mit (

¬

B

I

Q)

(B

I

wp(A

,

I))

• wähle als SchleifeninvarianteI

b=

n

i

0

i

k

n und als Abbruchbedingung der while-SchleifeB

i

<

k

⇒ ¬

B

I

(i

k

b =

n

i

0

i

k

n)

(b =

n

i

0

i =k

n)

b=

n

k

0

k

n

Q

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I)

(40)

Anwendung axiomatischer Semantik - Binomialkoeffizient

Ziel:Konstruiere ein Programm, dass den Binomialkoeffizientenbausn undk berechnet:

n

k

=

Q

k

i=1 n(ki)

i .

• QSPEC

b=

n

k

• wähle spezielleresQ

b=

n

k

0

k

n

• Idee:löse iterativ mittels Schleife und suche nach SchleifeninvarianteI mit (

¬

B

I

Q)

(B

I

wp(A

,

I))

• wähle als SchleifeninvarianteI

b=

n

i

0

i

k

n und als Abbruchbedingung der while-SchleifeB

i

<

k

⇒ ¬

B

I

(i

k

b =

n

i

0

i

k

n)

(b =

n

i

0

i =k

n)

b=

n

k

0

k

n

Q

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I)

(41)

Anwendung axiomatischer Semantik - Binomialkoeffizient

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I) gilt.

• wähle fürA:b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

• wp(b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

,

b=

n

i

0

i

k

n)

wp(b

B

b

(n

i)

/

(i+ 1)

,

wp(i

B

i+ 1

,

b =

n

i

0

i

k

n))

wp(b

B

b

(n

i)

/

(i+ 1)

,

b=

n

i+1

0

i+ 1

k

n)

bn−ii+1 =

n

i+1

0

i+ 1

k

n

b =

n

i

0

i+ 1

k

n

b =

n

i

∧ −

1

i

<

k

n

• B

I

i

<

k

b=

n

i

0

i

k

n

b =

n

i

0

i

<

k

n

b=

n

i

∧ −

1

i

<

k

n

(42)

Anwendung axiomatischer Semantik - Binomialkoeffizient

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I) gilt.

• wähle fürA:b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

• wp(b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

,

b=

n

i

0

i

k

n)

wp(b

B

b

(n

i)

/

(i+ 1)

,

wp(i

B

i+ 1

,

b =

n

i

0

i

k

n))

wp(b

B

b

(n

i)

/

(i+ 1)

,

b=

n

i+1

0

i+ 1

k

n)

bn−ii+1 =

n

i+1

0

i+ 1

k

n

b =

n

i

0

i+ 1

k

n

b =

n

i

∧ −

1

i

<

k

n

• B

I

i

<

k

b=

n

i

0

i

k

n

b =

n

i

0

i

<

k

n

b=

n

i

∧ −

1

i

<

k

n

(43)

Anwendung axiomatischer Semantik - Binomialkoeffizient

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I) gilt.

• wähle fürA:b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

• wp(b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

,

b=

n

i

0

i

k

n)

wp(b

B

b

(n

i)

/

(i+ 1)

,

wp(i

B

i+ 1

,

b =

n

i

0

i

k

n))

wp(b

B

b

(n

i)

/

(i+ 1)

,

b=

n

i+1

0

i+ 1

k

n)

bn−ii+1 =

n

i+1

0

i+ 1

k

n

b =

n

i

0

i+ 1

k

n

b =

n

i

∧ −

1

i

<

k

n

• B

I

i

<

k

b=

n

i

0

i

k

n

b =

n

i

0

i

<

k

n

b=

n

i

∧ −

1

i

<

k

n

(44)

Anwendung axiomatischer Semantik - Binomialkoeffizient

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I) gilt.

• wähle fürA:b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

• wp(b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

,

b=

n

i

0

i

k

n)

wp(b

B

b

(n

i)

/

(i+ 1)

,

wp(i

B

i+ 1

,

b =

n

i

0

i

k

n))

wp(b

B

b

(n

i)

/

(i+ 1)

,

b=

n

i+1

0

i+ 1

k

n)

bn−ii+1 =

n

i+1

0

i+ 1

k

n

b =

n

i

0

i+ 1

k

n

b =

n

i

∧ −

1

i

<

k

n

• B

I

i

<

k

b=

n

i

0

i

k

n

b =

n

i

0

i

<

k

n

b=

n

i

∧ −

1

i

<

k

n

(45)

Anwendung axiomatischer Semantik - Binomialkoeffizient

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I) gilt.

• wähle fürA:b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

• wp(b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

,

b=

n

i

0

i

k

n)

wp(b

B

b

(n

i)

/

(i+ 1)

,

wp(i

B

i+ 1

,

b =

n

i

0

i

k

n))

wp(b

B

b

(n

i)

/

(i+ 1)

,

b=

n

i+1

0

i+ 1

k

n)

bn−ii+1 =

n

i+1

0

i+ 1

k

n

b =

n

i

0

i+ 1

k

n

b =

n

i

∧ −

1

i

<

k

n

• B

I

i

<

k

b=

n

i

0

i

k

n

b =

n

i

0

i

<

k

n

b=

n

i

∧ −

1

i

<

k

n

(46)

Anwendung axiomatischer Semantik - Binomialkoeffizient

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I) gilt.

• wähle fürA:b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

• wp(b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

,

b=

n

i

0

i

k

n)

wp(b

B

b

(n

i)

/

(i+ 1)

,

wp(i

B

i+ 1

,

b =

n

i

0

i

k

n))

wp(b

B

b

(n

i)

/

(i+ 1)

,

b=

n

i+1

0

i+ 1

k

n)

bn−ii+1 =

n

i+1

0

i+ 1

k

n

b =

n

i

0

i+ 1

k

n

b =

n

i

∧ −

1

i

<

k

n

• B

I

i

<

k

b=

n

i

0

i

k

n

b =

n

i

0

i

<

k

n

b=

n

i

∧ −

1

i

<

k

n

(47)

Anwendung axiomatischer Semantik - Binomialkoeffizient

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I) gilt.

• wähle fürA:b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

• wp(b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

,

b=

n

i

0

i

k

n)

wp(b

B

b

(n

i)

/

(i+ 1)

,

wp(i

B

i+ 1

,

b =

n

i

0

i

k

n))

wp(b

B

b

(n

i)

/

(i+ 1)

,

b=

n

i+1

0

i+ 1

k

n)

bn−ii+1 =

n

i+1

0

i+ 1

k

n

b =

n

i

0

i+ 1

k

n

b =

n

i

∧ −

1

i

<

k

n

• B

I

i

<

k

b=

n

i

0

i

k

n

b =

n

i

0

i

<

k

n

b=

n

i

∧ −

1

i

<

k

n

(48)

Anwendung axiomatischer Semantik - Binomialkoeffizient

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I) gilt.

• wähle fürA:b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

• wp(b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

,

b=

n

i

0

i

k

n)

wp(b

B

b

(n

i)

/

(i+ 1)

,

wp(i

B

i+ 1

,

b =

n

i

0

i

k

n))

wp(b

B

b

(n

i)

/

(i+ 1)

,

b=

n

i+1

0

i+ 1

k

n)

bn−ii+1 =

n

i+1

0

i+ 1

k

n

b =

n

i

0

i+ 1

k

n

b =

n

i

∧ −

1

i

<

k

n

• B

I

i

<

k

b=

n

i

0

i

k

n

b =

n

i

0

i

<

k

n

b=

n

i

∧ −

1

i

<

k

n

(49)

Anwendung axiomatischer Semantik - Binomialkoeffizient

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I) gilt.

• wähle fürA:b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

• wp(b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

,

b=

n

i

0

i

k

n)

wp(b

B

b

(n

i)

/

(i+ 1)

,

wp(i

B

i+ 1

,

b =

n

i

0

i

k

n))

wp(b

B

b

(n

i)

/

(i+ 1)

,

b=

n

i+1

0

i+ 1

k

n)

bn−ii+1 =

n

i+1

0

i+ 1

k

n

b =

n

i

0

i+ 1

k

n

b =

n

i

∧ −

1

i

<

k

n

• B

I

i

<

k

b=

n

i

0

i

k

n

b =

n

i

0

i

<

k

n

b=

n

i

∧ −

1

i

<

k

n

(50)

Anwendung axiomatischer Semantik - Binomialkoeffizient

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I) gilt.

• wähle fürA:b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

• wp(b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

,

b=

n

i

0

i

k

n)

wp(b

B

b

(n

i)

/

(i+ 1)

,

wp(i

B

i+ 1

,

b =

n

i

0

i

k

n))

wp(b

B

b

(n

i)

/

(i+ 1)

,

b=

n

i+1

0

i+ 1

k

n)

bn−ii+1 =

n

i+1

0

i+ 1

k

n

b =

n

i

0

i+ 1

k

n

b =

n

i

∧ −

1

i

<

k

n

• B

I

i

<

k

b=

n

i

0

i

k

n

b =

n

i

0

i

<

k

n

b=

n

i

∧ −

1

i

<

k

n

(51)

Anwendung axiomatischer Semantik - Binomialkoeffizient

• Suche nach AnweisungenA, so dassB

I

wp(A

,

I) gilt.

• wähle fürA:b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

• wp(b

B

b

(n

i)

/

(i+ 1);i

B

i+ 1

,

b=

n

i

0

i

k

n)

wp(b

B

b

(n

i)

/

(i+ 1)

,

wp(i

B

i+ 1

,

b =

n

i

0

i

k

n))

wp(b

B

b

(n

i)

/

(i+ 1)

,

b=

n

i+1

0

i+ 1

k

n)

bn−ii+1 =

n

i+1

0

i+ 1

k

n

b =

n

i

0

i+ 1

k

n

b =

n

i

∧ −

1

i

<

k

n

• B

I

i

<

k

b=

n

i

0

i

k

n

b =

n

i

0

i

<

k

n

b=

n

i

∧ −

1

i

<

k

n

Referenzen

ÄHNLICHE DOKUMENTE

– Funktionstemplate legt die Anweisung einer Funktion fest, wobei statt eines konkreten Typs ein Parameter eingesetzt wird.. – Klassentemplates legt Definition einer Klasse fest,

Sie werden dazu verwendet, eine Aktion auf alle Elemente eines Containers anzuwenden. – Algorithmen bestehen aus Routinen, die alle auf Containern

Der Hauptgrund dafür wird in einem späteren Kapitel klar: beim Erzeugen neuer Objekte (aus Klassen) wird für jedes Objekt ein sogenannter Konstruktor (eine Funktion) und beim

Universit¨ at Regensburg, Institut f¨ ur Theoretische Physik Winter

Universit¨ at Regensburg, Institut f¨ ur Theoretische Physik Winter

We rst will try to determine the new point group, which hopefully is C 2v , well hopefully we. didn't miss a

Beim zweiten Differenzenquotienten liegt der eine Messpunkt auf 700 m ü. M., der andere 'h Meter höher. b) Es ist ein Minuszeichen. d) Es ist ein Minuszeichen.

Nun, die Vollständigkeit in dem Sinne, dass Cauchyfolgen immer einen Grenzwert besitzen, vererbt sich nach C , denn Grenzwerte kann man in C komponentenweise bilden, und als den