Helyessgbizonyt eszkzk alkalmazsa funkcionlis programok esetn Tejfel Mt
Helyességbizonyító eszközök alkalmazása funkcionális programok esetén Tejfel 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). • 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. : Nu. SMV 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 • Co. Q http: //coq. inria. fr/ • Isabelle/Hol http: //isabelle. in. tum. de/ http: //www 4. in. tum. de/~nipkow/LNCS 2283/ • 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 Program Reprezentáció 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 • Std. Env-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 • 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 (dedukciós tétel) • cél környezet • deklarált változók • hipotézisek
Példa
Introduce n xs H 1.
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
Példa
Rewrite -> All H 1.
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
Példa
Apply H 2.
Apply H 2 to H 1.
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
Példa
Cut H 1.
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)
Példa
Assume x >= 0.
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
Példa
Reduce NF (take 1).
Induction • strukturális indukció (univerzálisan kvantált válozóra) • adatszerkezet alapján • _|_ ág
Példa
Induction xs.
Definedness • definiáltságot kezeli • ha a rendszer képes kikövetkeztetni a definiáltságot (definiálatlanságot), akkor használható
„Definedness. ”-el bizonyítható
Példa
A -al elkezdjük a bizonyítást
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
Tanácsadó rendszer • automatikus bizonyításra is használható • általában kevés sikerrel • adott példa automatikusan is bizonyítható
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é. 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.
CPPCC architektúra Hálózat Mobil kód előállítója Helyességbizonyító Hitelesített kódok könyvtára Kód Típuskód Tulajdonságok Zárjegy Forráskód Kód Típuskód Tulajdonságok Bizonyítás Hitelesítő Engedélyező Mobil kód felhasználója Ellenőrző
Kód előállító / küldő komponens Függvénykifejezés Típusleírás Fordítóprogram Típuskód Absztrakt gépi kód Forráskód Tulajdonságok Helyességbizonyító Kódolt tulajdonságok Bizonyítás
Hitelesítő komponens Típuskód Absztrakt gépi kód Forráskód Kódolt tulajdonságok Bizonyítás Fordításellenőrző Helyességellenőrző Hitelesítő Típuskód Absztrakt gépi kód Kódolt tulajdonságok Zárjegy
Fogadó/ engedélyező komponens Típuskód Absztrakt gépi kód Felhasználó program Követelmények Zárjegy Kódolt tulajdonságok Zárjegyvizsgáló Dinamikus összeszerkesztő Engedélyező Típusegyeztető Típusminták Alkalmazás
Funkcionális programok helyessége • Elosztott funkcionális programok helyessége OTKA T 037742 kutatási projekt http: //aszt. inf. elte. hu/~fun_ver
- Slides: 59