Open dif/2 constraint not being printed - may be expected

I wanted to test whether a dif/2 constraint stays live even if the involved terms involved go out of scope.

It correctly does:

% Call p/2, building a term involving X and Y. 
% Then make X and Y identical, dis-equal
% or keep them "optimistically different"

q  :- 
   p( X, Y), 
   X=x, writeln("X is now x"), 
   Y=y, writeln("Y is now y, which should have failed").
r  :- 
   p( X,_Y), 
   X=y, writeln("X is now y, so the constraint is resolved affirmatively").
s  :-
   writeln("the constraint remains unresolved").

% Construct superterms A and B of which X and Y are
% subterms, and set up a dif/2 constraint
% between A and B. A and B then go out of scope and
% the terms denoted by them become unreachable. 
% The dif/2 constraint, however, correctly persists:

p(X,Y) :- A = f(X,y), B = f(x,Y), dif(A,B), writeln("dif/2 passed").

Then we run the above:

?- q.
dif/2 passed
X is now x

?- r.
dif/2 passed
X is now y, so the constraint is resolved affirmatively

?- s.
dif/2 passed
the constraint remains unresolved

In the call to s, I expected the toplevel to print the still open dif/2 constraint, but it’s quiet.

Is this related to this discussion, whereby anonymous variables in the term passed to dif/2 will lead to non-printing at the toplevel?

% dif succeeds optimistically

?- dif((p(1) :- q),(_B:-_C)),format("Hey\n").
dif(f(_B, _C), f(p(1), q)).

% dif succeeds optimistically but doesn't print the dif/2 expression

?- dif((p(1) :- q),(_:-_)),format("Hey\n").

For annonymous variables constraints are possibly not projected. Some Prolog systems implement constraint projection in the top-level. See also:

Maybe I’m missing your point, but there doesn’t seem to be any top level variables (with attached residual goals) to print. As with the other queries, the top level only prints true. or false.. (Redefine s to s(X) and try again.)