Formális módszerek a programozásban

Slides:



Advertisements
Hasonló előadás
Deduktív adatbázisok.
Advertisements

Predikátumok Dr. György Anna BMF-NIK Szoftvertechnológia Intézet.
T ESZTELÉS. C ÉLJA Minél több hibát találjunk meg! Ahhoz, hogy az összes hibát fölfedezzük, kézenfekvőnek tűnik a programot az összes lehetséges bemenő.
Definíciók: Algoritmus: bármely véges sok lépéssel leírható tevékenység. Olyan pontos előírás, amely megmondja, hogy egy adott típushoz tartozó feladat.
Összefoglalás Hardver,szoftver,perifériák Memóriák fajtái
Függvények Egyenlőre csak valós-valós függvényekkel foglalkozunk.
Determinisztikus programok. Szintaxis: X : Pvalt program változók E : Kifkifejezések B : Lkiflogikai kifejezések C : Utsutasítások.
Programozási alapismeretek 6. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 6.2/  Rekordok/struktúrák.
Kötelező alapkérdések
3. előadás (2005. március 1.) Utasítások, tömbök
Matematikai logika A diasorozat az Analízis 1. (Mozaik Kiadó 2005.) c. könyvhöz készült. Készítette: Dr. Ábrahám István.
Copyright, 2009 © Szlávi Péter A kupac és a prioritási sor típuskonstrukciók Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Algebrai struktúrák 1.
4. VÉGES HALMAZOK 4.1 Alaptulajdonságok
Programozási alapismeretek 7. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás2/  Sorozatszámítás.
Programozási alapismeretek 3. előadás
Programozás alapjai.
Logika Érettségi követelmények:
MI 2003/5 - 1 Tudásábrázolás (tudásreprezentáció) (know- ledge representation). Mondat. Reprezentá- ciós nyelv. Tudás fogalma (filozófia, pszichológia,
Bizonyítási stratégiák
Készítette: Pető László
Programozás módszertan
Java programozási nyelv 2. rész – Vezérlő szerkezetek
A digitális számítás elmélete
A digitális számítás elmélete
A digitális számítás elmélete
Determinisztikus véges automaták csukva nyitva m s kbsm csukva nyitva csukva nyitva csukvanyitva 1. Példa: Fotocellás ajtó s b m m= mindkét helyen k= kint.
Bevezetés a matematikába I
6. SZÁMELMÉLET 6.1. Oszthatóság
Reprezentációs függvény. Adva egy adattípus absztrakt és konkrét specifikációja: d a = ( A, F, E a ); d c = ( C, G, E c ); A = {A 0,..., A n };C = {C 0,...,
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Alphabet is a type specification = sorts: alphabet oprs: a:  alphabet,...,z:  alphabet end alphabet; nat is a type specification = sorts:nat oprs:zerus:
Copyright, 1999 © Szlávi Péter Verem típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
A számfogalom bővítése
Halmazelmélet és matematikai logika
A digitális számítás elmélete
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Érvelés, bizonyítás, következmény, helyesség
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Vektorterek Definíció. Legyen V Abel-csoport, F test, továbbá
Algoritmusok.
Koncepció: Specifikáció: e par exp i = eb imp bod ib Specifikáció elemzése: tulajdonságok felírása a koncepció alapján + tulajdonságok bizonyítása.
Copyright, 1999 © Szlávi Péter Sor típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Az informatika logikai alapjai
Algebrai struktúrák: csoport, gyűrű, test. RSA Cryptosystem/ Titkosítási rendszer Rivest, Shamir, Adelman (1978) RSA a neten leggyakrabban használt.
Háló- (gráf-) algoritmusok
Algoritmizálás, adatmodellezés
Adva S  parbegin S 1 ...  S n parend; Párhuzamos programszerkezet két vagy több olyan folyamatot tartalmaz, amelyek egymással közös változó segítségével.
Kiterjesztések szemantikája: Szemantikai tartomány : Adatoknak, vagy értékeknek egy nem üres halmazát szemantikai tartománynak nevezzük. Jelölése: D. Egy.
Algoritmizálás, adatmodellezés tanítása 6. előadás.
2. gyakorlat INCK401 Előadó: Dr. Mihálydeák Tamás Sándor Gyakorlatvezető: Kovács Zita 2015/2016. I. félév AZ INFORMATIKA LOGIKAI ALAPJAI.
HÁLÓZAT Maximális folyam, minimális vágás
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Informatika logikai alapjai természetes levezetés
Logika.
Analitikus fák kondicionálissal
II. konzultáció Analízis Sorozatok Egyváltozós valós függvények I.
Variációk a hazugra Szókratész: Platón hazudik.
Példa: Dinteger = {..., -1,0,1,...}; Dboolean = {true, false};
Bevezetés a programozásba Algoritmikus gondolkodás
Algoritmusok szerkezete
Algebrai geometriai számítások
Algebrai struktúrák 1.
Bevezetés a matematikába I
Informatikai gyakorlatok 11. évfolyam
ÍTÉLETKALKULUS (NULLADRENDŰ LOGIKA)
Csoport, félcsoport, test
Algoritmus készítés.
Strukturált és nem strukturált programok
Előadás másolata:

Formális módszerek a programozásban Szlávi Péter ELTE Informatika Kar szlavip@elte.hu http://izzo.inf.elte.hu/~szlavi 2003 2003.

Formális módszerek a programozásban Tartalom 1. Stukturált programok 2. Programhelyesség 3. Típushelyesség 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok Formális módszerek a programozásban 1. Strukturált programok Alapirodalom: Varga L. – Programok analízise és szintézise Strukturált programszerkezetek: blokk-szekvencia (begin f; g end = B(f,g)) elágazás (if p then f else g = ITE(p;f,g)) ciklus (while p do f = WD(p;f)) Program (vezérlő-) gráf: csomópontok függvény-csomópont predikátum-csomópont gyűjtő csomópont irányított élek f/g „üres” prog-ram is lehet vagy 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) Valódi program, amely gráfja teljesíti: 1. Egy bemenő- és egy kimenő él 2. Csomópontjai: predikátum-/függvény-/gyűjtő csomópont 3. Minden csomóponton át vezet út a bemenő élből a kimenő élbe. Egy rossz példa: Továbbiakban program alatt valódi programot értünk. * a kékkel jelölteken át nem vezet út a kimenőélhez 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) Elemi programgráfok (strukturált programszerkezetek gráfjai): f g f p * g p f 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) A vezérlőgráf lebontása: a gráfban előforduló elemi programgráfok helyettesítése függvény-csomóponttal 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) Strukturált program: az a program, amely gráfja lebontható egyetlen függvény-csomóponttá. Egy példa. 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok Formális módszerek a programozásban 1. Strukturált programok Lemma: Ha egy (valódi) program gráfjának élei száma: e, pred./függv./gyűjtő csomópontjainak száma: //, akkor teljesülnek: e = 3++1, ill.  =  Biz.: megszámolni az egyes bemenő és kimenő éleket: be = ++2, ki = +2+. Nyilvánvaló: e = be+1 = ki+1. Ebből már következik az állítás. Jelölések: P programgráfhoz: e(P)/ (P)/(P)/ (P):=... 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) Böhm-Jacopini tétele (a strukturált programozás alaptétele): Bármely valódi programhoz meg lehet konstruálni a vele ekvivalens strukturált programot. Biz.: f-hez megkonstruáljuk a vele ekvivalens strukturál-tat… … f-t esetleg ekvivalensen transzformálva felbontjuk valahány valódi (rész)programra: f  B(g,h)/ITE(p;g,h)/WD(p;g) ahol g, h éleinek száma kevesebb f éleinek számánál. 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) Tfh: e(f)>2 azaz legalább 2 csomópontja van (ahol e(x):= x programgráf éleinek száma) 1. eset: f=B(g,h) ekkor h valódi program és e(h)=e(f)-1. Vizsgálandó: h. 2. eset: f=ITE(g,h) ahol g, h valódi programok és (g)<(f), (g)(f) és a lemmából: e(g)=(g)+3(g)+1<(f)+3(f)+1=e(f) ... h-ra hasonlóan. Továbbvizsgálandó: h és g. g h p g p h 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) 3. eset: Mivel 2 kimenő él jön ki az f’-ből, ezért biztosan van legalább egy predikátum csomópont az f’-ben. 3 al-eset a gyűjtőpontot követő csomópont fajtája szerint: 3a) 3b) 3c) f’ Cél a 3c) esethez eljutni Lehetséges az is, hogy a c) eset már egy strukturált alapforma, amelyben a p predikátum pont egyik ága már egy „üres” kimenő él. Ekkor más készen is vagyunk. p 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) 3a) 3b) 3c) f” f” f” p g h Ki Az élszám csökkenésének belátáshoz lásd a következő példát! p f” 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) Az világos, hogy az ITE(p;g,h) áthelyezésével és duplázásával szabályos szerkezetté alakítható: B(ITE(p;g,h);WD(Ki; ITE(p;g,h))) p g h Ki p g h Persze be kell látni, hogy a transzformációk során a to-vábbelemzendő struktúrák (g,h) „egyedi” élszáma (a so-rozatos transzformáció után) kisebb. Ki p g h 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) Egy érdekes eset: (f)=1, (f)=3, (f)=3 e=1+3*3+1=11 f p r q g (f’)=6, (f’)=4, (f’)=4 f’ g h (g)=3, (g)=1, (g)=1 e=3+3*1+1=7 (h)=3, (h)=1, (h)=1 p q g Ki:= Ki r Ki:= 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) Példa a strukturálttá alakításra: Ez nem strukturált. 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) Bontsuk le! 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) A lebontás nem folytatható! 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) 3c) eset: ? 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) ? 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) ? 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) ? Ki:= Ki:= Ki:= 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) ?  Ki:= Ki ? Ki:= Ki:= A -rész lebontható, a ?-rész transzformálandó. 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) A ?-rész transzformálandó: 2. eset: Ki:= Ki ? Ki:= Ki:= 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) Ki:= Ki Ki:= Ki:= Ki:= 2018.12.31. Formális módszerek a programozásban 2003.

