alphabet is a type specification = sorts : alphabet oprs : a:  alphabet, . . . ,z:  alphabet

alphabet is a type specification = sorts : alphabet oprs : a:  alphabet, . . . ,z:  alphabet

Télécharger la présentation

alphabet is a type specification = sorts : alphabet oprs : a:  alphabet, . . . ,z:  alphabet

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

1. 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,bnat; add(a,b) = add(b,a) add(a,zerus) = a add(a, succ(b)) = succ(add(a,b)) end nat;

2. 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,s3string; concat(s,empty) = s concat(empty,s) = s ladd(x,s)= concat(make(x),s) radd(s,n)= concat(s,make(n)) end string;

3. 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,s3string; 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;

4. 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;

5. 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);

6. 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+;

7. Adott  = (S,OP) szignatúrához tartozó  - algebra (totális algebra). A = (SA,OPA); SA= (As )sS , As, A -algebra bázishalmazai - Minden NKs : N :  s , sS konstans szimbólumra A(N :  s) : NA :  As; - Minden N: s1...sn  s  OP; s1...sn S+; sS 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});

8. 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!

9. Term: Term szintaktikai definíciója. Adott  = (S,OP); Xs a szignatúrához tartozó változó. T(X) = (T(X),s)sS definíciója: Bázis termek: - Xs  T(X),s; - n :  s  OP; akkor n  T(X),s ; Összetett termek: n : s1...sk  s, k1, n  OP, ti  T(X),s , 1ik; n(t1,...,tk) T(X),s ; T(X) más jelölései: TOP(X) ; T(X) ; T(X) ; T ; TOP;

10. 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, sS 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;

11. Példa. nat0is a type specification = sorts: nat0 oprs: 0:  nat0 succ: nat0 nat0 prec: nat0 nat0 eqns: nnat0; 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 aalph : left(t1,a)  Tbin; right(a,t1)  Tbin; both(t1,a,t2)  Tbin;

12. A term kiértékelése. Adott  = (S,OP); és TOP; Legyen A egy -algebra. • eval: TopA kiértékelés rekurzív definíciója: • eval(N) = NA; minden NK 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: XA, ahol ass(x)  As, xXs, sS; • 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;

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

14. Egyenletek. Adott  = (S,OP); a szignatúrához tartozó X változókkal. Egyenlet: Az e = (X,L,R) hármast, L,RTOP, s(X), sS 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)}; xX, L=R; X változók halmaza, L, R, termek a X-ből vett változókkal.

15. 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

16. 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: A0A1...AnA0; • pl. insert: setelem  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);

17. 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 = . . .

18. -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 sS konstans szimbólumra: hs(NA) = NB ; • minden N: s1 ... sn s  OP • és minden i = 1, ...,n -re és aiAsi esetén: hs( NA (a1, . . . , an)) = NB ( hs1(a1) , . . . , hsn(an) ). (homomorfikus feltétel).

19. Az f: AB homomorfizmust izomorfizmusnak nevezzük, ha minden fs: AB függvény minden sS-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.

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