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 Tejfel Máté, ELTE Informatikai Kar Programozási Nyelvek és Fordítóprogramok.

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 Tejfel Máté, ELTE Informatikai Kar Programozási Nyelvek és Fordítóprogramok."— 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 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

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

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

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

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

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

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


Letölteni ppt "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."

Hasonló előadás


Google Hirdetések