• Keine Ergebnisse gefunden

Verifikation von Algorithmen, Fallunterscheidungen, Hoare-Kalkül

N/A
N/A
Protected

Academic year: 2022

Aktie "Verifikation von Algorithmen, Fallunterscheidungen, Hoare-Kalkül"

Copied!
17
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Grundlagen der Programmierung (Vorlesung 12)

z Vorige Vorlesung

y Korrektheit von Anweisungen

y Vorbedindungen und Nachbedingungen y Einfach- und Mehrfachzuweisung

z Inhalt dieser Vorlesung

y Wiederholung und Vertiefung des Stoffes aus VL 11 y Fallunterscheidungen

z Lernziele

y Grundlagen der systematischen Programmentwicklung

Ralf Möller, FH-Wedel

(2)

‘

º’uº’ “

”jIH0»m¼lnoI½3¼•Ž …1½9H

–

n‰¼9‚ ‚ HI½9HU¼H@

–

H

ÏIn‰¼6H0»U~H È2,1:80Ep3p3,5‰80RÂ<¿

“

”jIH0»m¼lnoI½9H ÒÎ1 0E!D:—90E!ß7 0E!/5

‡ˆ

Í!bß 5!/:

‡ˆ

"bß 5!/:5AD1RÀ:

‡ˆ

—˜:QW"bß75!/:

‡ˆ

Ð0Â<¿%ÀFDS™m"bß75!/:

“

”jIHšU›lno~œ ›•Ž …œ9H Ízß7ZþS1Op3/,$Jÿ2"bß75!/:TžuÎ1/ !

W"bß75!/:5,DS1Ÿ:"!5#0Ep3p3:5866oß78

rstu Øç/ æOâeڄÙUç@¡ v£¢ Øç æ„âeÚOÙUç@¡¤

Éh¥ ¦§¨yÉh¥

ø

rH‚ <šƒ 0E/5#©0E!/Ÿ>©É

ü"0©A0E0E!5,D„Î!/, -Ÿ/

"bß75!/: +0E::—/ û-D1Ÿ:

•Ž9JV‚ …

ÏIH„jIHšU›J<H„œ9H… D„Î!OCwß 58!/:5,D1Ÿ:

•Ž…U…U›

ª#«¬ K­

M ® v K

¯v M

ª,’9¬ K

¯v M ® ¤ K M

Ç~o œ šU…k

M ® v § ® ¤ K M

(3)

‘

º’uº’ “

”jIH0»m¼lnoI½3¼•Ž …1½9H

–

n‰¼9‚ ‚ HI½9HU¼H@

–

H

ÏIn‰¼6H0»U~H È2,1:80Ep3p3,5‰80RÂ<¿

“

”jIH0»m¼lnoI½9H ÒÎ1 0E!D:—90E!ß7 0E!/5

‡ˆ

Í!bß 5!/:

‡ˆ

"bß 5!/:5AD1RÀ:

‡ˆ

—˜:QW"bß75!/:

‡ˆ

Ð0Â<¿%ÀFDS™m"bß75!/:

“

”jIHšU›lno~œ ›•Ž …œ9H Ízß7ZþS1Op3/,$Jÿ2"bß75!/:TžuÎ1/ !

W"bß75!/:5,DS1Ÿ:"!5#0Ep3p3:5866oß78

rstu Øç/ æOâeڄÙUç@¡ v£¢ Øç æ„âeÚOÙUç@¡¤

Éh¥ ¦§¨yÉh¥

ø

rH‚ <šƒ 0E/5#©0E!/Ÿ>©É

ü"0©A0E0E!5,D„Î!/, -Ÿ/

"bß75!/: +0E::—/ û-D1Ÿ:

•Ž9JV‚ …

ÏIH„jIHšU›J<H„œ9H… D„Î!OCwß 58!/:5,D1Ÿ:

•Ž…U…U›

ª#«¬ K­

M ® v K

¯v M

ª,’9¬ K

¯v M ® ¤ K M

Ç~o œ šU…k

M ® v § ® ¤ K M

(4)

Sequentielle Anweisung, Vorbedingung finden

❚ { V } x := x + 1; y := y -1 { x + y = s }

❚ { V } x := x + 1 { P 1 } ; { P 1 } y := y -1 { x + y = s }

❚ P 1 : (x + y = s)[y ← y-1]

µ x + y -1 = s

❚ V : P 1 [x ← x +1]

µ x +1 + y -1 = s

µ x + y = s

(5)

Unterschied: Parallele und. seq. Zuweisung

❚ Werte vertauschen

❙ { y=w1 x=w2 } x, y := y, x { x=w1 y=w2 }

❚ Geht das sequentiell? Wenn ja, unter welchen Bed.?

❙ { V } x := y; y := x { x=w1 y=w2 }

❙ ((x=w1 y=w2)[ y ← x ]) [ x ← y ]

❙ (x=w1 x=w2) [ x ← y ]

❙ y=w1 y=w2

❚ Also nur, wenn w1 = w2

