Typically, the expressions contains reifiable constraints, in which case a corresponding reified constraint is set up, and the expression is replaced by the resulting boolean variable.
?- B and 1, B = 1. B = 1 Yes (0.00s cpu) ?- B and 1, B = 0. No (0.00s cpu) % arguments are typically reifiable expressions: ?- X > 5 and X < 7, X = 7. No (0.00s cpu) % the previous example is equivalent to: ?- >(X,5,B1), <(X,7,B2), B1 and B2, X=7. No (0.00s cpu) % and/or/=>/neg are themselves reifiable: ?- X > 5 and neg(X < 7), X = 7. X = 7 Yes (0.00s cpu)