A helyességbizonyítás klasszikus módszerei

Hasonló dokumentumok
Kiterjesztések sek szemantikája

NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE. Szekvenciális programok kategóriái. Hoare-Dijkstra-Gries módszere

Algoritmusok helyességének bizonyítása. A Floyd-módszer

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

Algoritmizálás, adatmodellezés tanítása 6. előadás

Logika és informatikai alkalmazásai kiskérdések február Mikor mondjuk, hogy az F formula a G-nek részformulája?

Programok értelmezése

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

Modellellenőrzés. dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Részletes szoftver tervek ellenőrzése

Bevezetés az informatikába

8. Komponens elvű programfejlesztés. Ágens, akció, cél, kontraktus.

Formális módszerek GM_IN003_1 Program verifikálás, formalizmusok

Formális szemantika. Kifejezések szemantikája. Horpácsi Dániel ELTE Informatikai Kar

Szoftver-modellellenőrzés absztrakciós módszerekkel

Alapszintű formalizmusok

Programkonstrukciók A programkonstrukciók programfüggvényei Levezetési szabályok. 6. előadás. Programozás-elmélet. Programozás-elmélet 6.

Algoritmizálás és adatmodellezés tanítása 1. előadás

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha

Temporális logikák és modell ellenırzés

Osztott rendszer. Osztott rendszer informális definíciója

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Modellellenőrzés. dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Szoftver karbantartási lépések ellenőrzése

1. előadás: Halmazelmélet, számfogalom, teljes

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

Modell alapú tesztelés mobil környezetben

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

Formális nyelvek - 9.

Korlátos modellellenőrzés. dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

BASH script programozás II. Vezérlési szerkezetek

Kaposi Ambrus. University of Nottingham Functional Programming Lab. Hackerspace Budapest január 6.

Elérhetőségi analízis Petri hálók dinamikus tulajdonságai

Elsőrendű logika szintaktikája és szemantikája. Logika (3. gyakorlat) 0-adrendű szemantika 2009/10 II. félév 1 / 1

Diszkrét matematika I.

A digitális számítás elmélete

S0-01 Szintézis és verifikáció (Programozás elmélet)

Elsőrendű logika. Mesterséges intelligencia március 28.

2. Visszalépéses keresés

Fordítás Kódoptimalizálás

S0-02 Típusmodellek (Programozás elmélet)

FFT. Második nekifutás. Czirbusz Sándor ELTE IK, Komputeralgebra Tanszék október 2.

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

Hardver és szoftver rendszerek verifikációja Röviden megválaszolható kérdések

Programozási segédlet

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Halmazelmélet. 1. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Halmazelmélet p. 1/1

Komputeralgebra Rendszerek

Logika es sz am ıt aselm elet I. r esz Logika Negyedik el oad as 1/26

Szoftverminőségbiztosítás

Logika es sz am ıt aselm elet I. r esz Logika 1/36

Valószínűségi modellellenőrzés Markov döntési folyamatokkal

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

2. Logika gyakorlat Függvények és a teljes indukció

Webprogramozás szakkör

Ismeretalapú modellezés XI. Leíró logikák

Matematika alapjai; Feladatok

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

A félév során előkerülő témakörök

Hatékony technikák modellellenőrzéshez: Korlátos modellellenőrzés. dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

2. Visszalépéses stratégia

Véges automaták, reguláris nyelvek

Programozási Módszertan definíciók, stb.

Automatikus tesztgenerálás modell ellenőrző segítségével

Klasszikus algebra előadás. Waldhauser Tamás április 14.

Diszkrét matematika I.

Programfejlesztési Modellek

I. A DIGITÁLIS ÁRAMKÖRÖK ELMÉLETI ALAPJAI

Logika és számításelmélet. 10. előadás

Programozási módszertan. Függvények rekurzív megadása "Oszd meg és uralkodj" elv, helyettesítő módszer, rekurziós fa módszer, mester módszer

Occam 1. Készítette: Szabó Éva

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008

ÍTÉLETKALKULUS (NULLADRENDŰ LOGIKA)

Rendszermodellezés. Modellellenőrzés. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Szkriptnyelvek. 1. UNIX shell

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Modellellenőrzés a vasút automatikai rendszerek fejlesztésében. XIX. Közlekedésfejlesztési és beruházási konferencia Bükfürdő

