590 likes | 721 Views
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).
E N D
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
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
Programhelyesség • Hogyan vizsgálható, ellenőrizhető? • - szimuláció, tesztelés • - modell ellenőrzés (model checking) • - helyességbizonyítás (verification)
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
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
Modell ellenőrzés • nem használható minden esetben • nem igényel magas fokú szakértelmet • automatikus • Pl.: NuSMV • http://nusmv.irst.itc.it/
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ó
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/
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.
Helyességbizonyítás Reprezentáció Program Tulajdonság Axiómák Levezetési szabályok Bizonyítás
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ű)
Clean • Egyszerű gyakorlati példák …
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 [] = []
Sparkle • „tanácsadó” mechanizmus • 42 levezetési szabály (Clean specifikus pl. redukció, indukció) • COQ bizonyító rendszer alapján • jól kezelhető GUI
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
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
Tulajdonságok leírása • negáció ~ • és /\ • vagy \/ • implikáció -> • ekvivalencia <-> • univerzális kvantor [x::Típus] • egzisztenciális kvantor {x::Típus}
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
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 [] = []
Példa ~(n = _|_) -> take n xs ++ drop n xs = xs
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
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
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
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
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
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)
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
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
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
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)
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
Induction • strukturális indukció (univerzálisan kvantált válozóra) • adatszerkezet alapján • _|_ ág
Definedness • definiáltságot kezeli • ha a rendszer képes kikövetkeztetni a definiáltságot (definiálatlanságot), akkor használható