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)))