[ library(cardinal) | Third Party Libraries | Reference Manual | Alphabetic Index ]

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

Set complement constraint
SetVar
A variable.
Universe
A ground set.
Complement
A variable

## 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.

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]
```