Korektnost algoritmov IBllO 1 / 21 Prečo? /úu U" i/t («í k (ja. ^vď i/So^íy/»' fiVi trX ~ 03i .jUj i|„J ipj -ŕfe/' i ■ ISA i" m. ' ÍR hrst 2 —>2 —► • ••2 —>3 i-i) 10 / 21 Zrkladlový obraz Zrkadlový obraz — platnost invariantov 2 pre každý retazec S po vykonaní príkazov X platí rovnost S = reverse( Y) • X S, y^A 3 ak S = reverse(y) • X a X tak Y = reverse(S) A, 2 ak S = reverse(y) X a X ^ A, tak po vykonaní príkazov Y *— head(X) ■ Y; X *— tail(X) platí znovu tá istá rovnost pre nové hodnoty premenných X a Y dokázali sme čiastočnú korektnosť J 11 / 21 Zrkladlový obraz Zrkadlový obraz — konečnost • výpočet algoritmu je nekonečný práve ak prechádza kontrolným bodom 2 nekonečne veľa krát • s kontrolným bodom 2 asociujeme kvantitatívnu vlastnosť (tzv. konvergent) a ukážeme, že jej hodnota klesá a pritom je zdola ohraničená • konvergentem pre kontrolný bod 2 je dĺžka reťazca X • pri každom priechode kontrolným bodom 2 dĺžka reťazca X klesne o 1 • ak dĺžka X klesne na 0 (X je prázdny reťazec), tak výpočet neprechádza cyklom a nenavštívi kontrolný bod 2 dokázali sme konečnosť J 12 / 21 Zrkladlový obraz Zrkadlový obraz — korektnosť korektnosť = čiastočná korektnost + konečnosť J 13 / 21 Euklidov algoritmus Príklad - Euklidov algoritmus Vstup dve kladné celé čísla X a Y Výstup najväčší spoločný deliteľ Z čísel X a Y spoločný deliteľ Z Z delí X a Z delí Y (celočíselné) najväčší deliteľ pre každé číslo U > Z, buď U nedelí X alebo U nedelí Y Euklidov algoritmus Euklidov algoritmus - - implementácia function Euclid (X, Y) V ^X W ^Y while V ^ W do if V > W then V <- V - W fi if V < W then V <- W - V fi od return (V) Invariant 1 V a W sú násobkom Z Invariant 2V>ZaW>Z Invariant 3 neexistuje väčší spoločný deliteľ čísel V a W než číslo Z všetky invariatny platia v každom bode výpočtu Euklidov algoritmus Euklidov algoritmus — čiastočná korektnosť Invariant 1 V a 1/1/ sú násobkom Z Invariant 2V>ZaW>Z Invariant 3 neexistuje väčší spoločný deliteľ čísel V a 1/1/ než číslo Z Inicializácia V <-X, W <-Y • invarianty 1, 2, 3 sa priradením neporušia IF príkaz if V > 1/1/ then V <- V - 1/1/ fi • Fakt Ak V > W, tak dvojice čísel V, W a V -W,W majú rovnakých spoločných deliteľov • ak Z delí V/, U/a V > W, tak V - W > 0 a V -W>Z • invarianty 1, 2, 3 zostávajú zachované IF príkaz if W > V then W • symetricky W- V f i 16 / 21 Euklidov algoritmus Euklidov algoritmus — čiastočná korektnosť Invariant 1 V a W sú násobkom Z Invariant 2V>ZaW>Z Invariant 3 neexistuje väčší spoločný deliteľ čísel V a W než číslo Z while príkaz • všetky invarianty zostávajú v platnosti po prevedení jednotlivých príkazov cyklu • cyklus končí keď V = W • V je najväčším spoločným deliteľom V, W • V = Z čiastočná korektnosť 17 / 21 Euklidov algoritmus Euklidov algoritmus — konečnosť • výpočet je nekonečný práve ak while príkaz sa vykoná nekonečne veľa krát • konvergentem while cyklu je súčet V + W • pri každom vstupe do tela cyklu je V > Z > 0, W > Z > 0 a 9 pri vykonaní tela cyklu sa odčíta celé kladné číslo buď od V alebo od W • suma V + W sa pri každom priechode cyklom zníži aspoň o 1 • na začiatku je V+W = X + Ya preto sa cyklus vykoná nanajvýš X + Y krát konečnosť J 18 / 21 Príklad - triedenie vkladaním Insertion — Sort (A) for j: ^- 2 to length[A] do key ^ A\j\ while / > 0 A A[i] > key do A[i + 1] i: ^- i — 1 od 4[/ + 1] <- /cey od 4[/] Invariant na začiatku iterácie for cyklu obsahuje A[l.. .j — 1] tie isté prvky, ako obsahovalo na týchto pozíciách pole A na začiatku výpočtu, ale utriedené od najmenšieho po najväčší 19 / 21 I Insertsort Triedenie vkladaním - čiastočná korektnosť a konečnost Invariant na začiatku iterácie for cyklu obsahuje A[l.. .j — 1] tie isté prvky, ako obsahovalo na týchto pozíciách pole A na začiatku výpočtu, ale utriedené od najmenšieho po najväčší Inicializácia tvrdenie platí na začiatku výpočtu (J = 2, postupnosť A[l] obsahuje jediný prvok a je utriedená) FOR cyklus v tele cyklu sa hodnoty A\j — l],A\j — 2],A\j — 3],... posúvajú o jednu pozíciu doprava až kým sa nenájde vhodná pozícia pre A\j] Ukončenie for cyklus sa ukončí keď j = n + 1. Substitúciou n + 1 za j dostávame, že pole A[+ ... n obsahuje tie isté prvky, ako na začiatku výpočtu, ale utriedené. Konečnosť for cyklus nemení hodnotu riadiacej premennej cyklu 20 / 21 Formálna verifikácia Formálna verifikácia • interaktívne dokazovanie • dokazovanie formálnym odovedním (theorem proving) • overovanie modelu (model checking) 21 / 21