Pavol Jozef afárik University in Ko²ice Faculty of Science. Testovanie a verikácia programov Floydova metóda Gabriela Andrejková

Σχετικά έγγραφα
Matematika Funkcia viac premenných, Parciálne derivácie

Motivácia Denícia determinantu Výpo et determinantov Determinant sú inu matíc Vyuºitie determinantov. Determinanty. 14. decembra 2010.

Eulerovské grafy. Príklad Daný graf nie je eulerovský, ale obsahuje eulerovskú cestu (a, ab, b, bc, c, cd, d, da, a, ac, c, ce, e, ed, d, db).

Ekvačná a kvantifikačná logika

7. FUNKCIE POJEM FUNKCIE

Start. Vstup r. O = 2*π*r S = π*r*r. Vystup O, S. Stop. Start. Vstup P, C V = P*C*1,19. Vystup V. Stop

1. Limita, spojitost a diferenciálny počet funkcie jednej premennej

Matematika prednáška 4 Postupnosti a rady 4.5 Funkcionálne rady - mocninové rady - Taylorov rad, MacLaurinov rad

6 Limita funkcie. 6.1 Myšlienka limity, interval bez bodu

Goniometrické rovnice a nerovnice. Základné goniometrické rovnice

Základy automatického riadenia

ARMA modely čast 2: moving average modely (MA)

Cvičenie č. 4,5 Limita funkcie

Katedra matematiky Fakulta elektrotechniky a informatiky

Obvod a obsah štvoruholníka

PRUŽNOSŤ A PEVNOSŤ PRE ŠPECIÁLNE INŽINIERSTVO

7 Derivácia funkcie. 7.1 Motivácia k derivácii

Pravdepodobnos a ²tatistika (1-INF-435) Poznámky k predná²kam. Radoslav Harman, KAM, FMFI UK

Metódy vol nej optimalizácie

Matematika 2. časť: Analytická geometria

Maticové hry. doc. RNDr. tefan Pe²ko. 9. marca Katedra matematických metód a opera nej analýzy, FRI šu

3. Striedavé prúdy. Sínusoida

Moderné vzdelávanie pre vedomostnú spoločnosť Projekt je spolufinancovaný zo zdrojov EÚ M A T E M A T I K A

Riešenie cvičení z 5. kapitoly

MIDTERM (A) riešenia a bodovanie

M6: Model Hydraulický systém dvoch zásobníkov kvapaliny s interakciou

Komplexné čísla, Diskrétna Fourierova transformácia 1

4. Výrokové funkcie (formy), ich definičný obor a obor pravdivosti

Základy automatického riadenia

ARMA modely čast 2: moving average modely (MA)

MATEMATIKA I. Základy diferenciálneho počtu. Návody k cvičeniam pre odbory VSVH a STOP. Andrea Stupňanová, Alexandra Šipošová

Matematika 2. časť: Funkcia viac premenných Letný semester 2013/2014

ZÁKLADY MATEMATIKY 1 UNIVERZITA KONŠTANTÍNA FILOZOFA V NITRE FAKULTA PRÍRODNÝCH VIED

FUNKCIE N REÁLNYCH PREMENNÝCH

Jednotkový koreň (unit root), diferencovanie časového radu, unit root testy

Funkcie - základné pojmy

Tomáš Madaras Prvočísla

24. Základné spôsoby zobrazovania priestoru do roviny

Priamkové plochy. Ak každým bodom plochy Φ prechádza aspoň jedna priamka, ktorá (celá) na nej leží potom plocha Φ je priamková. Santiago Calatrava

VLASTNÉ ČÍSLA A JORDANOV KANONICKÝ TVAR. Michal Zajac. 3 T b 1 = T b 2 = = = 2b

Spojité rozdelenia pravdepodobnosti. Pomôcka k predmetu PaŠ. RNDr. Aleš Kozubík, PhD. 26. marca Domovská stránka. Titulná strana.

Motivácia pojmu derivácia

Prechod z 2D do 3D. Martin Florek 3. marca 2009

Nekone ný antagonistický konikt

IV Paralelné a distribuované výpo ty. Dana Pardubská

Vybrané partie z logiky

DIPLOMOVÁ PRÁCE. Monika Jakubcová Míry ecience portfolia vzhledem k stochastické dominanci

Zbierka rie²ených úloh z matematickej fyziky

Podnikateľ 90 Mobilný telefón Cena 95 % 50 % 25 %

