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

Slides:



Advertisements
Hasonló előadás
Deduktív adatbázisok.
Advertisements

T ESZTELÉS. C ÉLJA Minél több hibát találjunk meg! Ahhoz, hogy az összes hibát fölfedezzük, kézenfekvőnek tűnik a programot az összes lehetséges bemenő.
Diagnosztika szabályok felhasználásával, diagnosztikai következtetés Modell alapú diagnosztika diszkrét módszerekkel.
Az integrált áramkörök (IC-k) tervezése
Matematikai logika.
LFüggvények Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 20./0. lFüggvények deklarációja és prototípusa lA függvénydefiníció lHivatkozás.
Lambda kalkulus.
Determinisztikus programok. Szintaxis: X : Pvalt program változók E : Kifkifejezések B : Lkiflogikai kifejezések C : Utsutasítások.
Matematikai logika A diasorozat az Analízis 1. (Mozaik Kiadó 2005.) c. könyvhöz készült. Készítette: Dr. Ábrahám István.
1 Előhang Világunk dolgainak leírásához gyakran használunk kijelentő mondatokat. Pl. Minden anya szereti gyerekeit. Júlia anya és Júlia gyereke Máté. Következmény:
Készítette: Vadász Péter
Programozás alapjai A programozás azt a folyamatot jelenti, melynek során a feladatot a számítógép számára érthető formában írjuk le. C++, Delphi, Java,
1.) A programfejlesztés hagyományos életciklus modellje és adattípus.
Kocsisné Dr. Szilágyi Gyöngyi. Elérehet ő ség: aszt.inf.elte.hu/~szilagyi/ aszt.inf.elte.hu/~szilagyi Fogadó óra: hétf ő
Logika Érettségi követelmények:
Szintaktikai elemzés március 1.. Gépi tanulás Osztályozási feladat: Adott egyedek egy halmaza és azok osztályba tartozási függvénye (tanító halmaz),
MI 2003/5 - 1 Tudásábrázolás (tudásreprezentáció) (know- ledge representation). Mondat. Reprezentá- ciós nyelv. Tudás fogalma (filozófia, pszichológia,
Szillogisztikus következtetések (deduktív következtetések)
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
Bevezetés a digitális technikába
Bizonyítási stratégiák
Programozás módszertan
Szoftver bonyolultsági mértékek alkalmazási területei Király Roland 2011.
Logika 5. Logikai állítások Miskolci Egyetem Állam- és Jogtudományi Kar Jogelméleti és Jogszociológiai Tanszék március 10.
Bevezetés a matematikába I
Reprezentációs függvény. Adva egy adattípus absztrakt és konkrét specifikációja: d a = ( A, F, E a ); d c = ( C, G, E c ); A = {A 0,..., A n };C = {C 0,...,
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
Halmazelmélet és matematikai logika
Bevezetés a C++ programozási nyelvbe
Függvények III Logikai függvények. Hamis A HAMIS logikai értéket adja eredményül. HAMIS( ) A függvény alkalmazása helyett egyszerűen beírhatjuk a HAMIS.
PROLOG PROGRAMOZÁSI NYELV
ISMERETALAPÚ RENDSZEREK SZAKÉRTŐ RENDSZEREK
MYCIN szakértői rendszer. MYCIN modell szakértői rendszer vér fertőzéseinek, gyógykezeléseknek meghatározását támogató orvosi diagnosztikai rendszer célvezérelt,
Ismeretalapú rendszerek alaptechnikái I. Szabályalapú rendszerek.
Ismeretalapú rendszerek alaptechnikái I. Szabályalapú rendszerek.
4. Gyires Béla Informatikai Nap Debreceni Egyetem Informatikai Kar Új eredmények a Chomsky-féle (formális) nyelvtípusokkal kapcsolatban Dr. Nagy Benedek.
Gépi tanulás Tanuló ágens, döntési fák, általános logikai leirások tanulása.
Önálló labor munka Csillag Kristóf 2005/2006. őszi félév Téma: „Argument Mapping (és hasonló) technológiákon alapuló döntéstámogató rendszerek vizsgálata”
3.2. A program készítés folyamata Adatelemzés, adatszerkezetek felépítése Típus, változó, konstans fogalma, szerepe, deklarációja.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
VÉGES AUTOMATA ALAPÚ TERVEZÉSI MODELL
Érvelés, bizonyítás, következmény, helyesség
Henkin-Hintikka játék (részben ismétlés) Alapfelállás: -Két játékos van, Én és a Természet (TW képviseli). - A játék tárgya egy zárt mondat: P. - Választanom.
Logika szeminárium Előadó: Máté András docens Demonstrátorok:
(nyelv-családhoz képest!!!
Hibaterjedés-analízis
Koncepció: Specifikáció: e par exp i = eb imp bod ib Specifikáció elemzése: tulajdonságok felírása a koncepció alapján + tulajdonságok bizonyítása.
Podoski Péter és Zabb László. Bevezető Algoritmus-vizualizáció témakörében végeztünk kutatásokat és fejlesztéseket Felmértük a manapság ismert eszközök.
Funkciós blokkok A funkciós blokkok áttekintése Az alkalmazás előnyei.
Logika szeminárium Előadó: Máté András docens Demonstrátorok:
MI 2003/6 - 1 Elsőrendű predikátumkalkulus (elsőrendű logika) - alapvető különbség a kijelentéslogikához képest: alaphalmaz. Objektumok, relációk, tulajdonságok,
Henkin-Hintikka-játék szabályai, kvantoros formulákra, még egyszer: Aki ‘  xA(x)’ igazságára fogad, annak kell mutatnia egy objektumot, amire az ‘A(x)’
Deduktiv adatbázisok. Normál adatbázisok: adat elemi adat SQL OLAP adatbázisok: adat statisztikai adat OLAP-SQL … GROUP BY CUBE(m1,m2,..)
Adva S  parbegin S 1 ...  S n parend; Párhuzamos programszerkezet két vagy több olyan folyamatot tartalmaz, amelyek egymással közös változó segítségével.
Kiterjesztések szemantikája: Szemantikai tartomány : Adatoknak, vagy értékeknek egy nem üres halmazát szemantikai tartománynak nevezzük. Jelölése: D. Egy.
Félcsoport (semigroup) = ({s},{ *: s s  s [infix]}. semigroup is a type specification = sorts: s oprs: *: s s  s [infix] eqns: m 1, m 2, m 3  s (m 1.
Continuous delivery: cél a működő szoftver
Programozási nyelvek csoportosítása.
Analitikus fa készítése Ruzsa programmal
Kifejezések C#-ban.
Analitikus fák kondicionálissal
Logika szeminárium Barwise-Etchemendy: Language, Proof and Logic
Compiler illetve interpreter nyelvek
A CLIPS keretrendszer
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Bevezetés a matematikába I
ÍTÉLETKALKULUS (NULLADRENDŰ LOGIKA)
Absztrakt problémák Q  I  S, az absztrakt probléma kétváltozós reláció az esetek (I) és a megoldások (S) halmazán Példa: legrövidebb út Eset: gráf és.
Előadás másolata:

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.: 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 Isabelle/Hol PVS http://coq.inria.fr/ 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 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

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

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ó

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.

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ő

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

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

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

Funkcionális programok helyessége Elosztott funkcionális programok helyessége OTKA T037742 kutatási projekt http://aszt.inf.elte.hu/~fun_ver