Sor és oszlopkalkulus

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Fraktálok. Kontrakciók Affin leképezések. Czirbusz Sándor ELTE IK, Komputeralgebra Tanszék. TARTALOMJEGYZÉK Kontrakciók Affin transzformációk

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Követelmények formalizálása: Temporális logikák. dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

6. Közös változóval rendelkező párhuzamos program, Közös változó,

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Java programozási nyelv

Deníciók és tételek a beugró vizsgára

7.4. A programkonstrukciók és a kiszámíthatóság

Predikátumkalkulus. 1. Bevezet. 2. Predikátumkalkulus, formalizálás. Predikátumkalkulus alapfogalmai, formalizálás, tagadás, logikailag igaz formulák.

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

5.3. Logika a relációkhoz

Átírás:

A helyességbizonyítás klasszikus módszerei Majzik István Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék http://www.mit.bme.hu/~majzik/ Motiváció Kritikus algoritmusok helyességének bizonyítása a részletes tervek alapján Korlátozott feladatok: biztonságkritikus funkciók, hozzáférésvédelem, protokoll mag, Részletes terv: Pszeudo-nyelven leírt algoritmus A továbbiakban mint program (Valós programnyelvek részleges támogatása) Tételbizonyító rendszerek használata Bizonyítandó tulajdonság mint bizonyítandó tétel adott Klasszikus elő- és utófeltételek a tipikusak (contract) Kihívások: (Pszeudo) programból hogyan lesz bizonyítandó tétel? Milyen stratégiák használhatók a bizonyításhoz?

Felépítés: Tételbizonyító rendszerek Leíró nyelv, ennek primitívjei Axiómák (leíró nyelvhez kötve), pl. Elsőrendű logika Típusokkal kiegészített logikák Magasabbrendű logika, Következtetési szabályok Indukció, dedukció, unifikáció, Komponensek: Algoritmikus: Egy-egy következtetési szabály alkalmazása Kereső: Stratégia/taktika a szabályok kiválasztására Cél-vezérelt (visszafelé történő) keresés Mélységi vagy szélességi keresés Interaktív (felhasználói segítséggel) Tételbizonyító rendszerek alkalmazása A tételbizonyítás komplex feladat n operátort tartalmazó tétel, O(2 n ) hosszú bizonyítási szekvencia, O(2 2n ) időigény a bizonyítás megtalálásához (worst case) Használati esetek Kézi bizonyítás automatikus ellenőrzése (proof checking) Kézi bizonyítás segítése (interaktív szabályalkalmazás) Tételbizonyítás szerepe Adat-intenzív alkalmazások tulajdonságainak bizonyítása Paraméter-függőségek kezelése (pl. protokoll résztvevők száma) Indukció használható Együttes használat a modell ellenőrzéssel Kis paraméter értékre (kiindulási eset): modell ellenőrzés Tulajdonság megtartásának bizonyítása indukcióval Népszerű eszközök HOL, PVS, ACL2,

Tulajdonságok D dedukciós rendszer, c levezetendő kritérium (tétel) Szemantikus helyesség (soundness): Ami levezethető D-ben az igaz Szükséges a használhatósághoz Formálisan: c: ha - D c (levezethető) akkor =c (teljesül, igaz) Szemantikus teljesség (completeness): Ami igaz, az levezethető D-ben Hasznos tulajdonság, de nem szükséges Formálisan: c: ha =c akkor - D c Totális helyesség és teljesség: Minden interpretációra Dedukciós rendszer konzisztens: Nem lehet egy tételt és az ellenkezőjét is bizonyítani Program és specifikáció kapcsolata Egy P program és egy Φ specifikáció (követelmény) esetén: Szintézis feladat: Φ alapján P konstruálása Analízis feladat: P alapján Φ levezetése Verifikáció (program helyességbizonyítás): P = Φ eldöntése Optimalizáció: P = Φ alapján olyan P konstruálása, hogy P = Φ, ugyanakkor P jobb adott szempontok szerint (kisebb, gyorsabb ) Javítás: P Φalapján olyan P konstruálása, hogy P = Φ legyen