1. Strukturált programok (folytatás) Formális módszerek a programozásban 1. Strukturált programok (folytatás) Ki:= Ki Ki:= Ki:= Ki:= 2018.12.31. Formális módszerek a programozásban 2003.

Formális módszerek a programozásban 2. Helyességbizonyítás Alapirodalom: Varga L. – Programok analízise és szintézise Kozma, Varga – Adattípusok osztálya (Feladat- és program-) specifikáció: Bemeneti adatok – halmazok Előfeltétel – predikátum Kimeneti adatok – halmazok Utófeltétel – predikátum P/P-specifikáció (-: EfUf-specifikáció :-) 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) Helyességbizonyítás Hoare deduktív módszerével: A P program parciálisan helyes, ha bizonyítható (le-vezethető) az Állítás: {p(x)} P {q(x,y)} x a P input-, y output-paraméterei azaz levezetni: ha p igaz P előtt, akkor q igaz P után, feltéve, hogy a P terminál („legálisan” megáll). Nem foglalkozunk típus-sértési hibákkal (típushalmazok véges-ségével). Csak a program logikáját vizsgáljuk. 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) A bizonyításhoz egy axiómát és bizonyos levezetési szabályokat lehet fölhasználni. Értékadás-axióma: {p(x,g(x,y))} y:=g(x,y) {p(x,y)} Levezetési szabályok alakja: 1,…,N ————  olvasd: „az 1,…, N-ből  levezethető” (i – feltétel,  – következmény) 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) Feltételes szabály: {pt} P1 {q} , {pt} P2 {q} ————————————— {p} if t then P1 else P2 {q} Ciklus-szabály: {pt} P {p} —————————— {p} while t do P {pt} 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) Kompozíciós szabály: {p} P1 {q} , {q} P2 {r} —————————— {p} P1; P2 {r} Következmény-szabályok: {p}  {q} , {q} P {r} {p} P {q} , {q}  {r} ————————— ————————— {p} P {r} {p} P {r} Az értékadás-szabály az első következmény-szabály és az értékadási axióma alkalmazásával nyerhető. Értékadás-szabály: {p(x,y)}  {q(x, g(x,y) )} ——————————— {p(x,y)} y:=g(x,y) {q(x,y)} 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) Példa az ‘Eldöntés-tétel’ parciális helyességének bizonyítása Hoare módszerével: {(X,N)} 1 i:=1 2 Ciklus amíg iN és nem T(X(i)) 3 i:+1 4 Ciklus vége 5 Van:=iN {(X,N,Van)} Ef: Igaz Uf: Van º $jÎ[1,N] : T(xj) 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) 1 i:=1 Legyen R(X,N,i) : iÎ[1,N+1]  jÎ[1,i) : T(xj) 1. lemma: (X,N)  R(X,N,1) Biz.: R(X,N,1)=1Î[1,N+1]  jÎ[1,1): T(xj)Igaz  Igaz  Igaz  Értékadás-szabály 1-re és 1. lemma  {(X,N)} i:=1 {R(X,N,i)} 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) 3 i:+1 Ciklusfeltétel 2. lemma: R(X,N,i)  iN  T(xi)  R(X,N,i+1) Biz.: (iÎ[1,N+1]  jÎ[1,i) : T(xj))  iN  T(xi)  (iÎ[1,N+1]  jÎ[1,i+1) : T(xj))  iN  R(X,N,i+1)  Értékadás-szabály 3-ra és 2. lemma  i+1N+1 {R(X,N,i)  iN  T(xi)} i:+1 {R(X,N,i)} (azaz R ciklusinvariáns) 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) 2 Ciklus … 3 i:+1 4 Ciklus vége Ciklus-szabály 2..4-re  {R(X,N,i)} Ciklus amíg iN és nem T(X(i)) i:+1 Ciklus vége {R(X,N,i)  ((iN)  T(xi))} Kihagytam, mert feleslegesnek tűnik: i 1-től egyesével növekszik, ezért q:=(iN)  r:=(i=N+1), így a 2. következmény-szabály miatt az {R(X,N,i)  ((iN)  T(xi))} helyett írható {R(X,N,i)  (i=N+1  T(xi))} 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) 1 i:=1 2 Ciklus … 3 i:+1 4 Ciklus vége Kompozíciós szabály 1+2..4-re  {(X,N)} i:=1 Ciklus amíg iN és nem T(X(i)) i:+1 Ciklus vége {R(X,N,i)  (i>N  T(xi))} 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) 5 Van:=… 3. lemma: R(X,N,i)  (i>N  T(xi))  ($jÎ[1,N] : T(xj))  iN Biz.: Jelöljük * A-val az R(X,N,i)  (i>N  T(xi)) * B-vel a j[1,N] : T(xj) * C-vel az i≤N Bizonyítandó: A  (BC) Bizonyítani kell 1. A  (BC) 2. A  (CB) R(X,N,i)  (i>N  T(xi)) (-kommutivitássorrendcsere és disztributivitás)  (R(X,N,i)  T(xj))  (R(X,N,i)  i>N) (R-kifejtése)  (iÎ[1,N+1]  jÎ[1,i) : T(xj)  T(xi))  (iÎ[1,N+1]  jÎ[1,i) : T(xj)  i>N) (a 2. tag átrendezése) 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) A  (BC) A: (R(X,N,i)  i>N)  (R(X,N,i)  T(xi))  B  C  B  C 2. A  (CB) A: (R(X,N,i)  i>N)  (R(X,N,i)  T(xi))  C  B  C  B      Az 1. első sorában alkalmaztuk a disztributivitást. Az 1. második sorában R definíciójára, valamint arra a tényre építünk, hogy ha a sorozat i. eleme valamilyen, akkor az a sorozat létező (tehát legfeljebb N.) eleme. Az 1. harmadik sora az implikáció másik alakját használtuk. Ui. B  C  (BC)B  (BB)(CB)  CB  BC -------------- A 2. első sora ugyanúgy mint 1.-nél. A 2. második sorában nyilvánvaló implikációkat alkalmazunk: XY  Y. A 2. harmadik sora az 1. harmadik soránál alkalmazottal azonos gondolatmenettel készült. 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) 5 Van:=… Értékadás-szabály 5-re és 3. lemma  {R(X,N,i)  (i>N  T(xi))} Van:=iN {($jÎ[1,N] : T(xj))  Van} 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) 1 i:=1 2 Ciklus … 3 i:+1 4 Ciklus vége 5 Van:=… Kompozíciós szabály 1..4+5-re  {(X,N)} i:=1 Ciklus amíg iN és nem T(X(i)) i:+1 Ciklus vége Van:=iN {($jÎ[1,N] : T(xj))  Van} º {(X,N,Van)} (az ekvivalencia szimmetriája) 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) A teljes helyességről: A P program totálisan helyes, ha parciálisan helyes és bizonyítható, hogy terminál. A terminálás bizonyításáról: Csak az iterációkban kell. „Technika”: egy E(x,y)[0,M] (M>0) függvény defi-niálása, ahol x az input-, y az output-adatok; bizonyítani kell, hogy cI(x,y)  E(x,y)[0,M] {cI(x,y)  cF(x,y)  E(x,y)=e0} CM {e0>E(x,y)}. cI: ciklusinvariáns; cF: ciklusfeltétel; CM: ciklusmag Szokás szerint a PCM utáni E-beli y a kilépéskori y-érték. 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) Példa az ‘Eldöntés-tétel’ totális helyességének bi-zonyítása Hoare módszerére és az előbbi-ekre építve: {R(X,N,1)} 2 Ciklus amíg iN és nem T(X(i)) 3 i:+1 4 Ciklus vége R(X,N,i) – a konkrét ciklusinvariáns i[1,N+1]  j[1,i) : T(xj) E:NN[0,N], E(N,i):= N–i+1 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) cI(x,y)  E(x,y)[0,M] azaz konkrétan: R(X,N,i)  E(N,i)[0,N] Biz.: R(X,N,i)= i[1,N+1]  j[1,i) : T(xj)  E(N,i)=N–i+1[0,N]  2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) 2. {cI(x,y)  cF(x,y)  E(x,y)=e0} CM {e0>E(x,y)} azaz konkrétan: {R(X,N,i)  iN  T(xi)  E(N,i)=e0} i:+1 {e0>E(N,i)} 2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) 2. állítás bizonyításához segítségül egy Lemma: R(X,N,i)  iN  T(xi)  E(N,i)=e0  e0>E(N,i+1) Biz.: (a) E(N,i)=e0 (b) E-def  E(N,i+1)=E(N,i)–1 (a&b)  E(N,i+1)=e0–1   2018.12.31. Formális módszerek a programozásban 2003.

