Upload
len
View
33
Download
0
Embed Size (px)
DESCRIPTION
Helyességbizonyító eszközök alkalmazása funkcionális programok esetén. Te j fel Máté, [email protected] 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). - PowerPoint PPT Presentation
Citation preview
Helyességbizonyító eszközök alkalmazása funkcionális
programok esetén
Tejfel Máté, [email protected]
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
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
• 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)
Példa
Introduce n xs H1.
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 H1.
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 H2.
Apply H2 to H1.
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 H1.
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ó
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.
CPPCC architektúra
Mobil kód előállítója
Mobil kód felhasználója
Helyességbizonyító
Engedélyező
KódTípuskód
TulajdonságokZárjegy
ForráskódKód
TípuskódTulajdonságok
Bizonyítás
Hálózat
Hitelesítő Ellenőrző
Hitelesített kódok könyvtára
Kód előállító / küldő komponens
Függvénykifejezés Típusleírás Tulajdonságok
Fordítóprogram Helyességbizonyító
BizonyításKódolt tulajdonságok
Absztrakt gépi kód
Típus-kód
Forráskód
Hitelesítő komponens
Fordításellenőrző Helyességellenőrző
ZárjegyKódolt tulajdonságok
Absztrakt gépi kód
Típus-kód
Hitelesítő
BizonyításKódolt tulajdonságok
Absztrakt gépi kód
Típus-kód
Forráskód
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
Funkcionális programok helyessége
• Elosztott funkcionális programok helyessége OTKA T037742 kutatási projekt
http://aszt.inf.elte.hu/~fun_ver