:- ['5_cleanbot'].

init31(Z) :- D::[1,4], Z = [at(1, 1), facing(D) | Zp], consistent(Z).

% 1.
q311(Z) :- init31(Z), knows_not(facing(2), Z).

% 2.
q312(Z1) :- init31(Z0), execute(turn, Z0, Z1), holds(facing(D), Z1), knows_not(facing(3), Z1), knows_not(facing(4), Z1).

% 3.
q313(Z1) :- init31(Z0), execute(turn, Z0, Z1), holds(facing(D), Z1), D::[1..4], holds(at(X, Y), Z1), \+ (indomain(D), \+ adjacent(X, Y, D, X1, Y1)).

% 4.
q314(Z2) :- init31(Z0), execute(turn, Z0, Z1), execute(go, Z1, Z2), holds(at(1, 2), Z2), knows(facing(1), Z2).