2. Helyességbizonyítás (folytatás) Formális módszerek a programozásban 2. Helyességbizonyítás (folytatás) 2. állítás bizonyítása: Értékadás-szabály és a lemma   {R(X,N,i)  iN  T(xi)  E(N,i)=e0} i:+1 {e0>E(N,i)} 2018.12.31. Formális módszerek a programozásban 2003.

Formális módszerek a programozásban 3. Típushelyesség Alapirodalom: Kozma, Varga – Adattípusok osztálya Szlávi – Gondolatok a típus-specifikációk kompa-tibilitásának vizsgálatáról (lógia Szilánkok 11) Típus: Értékhalmaz Operációk Típusspecifikációk: Algebrai P/P 2018.12.31. Formális módszerek a programozásban 2003.

3. Típushelyesség (folytatás) Formális módszerek a programozásban 3. Típushelyesség (folytatás) Cél: belássuk a kétféle specifikáció nem mond ellent egymásnak. Feltételezések: Ugyanarra a típusra vonatkoznak. Az algebrai leírás helyes (teljes, ellentmon-dásmentes). A P/P-rendszer teljes. Módszer: egyetlen logikai rendszerbe egyesí-teni, majd az ellentmondásmentességet bizo-nyítani. A P/P-rendszer algoritmikus helyessége az előzőekben tárgyalt módon vizsgálható. Ezért nem foglalkozunk itt vele. 2018.12.31. Formális módszerek a programozásban 2003.

