# Re: Domain

From: Marco Gavanelli <marco_at_icparc.ic.ac.uk>
Date: Fri 26 Oct 2001 11:13:16 AM GMT
Message-ID: <3BD9454C.22216BF5@icparc.ic.ac.uk>
```Olivier Thirifay wrote:
>
> Hello,
>
> I would like to know if it is possible to obtain the "union" of domains like
> in this example :
>
> predicat:-
> VARS=[A,B,C],
> A::0..5,
> B::0..5,
> C::0..5,
> (A#=0,B#>0,C#=0);(A#=0,B#=0,C#=0).
>
> it returns me the domains that are covered by the constraints.
> [A{0},B{1..5},C{0}]
> [A{0},B{0},C{0}]
>
> I have a second predicate :
> predicat:-
> VARS=[A,B,C],
> A::0..5,
> B::0..5,
> C::0..5.
> which returns all possibilities. [A{0..5},B{0..5},C{0..5}]
>
> I would like to obtain the union of
> [A{0},B{1..5},C{0}]
> [A{0},B{0},C{0}]
> -> [A{0},B{0..5},C{0}]
> to compare with all possibilities [A{0..5},B{0..5},C{0..5}]
>
> Is it possible with the built-in predicate ?

Dear Olivier,
If I understand your problem, you may be interested in the propia library:

:- lib(fd).
:- lib(propia).

predicat(VARS):-
VARS=[A,B,C],
A::0..5,
B::0..5,
C::0..5,
((A#=0,B#>0,C#=0);(A#=0,B#=0,C#=0)).

[eclipse 19]: predicat([A,B,C]) infers most.

A = 0
B = B{[0..5]}
C = 0
Yes (0.00s cpu)

Kind regards,
Marco

--
Marco Gavanelli
DIF - Ferrara University
IC-Parc visiting student
William Penney Laboratory - Imperial College