;------------------------------------------------------------------------------- ; olap.cam = a kit for OLAP functionality formal specification in CAMILA ;------------------------------------------------------------------------------- ; Creation date : 1999.04.22 ; Last update : 1999.04.29 ; (c) UM - M.F.P. II - 1998/99 ;------------------------------------------------------------------------------- #include setcat.cam #include io.cam ; tnest : A-set --> (A -> B) --> ((A -> B) x (A -> B)) tnest(s) = lambda(l). < l/s , l\s >; ; ttot : A --> ((B x B -> B) x B) --> A-set --> (A -> B) ttot(a)=lambda(f,u). lambda(s). let (y=comp(prod(id,get(u)(a)),comp(swap,tnest({a})))-set(s)) in [a->tot2(f,u)(y)]; ; tcollect : A-set --> (A -> B) --> (A -> B) tcollect(s) = lambda(t).collect(tnest(s)-set(t)); ; mda : (A-set x A x (B x B -> B) x B) --> (A -> B) --> (A -> B) ; mda stands for `multidimensional analysis' mda(s,a,f,u)=lambda(t). let (x = tcollect(s)(t), y=(*->(ttot(a)(f,u)))(x)) in (una(plus)-set)(mkr(y)); ; tmkr : ((A -> B) -> (A -> B)) --> (A -> B) tmkr(f)={t + f[t] |t<-dom(f)}; ; tmkf : (A x A) -> (A -> B)-set --> (B -> B) tmkf(a,x)=lambda(s).[t[a]->t[x]|t<-s]; ; twodim : (A x A x A) --> (A -> A)-set --> (A -> A)-set twodim(y,x,v)=lambda(s).tmkr((*->tmkf(x,v))(tcollect({y})(s))); Init() = t <- { [ "Model"->"Austin", "Color"->"Azul", "Vendor"->"A", "Sales"->7 ],[ "Model"->"Austin", "Color"->"Preto", "Vendor"->"C", "Sales"->6 ], [ "Model"->"Austin", "Color"->"Preto", "Vendor"->"A", "Sales"->3 ],[ "Model"->"Ford", "Color"->"Branco", "Vendor"->"A", "Sales"->4 ],[ "Model"->"Ford", "Color"->"Azul", "Vendor"->"B", "Sales"->6 ],[ "Model"->"Nissan", "Color"->"Preto", "Vendor"->"A", "Sales"->3 ]};