3. Típushelyesség (folytatás) Formális módszerek a programozásban 3. Típushelyesség (folytatás) Az egyesített rendszerről: Minden állítás az alábbi alakú – állításNév(paraméterminta) ha paraméterPredikátum. Értelmezés: ha a predikátum teljesül a benne szereplő pa-raméterek beillesztése után, akkor a paramé-terminta ‘állításNév’ nevű relációja teljesül. 2018.12.31. Formális módszerek a programozásban 2003.

3. Típushelyesség (folytatás) Formális módszerek a programozásban 3. Típushelyesség (folytatás) 1. példa: kocka(idom(a,b,c)) ha a=b  b=c. 2. példa: prím(n) ha n=2  n=3  (n Mod 2)<>0  oszthatóIg(n,n Div 2). oszthatóIg(n,ig) ha (n Mod ig)=0  oszthatóIg(n,ig-1). 2018.12.31. Formális módszerek a programozásban 2003.

3. Típushelyesség (folytatás) Formális módszerek a programozásban 3. Típushelyesség (folytatás) Az algebrai specifikáció axiómái is ilyen állítá-sokká átírahatók. 3. példa: axióma: állítás: Veremből – axióma: Veremből(Verembe(v,e))=(v,e)  … VerembőlAxióma(v,igaz) ha Verembe(v,e,újv)  Veremből(újv,e,v)  … . … Bemeneti verem Kimeneti verem Bemeneti verem Kimeneti verem 2018.12.31. Formális módszerek a programozásban 2003.

