> :- pragma assert(all [A,B,C,R,T] ( > append(A, B, T), append(T, C, R) <=> > append(B, C, T), append(A, T, R))). You'd better not assert this, because it is not true. What you want is :- pragma assert(all [A,B,C,R,AB,BC] ( append(A, B, AB), append(AB, C, R) <=> append(B, C, BC), append(A, BC, R))). It is far from guaranteed that AB = BC. Zoltan.