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

Helyességbizonyító eszközök alkalmazása funkcionális programok esetén

Hasonló előadás


Az előadások a következő témára: "Helyességbizonyító eszközök alkalmazása funkcionális programok esetén"— Előadás másolata:

1 Helyességbizonyító eszközök alkalmazása funkcionális programok esetén
Tejfel Máté, ELTE Informatikai Kar Programozási Nyelvek és Fordítóprogramok Tanszék 2.604-es szoba

2 Programhelyesség Mikor helyes egy program?
Megfelel az elvárásoknak (a specifikációnak). Elvárások - felhasználói - tervezői Program tulajdonságai határozzák meg

3 Programhelyesség Hogyan vizsgálható, ellenőrizhető?
- szimuláció, tesztelés - modell ellenőrzés (model checking) - helyességbizonyítás (verification)

4 Szimuláció, tesztelés a szimulációt a rendszer valamilyen absztrakcióján, modelljén végezzük a tesztelést az adott rendszeren, programon végezzük adott inputok  elvárt válasz nem képes lefedni minden esetet szoftveresen segíthető költséghatékony, sok hibát megtalál

5 Modell ellenőrzés a program egy modelljének tulajdonságait vizsgálja
csak véges állapothalmaz esetén működik (pl. hálózati protokollok, hardware kontrollerek) általában teljes keresést végez az állapottéren igen válasz vagy ellenpélda

6 Modell ellenőrzés nem használható minden esetben
nem igényel magas fokú szakértelmet automatikus Pl.: NuSMV

7 Helyességbizonyítás axiómák + levezetési szabályok + a program egy absztrakciója (általában funkcionális) magas fokú (matematikai, logikai) szakértelmet igényel bonyolult, időigényes csak részben automatizálható

8 Helyességbizonyítás CoQ Isabelle/Hol PVS http://coq.inria.fr/
PVS

9 Programszintézis helyes program előállításának alternatív módszere
specifikációból kiindulva építjük fel a programot nem egy meglévő programot vizsgálunk pl.: B nyelv J.-R. Abrial. The B-Book: Assigning Programs to Meanings. Cambridge University Press, 1996.

10 Helyességbizonyítás Program Reprezentáció Tulajdonság Axiómák
Levezetési szabályok Bizonyítás

11 Sparkle a funkcionális Clean nyelv helyességbizonyítója
a reprezentációs nyelv is Clean (Core-Clean) reprezentálás automatikus szabad forráskódú ( Clean nyelvű)

12 Clean Egyszerű gyakorlati példák …

13 Példa take :: Int ![a] -> [a] take n [x:xs]
| n > 0 = [x: take (n-1) xs] = [] take n [] drop :: Int !u:[.a] -> u:[.a] drop n [x:xs] | n > 0 = drop (n-1) xs = [x:xs] drop n []

14 Sparkle „tanácsadó” mechanizmus
42 levezetési szabály (Clean specifikus pl. redukció, indukció) COQ bizonyító rendszer alapján jól kezelhető GUI

15 Tulajdonságok leírása
elsőrendű logika egyenlőség predikátumok helyett clean függvények Pl.: Paros(x) predikátum helyett paros logikai függvény definíciója és paros(x) = True ellenőrzése

16 Tulajdonságok leírása
TRUE, FALSE azonosan igaz, azonosan hamis kifejezés Sparkle tulajdonságokban (pl.: FALSE -> TRUE) (egyenlőségvizsgálat eredménye) True, False a Bool típus két lehetséges értéke Clean-ben

17 Tulajdonságok leírása
negáció ~ és /\ vagy \/ implikáció -> ekvivalencia <-> univerzális kvantor [x::Típus] egzisztenciális kvantor {x::Típus}

18 Definiáltság Clean lusta kiértékelése miatt kezelni kell
_|_ („bottom”) érték esetszétválasztásnál automatikusan plusz lehetőség

19 Példa take :: Int ![a] -> [a] take n [x:xs]
| n > 0 = [x: take (n-1) xs] = [] take n [] drop :: Int !u:[.a] -> u:[.a] drop n [x:xs] | n > 0 = drop (n-1) xs = [x:xs] drop n []

20 Példa ~(n = _|_) -> take n xs ++ drop n xs = xs

21 Példa Nincs szabad változó (univerzális kvantálás automatikus)
~(n = _|_) -> take n xs ++ drop n xs = xs Nincs szabad változó (univerzális kvantálás automatikus) [n][xs] ~(n = _|_) -> take n xs ++ drop n xs = xs

