1:- module(zsat, []). 2 3% ?- sat. % Setup for sat to work. 4% ?- sat(a = b), sat(X = Y), sat_count(C). 5% ?- sat(A + B), sat_count(C), A = B, sat_count(D). 6 7% ?- sat(A + B + C + D), sat_count(Count0), 8% A = B, B = C, C = D, sat_count(Count1). 9%@ A = B, B = C, C = D, 10%@ Count0 = 15, 11%@ Count1 = 1, 12%@ put_attr(D, zsat, 0). 13 14attr_unify_hook(X, Y):- var(Y), 15 ( get_attr(Y, zsat, U) -> 16 sat_index_equal(U, X) 17 ; put_attr(Y, zsat, X) 18 ). 19% 20sat_index_equal(X, X):-!. 21sat_index_equal(I, J):- sat(@('$VAR'(I))= @('$VAR'(J)))