Re: [eclipse-clp-users] user defined constraints using propia

From: Marco Gavanelli <marco.gavanelli_at_unife.it>
Date: Thu, 01 Apr 2010 11:06:39 +0200
Oliver Shycle wrote:
> Hi all,
> 
> After studying the Constraint Library Manual I thought that using propia
> enables me to turn every prolog goal into a constraint. Using such a
> constraint works in general. However it unfortunately doesn't work in
> combination with constraint expression connectives like "=>" or "neg".
> The use of "neg (my_constraint(X) infers most)" where X is a variable to be
> labeled later gives me the following error:
> instantiation fault in infers(my_constraint(_518{1 .. 6}), most, _5589{[0,
> 1]})
> 
> Why do I get this error?
> And what is the third variable "_5589{[0, 1]" of the infers predicate that
> is shown in this error message?

Dear Olivier,

as Thorsten suggested, you can read Section 3.2.3 in the Constraint 
Library Manual; there you can find a section on "User-defined reified 
constraints".

Then, you can consider this example:

% Original predicate. Becomes a constraint when invoked with "infers most"
my_constr(X):- X#>10.
my_constr(X):- X#<10.

% Reified version of the predicate
my_reif_constr(X,1):- X#>10.
my_reif_constr(X,1):- X#<10.
my_reif_constr(X,0):- X#=10.

% Reified version is now a constraint
reif_constr(X,B):-
     my_reif_constr(X,B) infers most.

Now:

[eclipse 13]: X::0..20, neg(reif_constr(X)).

X = 10
Yes (0.00s cpu)


Cheers,
Marco

-- 
Marco Gavanelli, Ph.D. in Computer Science
Dept of Engineering
University of Ferrara
Tel/Fax  +39-0532-97-4833
http://www.ing.unife.it/docenti/MarcoGavanelli/
Received on Thu Apr 01 2010 - 09:29:38 CEST

This archive was generated by hypermail 2.2.0 : Thu Feb 02 2012 - 02:31:58 CET