Bizonyításhoz leginkább használt módszer: Indukció Számítási indukció: Műveleti szemantika esetén Állapotokra: Ha s 0 (kiindulási állapot) esetén igaz a tulajdonság, és az átmenetek megőrzik, akkor végig fennáll s0 s1 s2 s3 s4 s5 s6 Strukturális indukció: Axiomatikus szemantikához Szintaktikai konstrukciókra: Ha elemekre igaz, és a konstrukciók megőrzik, akkor a teljes programra igaz c0 c1 e1 c2 e2 e3 e4 Célkitűzéseink Bizonyítási vázak rögzítése program helyesség bizonyításhoz Bizonyítási stratégia megadása Nincs teljesen automatikus, garantált módszer Nem konkrét programozási nyelvhez kötve Pszeudo-nyelv (algoritmus leírás) Továbbiakban mint programozási nyelv szerepel Pl. saját, domén-specifikus nyelvhez is alkalmazható Megkötések a bizonyíthatósághoz Programozási nyelv: Formális szemantikával rendelkezik (műveleti vagy axiomatikus szemantika) Specifikációs nyelv: Elsőrendű kijelentéslogika

Programozási nyelv műveleti szemantikával Konfiguráció (állapot): C Látható állapot σ (a program vizsgált kimenetében szerepel) σ[x] egy x változó értéke egy σ látható állapotban σ[x] az x változó-vektor értéke egy σ látható állapotban Rejtett állapot (helyesség szempontjából érdektelen) Szintaktikus folytatás: A további számításokat definiálja Programszámláló helyett A továbbiakban végrehajtandó forrásszövegként képzelhető el Átmenet reláció a konfigurációk között: π(p, σ 0 ) egy P program számítása σ 0 kezdőállapotból C 0 C 1 C 2 maximális szekvencia (végállapotig/végtelen) σ 0 σ 1 σ 2 látható állapot szekvencia val(π(p, σ)) = σ n véges esetben a végállapot jelölése I domén: A számítások itt értelmezettek Specifikációs nyelv Korlátozások: Determinisztikus program Nem folytonos működésű Érték- vagy állapot-transzformációt valósít meg Tulajdonság megadása: Predikátumok Előfeltétel: p(x) - a megengedhető kezdeti állapotokra x a látható állapot változói σ 0 = p(x) jelentése: kezdőállapotban igaz p(x) Utófeltétel: q(x) - az elfogadható végállapotokra true minden befejeződő számítás kielégíti false egy szabályos végállapot sem elégíti ki val(π(p,σ 0 )) = q(x) jelentése: π számítás végállapotában igaz q(x) Specifikáció példák Segédváltozók használata Specifikációs változók használata

Példák specifikációkra x és y nagyság szerinti sorba rendezése: előfeltétel p(x,y) = true, utófeltétel q(x,y) = x>y tömörebben felírva (true, x>y) x legyen páros a kimeneten: (true, even(x)) (true, y: x=2y) Bemeneti x-et kétszerezze meg: (x=x, x=2x) ha a doménen értelmezett even(x) itt y kötött segédváltozó q(x)-ben itt X egy specifikációs változó x/y poz. bennfoglalás eredménye q és maradéka r: (x=x>0 y=y>0, X=qY+r 0<=r<Y) ha meg kell őrizni x és y értékét: (x=x>0 y=y>0, X=qY+r 0<=r<Y x=x y=y) Program helyességi kritériumok (1) Részleges helyesség: Jelölése {p(x)} P {q(x)} Egy program részlegesen helyes p(x), q(x) szerint, ha teljesül: π(p,σ 0 ) és σ 0 = p(x) esetén ha π befejeződik, akkor val(π(p,σ 0 )) = q(x) Megjegyzések: Az előfeltételt kielégítő állapotból induló számításokra: ha befejeződik, akkor az utófeltétel igaz a végállapotban Nem mond semmit azokról a számításokról, amelyekre σ 0 p(x) {true}p{true} minden programra igaz {true}p{false} ha igaz, akkor nincs befejeződő számítás