22 Tételek (theorems) tulajdonságok + bizonyítás
szekciókba szervezhetők (.sec file-ok) a szekciók elmenthetők (Section könyvtár) kivéve „main” szekció, munkakönyvtár újrafelhasználás

23 Axiómák, beépített tételek
StdEnv-ben leírt függvényekre Section könyvtár négy előre definiált eleme kevés axióma (int típusra) néhány előre definiált tétel (logikai szabályok, tételek boolean, int, list típusra) bizonyítások alacsony szintűek

24 Bizonyítás bizonyítási fa cél csúcsai – célok
élei – levezetési szabályok cél bizonyítandó állítás környezet deklarált változók lokális hipotézisek

25 Levezetési szabályok (tactics)
42 beépített szabály célokból új célok listája érvényes az új célokból logikailag következik a régi cél

26 Introduce a bizonyítandó állítás univerzálisan kvantált változók
implikációs előtagok cél környezet deklarált változók hipotézisek (dedukciós tétel)

27 Példa

28 Introduce n xs H1.

29 Rewrite cél környezet egyenlőség hipotézisek alapján
bizonyítandó állítás változó helyetesítés bármelyik irányban előfordulásokat akár külön is

30 Példa

31 Rewrite -> All H1.

32 Apply egy már bizonyított tény vagy egy hipotézis felhasználása
implikáció előtag illesztése egy hipotézisre utótag illesztése a bizonyítandó állításra

33 Példa

34 Apply H2.

35 Apply H2 to H1.

36 Cut egy már bizonyított tény vagy egy hipotézis felhasználása
a bizonyítandó állításban implikációs előtagként dedukciós tétel

37 Példa

38 Cut H1.

39 Assume egy új állítás felvétele hipotézisként a cél környezetébe
új célként bizonyítani kell (az eredeti környezetben)

40 Példa

41 Assume x >= 0.

42 Reduce függvénydefiníciók behelyettesítése a bizonyítandó állításban
egyes függvényekre külön, vagy mindre együtt különböző mélységig

43 Példa

44 Reduce NF (take 1).

45 Induction strukturális indukció (univerzálisan kvantált válozóra)
adatszerkezet alapján _|_ ág

46 Példa

47 Induction xs.

48 Definedness definiáltságot kezeli
ha a rendszer képes kikövetkeztetni a definiáltságot (definiálatlanságot), akkor használható

49 „Definedness.”-el bizonyítható

50 Példa

51 A -al elkezdjük a bizonyítást

52 Tanácsadó rendszer bizonyítási lépéseket javasol
valószínűség (mennyire használható) nem mindig tud tanácsot adni nem mindig ad jó tanácsot adott példánál jól használható megjegyzés: a példánál ne használjuk a beépített „list.sec” szekciót, mert ott megtalálható a bizonyítás

53 Tanácsadó rendszer automatikus bizonyításra is használható
általában kevés sikerrel adott példa automatikusan is bizonyítható

54 CPPCC összefoglaló The Certified Proved-Property-Carrying Code (CPPCC): három fő komponens. 1. A mobil kód előállítója tulajdonságokat és bizonyítást rak a kód mellé. A kód felhasználója csak ellenőrzés után hajtja végre a kódot. A hitelesítő leegyszerűsíti a felhasználó munkáját.

55 Hitelesített kódok könyvtára
CPPCC architektúra Mobil kód előállítója Helyességbizonyító Hálózat Forráskód Kód Típuskód Tulajdonságok Bizonyítás Hitelesített kódok könyvtára Kód Típuskód Tulajdonságok Zárjegy Hitelesítő Ellenőrző Mobil kód felhasználója Engedélyező

56 Kód előállító / küldő komponens
Függvénykifejezés Típusleírás Tulajdonságok Fordítóprogram Helyességbizonyító Típus- kód Absztrakt gépi kód Kódolt tulajdonságok Forráskód Bizonyítás

57 Hitelesítő komponens Típus- kód Absztrakt gépi kód Kódolt
tulajdonságok Forráskód Bizonyítás Fordításellenőrző Helyességellenőrző Hitelesítő Típus- kód Absztrakt gépi kód Kódolt tulajdonságok Zárjegy

58 Fogadó/ engedélyező komponens
Típus- kód Absztrakt gépi kód Kódolt tulajdonságok Zárjegy Felhasználó program Zárjegyvizsgáló Dinamikus összeszerkesztő Követel- mények Engedélyező Típusegyeztető Típus- minták Alkalmazás

59 Funkcionális programok helyessége
Elosztott funkcionális programok helyessége OTKA T037742 kutatási projekt


Letölteni ppt "Helyességbizonyító eszközök alkalmazása funkcionális programok esetén"

Hasonló előadás


Google Hirdetések