
p('$min', X, '$min').
p(X, '$min', '$min').
p(a, b, c).
p(g(a), g(b), d).
r(c, d) -> [].
q(X,'$min',X).
q(X,g(X),'$min').
q(X,Y,j(X,Y)).
q(g(X), X, '$min').                  
q('$min', X, X).    
p(X, Y, f(X, Y)).
q(U,Z,W) <- q(X,Y,U), q(Y,Z,V), q(X,V,W).
q(X,V,W) <- q(X,Y,U), q(Y,Z,V), q(U,Z,W).
q(X, Y, Z) <- q(Y, X, Z).
p(U,Z,W) <- p(X,Y,U), p(Y,Z,V), p(X,V,W).
p(X,V,W) <- p(X,Y,U), p(Y,Z,V), p(U,Z,W).
q(U,Xt,W) <- q(Y,Z,V), p(X,Y,U), p(X,Z,Xt), p(X,V,W).
p(X,V,W) <- q(Y,Z,V), p(X,Y,U), p(X,Z,Xt), q(U,Xt,W).
q(U,Xt,W) <- q(Y,Z,V), p(Y,X,U), p(Z,X,Xt), p(V,X,W).
p(V,X,W) <- q(Y,Z,V), p(Y,X,U), p(Z,X,Xt), q(U,Xt,W).
r(U, V) <- q(X, Y, U), q(X, Y, V).
r(U, V) <- p(X, Y, U), p(X, Y, V).
p(X, Y, V) <- r(U, V), p(X, Y, U).
p(X, V, Y) <- r(U, V), p(X, U, Y).
p(V, Y, X) <- r(U, V), p(U, Y, X).
q(X, Y, V) <- r(U, V), q(X, Y, U).
q(X, V, Y) <- r(U, V), q(X, U, Y).
q(V, Y, X) <- r(U, V), q(U, Y, X).
r(f(X, U), f(X, V)) <- r(U, V).   % f and j are commutative 
r(f(U, X), f(V, X)) <- r(U, V).   % (added: hg)
r(j(X, U), j(X, V)) <- r(U, V). 
r(g(U), g(V)) <- r(U, V).
%r(g(U), g(V)) <- g(U, V).  % bug
r(X, X).
r(X, Y) <- r(Y, X).
r(X, Z) <- r(X, Y), r(Y, Z).