5. kapitola Predikátová logika I Úvod do predikátovej logiky

Úvod do lineárnej algebry. Monika Molnárová Prednášky

x x x2 n

3. kapitola. Axiomatická formulácia modálnej logiky Vzťah medzi syntaxou a sémantikou. priesvitka 1

Deliteľnosť a znaky deliteľnosti

VLADIMÍR KVASNIČKA JIŘÍ POSPÍCHAL. Matematická logika

Planárne a rovinné grafy

Vybrané partie z logiky

Reálna funkcia reálnej premennej

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY

1. písomná práca z matematiky Skupina A

Obsah. 1.1 Reálne čísla a ich základné vlastnosti Komplexné čísla... 8

HASLIM112V, HASLIM123V, HASLIM136V HASLIM112Z, HASLIM123Z, HASLIM136Z HASLIM112S, HASLIM123S, HASLIM136S

Hry N hrá ov. doc. RNDr. tefan Pe²ko. April 9, Katedra matematických metód a opera nej analýzy, FRI šu

9. kapitola. Viachodnotové logiky trojhodnotová Łukasiewiczova logika a Zadehova fuzzy logika. priesvitka

,Zohrievanie vody indukčným varičom bez pokrievky,

4 Reálna funkcia reálnej premennej a jej vlastnosti

3. Výroková logika. Princíp dvojhodnotovosti (bivalencie): Existujú práve dve pravdivostné hodnoty pravda a nepravda.

Markovove procesy. Teória hromadnej obsluhy. doc. RNDr. tefan Pe²ko, CSc. 17. októbra Katedra matematických metód, FRI šu

Gramatická indukcia a jej využitie

Ako si nájs chybu? o a ako sa pýta výsledkov

Súčtové vzorce. cos (α + β) = cos α.cos β sin α.sin β cos (α β) = cos α.cos β + sin α.sin β. tg (α β) = cotg (α β) =.

Kompilátory. Cvičenie 6: LLVM. Peter Kostolányi. 21. novembra 2017

ZADANIE 1_ ÚLOHA 3_Všeobecná rovinná silová sústava ZADANIE 1 _ ÚLOHA 3

METÓDY VNÚTORNÉHO BODU VO FINANƒNÝCH MODELOCH DIPLOMOVÁ PRÁCA

Prednáška Fourierove rady. Matematická analýza pre fyzikov IV. Jozef Kise lák

Definícia parciálna derivácia funkcie podľa premennej x. Definícia parciálna derivácia funkcie podľa premennej y. Ak existuje limita.

Siete jednosmerného prúdu alebo 77 odporných príkladov

Základy automatického riadenia

3. prednáška. Komplexné čísla

Numerické metódy Zbierka úloh

Metódy vol nej optimalizácie

u R Pasívne prvky R, L, C v obvode striedavého prúdu Činný odpor R Napätie zdroja sa rovná úbytku napätia na činnom odpore.

Lineárna algebra I - pole skalárov, lineárny priestor, lineárna závislosť, dimenzia, podpriestor, suma podpriestorov, izomorfizmus

Integrovanie racionálnych funkcií

Príklady na precvičovanie Fourierove rady

KURZ JAZYKA C učebný text pre kvartu a kvintu osemročného gymnázia

Návrh vzduchotesnosti pre detaily napojení

FUNKCIE. Funkcia základné pojmy. Graf funkcie

Logické systémy. doc. RNDr. Jana Galanová, PhD. RNDr. Peter Kaprálik, PhD. Mgr. Marcel Polakovič, PhD.

Obyčajné diferenciálne rovnice

Základné poznatky molekulovej fyziky a termodynamiky

Výpočet. grafický návrh

MATEMATIKA. Martin Kalina

KATEDRA DOPRAVNEJ A MANIPULAČNEJ TECHNIKY Strojnícka fakulta, Žilinská Univerzita

VLADIMÍR KVASNIČKA JIŘÍ POSPÍCHAL. Matematická logika

Nelineárne optimalizačné modely a metódy

TECHNICKÁ UNIVERZITA V KOŠICIACH STROJNÍCKA FAKULTA MATEMATIKA 1. Funkcia jednej premennej a jej diferenciálny počet

Symbolická logika. Stanislav Krajči. Prírodovedecká fakulta

Margita Vajsáblová. ρ priemetňa, s smer premietania. Súradnicová sústava (O, x, y, z ) (O a, x a, y a, z a )

