% pocl1.epi pair(x,y) := (x,y). Set.dom() := self.collect(x::hd x). Set.rng() := self.collect(x::hd(tl x)). Set.ds(aSet):= self.select(x::aSet.member(hd (tl x))). Set.at(k):= self.exists(x::hd(x)=k) then hd(tl(self.locate(x::hd(x)=k))) else nil. people := set().add(1).add(2).add(3). offices:= set().add(11).add(12). pm := set().add(pair(1,45)).add(pair(2,45)). pm1 := set().add(pair(1,45)). pm2 := set().add(pair(2,45)). po := set().add(pair(1,11)).add(pair(2,12)). s:= channel(). centre(pm,po):= in(s, (b,r)::out(r,pm.at(b), centre(pm.ds(set().add(b)), po))). office(pm,d,r):= people.alt(b:: pm.dom().member(b) then out(d,b,office(pm.ds(set().add(b)), d,r)) else out(s, (b,r), in(r,x::office(pm,d,r)))). sink(c) := in(c, x::sink(c)). p:= par(centre(pm,po), par(par(office(pm1,91,11), sink(91)), par(office(pm2,92,12), sink(92)))).