Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaLilla Királyné Megváltozta több, mint 10 éve
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 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
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 http://coq.inria.fr/
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 Nincs szabad változó (univerzális kvantálás automatikus)
~(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 cél 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
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é. A kód felhasználója csak ellenőrzés után hajtja végre a kódot. A hitelesítő leegyszerűsíti a felhasználó munkáját.
55
Hitelesített kódok könyvtára
CPPCC architektúra Mobil kód előállítója Helyességbizonyító Hálózat Forráskód Kód Típuskód Tulajdonságok Bizonyítás Hitelesített kódok könyvtára Kód Típuskód Tulajdonságok Zárjegy Hitelesítő Ellenőrző Mobil kód felhasználója Engedélyező
56
Kód előállító / küldő komponens
Függvénykifejezés Típusleírás Tulajdonságok Fordítóprogram Helyességbizonyító Típus- kód Absztrakt gépi kód Kódolt tulajdonságok Forráskód Bizonyítás
57
Hitelesítő komponens Típus- kód Absztrakt gépi kód Kódolt
tulajdonságok Forráskód Bizonyítás Fordításellenőrző Helyességellenőrző Hitelesítő Típus- kód Absztrakt gépi kód Kódolt tulajdonságok Zárjegy
58
Fogadó/ engedélyező komponens
Típus- kód Absztrakt gépi kód Kódolt tulajdonságok Zárjegy Felhasználó program Zárjegyvizsgáló Dinamikus összeszerkesztő Követel- mények Engedélyező Típusegyeztető Típus- minták Alkalmazás
59
Funkcionális programok helyessége
Elosztott funkcionális programok helyessége OTKA T037742 kutatási projekt
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.