Technická univerzita v Košiciach Fakulta elektrotechniky a informatiky MATEMATIKA II. Zbierka riešených a neriešených úloh

Transcript:

Pavol Jozef afárik University in Ko²ice Faculty of Science Testovanie a verikácia programov Floydova metóda Gabriela Andrejková

Pri dokazovaní správnosti programov je potrebné ma ²pecikované: a) programovací jazyk, v ktorom budú programy zapísané; b) ²pecika ný jazyk na vyjadrenie vstupnej a výstupnej podmienky a al²ích vz ahov, ktoré platia medzi hodnotami premenných pri vykonávaní príkazov daného programu. Na splnenie na²ich cie ov nám posta í predikátový po et 1. rádu ako ²pecika ný jazyk a za programovací jazyk v tejto kapitole je zvolený jazyk vývojových diagramov JO.

V súvislosti s pouºívaním predikátového po tu 1. rádu (s rovnos ou) si treba uvedomi, ºe problém pravdivosti správne vytvorenej formuly (predikátového po tu 1. rádu) nie je algoritmicky rozhodnute ný, ale je iasto ne algoritmicky rozhodnute ný. Teda existuje algoritmus, ktorý pre danú pravdivú formulu dá o tom, ºe je pravdivá, odpove po kone nom po te krokov, ale ak formula nie je pravdivá, tak bu dá odpove po kone nom po te krokov alebo to nezistí. Tento výsledok má svoj odraz v metódach dokazovania správnosti programov. K najdôleºitej²ím metódam overovania pravdivosti správne vytvorených formúl predikátového po tu 1. rádu patrí rezolu ná metóda.

Predikátová logika = predikátový po et = predikátový kalkul = logika kvantikátorov = logika predikátov = logika funkcionálna je formálny systém, as logiky vy²etrujúca spôsoby, ktorými z formúl vznikajú výroky pomocou kvantikátorov a logických spojok. Predikátová logika sa zaoberá tak otázkami dokázate nosti, ako aj pravdivosti. Je roz²írením výrokovej logiky o kvantikátory a predikátové symboly popisujúce vz ahy (relácie) z univerza. Okrem beºného predikátového po tu existujú aj predikátové po ty vy²²ích rádov, v ktorých je povolená nielen kvantikácia objektových premenných, ale aj kvantikácia predikátov.

Jazyk obsahuje: Logické spojky:,,,, Kvantikátory:, Premenné: x, y, z,... x 1, y 1,... Kon²tanty (funk né symboly s aritou 0): a, b, c,... Funk né symboly (horný index k zna í aritu funk ného symbolu;k > 1): f k, g k, x k 1,... Predikátové (funkcionálne) symboly (horný index k zna í aritu predikátového symbolu; k > 1):P k, Q k, R k... Pomocné symboly (, ), [, ],,,

Vyjadrite formálne: 1. Nikto, kto nie je zapracovaný (P), nepracuje samostatne (S). 2. Nie kaºdý talentovaný (T) spisovate (Sp) je slávny (Sl). 3. Len zamestnanci (Z) pouºívajú vý ah (V). 4. Nie kaºdý lovek (C), ktorý ve a hovorí (M), nemá o poveda (R). 5. Niekto je spokojný (Sn) a niekto nie je spokojný. 6. Niekterí ²ikovní udia (Ch) sú leniví (L). 7. V²etci zamestnanci (Z) pouºívajú vý ah (V). Pomôcka: Po v²eobecnom kvantikátore nasleduje formula v tvare implikácie, po existen nom...

