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,..., - ppt letölteni
Az előadások a következő témára: "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,...,"— Előadás másolata:
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 /,... }; G = {g 0 :  C 0,..., g i : C j... C k  C /,... }; Az absztrakt és konkrét objektumok az egymáshoz való viszonya:  : C  A  = (  0,...,  n ), ahol  0 : C 0  A 0 ;  1 : C 1  A 1 ;...;  n : C n  A n ; 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).
Tétel (reprezentáció tétele). Adva d a absztrakt és d c konkrét typusspecifikációk azonos szingatúrával.  : C  A morfizmus. F c  F a konstrukciós műveletek halmaza. Feltevés:  f c  F c konstrukciós műveletre fennáll a  A  f c (a)  A  c  C  g c (c)  C  a =  (c), esetén: Állítás. Ha (  c  C  f c  F c )(f c (  (c)) =  (g c (c))), akkor C objektumhalmaz az A egy reprezentációja. Bizonyítás. Strukturális indukcióval: Alapeset : a = f 0. f 0  A 0, g 0  C 0, feltevésünk szerint f 0 =  (g0). (Tehát a = f 0 esetén létezik olyan c  C 0, hogy a =  (c)). Indukció: a' = f c (a), ahol feltesszük, hogy a =  (c) és c  C 0. Tehát a' = f c (  (c)) és művelettartásra vonatkozó feltevésünk alapján: a'=  (g c (c)), és c' = g c (c) választás mellett a' =  (c') és c'  C 0.
A reprezentációs függvény implicit definíciója: f 0 =  (g 0 ); (  f c  F c )( f c (  (c)) =  (g c (c))); A reprezentációs függvény rekurzív (explicit) definíciója: Tegyük fel, hogy c = g c (g s ( c)). Ennek alapján a reprezentációs függvény rekurzív definíciója:  (c) = if c = g 0 then f 0 else f c (  ( g s (c) )). Jelölés az osztály morfizmus diagramjában. body = oprs: rep : C  A eqns: c  C; f 0 : g 0 f c (c): g c (c)
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; (create c, push c (v,u,m)) Explicit definíció:  (v,m)= if m = 0 then (nil,0) else (insert(  (v,prec(m)),access(v,m)),m)
Néhány gyakorló példa származtatásra. or: bool bool  bool; b 1, b 2  bool; Axióma:b 1 or b 2 = ~(~b 1  ~b 2 ); Tétel: b 1 or T = T; Bizonyítás: (b 1 or b 2 = ~(~b 1  ~ b 2 ))  (b 1 or T = ~(~b 1  ~T))  (b 1 or T = ~(~b 1  F))  (b 1 or T = ~(F))  (b 1 or T = T ). b2 Tb2 T ~ F  T~b 1  F  F
Tétel:(e  s \{a}) = if a=e then "false" else e  s fi; Egyenlőség axióma: b 1 = b 2  (b 1 = "true"  b 2 = "true")  (b 1 = "false"  b 2 = "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;
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
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(k',add(n,m))  add(add(k',n),m)
Kettős specifikáció: e par exp i = eb imp bod ib absztrakt specifikáció konkrét specifikáció
Tétel. Adva d a absztrakt és d c konkrét típusspecifikációk azonos szingatúrával.  : C  A morfizmus. F c  F a konstrukciós műveletek halmaza. Feltevés:  f c  F c konstrukciós műveletre fennáll a  A  f c (a)  A  c  C  g c (c)  C  a =  (c). Állítás. Ha (  c  C  f c  F c )(f c (  (c)) =  (g c (c))), akkor C objektumhalmaz az A egy reprezentációja. Bizonyítás. Strukturális indukcióval: Alapeset : a = f 0. f 0  A 0, g 0  C 0, feltevésünk szerint f 0 =  (g0). (Tehát a = f 0 esetén létezik olyan c  C 0, hogy a =  (c)). Indukció: a' = f c (a), ahol feltesszük, hogy a =  (c) és c  C 0. Tehát a' = f c (  (c)) és művelettartásra vonatkozó feltevésünk alapján: a'=  (g c (c)), és c' = g c (c) választás mellett a' =  (c') és c'  C 0.
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.
Legyen a halmaz ábrázolása: vector  nat  set, ahol a vector máveletei a szokásosak: nil; v[i]::= e; v[i]; shift L (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.
shift L (v) művelet. shift L : vector  vector; shift L (nil) = nil shift L (v[i]::= d) = if i = succ(zerus) then shift L (v) else shift L (v)[prec(i)] ::= v[i] fi; shift L (nil) = nil shift L (put(v,i,d)) = if i = succ(zerus) then shift L (v) else put(shift L (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 (shift L (v),prec(m))  {v[succ(zerus)]} fi;
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 (shift L (v),m') =  m (shift L (v),m').  1 (v,m) =  1 (shift L (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.
Letölteni ppt "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,...,"