fluent(at(start)).
fluent(on(belmont)).
fluent(on(western)).
fluent(on(ashland)).
fluent(traffic_bad).
fluent(at(evanston)).
fluent(error).

action(gotowesternatbelmont).
executable(gotowesternatbelmont, [at(start)]).
causes(gotowesternatbelmont, on(western), []).
causes(gotowesternatbelmont, on(belmont), []).
causes(gotowesternatbelmont, neg(at(start)), []).

action(check_on_western).
executable(check_on_western, []).

determines(check_on_western, on(belmont)).
determines(check_on_western, neg(on(belmont))).

action(check_traffic).
executable(check_traffic, []).
determines(check_traffic, traffic_bad).
determines(check_traffic, neg(traffic_bad)).

action(take_belmont).
executable(take_belmont, []).
causes(take_belmont, on(ashland), [on(belmont), traffic_bad]).
causes(take_belmont, neg(on(western)), [on(belmont), traffic_bad]).
causes(take_belmont, error, [neg(traffic_bad)]).
causes(take_belmont, error, [neg(on(belmont))]).


action(take_ashland).
executable(take_ashland, []).
causes(take_ashland, at(evanston), [on(ashland)]).
causes(take_ashland, error, [neg(on(ashland))]).

action(take_western).
executable(take_western, []).
causes(take_western, at(evanston), [neg(traffic_bad), on(western)]).
causes(take_western, error, [traffic_bad]).
causes(take_western, error, [neg(on(western))]).

initially(at(start)).
initially(neg(on(western))).
initially(neg(on(belmont))).
initially(neg(on(ashland))).
initially(neg(at(evanston))).
initially(neg(error)).

sgoal(at(evanston)).
sgoal(neg(error)).