K prvému zoznámeniu sa s Floydovou metódou poslúºi program v jazyku vývojových diagramov (popis jazyka je uvedený v nasledujúcom odseku) znázornený na obr. 1. Je to program pre výpo et McCarthyho funkcie 91. Tvrdíme, ºe tento program po íta funkciu f(x) nad oborom celých ísel denovanú predpisom: { x 10, pre x > 100, z = f(x) = 91, inak. (1)

Pripome me si dôkaz: 1. Predpokladajme, ºe x > 100. Výpo et prebieha po ceste bez cyklov AB + +C, a teda skon í a platí z = x 10. Pomocou znamienok +, budeme vyjadrova smer postupu pri vetvení (v podmienkových príkazoch). Smer postupu pri splnenej podmienke je ozna ený +, pri nesplnenej. 2. Obtiaºny je len prípad x 100. Dôkaz pre tento prípad urobíme v dvoch krokoch. 2.I. Najprv dokáºeme, ak program skon í, vydá výsledok z = 91. Presved me sa najprv, ºe kedyko vek výpo et prechádza bodom B, je splnená podmienka: (y 1 101 y 2 1) (y 1 111 y 2 > 1). (2)

Platnos (2) overíme indukciou: 1. pri prvom prechode bodom B je y 1 100 y 2 = 1, t.j. uvedená podmienka platí; 2. ukáºeme, ºe ak je podmienka splnená pri istom (i)-tom prechode, bude splnená aj pri nasledujúcom (i+1)-vom prechode a) Ak je splnená podmienka a navy²e y 1 100, vykoná sa príkaz (y 1, y 2 ) := (y 1 + 11, y 2 + 1)), takºe po návrate do bodu B platí, ºe y 1 111 y 2 > 1, t.j. je splnený druhý len uvedenej disjunkcie. b) Ak je splnená uvedená podmienka, t.j. ur ite platí y 1 111 a navy²e y 1 101, potom, ak sa má výpo et vráti do bodu B, musí by y 2 > 1. Je vykonaný príkaz (y 1, y 2 ) := (y 1 10, y 2 1)), t.j. po návrate do bodu B je splnený prvý len uvedenej disjunkcie: y 1 101 y 2 1. Tým sme overili platnos vz ahu (2).

Ak niektorý výpo et skon í, vykoná sa posledný úsek programu z bodu B do bodu C. Teda prejde po ceste B + +C, o znamená, ºe y 1 > 100 a y 2 = 1, a preto pod a (2) pri poslednom prechode bodom B je y 1 = 101 y 2 = 1. Po vykonaní príkazu z := y 1 10 je z = 91. 2. II. Zostáva nám dokáza, ºe pre kaºdé x 100 program skon í. Uvaºujme výraz k = 2 y 1 + 21 y 2 + 202. Pod a prvej asti dôkazu je pri kaºdom prechode bodom B ur ite y 1 111 y 2 1. Preto je hodnota k vºdy kladná. ahko moºno overi, ºe aj vykonaním príkazu (y 1, y 2 ) := (y 1 + 11, y 2 + 1)) aj vykonaním príkazu (y 1, y 2 ) := (y 1 10, y 2 1)), sa hodnota k zmen²í.

Pri kaºdom al²om prechode bodom B má k hodnotu men²iu neº pri predchádzajúcom prechode. Teda hodnoty výrazu k v okamihu prechodu bodom B tvoria klesajúcu postupnos kladných ísel. taká postupnos je v²ak kone ná. Teda výpo et nemôºe uviaznu v cykle za ínajúcom aj kon iacom v bode B a po kone nom po te prechodov bodov B skon í v bode C. Tým je dôkaz správnosti uvedeného programu ukon ený. Úvahy, ktoré viedli k vytvoreniu podmienky (y 1 101 y 2 1) (y 1 111 y 2 > 1) a výrazu 2 y 1 + 21 y 2 + 202 sú kvôli stru nosti vynechané a pre overenie korektnosti programu nie sú podstané (podobne ako v dôkazoch typu: "nech ɛ > 0 je ubovo né, zvo me δ = 125 ɛ/7... ".).

Floydova metóda Dôleºité sú nasledujúce rysy dôkazu, ktoré sú charakteristické pre celú metódu: A) K ú om k dôkazu korektnosti programov obsahujúcich cykly je nájdenie vhodnej podmienky, ktorú sp ajú dáta pri kaºdom prechode pevne zvoleným bodom cyklu (induktívna podmienka, invariant cyklu). B) Dôkaz je lenený na dve etapy: - v prvej etape sa dokáºe, ºe pokia program pre dané vstupné dáta skon í, vydá správny výsledok; - v druhej etape sa dokáºe, ºe program vºdy skon í. Induktívne podmienky vlastne zachytávajú my²lienky, na základe ktorých je program vytvorený. Ich nájdenie je vecou invencie.

Floydova metóda poskytuje len nástroj na overenie, ºe program neobsahuje chybu alebo logickú medzeru. Niektoré jej postupy je moºné algoritmizova, ako uvidíte na nasledujúcich stránkach venovaných jej podrobnej²iemu popisu. Prv neº prejdeme k popisu Floydovej metódy, ktorá je tieº nazývaná metódou induktívnych podmienok, denujeme pojem "správny program"v závislosti od vstupnej a výstupnej podmienky. V al²om budeme pouºíva nasledovné ozna enie: x - vstupný vektor, ktorý nadobúda vstupné hodnoty a po as výpo tu sa nemení, ȳ - vektor programu, ktorý obsahuje medzivýsledky výpo tu programu, z - výstupný vektor, v ktorom sú uloºené výstupné hodnoty v okamihu ukon enia výpo tu programu.

