;; _fn <- "sets.cam"; flat(l) = CONC(< if (is-STR(x) || is-INT(x) || is-SYM(x)) then < x > else flat(x) | x <- l >); ;; i1(x)=<1,x>; ;; i2(x)=<2,x>; ;; j606o(y) = let (a=p1(y),b=p2(y),k=p1(b),x=p2(b)) in < k, >; ;; nilit(x)=; ;; swap(x)=; ;; PLUS(s) = plus-orio([],s); ;; prod(f,g)= lambda(t).; ;; const(f,g)= lambda(x).; ;; comp(f,g)= lambda(x).f(g(x)); ;; Kons(c)= lambda(x).c; ;; id(x)=x; ;; FUNC curry(f:AxB->C):A->(B->C) ;; RETURN let (X=dom(f), ;; Y=p1-set(X)) ;; in [ a -> [ p2(p) -> f[p] | p <- X : p1(p)==a ] | a <- Y ]; ;; FUNC uncurry(f:A->(B->C)):AxB->C ;; RETURN ;; PLUS({ let (g=f[a]) in [ < a, b> -> g[b] | b <- dom(g) ] | a <- dom(f) }); ;; ffAset(s) = [ a -> nil | a <- s ]; ;; join(f1,f2) = [ a -> < f1[a],f2[a]> | a <- dom(f1) * dom(f2) ]; ;; joinInv <- const((*->p1),(*->p2)); ;; uplus(p) = p1(p) + p2(p); ;; ujoin(p) = join(p1(p),p2(p)); ;; nJoin <- comp(ujoin,const(p1,comp(uplus,prod((*->Kons(nil)),curry)))); ;; nJoinInv <- const((*->p1),comp(uncurry,(*->p2))); ;; pJoinInv(f) = let (a=[ p2(x) -> f[x] | x <- dom(f): p1(x) == 1 ], ;; b=[ p2(x) -> f[x] | x <- dom(f): p1(x) == 2 ]) ;; in < a , b >; ;; discollect(f) = UNION({ { | b <- f[a] } | a <- dom(f) }); ;; collect(r) = [ a -> { p2(q) | q <- r: a==p1(q) } ;; | a <- { p1(p) | p <- r } ]; ;; pair2ff(p)= [ "Att1"-> p1(p), "Att2"-> p2(p) ]; ;; ;seq2ff(t)= let (f=lambda(i)."Att"++itoa(i)) in (f->*)(seq2ff(t)); ;; ff2pair(f)= ff2seq(f,""); ;; mkr(f) = { | a <- dom(f) }; ;; mkf(r) = [ p1(t) -> p2(t) | t <- r ]; ;; rinv(r) = { | p <- r }; ;; FUNC f822(p:AxB):BxA ;; RETURN ; ;; f870 <- uncurry; ;; f87x <- curry; ;; flatten(r) = UNION({ { | b <- p2(p) } | p <- r }); ;; rcircle(r,s) = { | p <- r, q <- s: p2(p)==p1(q) };