\+Term1 = Term2
This predicate is logically sound if its arguments are sufficiently
instantiated. In other cases, such as
?- X ,
the predicate fails although there are solutions. This is due to the
incomplete nature of \+/1.
To make your programs work correctly also in situations where the arguments are not yet sufficiently instantiated, use dif/2 instead.