V prípade, ºe v príkladoch bude zrejmé, ºe x, ȳ, alebo z sú 1-dimenzionálne, budeme písa x,y,z. D x,dȳ,d z - deni né obory vektorov x,ȳ, z. P ( x) - predikát vyjadrujúci vstupnú podmienku, t.j. popisujúci vlastnosti tých prvkov z D x, ktoré môºu by pouºívané ako vstupné hodnoty programu; Q( x, z) - predikát vyjadrujúci výstupnú podmienku, t.j. popisujúci vz ah, ktorý musia sp a výstupné hodnoty vzh adom ku vstupným v okamihu ukon enia výpo tu. Π - program v nejakom programovacom jazyku.

Denition a) Ak program Π skon í výpo et pre v²etky údaje spl ajúce P ( x) (t.j. nadobúdajúce hodnotu true), tak budeme hovori, ºe program kon í. b) Ak program Π pre v²etky vstupné údaje spl ajúce P ( x), pre ktoré skon í svoj výpo et, dá výsledky spl ajúce predikát Q( x, z), potom Π budeme nazýva iasto ne správnym programom. c) Program, ktorý pre v²etky vstupné údaje, spl ajúce predikát P ( x), skon í výpo et s výsledkom spl ajúcim predikát Q( x, z), budeme nazýva správnym programom (tieº budeme pouºíva pojem totálne správny program na odlí²enie od iasto ne správny program).

Denition d) Verikova program (dokáza, ºe program je správny) vzh adom na vstupný predikát P ( x) a výstupný predikát Q( x, z) znamená dokáza, ºe program je správny vzh adom na predikáty P ( x) a Q( x, z).

Vidíme, ºe správny program je taký, ktorý je iasto ne správny a kon í, a preto mnohokrát dôkaz toho, ºe program je správny, je rozdelený na dve asti, a síce na dôkaz, ºe: a) program je iasto ne správny, b) program kon í. Toto rozdelenie zjednodu²uje dôkaz v tom zmysle, ºe pri dokazovaní iasto nej správnosti sa neanalyzuje, i výpo et kon í a pri dôkaze, ºe program kon í, správnos výsledkov. Treba si uvedomi, ºe pri dokazovaní iasto nej správnosti je to, ºe program kon í, predpokladom, nie dôsledkom.

Opodstatnenos existenie rôznych metód pre dokazovanie správnosti programov, je dôsledkom výsledku známeho z teórie algoritmov ako Riceova veta, ktorú je moºné vyjadri takto: Ani pre jednoduché ²pecika né a programovacie jazyky neexistuje algoritmus, ktorý by dokázal o ubovo nom programe zisti, i je správny vzh adom na dané ²pecikácie.

Jazyk vývojových diagramov Obsahuje nasledujúcich pä druhov príkazov: 1. tartovací príkaz Start y := f(x) kde f je totálna funkcia f : Dx Dy.

2. Prira ovací príkaz y := g(x, y) kde g je totálna funkcia g : Dx Dy Dy.

3. Testovací príkaz + t(x, y) kde t(x, y) je totálny predikát nad oborom Dx Dy

4. Cie ový príkaz z := h(x, y) Stop kde h je totálna funkcia h : Dx Dy Dz.

5. Spojovací príkaz (spojka) o spája 2 vetvy programu do jednej. Denition Programom v jazyku vývojových diagramov budeme nazýva orientovaný graf vytvorený spojením vy²²ie uvedených príkazov pomocou orientovaných spojníc tak, ºe ²tartovací príkaz je pouºitý práve jedenkrát a kaºdý testovací a prira ovací príkaz leºí na aspo jednej ceste od ²tartovacieho príkazu k cie ovému.

Vo vrcholoch grafu sú umiestnené príkazy tvaru 1.-5., pri om stupne jednotlivých vrcholov sú práve také, ako je uvedené v denícii príkazov jazyka. Poradie vykonávania sa príkazov je ur ené spojnicami medzi príkazmi. Cyklus je súvislý kone ný podgraf programu, v ktorom z kaºdého vrcholu jediná hrana vychádza a do kaºdého vrcholu jediná hrana vchádza. Cesta programom je postupnos príkazov za ínajúca vstupným a kon iaca výstupným príkazom, na ktorej kaºdý príkaz Π1 je nasledovaný takým príkazom Π2, ktorý je spojený s príkazom Π1 orientovanou hranou, ktorá vedie z Π1 do Π2. Úsek cesty programom budeme nazýva parciálna cesta programu, alebo stru ne cesta.

