1 % ------------------------- Domain Definition
-------------------------
2 % --- Cross
-file definitions
------------------------------------------
3 :- multifile connected
/3, crate/3, agent
/2.
5 % --- Primitive control actions
---------------------------------------
6 primitive_action
(move
(_
, _
)).
7 primitive_action
(push(_
, _
)).
9 % --- Precondition
for primitive actions
------------------------------
10 poss
(move
(From
, To
), S
) :-
12 connected
(From
, To
, _
),
16 poss
(push(From
, Direction
), S
) :-
18 connected
(From
, CrateLocation
, Direction
),
19 crate
(_
, CrateLocation
, S
),
20 connected
(CrateLocation
, CrateTarget
, Direction
),
21 not(crate
(_
, CrateTarget
, S
)).
23 % --- Successor
state axioms
------------------------------------------
24 visited
(Plek
, result
(A
, _
)) :-
27 agent
(AgentPlek
, result
(A
, S
)) :-
28 A
= move
(_
, AgentPlek
);
29 A
= push(OudeAgentPlek
, Richting
),
30 connected
(OudeAgentPlek
, AgentPlek
, Richting
);
31 not(A
= move
(AgentPlek
, _
)), not(A
= push(AgentPlek
, _
)),
34 crate
(Krat
, Kratplek
, result
(A
, S
)) :-
35 A
= push(AgentPlek
, Richting
),
36 connected
(AgentPlek
, OudeKratPlek
, Richting
),
37 connected
(OudeKratPlek
, Kratplek
, Richting
),
38 crate
(Krat
, OudeKratPlek
, S
);
39 not(A
= push(AgentPlek2
, Richting2
)),
40 connected
(AgentPlek2
, Kratplek
, Richting2
),
41 crate
(Krat
, Kratplek
, S
).