Program helyességi kritériumok (2) Helyesség: Jelölése <p(x)> P <q(x)> Egy program helyes p(x), q(x) szerint, ha π(p,σ 0 ) és σ 0 = p(x) esetén π befejeződik és val(π(p,σ 0 ) = q(x) Megjegyzések: Az előfeltételt kielégítő állapotból induló számításokra: befejeződik és az utófeltétel igaz lesz a végállapotban <p(x)>p<true> csak befejeződést ír elő Felírható: <p(x)>p<q(x)> a.cs.a. {p(x)}p{q(x)} és <p(x)>p<true> azaz a program helyes, ha részlegesen helyes és befejeződik Egyszerű determinisztikus programok PLF flow language : start, x:=e, B(x), halt utasítások egyedi l címkékkel (l 0, l *, l i, ) assembly szinthez közeli pszeudo-nyelv Program szintaxis: PLF mint véges irányított gráf succ(l), succ + (l), succ - (l) használható a következő csomóponthoz Minden utasítás egy start halt útvonalon Szemantika: C=(σ,λ) konfiguráció és megadása: C(σ,λ) C (σ,λ ) a.cs.a. λ egy start: λ =succ(λ), σ =σ λ egy x:=e utasítás: λ =succ(λ), σ =σ[e/x] itt [e/x] jelöli, hogy x helyébe e helyettesítése történik λ egy B(x) elágazás: σ =B(x) esetén: λ =succ + (λ), σ =σ σ B(x) esetén: λ =succ - (λ), σ =σ

Példa: Maradékos osztás egész számokra x/y számítása, q hányados, r maradék Részleges helyesség ciklusmentes esetben (1) Ötlet: Számítási indukció {p}p{q} esetén Egy véges számításhoz tartozó útvonal jellemzői: u i = l i0 l i1 l i2 l ik Elérhetőségi (bejárási) feltétel: R u (x) predikátum Ha fennáll l i0 esetén, akkor éppen az u útvonalat járja be a program Állapot transzformáció: T u (x) egy állapotvektort ad Jelölések: x állapotból indulva az u útvonal bejárása utáni állapot x := T u (x) a végállapotot eredményező állapot transzformáció l im l ik szuffixe az útvonalnak az m indextől R um (x) és T um (x) erre a szuffixre vonatkoznak Ismert a végállapotra (utolsó szuffixre): R uk (x)=true T uk (x)=x - már a végállapotban vagyunk - nincs további transzformáció

Részleges helyesség ciklusmentes esetben (2) Visszalépéses indukció: Feltéve: Ismert R m+1 u (x) és T m+1 u (x) egy szuffixre Lépés: Az l im utasítása alapján R um (x) és T um (x) számítás x:=e hozzárendelés: R um (x) = R m+1 u (x)[e/x], B(x) feltétel pozitív ága: R um (x) = R m+1 u (x) B(x), B(x) feltétel negatív ága: R um (x) = R m+1 u (x) B(x), start: R u (x) = R u0 (x), T um (x) = T u m+1 (x)[e/x] T um (x) = T u m+1 (x) T um (x) = T u m+1 (x) T u (x) = T u0 (x) Így a végállapotban ismert R uk (x)=true és T uk (x)=x alapján a kezdőállapotra R u (x) és T u (x) levezethető Részleges helyesség ciklusmentes esetben (példa) R(x)=true T(x)=x x:=x+1 x>y R(x)=x>y T(x)=x R(x)=true T(x)=x x:=x+1 x>y R(x)=x+1>y T(x)=x+1 R(x)=x>y T(x)=x R(x)=true T(x)=x x:=x+1 x>y

Részleges helyesség ciklusmentes esetben (3) Részleges helyesség megmutatása: {p(x)} P {q(x)} a.cs.a. ha minden teljes u útra: x: p(x) R u (x) q(t u (x)) Doménen értelmezett elsőrendű logikai kifejezés; tételbizonyítónak beadható: x: p(x) R u (x) q(t u (x)) p és q a specifikáció alapján R és T a program forrás alapján, visszalépéses számítási indukció alapján megadható Részleges helyesség ciklusos programokra (1) Ötlet: Ciklusok felvágása Minden ciklusban egy l i utasítás kijelölése, ami azt (ciklusmentes) szegmensekre osztja I li (x) predikátum, ún. induktív állítás hozzárendelése a vágási ponthoz Első belépés után l i -nél igaz Ciklus futása során igaz marad (ciklus invariáns) Kilépés után a további szegmensekkel majd az utófeltételt igazzá teszi A szegmensek mint ciklusmentes utak az előző módszer alapján vizsgálhatók Elérhetőségi feltétel és állapot-transzformáció számítható l 0 l 1 l 2 l *

Részleges helyesség ciklusos programokra (2) Bizonyítási váz: Vágási pontok kijelölése a ciklusokban (legalább egy-egy) Induktív állítások felírása: I li (x) I l0 (x) = p(x) -kezdőállapotra I l* (x) = q(x) - végállapotra Ciklusokban: ld. előbb (ciklus invariáns) Verifikációs feltételek: A szomszédos vágási pontokra, azaz minden l, l vágási pontok által kijelölt u szegmensre: x: I l (x) R u (x) I l (T u (x)) bizonyítandó R u (x) és T u (x) a szegmensekre kiszámíthatók Helyes és teljes módszer Mindig találhatók megfelelő vágási pontok és induktív állítások (de ennek bizonyítása nem konstruktív ) Heurisztikus az induktív állítások felvétele Részleges helyesség ciklusos programokra (példa) I l4 (x,y,q,r) = (x 0 y>0 x=q y+r r 0)

Részleges helyesség ciklusos programokra: példa Befejeződés bizonyítása ciklusok esetén (1) Ötlet: Az induktív állítások paraméterezése Paraméter egy (W,>) ún. jól megalapozott halmazból Nem létezik végtelen w 0 > w 1 > csökkenő szekvencia Példák: Természetes számok, és az ezeken értelmezett > reláció Véges halmaz valódi részhalmazai, és a tartalmazás reláció Véges lista, és a prefix reláció A ciklus befejeződik, ha a paraméterről kimutatható, hogy csökken a ciklus végrehajtása során A paraméter sok esetben lehet maga a ciklusváltozó, de segédváltozót is használhatunk Megválasztása heurisztikus

Befejeződés bizonyítása ciklusok esetén (2) Bizonyítási váz: Jól megalapozott halmaz(ok) választása: (W,<) Vágási pontok kijelölése a ciklusokban: l 0, l i, l * Paraméterezett induktív állítások: I l (x,w) ahol w W Verifikációs feltételek (bizonyítandók): Inicializálás: x: p(x) w: I l0 (x,w) (előfeltétel bővítés) Terminálás: x: I l* (x,w) q(x) Csökkenés: Szomszédos l, l pontok által kijelölt u szegmensre: x: I l (x,w) R u (x) w <w: I l (T u (x),w ) Itt R u (x) és T u (x) a szegmensekre kiszámíthatók Helyes módszer <p(x)>p<true> bizonyítására A paraméterezett induktív állítások felvétele heurisztikus Befejeződés bizonyítása ciklusok esetén (példa) I l4 (x,y,n) = (y>0 n=r 0)

Rész-összefoglaló Alacsony szintű pszeudo-nyelvek (blokk diagram): Részleges helyesség ciklusmentes programokra: Visszalépéses számítási indukció Részleges helyesség ciklust tartalmazó programokra: Induktív állítások Helyesség ciklust tartalmazó programokra: Paraméterezett induktív állítások Következő lépés: Strukturált programnyelvek Helyességbizonyítás strukturált programokra Cél a komponálhatóság : Ha egy P program P 1 és P 2 szintaktikai egységekből áll, akkor P tulajdonságai P 1 és P 2 tulajdonságai alapján bizonyíthatók Strukturális indukció elve Strukturált programok: PLW nyelv P::= x:=e skip P 1 ; P 2 if B then P 1 else P 2 fi while B do P od Példa: P div : r:=x; q:=0; while r y do r:=r-y; q:=q+1 od

PLW szemantikája Konfiguráció: C=(P, σ) ahol P a szintaktikus folytatás (E az üres folytatás jelölése) σ a látható állapot (állapotváltozók) Átmenet reláció: C C (x:=e, σ) (E, σ[e/x]) (skip, σ) (E, σ) (P 1 ; P 2, σ) (P 1 ; P 2, σ ) ha (P 1, σ) (P 1, σ ) Itt az E;P P azonosság alkalmazható a végén (if B then P 1 else P 2 fi, σ) (P 1, σ) ha σ[b]=true (P 2, σ) ha σ[b]=false (while B do P od, σ) (P; while B do P od, σ) ha σ[b]=true (E, σ) ha σ[b]=false H dedukciós rendszer részleges helyesség bizonyításához (1) Axiómák: ASS: SKIP: {p[e/x]} x:=e {p} {p} skip {p} Szabályok a szintaktikai struktúrákhoz: SEQ: {p} P 1 {r} és {r} P 2 {q} {p} P 1 ; P 2 {q} Utófeltételként p teljesül, ha előfeltételként p[e/x] teljesül Ha (feltétel) akkor (köv.) COND: REP: {p B} P 1 {q} és {p B} P 2 {q} {p} if B then P 1 else P 2 fi {q} {p B} P {p} {p} while B do P od {p B} p ciklus invariáns

H dedukciós rendszer részleges helyesség bizonyításához (2) Általános szabályok: CONS: p p 1 és {p 1 } P 1 {q 1 } és q 1 q {p} P {q} AND: {p} P {q 1 } és {p} P {q 2 } {p} P {q 1 q 2 } OR: {p 1 } P {q} és {p 2 } P {q} {p 1 p 2 } P {q} Domén axiómái és szabályai: Kérdés, hogy rekurzívan megszámlálhatók-e? {true}skip{p} alakú állítások is Előfeltétel bővítés és utófeltétel szűkítés Utófeltétel részekre bontása Előfeltétel szétválasztása esetekre Részleges helyességbizonyítás példa {x 0 y 0} r:=x; q:=0; while r y do r:=r-y; q:=q+1 od {x=q y+r 0 r<y}

Dedukciós rendszer részleges helyesség bizonyításához (3) Egy C állítás bizonyítása: Tr I - H C ahol I a domén, Tr I a domén axiómái és szabályai H a dedukciós rendszer Példa az állításra: {x 0 y 0} P div {x=q y+r 0 r<y} Gyakorlati problémák: Domén szabályait a tételbizonyítónak ismernie kell Szabályok alkalmazásának stratégiája (keresés) Jellemzők: Az előbb felvázolt H helyessége bizonyítható Tr I - H {p}p{q} következménye = I {p}p{q} H teljessége: Ha a domén axióma- és szabályrendszere kellően bonyolult (elegendően erős): Gödel első nemteljességi tétele érvényes, azaz lehet olyan igaz állítás, ami nem bizonyítható Specifikációs nyelv kifejezőképessége elegendő-e? Definíció: Specifikációs nyelv kifejezőképessége SL specifikációs nyelv kifejező egy PL programnyelv és I domén esetén, ha p SL, P PL esetén post I (p,p) kifejezhető SL-ben P futása után elért állapotok predikátuma Kiindulási állapot predikátuma P program Egy D dedukciós rendszer relatív teljes a részleges helyesség bizonyításához, ha SL, PL, I esetén, ahol SL kifejező PL-re és I-re, fennáll: = I {p}p{q} következménye Tr I - D {p}p{q}

H* dedukciós rendszer helyesség bizonyításhoz Cél: PLW programok helyességének bizonyítása while B do P od ciklusok befejeződése kérdéses Ötlet (itt is): Paraméterezett állítások Jól megalapozott halmaz (pl. n természetes szám) pi(x,n) ciklus invariáns választása kell Módosuló REP szabály ebben az esetben: REP*: pi(x,n) B és <pi(x,n)>p<pi(x,n-1)> és pi(x,0) B < n:pi(x,n)> while B do P od <pi(x,0)> Többi szabály: { } helyett egyszerűen < > kell Aritmetikai kiterjesztés A módosult REP* szabály miatt: SL-nek támogatnia kell a jól megalapozott halmaz (itt: természetes számok) használatát Tipikus eset: Peano aritmetika támogatása Természetes számok és +, *, < műveletek Tételbizonyító erre felkészítve Definíciók: SL aritmetikai kiterjesztése SL +, ha minimális bővítésként a Peano aritmetikát tartalmazza I domén aritmetikai kiterjesztése I +, ha minimális bővítésként a Peano aritmetika doménjét tartalmazza

Aritmetikai helyesség és teljesség Aritmetikai helyesség p,q SL + mellett: Tr I+ - D <p>p<q> következménye = I+ <p>p<q> Aritmetikai teljesség p,q SL + mellett: = I+ <p>p<q> következménye Tr I+ - D <p>p<q> Itt: H* aritmetikai helyessége bizonyítható Összefoglalás Alacsony szintű pszeudo-nyelvek (blokk diagram): Részleges helyesség ciklusmentes programokra: Visszalépéses számítási indukció Részleges helyesség ciklust tartalmazó programokra: Induktív állítások Helyesség ciklust tartalmazó programokra: Paraméterezett induktív állítások Strukturált programnyelvek (while programok): Részleges helyesség: Dedukciós rendszer (strukturális indukció) Helyesség: Dedukciós rendszer, kifejezőképesség Aritmetikai kiterjesztés, aritmetikai helyesség és teljesség