(dann natürlich nicht interessant)

(6)

Sequentialisierung

❚ i, S := i+1, S+i

❚ S := S + i ; i := i + 1

❚ Dependenzanalyse notwendig

❚ Erst die Variablen setzen, die von anderen abhängen (geht nicht immer)

❚ Ggf. Zwischenvariablen einführen

(7)

é ï[ðRñò'óõô„ð“öw÷wò'ö/Z\[zò^],_lñò'óŒ÷ ð“öw÷wò'ö|ð“ö/`ba4ced4fò'óhgmò'ö

‘³²

’

²F´ µ

H0ÇošU~œH

“

”jRHšq›no~œ9H

¶¸·2¹

“

”jIHšU›lno~œ Rº»l/:!/: þ1ȼ/Î0žQ0<l./"!5#,!9©ž .9-!

½6¾N¿lÀ

1 ·UÁ4ÂÄÃ

À

0E!5:Eß P6ßO8zÿ2!/T•ß7

"bß75!/:žuÎ1/ ! / —˜:Q

"bß75!/:Å!/5#0Ep3p3/:56)ß 8

rstu ¶Ä·OÆ æ`ÛWâeç@¡RÙUç4¡

½6ÇÀÉÈ

Øç æ„âeÚOÙUç@¡ v

À

¸Ã

À

Øç æOâeÚOÙUç4¡ ¤

ÀÈ<Ê

¶¸·

rH‚ <šƒ DS1$p3ŸŸ

ª#«¬

Æ æ<ÛWâeç4¡RÙUç@¡nßO80E!/58:Eß P6

ª,’

¬

5,+/0E5*û-58!/ŸF#0<

½6¾e¿À

.

ßO8œØç/ æOâeڄÙ0ç4¡ v 0E!5:6DOÎ!/P

ª,’

µ ¬

5,+/0E5*û-58!/ŸF#0<

·UÁ4ÂÄÃ

À .

ßO8œØç/ æOâeڄÙ0ç4¡¤Ë0E!5:6D !/P"0E5#©/ŸÌÎ

ßO8

ÍËJQšH Æ æ`ÛYâeç4¡RÙUç@¡I!/£Øç/ æOâeڄÙUç@¡BžuÎ1/ !

-— l/:Q "bß75!/:X!5#0Ep3p3/:566

ß7

rstu ¶Ä·-Æ æ<ÛWâeç4¡RÙUç@¡

½6ÇÀÉÈ

Øç æ„âeÚOÙUç@¡

ÀÈ<Ê

¶¸·

(8)

éëêíìwêÏÎ Ðbòy`JóŒöw÷mÑãò Qöañò'óõôOðAöw÷bò>ö

rH‚ <šƒ D1,p)0EŸ

ÏIH„jIHšU›J<H„œ9H… D„Î!O— l/:QË"bß75!/:

•Ž…U…U›

ª#«¬ K­

v M ® v K M

ª,’9¬ K­

¤ M ® ¤ K M

Ó

o œ šU…k

K þ ­

vŒÔ Õ

ÿŒÖ þ ­ ¤ Ô ×†Õ ÿ M

¶Ä·¼Õ

½6ÇÀÉÈ

® v À ÂÄÃ

À ® ¤ ÀÉÈ<Ê

¶Ä·

K M

ÏIH„jIHšU›J<H„œ9H… D„Î!O— l/:QË"bß75!/:T„!-p3F

½6ÇÀÉÈ

Ízß7:

•Ž…U…U›

ª#«¬ K­

M ® K M

Ó o œ šU…k

K þ ­ Ô Õ ÿ Ö þq Ô ×\Õ ÿ M

¶Ä·†Õ

½6ÇlÀÈ

®

ÀÉÈ<Ê

¶Ä·

K M

(9)

Fallunterscheidung: Vorbedingung finden

❚ { V } if x ≥ y

then { V 1 } r := x else { V 2 } r := y

endif { r ≥ x r ≥ y ( r = x r = y ) }

❚ V 1 : (r ≥ x r ≥ y ( r = x r = y ))[r ← x]

µ x ≥ x x ≥ y ( x = x x = y )

µ x ≥ y

❚ V 2 : y ≥ x (ähnl. Beweis)

❚ V: (B V 1 ) ( B V 2 ) µ true

(10)

Satz

❚ (p q) ( p r) µ (p ¡ q) ( p ¡ r)

❚ Erste Anwendung des Satzes:

❚ Mit diesem Satz kann die schwächste

Vorbedingung für die Fallunterscheidung formuliert werden als:

❚ { (B ¡ V 1 ) ( B ¡ V 2 ) }

(11)

Zweite Anwendung: Programmkonstruktion

❚ Aufgabe:

❙ Für eine Nachbedingung P = (B ¡ V 1 ) ( B ¡ V 2 ) soll ein Programm gefunden werden, das die Nachbedingung

herstellt

❙ In dieser Form liegen Spezifikationen häufig vor

❚ Behauptung: Die Lösung sieht so aus:

