Yes, a Prolog interpreter can handle goal double(Z). It first binds Z = [], since [] = [] ++ []. If backtracked into, it binds Z to [A,A], where A is a new variable, since [A,A] = [A] ++ [A]. If backtracked into again, it binds Z to [A,B,A,B], where A and B are new variables. It can generate infinitely many solutions.