%Conformant planning. % a causes f if p; a causes f if ~p; b causes ~f. % initially ~f; goal f. plan should be: a. % goal f time(1). action(a). action(b). fluent(f). fluent(p). fluent(ff). fluent(pp). initially(ff). holds(F,1) :- fluent(F), initially(F). opp(f,ff). opp(ff,f). opp(p,pp). opp(pp,p). holds(F, TT) :- fluent(F), fluent(FF), opp(F,FF), time(T), TT = T + 1, holds(F,T), not holds(FF, TT). holds(f, TT) :- time(T), occurs(a,T), TT = T + 1, holds(p,T). holds(f, TT) :- time(T), TT = T +1, occurs(a,T), holds(pp,T). holds(ff, TT) :- time(T), TT = T + 1, occurs(b,T). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %occurs(a,1) | not_occurs(a,1). %occurs(b,1) | not_occurs(b,1). % :- occurs(a,1), % occurs(b,1). not_occurs(A,T) :- action(A), time(T), action(B), A != B, occurs(B,T). occurs(A,T) :- action(A), time(T), not not_occurs(A,T). holds(p,1) | holds(pp, 1). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% goal_sat :- holds(f,2). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% holds(f,1) :- goal_sat. holds(ff,1) :- goal_sat. holds(p,1) :- goal_sat. holds(pp,1) :- goal_sat. holds(f,2) :- goal_sat. holds(ff,2) :- goal_sat. holds(p,2) :- goal_sat. holds(pp,2) :- goal_sat. :- not goal_sat.