❙ { true } if B then S 1 else S 2 endif { P }

❙ mit { B } S 1 { V 1 B }

❙ und { B } S 2 { V 2 B }

(12)

Begründung

z Wenn { B } S 1 { V 1 fi B } korrekt, dann auch

{ B } S 1 { (V 1 fi B) fl (V 2 fi B) } (Abschwächung) z Wenn { B } S 2 { V 2 fi B } korrekt, dann auch

{ B } S 2 { (V 1 fi B) fl (V 2 fi B) } (Abschwächung) z Also ist auch die folgende Fallunterscheidung korrekt

{ (B fi B) fl ( B fi B) } if B then S 1 else S 2

{ (V 1 fi B) fl (V 2 fi B) } z Die Vorbedingung ist äquivalent zu true:

{ true } if B then S 1 else S 2 { (V 1 fi B) fl (V 2 fi B) } z Laut obigem Satz ergibt sich die Behauptung durch

Transformation der Nachbedingung

(13)

Beispiel: Spezifikation für Max

z { ( x ≥ y -> r = x ) fi ( x £ y -> r = y ) } z Idee: In Verzweigung umsetzen!

z Aber B und B notwendig

z Idee: Nachbedingung verstärken!

z { ( x ≥ y -> r = x ) fi ( x < y -> r = y ) }

(14)

é ï[ðRñò'óõô„ð“öw÷wò'ö/Z\[zò^],_lñò'óŒ÷ ð“öw÷wò'ö|ð“ö/`ba4ced4fò'óhgmò'ö

Ù HÚ~J<•ŽÛEÚ

¹ “

no›jIÚo… Ü /PDU0©™wè|,Eß :!/:

‡ˆ

|ȼ$1:80Ep3p3$58‰/80©/£:—O5ŒIÎ0E!Š9:&1©A

WÜ /'ß :YÊ4,•ß7:!/: þqÝ Á<Ã

ÀCÞ

"bß 5!:xÿyG

rstu Ý Á<Ã

À

ØÙUÚÛWÜEÙFÝSÞ ß ·

à æOÜá vRâ Øç æOâeÚOÙUç4¡ v

ããã

à æOÜá z â Øç æOâeÚOÙUç4¡ z

À

¸Ã

À â Øç/ æOâeڄÙ0ç4¡ä

ÀÈ<Ê Ý Á˜Ã

À

ÏIH Ó Hn<no~œ ,ž„Ÿ Î0E^"p3F»— l/:Q-"bß 5!/:

à æ„Üá âUå ØÙUÚÛWÜEÙz݄Þ

¶Ä· à æOÜá

å à æOÜákv

½6ÇÀÉÈ

Øç æ„âeÚOÙUç@¡æv

À

ÂÄÃ

À ããã

¶Ä·

à æOÜá å à æOÜáFz

½6ÇÀÉÈ

Øç æ„âeÚOÙUç@¡z

À

ÂÄÃ

À

Øç æOâeÚOÙUç4¡ä

ÀÈ<Ê

¶¸·

ãæã<ã ÀÉÈ<Ê

¶¸·

(15)

Beispiel: Multiplikation durch Addition

❚ Ziel: Programmstück konstruieren

❚ var x, y : N 0 , i, j, p : N 0

❚ { true } "multiplizieren" { x * y = p }

❚ Idee: i,j mit x und y initialisieren (und p mit 0) und dann schrittweise j verkleinern

❚ i,j,p := x,y,0 { x * y = p + i * j }

❚ { x * y = p + i * j } j, p := j-1, E { x * y = p + i * j }

❚ Idee: Die Anweisung j mal wiederholen bis j = 0

❙ x * y = p + (i * 0) x * y = p

(16)

Zusammenfassung, Kernpunkte

❚ Logik und die systematische Entwicklung von Programmen

❚ Programmsequenz

❚ Fallunterscheidung

(17)

Was kommt beim nächsten Mal?

❚ Korrektheit von S chleifen

Referenzen

ÄHNLICHE DOKUMENTE

F¨ ur welche Wahl der Schrittweite h geht die numerische L¨ osung des expliziten bzw.. impliziten Euler-Verfahrens

Grundlagen der Analysis, Topologie und Geometrie Ubungsblatt 7 ¨.. Abgabe bis Fr, 3.6.,

Sei G eine Gruppe mit einer Topologie, bez¨ uglich derer die Abbildungen (x, y) 7→ xy und x 7→ x −1 stetig sind. (Hinweis: Betrachten

Betrachte Beispiel 3.12 von Folie 169, die Arithmetik der

Betrachte Beispiel 3.12 von Folie 169, die Arithmetik der

Wir werden in diesem Abschnitt einige wichtige Anwendungen der Taylorschen Formel behandeln: Das totale Differenzial als lineare N¨ aherung, die Fehlerrechnung, die Theorie der

[r]

Konstruieren Sie für jedes Paar n, k von natürlichen Zahlen mit k &lt; n eine Formel ϕ n,k , die ausdrückt, dass im Graph ein Pfad der Länge