Z programátorského h adiska je zaujímavou trieda ²truktúrovaných programov, pretoºe tieto programy sú jednak preh adne zapísané, jednak analýza ich vlastností je jednoduch²ia neº analýza vlastností v²etkých programov. Triedu ²truktúrovaných programov je moºné denova rekurzívne nasledujúcim spôsobom: a) Prira ovací príkaz je segment: Za segment povaºujeme aj prázdny segment t.j., ktorý neobsahuje ºiadne príkazy. b) Nech S 1, S 2,..., S n, n 2 sú segmenty, p( x, ȳ) je predikát, potom segmentami sú kon²trukcie tvaru na obr. niº²ie: c) Vývojový diagram je ²truktúrovaný, ak je vytvorený vstupným príkazom, postupnos ou neprekrývajúcich sa segmentov a výstupným príkazom.

Obr.: Tvary segmentov.

Príklad: Na obr. 2. je uvedený program v jazyku vývojových diagramov. O tomto programe sa v dal²om presved íme, ºe pre dané prirodzené íslo x, x > 1, dáva odpove true, ak íslo x je dokonalé (tj. x = {t : 0 < t x 2 t/x}), inak dáva odpoved false. V tomto programe x = (x), ȳ = (y 1, y 2, y 3, y 4 ), z = (z), D x = N +, N + = N {0}, Dȳ = N N N {true, false}, D z = {true, false}.

Príkaz (y 1, y 2, y 3, y 4 ) := (x div 2, 1, 2, false) znamená sú asné nahradenie hodnoty y 1 hodnotou x div 2, hodnoty y 2 hodnotou 1, hodnoty y 3 hodnotou 2 a hodnoty y 4 hodnotou false. Vo v²eobecnosti, príkaz (y 1, y 2,... y n ) := (g 1 (x, y), g 2 (x, y),... g n (x, y)) znamená sú asné nahradenie hodnôt premenných y i hodnotami g i (x, y), pre 1 i n, teda v²etky funkcie g i sú vyhodnotené skôr, neº je zmenená hodnota ktorejko vek zloºky vektora ȳ. V prípade, ºe pôjde o zmenu jednej zloºky vektora ȳ vypí²eme v príkaze len túto zmenu. ahko sa moºno presved i, ºe tento program je ²truktúrovaný.

Sémantika príkazov jazyka vývojových diagramov Vrá me sa na chví u k dôkazu správnosti Mc Carthyho programu. Výpo et sme sledovali pozd º ciest, na ktorých sa hodnoty premenných menili; vºdy sme sledovali jednu zvolenú cestu. Intuitívne sme predpokladali zmeny hodnôt premenných, ktoré sú spôsobené pozd º skúmanej cesty a vyuºijúc toho, ºe vieme význam (sémantiku) príkazov, sme urobili dôkaz správnosti. Je teda zrejmé, ºe medzi premennými v programe platia ur ité vz ahy pred kaºdým príkazom a aj po jeho vykonaní. Tieto vz ahy vyjadrujeme vo forme tvrdení.

Denition Tvrdenie, ktoré platí pred príkazom, nazývame predpoklad; tvrdenie, ktoré platí bezprostredne po jeho vykonaní, budeme nazýva dôsledok. Predpoklad aj dôsledok budeme vyjadrova pomocou predikátu R( x, ȳ) a funkcie r( x, ȳ) : D x Dȳ Dȳ. V nich sa odrazia zmeny, ktoré nastali vykonaním poºadovanej postupnosti príkazov. Napríklad, uvaºujme príkaz P P y 3 := y 3 + 1

Zvo me r( x, ȳ) = r(x, y 1, y 2, y 3, y 4 ) = (y 1, y 2, y 3, y 4 ). Ak po vykonaní príkazu PP platí, ºe r( x, ȳ) = (y 1, y 2, y 3, y 4 ), potom pred vykonaním príkazu PP muselo plati r( x, ȳ) = (y 1, y 2, y 3 + 1, y 4 ), pretoºe hodnota y 3 v príkaze PP bola zvý²ená o 1. Uvedenú skuto nos zaznamenáme nasledujúcim spôsobom: P P......... r(x, y 1, y 2, y 3 + 1, y 4 ) y 3 := y 3 + 1......... r(x, y 1, y 2, y 3, y 4 )

