% length = 4, level = 3

car(car_1).
car(car_2).

location(loc_1).
location(loc_2).

fluent(package_at(loc_1)).
fluent(package_at(loc_2)).
fluent(available(C)):- car(C).
fluent(happy).

action(ask_about_package).
executable(ask_about_package, []).

determines(ask_about_package, package_at(loc_1)).
determines(ask_about_package, package_at(loc_2)).

action(ask_about_car).
executable(ask_about_car, []).

determines(ask_about_car, available(car_1)).
determines(ask_about_car, available(car_2)).

 
action(drive(C,L)):- car(C), location(L).

executable(drive(C,L), [available(C)]):-
     action(drive(C, L)).

causes(drive(C,L), at(L), []):-
     action(drive(C, L)).
causes(drive(C,L), neg(available(C)), []):-
     action(drive(C, L)).

action(finish).
executable(finish, []).

causes(finish, happy, [package_at(loc_1), at(loc_1)]).
causes(finish, happy, [package_at(loc_2), at(loc_2)]).
  
initially(neg(happy)).

caused([neg(package_at(loc_1))], package_at(loc_2)).
caused([neg(package_at(loc_2))], package_at(loc_1)).

caused([neg(available(car_1))], available(car_2)).
caused([neg(available(car_2))], available(car_1)).

sgoal(happy).


