#include . #program base. precondition(Action,variable(Fluent),Value) :- precondition(Action, variable(Fluent),value(Fluent,Value)). postcondition(Action,variable(Fluent),Value) :- postcondition(Action,effect(unconditional),variable(Fluent),value(Fluent,Value)). holds(variable(Fluent),0) :- initialState(variable(Fluent),value(Fluent,true)). #program step(t). { occurs(Action,t) : action(Action) } = 1. :- occurs(Action,t), precondition(Action,Fluent,true), not holds(Fluent,t-1). :- occurs(Action,t), precondition(Action,Fluent,false), holds(Fluent,t-1). caused(Fluent,t) :- occurs(Action,t), postcondition(Action,Fluent,true). holds(Fluent,t) :- caused(Fluent,t). holds(Fluent,t) :- holds(Fluent,t-1), not occurs(Action,t) : postcondition(Action,Fluent,false). #program check(t). goalAt(t) :- holds(variable(Variable),t) : goal(variable(Variable), value(Variable,true)); not holds(variable(Variable),t) : goal(variable(Variable), value(Variable,false)). :- not goalAt(t), query(t). #show occurs/2. % #show holds/2.