3. Típushelyesség (folytatás) Formális módszerek a programozásban 3. Típushelyesség (folytatás) A P/P-specifikációknak is ilyen állítások felel-nek meg: 4. példa: P/P: állítás: Példamagyarázat: 1. A verem az elemsorozat és a definiáltság kettőse. 2. A P/P-beli „hiba-állapotot” a definiáltsággal jelöl- jük. (v.hiba  verem(v,def)) 3. „[e|v]”=a sorozat első eleme az e, „farka” a v. Ef: v.hiba Uf: v.sorozat=(v1,...,vn)  v'.sorozat=(v1,...,vn,e) verembe(verem(v,def),e,verem([e|v],def)). 2018.12.31. Formális módszerek a programozásban 2003.

3. Típushelyesség (folytatás) Formális módszerek a programozásban 3. Típushelyesség (folytatás) A teljesség ígérete nélkül néhány átírási sza-bály: Axióma: Ax(TSk,IVN) ha … az axióma „kódja” … . Az axióma nem teljesülése esetére (Prolog alapú ellenőrzés esetén): Ax(_,hamis). A „típusú” struktúra. Logikai érték: az axióma teljesül-e? Egy logikai programozási nyelv… Tetszőleges egyéb para-méterre: az axióma hamis. 2018.12.31. Formális módszerek a programozásban 2003.

