Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Formális módszerek a programozásban

Hasonló előadás


Az előadások a következő témára: "Formális módszerek a programozásban"— Előadás másolata:

1 Formális módszerek a programozásban
Szlávi Péter ELTE Informatika Kar 2003 2003.

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

3 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 Formális módszerek a programozásban 2003.

4 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 Formális módszerek a programozásban 2003.

5 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 Formális módszerek a programozásban 2003.

6 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 Formális módszerek a programozásban 2003.

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

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

9 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. Formális módszerek a programozásban 2003.

10 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):=... Formális módszerek a programozásban 2003.

11 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. Formális módszerek a programozásban 2003.

12 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 Formális módszerek a programozásban 2003.

13 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 Formális módszerek a programozásban 2003.

14 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” Formális módszerek a programozásban 2003.

15 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 Formális módszerek a programozásban 2003.

16 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:= Formális módszerek a programozásban 2003.

17 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. Formális módszerek a programozásban 2003.

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

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

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

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

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

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

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

25 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ó. Formális módszerek a programozásban 2003.

26 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:= Formális módszerek a programozásban 2003.

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

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

29 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ó :-) Formális módszerek a programozásban 2003.

30 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. Formális módszerek a programozásban 2003.

31 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) Formális módszerek a programozásban 2003.

32 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} Formális módszerek a programozásban 2003.

33 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)} Formális módszerek a programozásban 2003.

34 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) Formális módszerek a programozásban 2003.

35 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)} Formális módszerek a programozásban 2003.

36 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) Formális módszerek a programozásban 2003.

37 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))} Formális módszerek a programozásban 2003.

38 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 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))} Formális módszerek a programozásban 2003.

39 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) Formális módszerek a programozásban 2003.

40 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. Formális módszerek a programozásban 2003.

41 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} Formális módszerek a programozásban 2003.

42 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 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) Formális módszerek a programozásban 2003.

43 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. Formális módszerek a programozásban 2003.

44 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 Formális módszerek a programozásban 2003.

45 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] Formális módszerek a programozásban 2003.

46 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)} Formális módszerek a programozásban 2003.

47 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 Formális módszerek a programozásban 2003.

48 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)} Formális módszerek a programozásban 2003.

49 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 Formális módszerek a programozásban 2003.

50 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. Formális módszerek a programozásban 2003.

51 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. Formális módszerek a programozásban 2003.

52 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). Formális módszerek a programozásban 2003.

53 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 Formális módszerek a programozásban 2003.

54 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)). Formális módszerek a programozásban 2003.

55 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. Formális módszerek a programozásban 2003.

56 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. Formális módszerek a programozásban 2003.

57 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*/ Formális módszerek a programozásban 2003.

58 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*/ Formális módszerek a programozásban 2003.

59 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). Formális módszerek a programozásban 2003.

60 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). Formális módszerek a programozásban 2003.

61 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)  … Formális módszerek a programozásban 2003.


Letölteni ppt "Formális módszerek a programozásban"

Hasonló előadás


Google Hirdetések