
complement(?SetVar, ++Universe, ?Complement)

   Set complement constraint

Arguments
   SetVar              A variable.
   Universe            A ground set.
   Complement          A variable

Type
   library(cardinal)

Description
Constrain sets so that Complement is the complement set of SetVar,
		with respect to the given Universe. I.e. Complement is Universe \ SetVar.
		If a variable (SetVar or Complement) is not yet a set domain variable,
		it is declared as such, limited by the Universe.
		This constraint is usually more efficient (stronger) than posting an
		equivalent set difference constraint, due to specific inferences.

Fail Conditions
   Fails if Complement can not be the set complement of SetVar in set universe Universe.

Resatisfiable
   No.

Examples
   
?- complement([7,8], [1,7,8,9], N).
N = [1,9]

?- complement(N, [1,7,8,9], [7,8]).
N = [1,9]

?- X `:: [a]+[b,c,d], Y `:: []+[a,b,c,d,e,f], complement(X, [a,b,c,d,e,f,g], Y).
no

?- X `:: [a]+[b,c,d], Y `:: []+[a,b,c,d,e,f], complement(X,[a,b,f],Y), domain(X,DX),domain(Y,DY).
DX = [[a]:1,[b]:2], DY = [[f]:1,[b]:2]

?- X `:: [a]+[b,c,d], Y `:: []+[a,b,c,d,e,f], complement(X, [a,b,c,d,e,f], Y), domain(Y,DY).
DY = [[e,f]:2,[b,c,d]:5]


See Also
   complement / 2, `$ / 2, `= / 2