3. Típushelyesség (folytatás) Formális módszerek a programozásban 3. Típushelyesség (folytatás) P/P-függvény: Op(struktura(ST,def),…,…). P/P-eljárás: Op(struktura(STi,def),…, struktura(STo,def),…). A „típusú” input struktúra, definiált állapotban. Egyéb input paraméter. A függvény értéke: output paraméter Output struktúra, „legá-lis” működés esetén. Egyéb output paraméter. 2018.12.31. Formális módszerek a programozásban 2003.

3. Típushelyesség (folytatás) Formális módszerek a programozásban 3. Típushelyesség (folytatás) Egy „komplettebb” példa: Eljárás Üres(Vált. v:Verem) Ef: Igaz Uf: v=((),Hamis) Függvény Üres?(Kons. v:Verem):Logikai Ef: v.hiba Uf: Üres?(v)=(v.sorozat=()) Függvény Tető(Vált. v:Verem):TElem Ef: v.hiba Uf: v.sorozat=(v1,...,vn)  Tető(v)=vn  v.sorozat=()  v'.hiba=Igaz üres(verem([],def)). üresE(verem(_,nemDef),_). /*ImpErrAx*/ üresE(verem([],def),igaz). üresE(verem([_],def),hamis). tető(verem(V,nemDef),_, verem(V,nemDef)). /*ImpErrAx*/ tető(verem([E|V],def),E, verem([E|V],def)). tető(verem([],def),_, verem([],nemDef)). /*PP:Err*/ 2018.12.31. Formális módszerek a programozásban 2003.