Uvaºujme o al²om príkaze v programe o dokonalom ísle P T + y 3 y 1

Aby výpo et pre²iel po ceste +, musí by splnená podmienka y 3 y 1 a táto musí by zahrnutá v predikáte, ktorý zaru uje, ºe výpo et bude vykonávaný práve pozd º tejto cesty. Ak uvaºujeme, ºe bezprostredne po vykonaní príkazu PT platí predikát R( x, ȳ), potom pred jeho vykonaním muselo plati R( x, ȳ) y 3 y 1. Predikát R( x, ȳ) je moºné vytvori na základe predikátov, ktoré sa vyskytli na danej parciálnej ceste programu a funkcia r( x, ȳ) musí vyjadrova zmeny obsahov premenných, ktoré boli vykonané v prira ovacích príkazoch.

Obr.: Úprava predikátov a funkcií.

Obr.: Úprava predikátov a funkcií.

Teda, aby dôkaz správnosti programu mohol by vykonaný formálne, je potrebné popri syntaxi jazyka vývojových diagramov ma denovanú sémantiku v²etkých príkazov, pomocou ktorej je moºné vyjadri vz ahy medzi premennými programu podobne, ako sme uvaºovali vy²²ie u prira ovacieho a testovacieho príkazu. Uvedených ²es moºností poskytuje návod k tomu, ako vytvára, resp. upravova predikáty R a funkcie r tak, aby to bolo konzistentné s významom jednotlivých príkazov.

Napríklad, vo vybranom úseku programu pre dokonalé ísla je moºné priradi funkcie a predikáty tak, ako je znázornené na obr. Obr.: Úsek programu a vyjadrenie predikátov a funkcií.

Akým spôsobom sme dospeli k funkciám a predikátom uvedeným na tomto obrázku? Sledovaním tohto segmentu programu zdola nahor a vyjadrením formálnej sémantiky tak, ako to bolo uvedené vy²²ie. Segmenty programov bez cyklov je moºné pomerne jednoducho popísa pomocou sémantických pravidiel. Otázka je, o urobi s cyklami? V priebehu dôkazu je potrebné roz leni program na elementárne segmenty bez cyklov a dôkazy robi pre tieto segmenty.

Program je iasto ne správny R. V. Floyd navrhol robi dôkaz iasto nej správnosti programu ktorý je napísaný v jazyku vývojových diagramov, v nasledujúcich troch krokoch: 1. krok: Vo ba deliacich bodov programu. 2. krok: Priradenie induktívnych podmienok deliacim bodom. 3. krok: Vytvorenie verika ných podmienok k verika ným cestám.

Vo ba deliacich bodov programu. Deliace body sú volené tak, aby spl ovali nasledujúce 2 podmienky: po iato ný a koncový bod sú deliacimi bodmi; kaºdý cyklus programu obsahuje aspo jeden deliaci bod.

Priradenie induktívnych podmienok deliacim bodom. Ku kaºdému deliacemu bodu priradi induktívnu podmienku. Induktívna podmienka je vlastne predikát charakterizujúci vz ah medzi hodnotami premenných v tomto bode. Pritom po iato nému bodu je priradená vstupná podmienka P (x); v koncovom bode je induktívnou podmienkou výstupná podmienka Q(x, z); deliacemu bodu X je priradená induktívna podmienka P X (x, y), ktorá je splnená vºdy, ke sa riadenie výpo tu programu dostane do bodu X.

Vytvorenie induktívnych podmienok je naj aº²ou as ou dôkazu, ktorá nie je algoritmizovate ná. Tu sa vlastne vyjadruje podstata algorimu a je potrebné jeho hlboké pochopenie. Najprirodzenej²ie je zapísanie induktívnej podmienky sú asne s písaním programu, pretoºe programátor kon²truuje program práve na základe predstavy o tom, akú vlastnos majú ma hodnoty premenných.

Vytvorenie verika ných podmienok k verika ným cestám. Zvolené deliace rozde ujú program na nieko ko úsekov, z ktorých kaºdý predstavuje cestu. Verika ná cesta je cesta, ktorá za ína aj kon í deliacim bodom a medzi nimi neleºí ºiadny deliaci bod. Kaºdá verika ná cesta je kone ná, pretoºe kaºdý cyklus obsahuje deliaci bod. Program je pokrytý verika nými cestami, ak kaºdý príkaz programu sa nachádza na aspo jednej verika nej ceste. Pretoºe program má kone ný po et príkazov, po et verika ných ciest je kone ný.

