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