SWI-Prolog 7.6.4:
?- dif(X, f(Y)), X=f(a).
X = f(a),
dif(f(f(a), Y), f(f(Y), a)).
Note that I use f/1 in the query, but the constraint is on f/2. It's not wrong, but seems rather circuitous. Why doesn't Prolog return
?- dif(X, f(Y)), X=f(a).
X = f(a),
dif(Y, a).
That
fin the printed constraint has nothing to do with yourf. It's just a placeholder to keep subterms together:The above meaning just that:
incal(a)must stay different fromincal(Y); andYmust stay different fromaYes, you could simplify that but ... when does one know whether optimization will cost less than one will gain?