Example using the constraint handler for Booleans bool.chr: [eclipse]: and(X,Y,Z), or(A,B,C), chr_get_constraint(Y,Cstr). X = X Z = Z A = A B = B Y = Y Cstr = X * Y = Z Constraints: (2) A + B = C % pretty print for or/3 - constraint More? (;) no (more) solution. The following predicate labeling(+Varlist) labels the variables in the list Varlist: labeling([X|VL]) :- var(X), chr_get_constraint(X,C), chr_label_with(C), !, chr_resolve(C), labeling([X|VL]). labeling([X|VL]) :- labeling(VL). labeling([]).