Absztrakt adattípus -algebrai specifikáció -Lists (paraméteres) module Lists imports Booleans, Naturals parameters Items sorts Item operations erroritem : Item eq? : Item, Item Boolean variables a, b, c : Item equations eq? (a,a) = true when a erroritem eq? (a,b) = eq? (b,a) implies (and (eq? (a,b), eq? (b,c)), eq? (a,c)) = true when a erroritem, b erroritem, c erroritem end Items exports sorts List operations null : List errorlist: List cons( _, _ ) : Item, List List concat( _, _ ) : List, List List equal? ( _, _ ) : List, List Boolean length( _ ) : List Natural mklist( _ ) : Item List end exports variables i, i1, i2 : Item s, s1, s2 : List equations [S1] concat(null, s) = s [S2] concat(cons(i, s1), s2) = cons(i, concat(s1, s2)) [S3] equal? (null, null) = true [S4] equal? (null, cons (i, s)) = false when s errorlist, i erroritem [S5] equal? (cons (i, s), null) = false when s errorlist, i erroritem [S6] equal? (cons(i1, s1), cons(i2, s2)) = and (eq? (i1, i2), equal? (s1, s2)) [S7] length(null) = 0 [S8] length (cons (i, s)) = succ(length (s)) when i erroritem [S9] mklist(i) = cons (i, null) end Lists 1
module Lists imports Booleans, Naturals parameters Items sorts Item operations erroritem: Item eq? : Item, Item Boolean variables a, b, c : Item equations eq? (a,a) = true when a erroritem eq? (a,b) = eq? (b,a) implies (and (eq? (a,b), eq? (b,c)), eq? (a,c)) = true end Items exports sorts List operations null : List errorlist: List when a erroritem, b erroritem, c erroritem cons( _, _ ) : Item, List List a listába fűzhető elemek egyelőre ismeretlen halmazát Item-nekhívják, ennek lennie kell egy erroritemértékének és egy eq? egyenlőség műveletének az eq? egyenlőség művelet igazi egyenlőség az axiómák alapján 2
implies (and (eq? (a,b), eq? (b,c)), eq? (a,c)) = true end Items exports sorts List operations null : List errorlist: List when a erroritem, b erroritem, c erroritem cons( _, _ ) : Item, List List concat( _, _ ) : List, List List equal? ( _, _ ) : List, List Boolean length ( _ ) : List Natural mklist( _ ) : Item List end exports variables i, i1, i2 : Item s, s1, s2 : List equations [S1] concat(null, s) = s [S2] concat(cons(i, s1), s2) = cons(i, concat(s1, s2)) [S3] equal? (null, null) = true kívülről látható a most definiált List szortés annak összes művelete a List szortelemeit a null és a consműveletekkel lehet előállítani, az ezen műveletekkel előállított struktúrák alkotják a List szort értékeit a mklist kényelmi művelet, mert cons(item,null) művelettel is meg lehet oldani 3
end exports variables i, i1, i2 : Item s, s1, s2 : List equations [S1] concat(null, s) = s [S2] concat(cons(i, s1), s2) = cons(i, concat(s1, s2)) [S3] equal? (null, null) = true [S4] equal? (null, cons (i, s)) = false when s errorlist, i erroritem [S5] equal? (cons (i, s), null) = false when s errorlist, i erroritem [S6] equal? (cons(i1, s1), cons(i2, s2)) = [S7] length(null) = 0 and (eq? (i1, i2), equal? (s1, s2)) [S8] length (cons (i, s)) = succ(length (s)) when i erroritem [S9] mklist(i) = cons (i, null) end Lists cons műveletnek nincs axiómája, a cons művelettel előállított struktúrák a List szortelemei, ezért a cons (char-a, cons (char-b, nullstring)) reprezentálja az ab stringet rekurzív definíció 4
Absztrakt adattípus -algebrai specifikáció -Lists használata module Files imports Booleans, Naturals, instantiation of Lists bind Items using Natural for Item using errornatural for erroritem using eq? foreq? rename using File for List using emptyfile for null using mkfile for mklist using errorfile for errorlist exports sorts File operations empty? ( _ ) : File Boolean end exports variables f : File equations [F1] empty? (f) = equal? (f, emptyfile) end Files a Filesmodul a Lists felhasználásával modellezi a file inputoutput kezelést 5
module Files imports Booleans, Naturals, instantiation of Lists bind Items using Natural for Item using errornatural for erroritem usingeq? foreq? rename using File for List using emptyfile for null using mkfile for mklist using errorfile for errorlist exports sorts File operations empty? (_): File Boolean end exports variables f : File equations [F1] empty? (f) = equal? (f, emptyfile) end Files ez az a specifikáció morfizmus, ami a paraméterek specifikációját az export specifikációjára képezi le szortokés műveletek átnevezése, a többi művelet változatlan, ezért a File konstruktora a cons a Files exportálja az átnevezetteket és a Lists export szekcióját új exportált művelet bevezetése 6
Absztrakt adattípus -algebrai specifikáció -modulok most már tudjuk, hogy mi az algebrai specifikáció mi a modulokra bontott specifikáció, import, export, paraméterek, rejtett rész mi a paraméter felhasználása 7
Típusmodellek 6. Algebrai specifikáció jelentése 8
Algebrai specifikáció jelentése volt absztrakt adattípus, absztrakt algebrai specifikáció, modulokra bontás (paraméter, import, export, rejtett rész), példa modulok, paraméteres példa, C most jön absztrakt algebrai specifikáció jelentése (mi tartozik a specifikált adatok közé) specifikált adatok egyenlősége specifikáció teljessége és konzisztens volta C 9
Algebrai specifikáció jelentése megjegyzés: amikről most szó lesz, azt a könyvben a következő részeknél kell keresni: típusosztály specifikációjának elemzése, egyenlőség axióma, C 10
Algebrai specifikáció jelentése - termek a korábbi specifikációkban mondtuk, hogy a specifikált adattípus elemeit a műveletek ismétlésével nyert kifejezések (termek) reprezentálják a Naturalszort hordozó halmazának elemei például: 0, succ(0), succ(succ(0), succ(succ(succ(0))),... és errornatural ezek olyan kifejezések, amikben nincsenek változók (bázis termek, ground terms) 11
bázis termek a Σ= (S, OP) szignatúra s szortjához tartozó bázis termek halmaza legyen T Σ, aminek induktív definíciója: az s szort konstans műveletei az s szortbázis termei f:s 1,C,s n s OP esetén, ahol s 1,C,s n s S, ha t 1,C,t n a megfelelő s 1,C,s n szortokbázis termei, akkor f(t 1,C,t n ) az s szortbázis terme 12
bázis termek a korábbi Booleans modul Boolean szortjának bázis termei például a true és falsekonstansok, true, not(true), not(not(true)), not(not(not(true))),... false, not(false), not(not(false)), not(not(not(false))), C. végtelen sokan vannak a specifikáció egyenlőségei nélkül mindet különbözőnek tekintjük, ezért a specifikáció egyenlőségei nélkül nem tudjuk, hogy not(true) ugyanaz, mint false 13
bázis termek a korábbi Naturals modul Natural szortjának bázis termei például 0, succ(0), succ(succ(0)), succ(succ(succ(0))), C add(0,0), add(0,succ(0)), add(0,succ(succ((0))),... add(succ(0),0), add(succ(succ(0)),0), C. végtelen sokan vannak a specifikáció egyenlőségei nélkül nem tudjuk, hogy például add(succ(0),succ(0)) ugyanaz, mint succ(succ(0)) 14
termalgebra szignatúrához tartozik a szignatúra algebra: hordozó halmaz + műveletek értelmezése, ezért most a szignatúrához konstruálunk egy szignatúra algebrát a szignatúrához tartozó bázis termekből, amit term algebrának hívunk, jelölése szintén T Σ 15
termalgebra -hordozó halmaz a Σ= (S, OP) szignatúra s szortjához tartozó hordozó halmazt az (s) jelöli, ahol (s) induktív Σ Σ definíciója: az s szort c konstans műveletéhez a c konstans tartozik az (s) hordozó halmazban Σ f:s 1,C,s n s OP esetén, ahol s 1,C,s n s S, ha t 1 (s 1 ),C,t n (s n ), akkor f(t 1,C,t n ) az Σ Σ (s) hordozó halmaz eleme Σ 16
termalgebra -művelet a Σ= (S, OP) szignatúra OP művelet halmazához tartozó művelet halmazt az OP jelöli, ahol OP elemei: Σ f:s 1,C,s n s OP esetén, ahol s 1,C,s n s Sés t 1 (s 1 ),C,t n (s n ) Σ az f művelethez tartozó f művelet Σ értelmezése f (t 1,C,t n )= f(t 1,C,t n ) Σ, Σ Σ 17
termalgebra -szimbolikus vagyis a T Σ term algebra hordozó halmazainak elemei a konstans és művelet szimbólumokból, valamint a (, a ) és a, karakterekből összeállított stringek, amik bázis termek a T Σ term algebra műveletei ezen bázis termeket reprezentáló stringekközötti leképzések az eredeti műveleteknek megfelelően 18
termalgebra -szimbolikus a Booleans modul Boolean szortjához a term algebrában (Boolean) hordozó halmaz Σ tartozik, amiben például a következő stringek vannak: true, not(true), not(not(true)),... false, not(false), not(not(false)),... a not művelethez tartozó not művelet a Σ true stringeta not(true) stringreképezi le, amit a not(not(true)) stringreképezi le, stb. 19
termalgebra ez a T Σ term algebra nyilvánvalóan nem a Booleanszándékolt jelentését tükrözi, mert a hordozó halmaz végtelen és a benne lévő stringekre false not(true) ez azért van, mert a term algebrában még nem vettük figyelembe a specifikáció egyenleteit, és hogy azok milyen megkötéseket tesznek az eredeti szignatúra algebrára 20
termalgebra -kiértékelő függv. a Σ= (S, OP) szignatúrához tartozó A szignatúra algebra és T Σ term algebra eval A :T Σ A kiértékelő függvénye a bázis termekhez A beli értékeket rendel a következők szerint: eval A ( c )=c A a konstansokra, és eval A ( f(t 1,C,t n ) )=f A (eval A (t 1 ),C,eval A (t n )), ahol f:s 1,C,s n s OP művelet és t i s i 21
termalgebra -kongruencia a kiértékelő függvény megmutatta, hogy egy bázis term milyen A beli értékhez tartozik az azonos A beliértékhez tartozó termek helyettesíthetők egymással, egyenértékűek, azaz kongruensek a kongruencia relációt a specifikáció egyenletei határozzák meg a következőekben definiáltak szerint 22
termalgebra -kongruencia adott a (Σ,E) specifikáció, az E egyenletek által a T Σ term algebrán meghatározott E kongruencia reláció a legszűkebb olyan reláció, ami teljesíti a következőket: változó helyettesítés: ha az E specifikáció lhs=rhs egyenlete tartalmazza a v 1,C,v n változókat és t 1,C,t n T Σ ugyanazon indexű változók szortjába tartozó bázis termek, akkor lhs[t 1 v 1,C,t n v n ] E rhs[t 1 v 1,C,t n v n ] ahol t i v i jelöli, hogy v i helyére t i termet helyettesítjük (ha feltételes, akkor a feltételekben is) reflexivitás: t T Σ bázis termekre: t E t 23
változó helyettesítés: ha az E specifikáció lhs=rhs egyenlete tartalmazza a v 1,C,v n változókat és t 1,C,t n T Σ ugyanazon szortokbatartozó bázis termek, akkor lhs[t 1 v 1,C,t n v n ] E rhs[t 1 v 1,C,t n v n ] ahol t i v i jelöli, hogy v i helyére t i termet helyettesítjük (ha feltételes, akkor a feltételekben is) reflexivitás: t T Σ bázis termekre: t E t szimmetria: t 1,t 2 T Σ bázis termekre: t 1 E t 2 t 2 E t 1 tranzitivitás: t 1,t 2,t 3 T Σ bázis termekre: (t 1 E t 2 t 2 E t 3 ) t 1 E t 3 helyettesíthetőség: ha t 1 E t 1,C,t n E t n és f:s 1,C,s n s OP művelet, akkor f(t 1,C,t n ) E f(t 1,C,t n ) 24
termalgebra -kongruencia a kongruencia osztályok generálásának módja: változó nélküli egyenletekből, majd deriválás a reflexív, szimmetrikus és tranzitív tulajdonságokkal, majd kihasználva, hogy a művelet szimbólumok megőrzik a kongruenciát, ha bázis termekké alakítjuk őket 25
termalgebra -kongruencia nézzük például a Booleansmodul következő egyszerűsített specifikációját: module Bools exports sorts Boolean operations true: Boolean false: Boolean not( _): Boolean Boolean end exports equations [B1] not(true) = false [B2] not(false) = true end Bools 26
termalgebra -kongruencia az egyszerűsített Bools modul Boolean szortjábana következő bázis termek kongruensek a true és false értékekkel: true E not(false) E not(not(true)) E not(not(not(false))) E... false E not(true) E not(not(false)) E not(not(not(true))) E... ezeket könnyű belátni, mert az egyenletek nem tartalmaznak változókat 27
termalgebra -kongruencia a korábbi Naturals modul Natural szortjában a bázis termek kongruensek az errornaturals, 0, succ(0), succ(succ(0)) stb. értékekkel például a következő négy bázis term kongruens: succ(succ(0)) E add(0,succ(succ(0)) E add(succ(succ(0)),0) E add(succ(0),succ(0)) ezeket bizonyítani kell, mert az egyenletek változókat tartalmaznak 28
termalgebra -kongruencia bebizonyítjuk, hogy add(succ(0),succ(0)) E succ(succ(0)) add(succ(0),succ(0)) E succ(add(succ(0),0)) mert [N4] add (m, succ (n)) = succ (add (m, n))szabályban [m succ(0),n 0] változó helyettesítést alkalmazunk succ(add(succ(0),0)) E succ(succ(0)) mert [N3] add (m, 0) = mszabályban [m succ(0)] változó helyettesítést alkalmazunk 29
specifikáció modellje a (Σ,E) specifikációnak az A szignatúra algebra a modellje, ha t 1,t 2 T Σ bázis termekre t 1 E t 2 eval A (t 1 ) = eval A (t 2 ) vagyis az egy kongruencia osztályba tartozó bázis termek az A szignatúra algebrának ugyanarra az elemére értékelődnek ki 30
specifikáció modellje nézzük például a Booleansmodul következő egyszerűsített specifikációját: module Bools exports sorts Boolean operations true: Boolean false: Boolean not( _): Boolean Boolean end exports equations [B1] not(true) = false [B2] not(false) = true end Bools ezt a Bools-tmodellezi a következő A szignatúra algebra: A = <{off, on}, {off, on, switch}>szignatúra switch(off) = on és switch(on) = off egyenletek 31
specifikáció modellje a modell megfeleltetései: a Boolean = {false, true} szortnak megfelelő hordozó halmaz a Boolean A = {off, on} S műveletei true : Boolean false : Boolean not : Boolean Boolean A műveletei true A = on : Boolean A false A = off : Boolean A not A = switch : Boolean A Boolean A 32
specifikáció modellje egy esetben bizonyítjuk, hogy ez a megfeleltetés teljesíti a modell definícióját: t 1,t 2 T Σ amire t 1 E t 2 : Bools esetén not(true) E false be kell látni, hogy eval A (t 1 ) = eval A (t 2 ): eval A (not(true)) = not A (eval A (true)) = not A (true A ) = switch(on) = off eval A (false) = off tehát eval A (not(true)) = eval A (false) eval definíciójából: eval A ( f(t 1,C,t n ) )= f A (eval A (t 1 ),C,eval A (t n )) eval definíciójából konstans behelyetesítés 33
specifikáció modellje egy specifikációnak sok modellje lehet a bázis termekből álló T Σ initial(kezdeti) algebra egy modell, ami biztosan létezik a kezdeti algebrából megkonstruálható a faktor algebra, ami a modellek azonosságra lezárt osztálya (lásd következő lapon) a specifikáció jelentésének a faktor algebrát tekintjük 34
specifikáció modellje Megjegyzés: ahogy az absztrakt algebra a szignatúra algebrák izomorfizmusra zárt osztálya, ugyanúgy a specifikáció jelentése a modellek azonosságra zárt osztálya 35
faktor algebra (Q, quotient) legyen (Σ,E) specifikáció, Σ = (S, OP), a t T Σ bázis term kongruencia osztálya [t]={t t E t }, vagyis [t]=[t ] t E t, ekkor a faktor algebra így áll elő: a faktor algebra szortjaia bázis termek kongruencia osztályai: {(s) s S} a c konstans művelet megfelelője a faktor algebrában a [c] kongruencia osztály a faktor algebra f Q műveleteinek előállítása: f Q ([t 1 ],C,[t n ])=[f(t 1,C,t n )], ahol f:s 1,C,s n s OP és t i bázis termaz s i hordozó halmazból Σ 36
faktor algebra a faktor algebra f Q műveletei jól definiáltak, mert a kongruencia definíciójában szereplő helyettesítési tulajdonság miatt ha t 1 E t 1,C,t n E t n, akkor f Q (t 1,C,t n ) E f Q (t 1,C,t n ) vagyis a kongruens termek ugyanolyan paraméterként viselkednek és az f Q művelet ugyanarra a kongruens osztályra képezi le őket 37
faktor algebra -példa nézzük újra a Booleansmodul egyszerűsített specifikációját: module Bools exports sorts Boolean operations true: Boolean false: Boolean not( _): Boolean Boolean end exports equations [B1] not(true) = false [B2] not(false) = true end Bools 38
faktor algebra -példa két kongruencia osztály van [true], aminek elemei true, not(false), not(not(true)), not(not(not(false))),... [false], aminek elemei false, not(true), not(not(false)), not(not(not(true))),... a not Q művelet a következő: not Q ([false]) = [not(false)] = [true] és not Q ([true]) = [not(true)] = [false] 39