1 / 59

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

Helyességbizonyító eszközök alkalmazása funkcionális programok esetén. Te j fel Máté, matej@inf.elte.hu ELTE Informatikai Kar Programozási Nyelvek és Fordítóprogramok Tanszék 2.604-es szoba. Programhelyesség. Mikor helyes egy program? Megfelel az elvárásoknak (a specifikációnak).

len
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Helyességbizonyító eszközök alkalmazása funkcionális programok esetén TejfelMáté, matej@inf.elte.hu 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 • http://nusmv.irst.itc.it/

  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 • http://coq.inria.fr/ • Isabelle/Hol • http://isabelle.in.tum.de/ • http://www4.in.tum.de/~nipkow/LNCS2283/ • PVS • http://pvs.csl.sri.com/

  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 Reprezentáció Program 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 • 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

More Related