次の簡単なグラフがあります。
x <---> y <---> z
edge(x,y).
edge(y,z).
path(Start,End,Path) :-           % path/3: there is a `Path` from `Start` to `End`
    path(Start,End,[Start],Path).
path(End,End,RPath,Path) :-       % internal helper predicate `path/4`
    reverse(RPath,Path).
path(Start,End,Visited,Path) :-
    edge(Start,Next),
    \+ memberchk(Next,Visited),
    path(Next,End,[Next|Visited],Path).
サンプルクエリ:
?- path(x,z,P).
P = [x, y, z] ;                   % works as expected
false.
?- path(z,x,P).                        
false.                            % unexpectedly fails!
上記のクエリを成功させるにはどうすればよいですか?