59
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

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

  • 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

Page 1: 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

Tejfel Máté, [email protected]

ELTE Informatikai Kar Programozási Nyelvek és Fordítóprogramok Tanszék

2.604-es szoba

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

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

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

Programhelyesség

• Hogyan vizsgálható, ellenőrizhető?

- szimuláció, tesztelés

- modell ellenőrzés (model checking)

- helyességbizonyítás (verification)

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

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

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

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

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

Modell ellenőrzés

• nem használható minden esetben

• nem igényel magas fokú szakértelmet

• automatikus

• Pl.: NuSMV

http://nusmv.irst.itc.it/

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

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ó

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

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/

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

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.

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

Helyességbizonyítás

Program Reprezentáció

Tulajdonság

Axiómák

Levezetési szabályok

Bizonyítás

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

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ű)

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

Clean

• Egyszerű gyakorlati példák …

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

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 []= []

Page 14: Helyességbizonyító eszközök alkalmazása funkcionális programok eseté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

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

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

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

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

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

Tulajdonságok leírása

• negáció ~

• és /\

• vagy \/

• implikáció ->

• ekvivalencia <->

• univerzális kvantor [x::Típus]

• egzisztenciális kvantor {x::Típus}

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

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

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

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 []= []

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

Példa~(n = _|_) -> take n xs ++ drop n xs = xs

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

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

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

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

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

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

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

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

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

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

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

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)

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

Példa

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

Introduce n xs H1.

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

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

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

Példa

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

Rewrite -> All H1.

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

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

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

Példa

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

Apply H2.

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

Apply H2 to H1.

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

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

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

Példa

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

Cut H1.

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

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)

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

Példa

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

Assume x >= 0.

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

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

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

Példa

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

Reduce NF (take 1).

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

Induction

• strukturális indukció (univerzálisan kvantált válozóra)

• adatszerkezet alapján

• _|_ ág

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

Példa

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

Induction xs.

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

Definedness

• definiáltságot kezeli

• ha a rendszer képes kikövetkeztetni a definiáltságot (definiálatlanságot), akkor használható

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

„Definedness.”-el bizonyítható

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

Példa

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

A -al elkezdjük a bizonyítást

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

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

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

Tanácsadó rendszer

• automatikus bizonyításra is használható

• általában kevés sikerrel

• adott példa automatikusan is bizonyítható

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

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.

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

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

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

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

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

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

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

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

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

Funkcionális programok helyessége

• Elosztott funkcionális programok helyessége OTKA T037742 kutatási projekt

http://aszt.inf.elte.hu/~fun_ver