poss(move(From, To), S) :-
agent(From, S),
connected(From, To, _),
- not(crate(_, To, S)).
+ not(crate(_, To, S)),
+ not(visited(To, S)).
+
poss(push(From, Direction), S) :-
agent(From, S),
connected(From, CrateLocation, Direction),
not(crate(_, CrateTarget, S)).
% --- Successor state axioms ------------------------------------------
+visited(Plek, result(A, _)) :-
+ A = move(Plek, _).
+
agent(AgentPlek, result(A, S)) :-
A = move(_, AgentPlek);
A = push(OudeAgentPlek, Richting),