3. Típushelyesség (folytatás) Formális módszerek a programozásban 3. Típushelyesség (folytatás) (folytatás:) Eljárás Verembe(Vált. v:Verem, Kons. e:TElem) Ef: v.hiba Uf: v.sorozat=(v1,...,vn)  v'.sorozat=(v1,...,vn,e) Eljárás Veremből(Vált. v:Verem, e:TElem) Ef: v.hiba Uf: v.sorozat=(v1,...,vn)  v'.sorozat=(v1,...,vn-1)  e=vn  v=()  v'.hiba=Igaz verembe(verem(V,nemDef),_, verem(V,nemDef)). /*ImpErrAx*/ verembe(verem(V,def),E, verem([E|V],def)). veremből(verem(V,nemDef),_, verem(V,nemDef)). /*ImpErrAx*/ veremből(verem([E|V],def), E,verem(V,def)). veremből(verem([],def),_, verem(_,nemDef)). /*PP:Err*/ 2018.12.31. Formális módszerek a programozásban 2003.

3. Típushelyesség (folytatás) Formális módszerek a programozásban 3. Típushelyesség (folytatás) (folytatás:) 1o Üres – axióma v=Üres  Üres?(v) 2o Üres? – axióma Üres?(Verembe(v,e)) 3o Tető–Verembe – axióma Tető(Verembe(v,e))=e 3’o Tető – hiba-axióma Üres?(v)  Tető(v)=NemDef axioma1(V,igaz) ha ures(V)  uresE(V,igaz)  ures(V)  uresE(V,igaz). axioma2(V,igaz) ha verembe(V,_,verem(W,def))  üresE(verem(W,def),hamis). axioma2(_,hamis). axioma3(V,igaz)ha verembe(V,E,W)  tető(W,E,W). axioma3(_,hamis). axioma3H(verem(_,def),igaz) ha üresE(verem(_,def),igaz)  tető(verem(_,def),_, verem(_,nemDef)  üresE(_,hamis). axioma3H(_,hamis). 2018.12.31. Formális módszerek a programozásban 2003.

3. Típushelyesség (folytatás) Formális módszerek a programozásban 3. Típushelyesség (folytatás) (folytatás:) 4o Veremből – axióma Veremből(Verembe(v,e))=(v,e)  Üres?(v)  Verembe(Veremből(v))=v 4’o Veremből – hiba-axióma Üres?(v)  Veremből(v)=NemDef axioma4(V,igaz) ha verembe(V,E,W)  veremből(W,E,V)  uresE(V,hamis)  veremből(V,E,W)  verembe(W,E,V)  uresE(V,igaz). axioma4(_,hamis). axioma4H(verem(_,def),igaz) ha üresE(verem(_,def),igaz)  veremből(verem(_,def),_, verem(_,nemDef)  üresE(_,hamis). axioma4H(_,hamis). 2018.12.31. Formális módszerek a programozásban 2003.

3. Típushelyesség (folytatás) Formális módszerek a programozásban 3. Típushelyesség (folytatás) (folytatás:) Végezetül a logikai rendszer ellentmondás mentességét be kell látni üres és nem üres veremre úgy, hogy minden axióma teljesülését ellenőrizzük rájuk: Állítás: A rendszer ellentmondásmentes, akkor JoE01 , JoE1 … értékek igaz értékűek. Állítás: Az előbbi állítás nem megfordítható. /*(üres,def)-re igaz-e:*/ V01=verem([],def)  axioma1(V01,JoE01)  /*(nem üres,def)-re igaz-e:*/ V1=verem([_],def)  axioma1(V1,JoE1)  … 2018.12.31. Formális módszerek a programozásban 2003.