1 / 17

Reprezentációs függvény.

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 , ... , C m }; F = {f 0 : A 0 , ... , f i : A j ...A k  A / ,... };

jemima
Télécharger la présentation

Reprezentációs függvény.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Reprezentációs függvény. Adva egy adattípus absztrakt és konkrét specifikációja: da = ( A, F, Ea ); dc = ( C, G, Ec ); A = {A0, ..., An }; C = {C0, ... , Cm }; F = {f0:A0, ... , fi: Aj...Ak  A/,... }; G = {g0:  C0, ... , gi: Cj... Ck  C/,... }; Az absztrakt és konkrét objektumok az egymáshoz való viszonya:  : C  A  = (0 , ... ,n), ahol 0: C0  A0; 1: C1 A1; . . .; n: Cn An; Definíció. A C objektumhalmazt az A objektumhalmaz egy reprezentánsának nevezzük az adott  mellett, ha minden aA objektumnak létezik legalább egy cC reprezentánsa, azaz a = (c).

  2. Tétel (reprezentáció tétele). Adva da absztrakt és dc konkrét typusspecifikációk azonos szingatúrával.  : C A morfizmus. Fc  F a konstrukciós műveletek halmaza. Feltevés: fcFc konstrukciós műveletre fennáll aA  fc(a)A  cC  gc(c)C  a = (c), esetén: Állítás. Ha (cCfcFc)(fc((c)) = (gc(c))), akkor C objektumhalmaz az A egy reprezentációja. Bizonyítás. Strukturális indukcióval: Alapeset : a = f0. f0 A0, g0 C0, feltevésünk szerint f0 = (g0). (Tehát a = f0 esetén létezik olyan c  C0 , hogy a = (c)). Indukció: a' = fc(a), ahol feltesszük, hogy a = (c) és c  C0. Tehát a' = fc((c)) és művelettartásra vonatkozó feltevésünk alapján: a'= (gc(c)), és c' = gc(c) választás mellett a' = (c') és c' C0.

  3. A reprezentációs függvény implicit definíciója: f0 = (g0); (fcFc)( fc( (c)) =  (gc(c))); A reprezentációs függvény rekurzív (explicit) definíciója: Tegyük fel, hogy c = gc(gs( c)). Ennek alapján a reprezentációs függvény rekurzív definíciója: (c) = if c = g0then f0else fc(( gs(c) )). Jelölés az osztály morfizmus diagramjában. body = oprs: rep : C  A eqns: c C; f0 : g0 fc(c): gc(c)

  4. A vermet egy vektorban tároljuk és egy mutató a veremben lévő elemek számát mutatja. . . . body = oprs: rep: vector nat  stack eqns: vvector, mnat, eelem; create = (nil,0); push(v,m,e) = (put(v,succ(m),e),succ(m)); end stack; (createc, pushc(v,u,m)) Explicit definíció: (v,m)= if m = 0 then (nil,0) else (insert((v,prec(m)),access(v,m)),m)

  5. Néhány gyakorló példa származtatásra. or: bool bool  bool; b1, b2bool; Axióma: b1 or b2 = ~(~b1  ~b2); Tétel: b1 or T = T; Bizonyítás: (b1 or b2 = ~(~b1  ~ b2))  (b1 or T = ~(~b1  ~T))  (b1 or T = ~(~b1 F))  (b1 or T = ~(F))  (b1 or T = T ). b2T ~b1 F  F ~ F  T

  6. Tétel: (e  s \{a}) = if a=e then "false" else e  s fi; Egyenlőség axióma: b1= b2  (b1 = "true" b2 = "true")  (b1 = "false" b2 = "false") Axióma: (e  s {a}) = if a=e then "true" else e  s fi; Bizonyítás. Alapeset. s = { }, bal oldal: e  (s\{ }) = e  s jobb oldal: e  s  ~ (e  { }) = e  s Indukció. s = s'{a} bal oldal: b(s\ (s'{a})) = b ((s\s')\ {a}) = if a=b then "false" else b (s\s') fi; jobb oldal: bs  ~b(s'{a}) = if a = b then bs~"true" else bs ~bs' fi = if a =b then "false" else b (s\s') fi;

  7. Példa. Bizonyítsuk be: add(k, add(n,m)) = add(add(k,n),m) tételt. alap eset : k = zerus ; add(k, add(n,m)) = add(add(k,n),m)  (add(zerus, add(n,m)) = add(add(zerus,n),m)  (add(n,m)) = add(add(zerus,n),m)  add(n,m) = add(n,m)  T. k  zerus add(zerus, add(n,m))  add(n,m) add(zerus,n)  n

  8. Indukciós lépés: k= succ(k'); k'-re igaz. add(k, add(n,m)) = add(add(k,n),m)  add(succ(k'), add(n,m)) = add(add(succ(k'),n),m)  succ(add(k', add(n,m)) = add(succ(add(k',n)),m)  succ(add(k', add(n,m)) = succ(add(add(k',n),m))  succ(add(add(k',n),m)) = succ(add(add(k',n),m))  T k  succ(k') add(succ(a), b)  succ(add(a, b)) add(succ(a), b)  succ(add(a, b)) add(k',add(n,m))  add(add(k',n),m)

  9. Kettős specifikáció: e par exp i = eb imp bod ib absztrakt specifikáció konkrét specifikáció

  10. Reprezentációs függvény. Adva egy adattípus absztrakt és konkrét specifikációja: da = ( A, F, Ea ); dc = ( C, G, Ec ); A = {A0, ..., An }; C = {C0, ... , Cm }; F = {f0:A0, ... , fi: Aj...Ak  A/,... }; G = {g0:  C0, ... , gi: Cj... Ck  C/,... }; Az absztrakt és konkrét objektumok az egymáshoz való viszonya:  : C  A  = (0 , ... ,n), ahol 0: C0  A0; 1: C1 A1; . . .; n: Cn An; Definíció. A C objektumhalmazt az A objektumhalmaz egy reprezentánsának nevezzük az adott  mellett, ha minden aA objektumnak létezik legalább egy cC reprezentánsa, azaz a = (c).

  11. Tétel. Adva da absztrakt és dc konkrét típusspecifikációk azonos szingatúrával.  : C A morfizmus. Fc  F a konstrukciós műveletek halmaza. Feltevés: fcFc konstrukciós műveletre fennáll aA  fc(a)A  cC  gc(c)C  a = (c). Állítás. Ha (cCfcFc)(fc((c)) = (gc(c))), akkor C objektumhalmaz az A egy reprezentációja. Bizonyítás. Strukturális indukcióval: Alapeset : a = f0. f0 A0, g0 C0, feltevésünk szerint f0 = (g0). (Tehát a = f0 esetén létezik olyan c  C0 , hogy a = (c)). Indukció: a' = fc(a), ahol feltesszük, hogy a = (c) és c  C0. Tehát a' = fc((c)) és művelettartásra vonatkozó feltevésünk alapján: a'= (gc(c)), és c' = gc(c) választás mellett a' = (c') és c' C0.

  12. A reprezentációs függvény implicit definíciója: f0 = (g0); (fcFc)( fc( (c)) =  (gc(c))); A reprezentációs függvény rekurzív (explicit) definíciója: Tegyük fel, hogy c = gc(gs( c)). Ennek alapján a reprezentációs függvény rekurzív definíciója: (c) = if c = g0then f0else fc(( gs(c) )). Jelölés az osztály morfizmus diagramjában. body = oprs: rep : C  A eqns: c C; f0 : g0 fc(c): gc(c)

  13. A vermet egy vektorban tároljuk és egy mutató a veremben lévő elemek számát mutatja. . . . body = oprs: rep: vector nat  stack eqns: vvector, mnat, eelem; create = (nil,0); push(v,m,e) = (put(v,succ(m),e),succ(m)); end stack; (createc, pushc(v,u,m)) Explicit definíció: (v,m)= if m = 0 then (nil,0) else (insert((v,prec(m)),access(v,m)),m)

  14. Adva a halmaz következő informális specifikációja: Konstrukciós műveletek: { } : üres halmaz előállítása. {e} : egy e elemből álló halmaz előállítása. h  h': két halmaz összes különböző elemének egy halmazban való egyesítése. Nem konstrukciós műveletek: h \ h': a h halmazból a h' halmaz elemeinek kitörléseként kapott halmaz előállítása. eh : ha e eleme a h halmaznak akkor "igaz", különben pedig "hamis" értéket ad. |h| : a h halmazban lévő elemek száma. A halmazban legfeljebb n  0 elem lehet. Legyen a halmaz neve set.

  15. Legyen a halmaz ábrázolása: vector  nat  set, ahol a vector máveletei a szokásosak: nil; v[i]::= e; v[i]; shiftL(v); Adjuk meg a reprezentációs függvény két különböző rekurzív definícióját ( a vektorban az első illetve az utolsó elem felhasználásával) és bizonyítsuk be a két reprezentációs függvény egyenlőségét.

  16. shiftL(v) művelet. shiftL : vector  vector; shiftL(nil) = nil shiftL(v[i]::= d) = if i = succ(zerus) then shiftL(v) else shiftL(v)[prec(i)] ::= v[i] fi; shiftL(nil) = nil shiftL(put(v,i,d)) = if i = succ(zerus) then shiftL(v) else put(shiftL(v), prec(i), d) fi; b.) A reprezentációs függvény két rekurzív definíciója: m(v,m) = if m = 0 then {} else m(v,prec(m)) {v[m]} fi; 1(v,m) = if m = 0 then {} else 1(shiftL(v),prec(m)) {v[succ(zerus)]} fi;

  17. b.) Feltevés: m  m'  1 1(v,m') = m(v,m') = {v[1], . . ., v[m']} Legyen m' = prec(m). Ekkor (feltevésünk szerint): 1(shiftL(v),m') = m(shiftL(v),m'). 1(v,m) = 1(shiftL(v).prec(m)) {v[1]} = {v[2], . . ., v[succ(m')]}{v[1]} = {v[1], . . ., v[m]}. m(v,m) = m(v,prec(m)) {v[m]} = {v[1], . . ., v[prec(m)]} {v[m]} = {v[1], . . ., v[m]}. az egyenlőség az egyenlőségi axióma alapján teljesül.

More Related