Я считаю, что есть проблема в том, как вы хотите построить Путь.Возможно, вы захотите переписать его, чтобы встроить его в заголовок вашего предиката.Примерно так:
resolve(K, K, []) :- writeln('finished'). %goal state
resolve(CurrentState, GoalState, [CurrentState|Path]) :-
suc(_, CurrentState, NextState, GoalState),
resolve(NextState, GoalState, Path).
Первое предложение завершает рекурсию: чтобы перейти из состояния K в состояние K, вы возвращаете [] в качестве пути, поскольку вы уже находитесь в состоянии цели.Во втором предложении строится путь, он получает следующее состояние и вызывает рекурсивное разрешение, создавая путь, пройденный вами после завершения рекурсии.