200 likes | 348 Views
alphabet is a type specification = sorts : alphabet oprs : a: alphabet, . . . ,z: alphabet end alphabet;. nat is a type specification = sorts : nat oprs : zerus: nat succ: nat nat add: nat nat nat eqns : a,bnat; add(a,b) = add(b,a) add(a,zerus) = a
E N D
alphabet is a type specification = sorts: alphabet oprs: a: alphabet, . . . ,z: alphabet end alphabet; nat is a type specification = sorts: nat oprs: zerus: nat succ: nat nat add: nat nat nat eqns: a,bnat; add(a,b) = add(b,a) add(a,zerus) = a add(a, succ(b)) = succ(add(a,b)) end nat;
string(alphabet) is a type specification = alphabet + sorts: string oprs: empty: string make: alphabet string concat: string string string ladd: alphabet string string radd: string alphabet string eqns: x alphabet, s,s1,s2,s3string; concat(s,empty) = s concat(empty,s) = s ladd(x,s)= concat(make(x),s) radd(s,n)= concat(s,make(n)) end string;
string(alphabet, n: nat) is a type specification = parameters = alphabet + nat + exports = type sort: string oprs: empty: string make: alphabet string concat: string string string ladd: alphabet string string radd: string alphabet string size: string nat eqns: d alphabet, s,s1,s2,s3string; concat(s,empty) = s concat(empty,s) = s ladd(n,s)= concat(make(n),s) radd(s,n)= concat(s,make(n)) size(empty) = zerus size(add(n,s)) = succ(size(s)) size(add(n,s)) > n ladd(n,s) = " undefined " end string;
Paraméterek szerepei az algebrák specifikációjában: Objektum felépítése; Korlátozás; Objektum kiértékelése; Kiértékelés. Például: alphabet = bool + sorts: alphabet opns : : alphabet alphabet bool [infix] eq : alphabet alphabet bool eqns: x,y,z alphabet ... end alphabet;
Adattípus univerzális algebrai modellje. Interface obj adattípus univerzális algebra absztrakt adattípus algebrák izomorfizmusra zárt osztályának manifesztuma adattípus konkretizálása algebrák közötti homomorfizmus Interface = formális rész + tartalmi rész; da = ( , E);
Szignatúra: = (S, OP), S: szortok halmaza; OP: konstans és operációs szimbólumok halmaza; OP = Ks OPw,s ; s S; Ks konstans szimbólumok halmaza; OPw,s operációs szimbólumok halmaza; w argument szort, w S+; s eredmény szort s S; Ks ; OPw,s páronként diszjunktak. K = Ks ; s S N Ks ; N: S; OP+ = OPw,s ; w S+ , s S; N OPw,s, w = s1...sn; N = s1...sn s; OP = = K OP+;
Adott = (S,OP) szignatúrához tartozó - algebra (totális algebra). A = (SA,OPA); SA= (As )sS , As, A -algebra bázishalmazai - Minden NKs : N : s , sS konstans szimbólumra A(N : s) : NA : As; - Minden N: s1...sn s OP; s1...sn S+; sS műveleti szimbólumra: A(NA: s1...sn s): NA: As1,...,Asn As; Ha = (S1,...,Sn , N1,...,Nm); akkor A = (As1,...,Asn, NA1,...,NAm); Példa. Szignatúra: = ({S1, S2}, {N1: S1 S2, N2: S2 S1 S2, N3: S1 S2 S2, N4: S2 S1 S2 S2}); -algebra: A = ({alphabet, bintree}; {leaf : alphabet bintree, left : bintree alphabet bintree, right : alphabet bintree bintree, both : bintree alphabet bintree bintree});
Algebrai felírás formája: Példa: bintree-base = sorts: alphabet bintree oprs: leaf: alphabet bintree left: bintree alphabet bintree right: alphabet bintree bintree both: bintree alphabet bintree bintree end bintree base; Zilles, S. N. MIT Report 1974. Szemantika felírása: kifejezéseket kell felírni!
Term: Term szintaktikai definíciója. Adott = (S,OP); Xs a szignatúrához tartozó változó. T(X) = (T(X),s)sS definíciója: Bázis termek: - Xs T(X),s; - n : s OP; akkor n T(X),s ; Összetett termek: n : s1...sk s, k1, n OP, ti T(X),s , 1ik; n(t1,...,tk) T(X),s ; T(X) más jelölései: TOP(X) ; T(X) ; T(X) ; T ; TOP;
Változó: Adott SIG = (S,OP), Az s szorthoz tartozó változók halmaza: Xs, s S. A SIG szignatúrához tartozó változók halmaza: X = Xs, sS Deklaráció: x, y Xs; Jelölésünk: eqns: x, y s; Példa: = (S,OP); S= {nat, bool}; Deklaráció: n, m Xnat ; a, b, c Xbool Jelölés: eqns: n,m nat; a,b,c bool;
Példa. nat0is a type specification = sorts: nat0 oprs: 0: nat0 succ: nat0 nat0 prec: nat0 nat0 eqns: nnat0; prec(succ(0)) = "undefined" prec(succ(n)) = n end nat0; 0 Tnat0 ; n Tnat0 ; succ(k) Tnat0 ; k = 0,1,2,... prec(k) Tnat0 ; k = 0,1,2,... Példa: bintree. Talph = {k1, . . . ,kn}; Minden a Talph : leaf(a) Tbin; Ha t1,t2 Tbin; akkor minden aalph : left(t1,a) Tbin; right(a,t1) Tbin; both(t1,a,t2) Tbin;
A term kiértékelése. Adott = (S,OP); és TOP; Legyen A egy -algebra. • eval: TopA kiértékelés rekurzív definíciója: • eval(N) = NA; minden NK esetén; • eval(N(t1,...,tn)) = NA(eval(t1),...,eval(tn)), minden N(t1,...,tn)Top • esetén. Kiterjesztett értékadás: Adott = (S,OP); a szignatúrához tartozó X változókkal, Top ; Legyen A egy -algebra. Adott ass: XA, ahol ass(x) As, xXs, sS; • ass: Top(x) A; kiterjesztett értékadás definíciója: • ass(x) = ass(x), minden x X változóra; • ass(N)= NA , minden N K konstans szimbólumra; • ass(N(t1,...,tn)) = NA(ass(t1),...,ass(tn)), minden N(t1,...,tn) Top(X) • termre;
Példa: 1.) Adva nat1 = nat0 + oprs: add: nat nat nat Kiértékelés a IN természetes számok körében: eval(add(succ(0),succ(0))) = eval(succ(0)) + eval(succ(0)) = (eval(0) + 1) + (eval(0) +1) = (0+1) + (0+1) = 1+ 1 = 2. Példa: Adva X={n,m} ass(n) = 1; ass(m) = 5. ass (add(succ(n)), m)) = ? ass (add(succ(n)), m)) = ass (succ(n)) + ass (m) = (ass(n) + 1 ) + ass(m)) = (1 + 1) + 5 = 7.
Egyenletek. Adott = (S,OP); a szignatúrához tartozó X változókkal. Egyenlet: Az e = (X,L,R) hármast, L,RTOP, s(X), sS mellett egyenletnek nevezzük. Helyes egyenlet. Az e = (X,L,R) egyenlet helyes a A -algebrában, ha minden ass : X A esetén: ass(L) = ass(R) Specifikáció. SPEC = (S,OP,E); = (S, OP); E = {e(x,L,R)}; xX, L=R; X változók halmaza, L, R, termek a X-ből vett változókkal.
típus neve( paraméterek listája ) is a type specification = parameters = < átvett aktuális típusnév1 > + . . . + < átvett aktuális típusnévk> + sorts: < formális paraméterek nevei >; oprs: < műveletek formái >; eqns: < műveletek jelentésének leírása > export = type sort: < típushalmaz neve >; oprs: < műveletek formái >; eqns: < műveletek jelentésének leírása >; ... end típus neve; műveletek jelentésének leírása = deklaráció + szemantikát leíró egyenletek
Szemantikát leíró egyenletek (axiómák): L = R ; L: baloldali term; R: jobboldali term. • OP= {fc1,...,fck, fs1,...,fs/} ; • fc1,...,fck : konstrukciós műveletek; • Pl. halmaz: empty, insert; • f0: A0; pl. empty: set; fc: A0A1...AnA0; • pl. insert: setelem set; • fs1,...,fs/ : nem konstrukciós műveletek; • pl. has:set elem bool; Axióma: fs(fc(a)) = h(a); Pl. has(insert(s,e),e) = "true"; has(insert(s,e1),e2) = if e1= e2then "true" else has(s,e2) fi; (a) fs(fc(a)) = h(a);
Korlátozás: (A,F,E); A = A0,A1,...,An); A0 = {a | l(a)}; Attribútum függvény: attr(a), Pl. size(s); length(s); l(a) : 0 attr(a) n; n 0; A0 elemei: a1= f0, a2= fc(a1), a3= fc(a2), ... Korlátozás axiómája, az értelmezési tartomány meghatározása: ai A0 (0 attr(ai ) n); ~(ai A0) attr(ai ) n; attr(fc(a)) n fc(a) = "undefined" ; Pl.: size(insert(s,e)) n insert(s,e) = "undefined" ; Korlátozás formális paraméterének deklarációja: típus neve( par list, korl. dekl. ) is a type specification = korl. dekl. változó : változó típusának neve Pl. set( elem, n:nat ) is a type specification = . . .
-algebrák közötti homomorfizmus. Adva = ( S, OP ), A = ( SA, OPA ) és B = ( SB, OPB ). A h : A B homomorfizmus egy függvénycsalád h = ( hs )s S, • Itt: hs : SA SB, • úgy, hogy: • minden N: s OP és sS konstans szimbólumra: hs(NA) = NB ; • minden N: s1 ... sn s OP • és minden i = 1, ...,n -re és aiAsi esetén: hs( NA (a1, . . . , an)) = NB ( hs1(a1) , . . . , hsn(an) ). (homomorfikus feltétel).
Az f: AB homomorfizmust izomorfizmusnak nevezzük, ha minden fs: AB függvény minden sS-re bijektív. Jelölés: f: A B. Az A és B -algebrákat izomorfikusnak nevezzük, ha létezik f: A B, vagy g: B A izomorfizmus: Jelölés: A B. • Megjegyzések: • Homomorfizmusok kompozíciója szintén homomorfizmus. • Ha hs izomorfizmus, akkor hs-1 is az.
Példa izomorfizmusra. =(S,OP); OP = { k1: S, k2: S, N1: S S; N2: S S S }) A = (bool, {T: bool, F: bool, ~_ : bool bool, : bool bool bool [infix]}); B = (bit, {1: bit, 0: bit, ch : bit bit, : bit bit bit [infix]}); Egy adott szignatúrához tartozó absztrakt adattípus a -algebrák egy olyan osztálya, amely az izomorfizmusra zárt: azaz C Alg ( ); A C; A B B C.