Z jedného deliaceho bodu programu môºe vychádza viacej verika ných ciest. Napríklad, v Mc Carthyho programe z bodu B vychádzajú dve cesty kon iace v bode B, a síce B B a B + B. Ku kaºdej verika nej ceste α z bodu X do bodu Y je vytvorená verika ná podmienka (t. j. formula ur itého tvaru) a je potrebné dokáza, ºe v²etky verika né podmienky sú pravdivé.

Verika ná podmienka musí obsahova vyjadrenie toho, ºe ak v bode X platí induktívna podmienka P X (x, y) pre ur té hodnoty x, y (také, ºe výpo et bude riadený po verika nej ceste α), potom po vykonaní príkazov na ceste α z bodu X do bodu Y platí P Y (x, y), o je moºné vyjadri nasledovne x y [P X (x, y) R α (x, y) P Y (x, r α (x, y))] kde R α (x, y) je predikát, ktorý zaru uje, ºe výpo et z bodu X do bodu Y bude riadený po verika nej ceste α a r α (x, y) je funkcia, ktorú program po íta po as prechodu z bodu X do bodu Y. Sú dva ²peciálne prípady:

Ak X je po iato ný bod, potom verika ná podmienka má tvar x [P (x) R α (x, y) P Y (x, r α (x, y))] Ak Y je koncový bod, potom verika ná podmienka má tvar x y [P X (x, y) R α (x, y) Q(x, z)]

V komentári ku príkladu o dokonalom çísle sme uviedli, ºe predikát a funkcia r α boli získané sledovaním príkazov uvedeného segmentu programu zdola nahor. Táto metóda sa nazýva metóda spätných substitúcií a formálne ju môºeme vyjadri takto: Predpokladajme, ºe kon²truujeme predikát R α (x, y) a funkciu r α (x, y) pre cestu z deliaceho bodu X do deliaceho bodu Y. V bode Y poloºíme

R α (x, y) : true, t. j. vºdy splnený predikát; r α (x, y) : y, t. j. identická funkcia premenných y. Potom postupujeme smerom k bodu X a pri kaºdom príkaze na tejto ceste aplikujeme Floydove sémantické pravidlá. Posledné získané R α a r α v bode X sú h adané R α (x, y) a r α (x, y), ktoré charakterizujú cestu α a budú pouºité pri vytvorení verika nej podmienky pre cestu α z bodu X do bodu Y.

Príklad: Dokáºeme iasto nú správnos programu, ktorého výstupom je z = true, ak vstupná hodnota je dokonalé íslo, inak z = false. ƒíslo x je dokonalé íslo, ak sú et v²etkých jeho kladných delite ov t, 0 < t x div 2 je rovný x, t. j. x = Σ{t : 0 < t x div 2 t x}.

Dokáºeme, ºe tento program je iasto ne správny vzh adom na vstupnú podmienku P (x) : x N x > 1 a výstupnú podmienku Q(x, z) : z = (x = Σ{t : 0 < t x div 2 t x}). Na nasledujúcom obrázku je znázornený tento program spolu s deliacimi bodmi. Jediným deliacim bodom cyklu je bod B. V bode B platí induktívna podmienka P B (x, y) : y 2 = Σ{t : 0 < t y 3 t x}.

Tento program je moºné pokry ²iestimi verika nými cestami, ktoré spl ujú poºadované podmienky. Tieto cesty ozna íme takto: a) A + B, t. j. α 1, b) A B, t. j. α 2, c) B + +B, t. j. α 3, d) B + B, t. j. α 4, e) B +C, t. j. α 5, f) B C, t. j. α 6, Metódou spatných substitúcií ur íme predikát R a funkciu r pre kaºdú z uvedených ciest.

Obr.: Verika ná cesta α 1, t. j. A + B.

Obr.: Verika ná cesta α 2, t. j. A B.

Obr.: Verika ná cesta α 3, t. j. B + +B.

Pripome me si vstupnú podmienku P (x) : x N x > 1 a výstupnú podmienku Q(x, z) : z = (x = Σ{t : 0 < t x div 2 t x}). V bode B platí induktívna podmienka P B (x, y) : y 2 = Σ{t : 0 < t y 3 t x}. Teraz skon²truujeme verika né podmienky.