:- discontiguous sCov/2.
:- discontiguous sIdx/2.
:- discontiguous aCov/2.

:- table label/1.

not_min_choice(I1) :- sIdx(R2,I2), I2<I1, sCov(R2,_). 
sChoice(R) :- sIdx(R,I), sCov(R,_), \+ not_min_choice(I), !.
	
sIdx(facing_danger, 1).
sCov(facing_danger, []) :- fronting(T), dangerous(T).
	
label([oriented(O),xdir(X),ydir(Y),touching(T),in_gap(C)]) :- 
	obj(goal,_), obj(agent(O), _), xdir(X), ydir(Y), 
 	touching(T), in_gap(C).
sIdx(S,2) :- label(S).
sCov(S,[]) :- label(S).

sIdx(true, 1.0Inf).	
sCov(true, []).

aCov(left,left). 
aCov(right,right). 

forwardMoveBlocked :- fronting(XY), obj(wall(_),XY).
forwardMoveBlocked :- fronting(XY), obj(door(_,closed),XY).
forwardMoveBlocked :- fronting(XY), obj(door(_,locked),XY).
forwardMoveBlocked :- fronting(XY), obj(key(_),XY).
aCov(forward,forward) :- \+ forwardMoveBlocked.

aCov(pickup,pickup) :- fronting(XY), obj(key(_),XY). 
aCov(toggle,toggle) :- fronting(XY), obj(door(_,_),XY). 
aCov(drop,drop) :- carries(_), \+ forwardMoveBlocked. 
