%% Son Tran's translator program - b2s.pl %% %% input: a Prolog program representing a domain %% description in Language B %% output: a domain description and a domain problem %% which will be used as input to Smodels %% %% The b2s translator is currently capable of handling %% the following features: %% %% a. Dynamic Causal Laws of the form: %% causes(A,F,P) iff action A causes fluent literal F %% to be true if preconditions P hold. %% %& b. Static Causal Laws: %% caused(F,G) iff set of fluent literals G causes fluent %% literal F to be true. %% %% c. Defaults: %% default(F,G) - normally fluent literal F holds in any state %% which satisfies G. %% %% d. Executability conditions: %% impossible(A,G) iff it is not possible to execute %% action A if set of fluent literals G hold. %% %% e. Constraints: %% constraint(L) iff list L is satisfied in any state. %% %% f. Serialization of actions: %% Concurrent actions are not allowed. %% %% g. Initial state: %% initially(F) iff fluent literal F holds in the initial state. %% %% h. Goal state: %% goal(F) iff fluent literal F holds in the final state. %% %% Program b2s.pl will separate the above rules into two different files %% which will be used as input to Smodels: %% 1. (a) through (f) will be used to generate the domain description file, %% 2. (g) and (h) will be used to generate the domain problem file. %% %% Notice that b2s will only work correctly if the following %% predicates are defined in the domain description input file: %% 1. fluent(F) iff F is a fluent. %% 2. action(A) iff A is an action. %% %%-------------------------------------------------------------------------- %% To use the b2s program: %% 1. Compile b2s.pl using Quintus Prolog %% 2. At the Quintus Prolog prompt, type: gen. %% and press %% 3. Enter the name of input/output files when requested. %%-------------------------------------------------------------------------- :- use_module(library(files)). :- use_module(library(lineio)). :- use_module(library(strings)). :- use_module(library(lists)). :- unknown(_,fail). %%% %%% Collecting static causal laws %%% and translating them into rules suitable for SMODELS %%% pr_static_causal(Id):- findall((X,Y), caused(X,Y), Z), nl(Id), write(Id, '%%% Section: static causal laws %%%%'), nl(Id), nl(Id), pr_static_causal(Z, Id). pr_static_causal([], Id):- nl(Id), write(Id, '%%% End section: static causal laws %%%%'), nl(Id). pr_static_causal([(L,C)|T], Id):- add_time(L, 'T', Id), write(Id, ' :- time(T), '), add_time_list(C, 'T', Id), write(Id, '.'), nl(Id), pr_static_causal(T, Id). %%% %%% Collecting default laws %%% and translating them into rules suitable for SMODELS %%% pr_default(Id):- findall((X,Y), default(X,Y), Z), nl(Id), write(Id, '%%% Section: default laws %%%%'), nl(Id), nl(Id), pr_default(Z, Id). pr_default([], Id):- nl(Id), write(Id, '%%% End section: default laws %%%%'), nl(Id). pr_default([(L,C)|T], Id):- add_time(L, 'T', Id), write(Id, ' :- time(T), '), add_time_list(C, 'T', Id), length(C,N), ( eq(N,0) -> write(Id, ' not '), add_time_contrary(L, Id) | write(Id, ', not '), add_time_contrary(L, Id) ), write(Id, '.'), nl(Id), pr_default(T, Id). add_time_contrary(L, Id):- fluent(L), add_time(neg(L), 'T', Id). add_time_contrary(neg(L), Id):- fluent(L), add_time(L, 'T', Id). %%% %%% Collecting dynamic causal laws %%% and translating them into rules suitable for SMODELS %%% pr_dynamic_causal(Id) :- findall((A,X,Y), causes(A,X,Y), Z), nl(Id), write(Id, '%%% Section: dynamic causal laws %%%%'), nl(Id), pr_dynamic_causal(Z, Id). pr_dynamic_causal([], Id):- nl(Id), write(Id, '%%% End section: dynamic causal laws %%%%'), nl(Id). pr_dynamic_causal([(A,L,C)|T], Id):- add_time(L, 'T1', Id), write(Id, ' :- '), write(Id, ' next(T,T1),'), add_time(A, 'T', Id), length(C,N), ( eq(N,0) -> write(Id, '.'), nl(Id) | write(Id, ','), add_time_list(C, 'T', Id), write(Id, '.'), nl(Id) ), pr_dynamic_causal(T, Id). %%% %%% Generating inertial rules for fluent literals %%% one rule per fluent literal %%% non_inertial(L):- fluent(L), default(L,_). non_inertial(L):- fluent(L), default(neg(L),_). is_inertial(L):- fluent(L), \+ non_inertial(L). pr_inertial(Id):- findall(X, (fluent(X),is_inertial(X)), Y1), remove_dups(Y1, Y), nl(Id), write(Id, '%%% Section: inertial %%%%'), nl(Id), pr_inertial(Y, Id). pr_inertial([], Id):- nl(Id), write(Id, '%%% End section: inertial %%%%'), nl(Id). pr_inertial([H|T], Id):- pr_line(H, Id), nl(Id), pr_line(neg(H), Id), nl(Id), pr_inertial(T, Id). pr_line(H, Id):- fluent(H), add_time(H, 'T1', Id), write(Id, ' :- next(T,T1),'), add_time(H, 'T', Id), write(Id, ', not '), add_time(neg(H), 'T1', Id), write(Id, '.'). pr_line(neg(H), Id):- fluent(H), add_time(neg(H),'T1', Id), write(Id, ' :- next(T,T1),'), add_time(neg(H), 'T', Id), write(Id, ', not '), add_time(H, 'T1', Id), write(Id, '.'). %%% %%% Generating initial rules for fluent literals %%% one rule per fluent literal %%% pr_initial(Id) :- findall(X, (fluent(X),is_inertial(X)), Z1), remove_dups(Z1, Z), nl(Id), write(Id, '%%% Section: initial conditions are exogenous %%%%'), nl(Id), pr_initial(Z, Id). pr_initial([], Id):- nl(Id), write(Id, '%%% End section: initial conditions are exogenous %%%%'), nl(Id). pr_initial([L|T], Id):- pri_line(L, Id), nl(Id), pri_line(neg(L), Id),nl(Id), pr_initial(T, Id). pri_line(H, Id):- fluent(H), add_time(H, '0', Id), write(Id, ' :- not '), add_time(neg(H), '0', Id), write(Id, '.'). pri_line(neg(H), Id):- fluent(H), add_time(neg(H),'0', Id), write(Id, ' :- not '), add_time(H, '0', Id), write(Id, '.'). %%% %%% Generating rules for 'actions are exogenous' %%% two rules for each action %%% pr_ex_action(Id):- findall(A, action(A), Z), nl(Id), write(Id, '%%% Section: actions are exogenous %%%%'), nl(Id), pr_ex_action(Z, Id). pr_ex_action([], Id):- nl(Id), write(Id, '%%% End of section: actions are exogenous %%%%'), nl(Id). pr_ex_action([A|T], Id):- add_time(A, 'T', Id), write(Id, ' :- time(T), not '), add_time(neg(A), 'T', Id), write(Id, '.'), nl(Id), add_time(neg(A), 'T', Id), write(Id, ' :- time(T), not '), add_time(A, 'T', Id), write(Id, '.'), nl(Id), pr_ex_action(T, Id). %%% %%% Generating rules for section 'no actions are executed at last time' %%% one per action %%% pr_no_action(Id):- findall(A, action(A), Z), nl(Id), write(Id, '%%% Section: no actions are executed at last time %%'), nl(Id), pr_no_action(Z, Id). pr_no_action([], Id):- nl(Id), write(Id, '%%% End of section: no actions are executed at last time %%%%'), nl(Id). pr_no_action([A|T], Id):- write(Id, ':- '), add_time(A, 'lasttime', Id), write(Id, '.'), nl(Id), pr_no_action(T, Id). %%% %%% Adding the two auxiliary predicates to the domain file %%% pr_auxiliary(Id):- write(Id, '%%% Auxiliary predicates '), nl(Id), nl(Id), write(Id, 'time(0..lasttime).'), nl(Id), write(Id, 'next(T,T1):- time(T), time(T1), T1 = T + 1.'), nl(Id). %%% %%% Generating rules for each constraint %%% %%% pr_constraint(Id):- findall(X, constraint(X), Z), nl(Id), write(Id, '%%% Section: Constraints %%'), nl(Id), pr_constraint(Z,Id). pr_constraint([],Id):- nl(Id), write(Id, '%%% End of section: Constraints %%%%'), nl(Id). pr_constraint([A|T],Id):- write(Id, ':- time(T), '), add_time_list(A, 'T',Id), write(Id, '.'), nl(Id), pr_constraint(T,Id). %%% %%% Generating rules for each executability condition %%% %%% pr_impossible(Id):- findall((X,Y), impossible(X,Y), Z), nl(Id), write(Id, '%%% Section: Executability Conditions %%'), nl(Id), pr_impossible(Z,Id). pr_impossible([],Id):- nl(Id), write(Id, '%%% End of section: Executability Conditions %%%%'), nl(Id). pr_impossible([(A,L)|T],Id):- write(Id, ':- time(T), '), add_time(A, 'T',Id), length(L,N), ( eq(N,0) -> write(Id, '.'), nl(id) | write(Id, ','), add_time_list(L, 'T',Id), write(Id, '.'), nl(Id) ), pr_impossible(T,Id). %%% %%% pr_serial %%% %%% pr_serial(Id):- findall(A, action(A), Z), nl(Id), write(Id, '%%% Section: Serialization of Actions %%%'), nl(Id), pr_serial(Z,Id). pr_serial([],Id):- nl(Id), write(Id, '%%% End of section: Serialtization of Actions %%%%'), nl(Id). pr_serial([A|T],Id):- pr_serial_list(A,T,Id), pr_serial(T,Id). pr_serial_list(_,[],Id). pr_serial_list(A,[H|T],Id):- write(Id, ':- time(T), '), add_time(A, 'T',Id), write(Id, ', '), add_time(H, 'T',Id), write(Id, '. '), nl(Id), pr_serial_list(A,T,Id). %%% %%% Generating problem output file which includes %%% the initial situation and the goal %%% pr_initsit_goal(Id) :- findall(I, initially(I), Z), findall(G, goal(G), Z1), nl(Id), write(Id, '%%% File with Initial Conditions and Goal for Smodels %%%'), nl(Id), nl(Id), write(Id, 'compute 1 {'), pr_initsituation(Z,Id), length(Z1,N), ( eq(N,0) -> write(Id,'}'), nl(Id), nl(Id), write(Id, '%%% End of file with Initial Conditions and Goal %%%%'), nl(Id) | write(Id,', '), pr_goal(Z1,Id) ). pr_initsituation([],Id). pr_initsituation([G|T],Id) :- add_lasttime(G, '0', Id), length(T,N), ( eq(N,0) -> pr_initsituation([],Id) | write(Id,', '), pr_initsituation(T,Id) ). pr_goal([],Id):- write(Id,'}'), nl(Id), nl(Id), write(Id, '%%% End of file with Initial Conditions and Goal %%%%'), nl(Id). pr_goal([G|T],Id) :- add_lasttime(G, 'lasttime', Id), length(T,N), ( eq(N,0) -> pr_goal([],Id) | write(Id,', '), pr_goal(T,Id) ). add_lasttime(Term, Y, Id) :- Term=..X, length(X,N), ( eq(N,1) -> write_first(X,Id), write(Id,'('), write(Id,Y), write(Id,')') | write_list(X, Y, Id) ). write_list([G|T], Y, Id) :- ( eq(neg,G) -> write(Id,'n'), add_list(T, Y, Id) | write(Id, G), write(Id,'('), write_args(T, Y, Id) ). add_list([H|T], Y, Id) :- H=..X, length(X,N), ( eq(N,1) -> write_first(X,Id), write(Id,'('), write(Id,Y), write(Id,')') | write_list(X, Y, Id) ). write_args([], Y, Id) :- write(Id, Y), write(Id, ')'). write_args([H|T], Y, Id) :- write(Id, H), write(Id, ','), write_args(T, Y, Id). %%% %%% add_time(Term, Y, Id) %%% inserting one parameter to Term %%% the parameter indicates the time point %%% Y can be: now (T), next (T1), last (lasttime), zero (0) %%% add_time(Term, Y, Id):- Term =.. X, length(X,N), ( eq(N,1) -> write_first(X, Id), write(Id, '('), write(Id, Y), write(Id, ')') | write_time(X, Y, Id) ). write_first([X|_], Id):- write(Id, X). write_time([A|T], Y, Id):- ( eq(neg,A) -> write(Id, 'n'), add_time_list(T, Y, Id) | write(Id, A), write_arg(T, Y, Id) ). write_arg(T, Y, Id):- write(Id, '('), write_next(T, Y, Id). write_next([], Y, Id):- write(Id, Y), write(Id, ')'). write_next([H|T], Y, Id):- write(Id, H), write(Id, ','), write_next(T, Y, Id). add_time_list([], _, Id). add_time_list([H|T], Y, Id):- add_time(H, Y, Id), length(T,N), ( eq(N,0) -> write(Id, '') | write(Id, ',') ), add_time_list(T, Y, Id). eq(X,X). %%% %%% for Quintus program %%% gen:- write(' Enter domain description file name: '), get_line(S), atom_chars(Source, S), %%% get the source file name consult(Source), write(' Enter domain description output file name: '), get_line(F), atom_chars(FileDescr, F), %%% get the domain output file name write(' Enter problem output file name: '), get_line(G), atom_chars(FileProbl, G), %%% get the problem output file name write(' Generating .... '), open_file(FileDescr, write, X), pr_dynamic_causal(X), pr_static_causal(X), pr_inertial(X), pr_initial(X), pr_ex_action(X), pr_no_action(X), pr_auxiliary(X), pr_constraint(X), pr_impossible(X), pr_serial(X), pr_default(X), close(X), open_file(FileProbl, write, Y), pr_initsit_goal(Y), close(Y). ================ monkey_domain: domain input file for Smodels produced by the translator %%% Section: dynamic causal laws %%%% on(monkey,box,T1) :- next(T,T1),climb_on(monkey,box,T). on(monkey,trainer,T1) :- next(T,T1),climb_on(monkey,trainer,T). at(box,l1,T1) :- next(T,T1),push_box(monkey,l1,T). at(box,l2,T1) :- next(T,T1),push_box(monkey,l2,T). at(box,l3,T1) :- next(T,T1),push_box(monkey,l3,T). at(box,l4,T1) :- next(T,T1),push_box(monkey,l4,T). at(monkey,l1,T1) :- next(T,T1),push_box(monkey,l1,T). at(monkey,l2,T1) :- next(T,T1),push_box(monkey,l2,T). at(monkey,l3,T1) :- next(T,T1),push_box(monkey,l3,T). at(monkey,l4,T1) :- next(T,T1),push_box(monkey,l4,T). at(monkey,l1,T1) :- next(T,T1),walk(monkey,l1,T). at(monkey,l2,T1) :- next(T,T1),walk(monkey,l2,T). at(monkey,l3,T1) :- next(T,T1),walk(monkey,l3,T). at(monkey,l4,T1) :- next(T,T1),walk(monkey,l4,T). at(trainer,l1,T1) :- next(T,T1),walk(trainer,l1,T). at(trainer,l2,T1) :- next(T,T1),walk(trainer,l2,T). at(trainer,l3,T1) :- next(T,T1),walk(trainer,l3,T). at(trainer,l4,T1) :- next(T,T1),walk(trainer,l4,T). at(monkey,l1,T1) :- next(T,T1),walk(trainer,l1,T),on(monkey,trainer,T). at(monkey,l2,T1) :- next(T,T1),walk(trainer,l2,T),on(monkey,trainer,T). at(monkey,l3,T1) :- next(T,T1),walk(trainer,l3,T),on(monkey,trainer,T). at(monkey,l4,T1) :- next(T,T1),walk(trainer,l4,T),on(monkey,trainer,T). has_banana(monkey,T1) :- next(T,T1),grab_banana(monkey,T). prompted(trainer,T1) :- next(T,T1),scream(monkey,T). %%% End section: dynamic causal laws %%%% %%% Section: static causal laws %%%% nat(box,l1,T) :- time(T), at(box,l2,T). nat(box,l1,T) :- time(T), at(box,l3,T). nat(box,l1,T) :- time(T), at(box,l4,T). nat(box,l2,T) :- time(T), at(box,l1,T). nat(box,l2,T) :- time(T), at(box,l3,T). nat(box,l2,T) :- time(T), at(box,l4,T). nat(box,l3,T) :- time(T), at(box,l1,T). nat(box,l3,T) :- time(T), at(box,l2,T). nat(box,l3,T) :- time(T), at(box,l4,T). nat(box,l4,T) :- time(T), at(box,l1,T). nat(box,l4,T) :- time(T), at(box,l2,T). nat(box,l4,T) :- time(T), at(box,l3,T). nat(banana,l1,T) :- time(T), at(banana,l2,T). nat(banana,l1,T) :- time(T), at(banana,l3,T). nat(banana,l1,T) :- time(T), at(banana,l4,T). nat(banana,l2,T) :- time(T), at(banana,l1,T). nat(banana,l2,T) :- time(T), at(banana,l3,T). nat(banana,l2,T) :- time(T), at(banana,l4,T). nat(banana,l3,T) :- time(T), at(banana,l1,T). nat(banana,l3,T) :- time(T), at(banana,l2,T). nat(banana,l3,T) :- time(T), at(banana,l4,T). nat(banana,l4,T) :- time(T), at(banana,l1,T). nat(banana,l4,T) :- time(T), at(banana,l2,T). nat(banana,l4,T) :- time(T), at(banana,l3,T). nat(monkey,l1,T) :- time(T), at(monkey,l2,T). nat(monkey,l1,T) :- time(T), at(monkey,l3,T). nat(monkey,l1,T) :- time(T), at(monkey,l4,T). nat(monkey,l2,T) :- time(T), at(monkey,l1,T). nat(monkey,l2,T) :- time(T), at(monkey,l3,T). nat(monkey,l2,T) :- time(T), at(monkey,l4,T). nat(monkey,l3,T) :- time(T), at(monkey,l1,T). nat(monkey,l3,T) :- time(T), at(monkey,l2,T). nat(monkey,l3,T) :- time(T), at(monkey,l4,T). nat(monkey,l4,T) :- time(T), at(monkey,l1,T). nat(monkey,l4,T) :- time(T), at(monkey,l2,T). nat(monkey,l4,T) :- time(T), at(monkey,l3,T). nat(trainer,l1,T) :- time(T), at(trainer,l2,T). nat(trainer,l1,T) :- time(T), at(trainer,l3,T). nat(trainer,l1,T) :- time(T), at(trainer,l4,T). nat(trainer,l2,T) :- time(T), at(trainer,l1,T). nat(trainer,l2,T) :- time(T), at(trainer,l3,T). nat(trainer,l2,T) :- time(T), at(trainer,l4,T). nat(trainer,l3,T) :- time(T), at(trainer,l1,T). nat(trainer,l3,T) :- time(T), at(trainer,l2,T). nat(trainer,l3,T) :- time(T), at(trainer,l4,T). nat(trainer,l4,T) :- time(T), at(trainer,l1,T). nat(trainer,l4,T) :- time(T), at(trainer,l2,T). nat(trainer,l4,T) :- time(T), at(trainer,l3,T). at(banana,l1,T) :- time(T), has_banana(monkey,T),at(monkey,l1,T). at(banana,l2,T) :- time(T), has_banana(monkey,T),at(monkey,l2,T). at(banana,l3,T) :- time(T), has_banana(monkey,T),at(monkey,l3,T). at(banana,l4,T) :- time(T), has_banana(monkey,T),at(monkey,l4,T). %%% End section: static causal laws %%%% %%% Section: inertial %%%% has_banana(monkey,T1) :- next(T,T1),has_banana(monkey,T), not nhas_banana(monkey,T1). nhas_banana(monkey,T1) :- next(T,T1),nhas_banana(monkey,T), not has_banana(monkey,T1). at(banana,l1,T1) :- next(T,T1),at(banana,l1,T), not nat(banana,l1,T1). nat(banana,l1,T1) :- next(T,T1),nat(banana,l1,T), not at(banana,l1,T1). at(banana,l2,T1) :- next(T,T1),at(banana,l2,T), not nat(banana,l2,T1). nat(banana,l2,T1) :- next(T,T1),nat(banana,l2,T), not at(banana,l2,T1). at(banana,l3,T1) :- next(T,T1),at(banana,l3,T), not nat(banana,l3,T1). nat(banana,l3,T1) :- next(T,T1),nat(banana,l3,T), not at(banana,l3,T1). at(banana,l4,T1) :- next(T,T1),at(banana,l4,T), not nat(banana,l4,T1). nat(banana,l4,T1) :- next(T,T1),nat(banana,l4,T), not at(banana,l4,T1). at(box,l1,T1) :- next(T,T1),at(box,l1,T), not nat(box,l1,T1). nat(box,l1,T1) :- next(T,T1),nat(box,l1,T), not at(box,l1,T1). at(box,l2,T1) :- next(T,T1),at(box,l2,T), not nat(box,l2,T1). nat(box,l2,T1) :- next(T,T1),nat(box,l2,T), not at(box,l2,T1). at(box,l3,T1) :- next(T,T1),at(box,l3,T), not nat(box,l3,T1). nat(box,l3,T1) :- next(T,T1),nat(box,l3,T), not at(box,l3,T1). at(box,l4,T1) :- next(T,T1),at(box,l4,T), not nat(box,l4,T1). nat(box,l4,T1) :- next(T,T1),nat(box,l4,T), not at(box,l4,T1). at(monkey,l1,T1) :- next(T,T1),at(monkey,l1,T), not nat(monkey,l1,T1). nat(monkey,l1,T1) :- next(T,T1),nat(monkey,l1,T), not at(monkey,l1,T1). at(monkey,l2,T1) :- next(T,T1),at(monkey,l2,T), not nat(monkey,l2,T1). nat(monkey,l2,T1) :- next(T,T1),nat(monkey,l2,T), not at(monkey,l2,T1). at(monkey,l3,T1) :- next(T,T1),at(monkey,l3,T), not nat(monkey,l3,T1). nat(monkey,l3,T1) :- next(T,T1),nat(monkey,l3,T), not at(monkey,l3,T1). at(monkey,l4,T1) :- next(T,T1),at(monkey,l4,T), not nat(monkey,l4,T1). nat(monkey,l4,T1) :- next(T,T1),nat(monkey,l4,T), not at(monkey,l4,T1). at(trainer,l1,T1) :- next(T,T1),at(trainer,l1,T), not nat(trainer,l1,T1). nat(trainer,l1,T1) :- next(T,T1),nat(trainer,l1,T), not at(trainer,l1,T1). at(trainer,l2,T1) :- next(T,T1),at(trainer,l2,T), not nat(trainer,l2,T1). nat(trainer,l2,T1) :- next(T,T1),nat(trainer,l2,T), not at(trainer,l2,T1). at(trainer,l3,T1) :- next(T,T1),at(trainer,l3,T), not nat(trainer,l3,T1). nat(trainer,l3,T1) :- next(T,T1),nat(trainer,l3,T), not at(trainer,l3,T1). at(trainer,l4,T1) :- next(T,T1),at(trainer,l4,T), not nat(trainer,l4,T1). nat(trainer,l4,T1) :- next(T,T1),nat(trainer,l4,T), not at(trainer,l4,T1). on(monkey,box,T1) :- next(T,T1),on(monkey,box,T), not non(monkey,box,T1). non(monkey,box,T1) :- next(T,T1),non(monkey,box,T), not on(monkey,box,T1). on(monkey,trainer,T1) :- next(T,T1),on(monkey,trainer,T), not non(monkey,trainer,T1). non(monkey,trainer,T1) :- next(T,T1),non(monkey,trainer,T), not on(monkey,trainer,T1). %%% End section: inertial %%%% %%% Section: initial conditions are exogenous %%%% has_banana(monkey,0) :- not nhas_banana(monkey,0). nhas_banana(monkey,0) :- not has_banana(monkey,0). at(banana,l1,0) :- not nat(banana,l1,0). nat(banana,l1,0) :- not at(banana,l1,0). at(banana,l2,0) :- not nat(banana,l2,0). nat(banana,l2,0) :- not at(banana,l2,0). at(banana,l3,0) :- not nat(banana,l3,0). nat(banana,l3,0) :- not at(banana,l3,0). at(banana,l4,0) :- not nat(banana,l4,0). nat(banana,l4,0) :- not at(banana,l4,0). at(box,l1,0) :- not nat(box,l1,0). nat(box,l1,0) :- not at(box,l1,0). at(box,l2,0) :- not nat(box,l2,0). nat(box,l2,0) :- not at(box,l2,0). at(box,l3,0) :- not nat(box,l3,0). nat(box,l3,0) :- not at(box,l3,0). at(box,l4,0) :- not nat(box,l4,0). nat(box,l4,0) :- not at(box,l4,0). at(monkey,l1,0) :- not nat(monkey,l1,0). nat(monkey,l1,0) :- not at(monkey,l1,0). at(monkey,l2,0) :- not nat(monkey,l2,0). nat(monkey,l2,0) :- not at(monkey,l2,0). at(monkey,l3,0) :- not nat(monkey,l3,0). nat(monkey,l3,0) :- not at(monkey,l3,0). at(monkey,l4,0) :- not nat(monkey,l4,0). nat(monkey,l4,0) :- not at(monkey,l4,0). at(trainer,l1,0) :- not nat(trainer,l1,0). nat(trainer,l1,0) :- not at(trainer,l1,0). at(trainer,l2,0) :- not nat(trainer,l2,0). nat(trainer,l2,0) :- not at(trainer,l2,0). at(trainer,l3,0) :- not nat(trainer,l3,0). nat(trainer,l3,0) :- not at(trainer,l3,0). at(trainer,l4,0) :- not nat(trainer,l4,0). nat(trainer,l4,0) :- not at(trainer,l4,0). on(monkey,box,0) :- not non(monkey,box,0). non(monkey,box,0) :- not on(monkey,box,0). on(monkey,trainer,0) :- not non(monkey,trainer,0). non(monkey,trainer,0) :- not on(monkey,trainer,0). %%% End section: initial conditions are exogenous %%%% %%% Section: actions are exogenous %%%% climb_on(monkey,box,T) :- time(T), not nclimb_on(monkey,box,T). nclimb_on(monkey,box,T) :- time(T), not climb_on(monkey,box,T). climb_on(monkey,trainer,T) :- time(T), not nclimb_on(monkey,trainer,T). nclimb_on(monkey,trainer,T) :- time(T), not climb_on(monkey,trainer,T). push_box(monkey,l1,T) :- time(T), not npush_box(monkey,l1,T). npush_box(monkey,l1,T) :- time(T), not push_box(monkey,l1,T). push_box(monkey,l2,T) :- time(T), not npush_box(monkey,l2,T). npush_box(monkey,l2,T) :- time(T), not push_box(monkey,l2,T). push_box(monkey,l3,T) :- time(T), not npush_box(monkey,l3,T). npush_box(monkey,l3,T) :- time(T), not push_box(monkey,l3,T). push_box(monkey,l4,T) :- time(T), not npush_box(monkey,l4,T). npush_box(monkey,l4,T) :- time(T), not push_box(monkey,l4,T). walk(monkey,l1,T) :- time(T), not nwalk(monkey,l1,T). nwalk(monkey,l1,T) :- time(T), not walk(monkey,l1,T). walk(monkey,l2,T) :- time(T), not nwalk(monkey,l2,T). nwalk(monkey,l2,T) :- time(T), not walk(monkey,l2,T). walk(monkey,l3,T) :- time(T), not nwalk(monkey,l3,T). nwalk(monkey,l3,T) :- time(T), not walk(monkey,l3,T). walk(monkey,l4,T) :- time(T), not nwalk(monkey,l4,T). nwalk(monkey,l4,T) :- time(T), not walk(monkey,l4,T). walk(trainer,l1,T) :- time(T), not nwalk(trainer,l1,T). nwalk(trainer,l1,T) :- time(T), not walk(trainer,l1,T). walk(trainer,l2,T) :- time(T), not nwalk(trainer,l2,T). nwalk(trainer,l2,T) :- time(T), not walk(trainer,l2,T). walk(trainer,l3,T) :- time(T), not nwalk(trainer,l3,T). nwalk(trainer,l3,T) :- time(T), not walk(trainer,l3,T). walk(trainer,l4,T) :- time(T), not nwalk(trainer,l4,T). nwalk(trainer,l4,T) :- time(T), not walk(trainer,l4,T). grab_banana(monkey,T) :- time(T), not ngrab_banana(monkey,T). ngrab_banana(monkey,T) :- time(T), not grab_banana(monkey,T). scream(monkey,T) :- time(T), not nscream(monkey,T). nscream(monkey,T) :- time(T), not scream(monkey,T). %%% End of section: actions are exogenous %%%% %%% Section: no actions are executed at last time %% :- climb_on(monkey,box,lasttime). :- climb_on(monkey,trainer,lasttime). :- push_box(monkey,l1,lasttime). :- push_box(monkey,l2,lasttime). :- push_box(monkey,l3,lasttime). :- push_box(monkey,l4,lasttime). :- walk(monkey,l1,lasttime). :- walk(monkey,l2,lasttime). :- walk(monkey,l3,lasttime). :- walk(monkey,l4,lasttime). :- walk(trainer,l1,lasttime). :- walk(trainer,l2,lasttime). :- walk(trainer,l3,lasttime). :- walk(trainer,l4,lasttime). :- grab_banana(monkey,lasttime). :- scream(monkey,lasttime). %%% End of section: no actions are executed at last time %%%% %%% Auxiliary predicates time(0..lasttime). next(T,T1):- time(T), time(T1), T1 = T + 1. %%% Section: Constraints %% %%% End of section: Constraints %%%% %%% Section: Executability Conditions %% :- time(T), climb_on(monkey,box,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), climb_on(monkey,box,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), climb_on(monkey,box,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), climb_on(monkey,box,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), climb_on(monkey,trainer,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), climb_on(monkey,trainer,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), climb_on(monkey,trainer,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), climb_on(monkey,trainer,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), push_box(monkey,l1,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), push_box(monkey,l1,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), push_box(monkey,l1,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), push_box(monkey,l1,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), push_box(monkey,l2,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), push_box(monkey,l2,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), push_box(monkey,l2,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), push_box(monkey,l2,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), push_box(monkey,l3,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), push_box(monkey,l3,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), push_box(monkey,l3,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), push_box(monkey,l3,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), push_box(monkey,l4,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), push_box(monkey,l4,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), push_box(monkey,l4,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), push_box(monkey,l4,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), walk(monkey,l1,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), walk(monkey,l1,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), walk(monkey,l1,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), walk(monkey,l1,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), walk(monkey,l2,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), walk(monkey,l2,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), walk(monkey,l2,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), walk(monkey,l2,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), walk(monkey,l3,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), walk(monkey,l3,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), walk(monkey,l3,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), walk(monkey,l3,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), walk(monkey,l4,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), walk(monkey,l4,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), walk(monkey,l4,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), walk(monkey,l4,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), walk(trainer,l1,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), walk(trainer,l1,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), walk(trainer,l1,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), walk(trainer,l2,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), walk(trainer,l2,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), walk(trainer,l2,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), walk(trainer,l3,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), walk(trainer,l3,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), walk(trainer,l3,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), walk(trainer,l4,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), walk(trainer,l4,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), walk(trainer,l4,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), grab_banana(monkey,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), grab_banana(monkey,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), grab_banana(monkey,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), grab_banana(monkey,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), scream(monkey,T),prompted(trainer,T),at(monkey,l1,T). :- time(T), scream(monkey,T),prompted(trainer,T),at(monkey,l2,T). :- time(T), scream(monkey,T),prompted(trainer,T),at(monkey,l3,T). :- time(T), scream(monkey,T),prompted(trainer,T),at(monkey,l4,T). :- time(T), climb_on(monkey,box,T),on(monkey,box,T). :- time(T), climb_on(monkey,trainer,T),on(monkey,trainer,T). :- time(T), climb_on(monkey,box,T),at(monkey,l1,T),at(box,l2,T). :- time(T), climb_on(monkey,box,T),at(monkey,l1,T),at(box,l3,T). :- time(T), climb_on(monkey,box,T),at(monkey,l1,T),at(box,l4,T). :- time(T), climb_on(monkey,box,T),at(monkey,l2,T),at(box,l1,T). :- time(T), climb_on(monkey,box,T),at(monkey,l2,T),at(box,l3,T). :- time(T), climb_on(monkey,box,T),at(monkey,l2,T),at(box,l4,T). :- time(T), climb_on(monkey,box,T),at(monkey,l3,T),at(box,l1,T). :- time(T), climb_on(monkey,box,T),at(monkey,l3,T),at(box,l2,T). :- time(T), climb_on(monkey,box,T),at(monkey,l3,T),at(box,l4,T). :- time(T), climb_on(monkey,box,T),at(monkey,l4,T),at(box,l1,T). :- time(T), climb_on(monkey,box,T),at(monkey,l4,T),at(box,l2,T). :- time(T), climb_on(monkey,box,T),at(monkey,l4,T),at(box,l3,T). :- time(T), climb_on(monkey,trainer,T),at(monkey,l1,T),at(trainer,l2,T). :- time(T), climb_on(monkey,trainer,T),at(monkey,l1,T),at(trainer,l3,T). :- time(T), climb_on(monkey,trainer,T),at(monkey,l1,T),at(trainer,l4,T). :- time(T), climb_on(monkey,trainer,T),at(monkey,l2,T),at(trainer,l1,T). :- time(T), climb_on(monkey,trainer,T),at(monkey,l2,T),at(trainer,l3,T). :- time(T), climb_on(monkey,trainer,T),at(monkey,l2,T),at(trainer,l4,T). :- time(T), climb_on(monkey,trainer,T),at(monkey,l3,T),at(trainer,l1,T). :- time(T), climb_on(monkey,trainer,T),at(monkey,l3,T),at(trainer,l2,T). :- time(T), climb_on(monkey,trainer,T),at(monkey,l3,T),at(trainer,l4,T). :- time(T), climb_on(monkey,trainer,T),at(monkey,l4,T),at(trainer,l1,T). :- time(T), climb_on(monkey,trainer,T),at(monkey,l4,T),at(trainer,l2,T). :- time(T), climb_on(monkey,trainer,T),at(monkey,l4,T),at(trainer,l3,T). :- time(T), push_box(monkey,l1,T),on(monkey,box,T). :- time(T), push_box(monkey,l1,T),on(monkey,trainer,T). :- time(T), push_box(monkey,l2,T),on(monkey,box,T). :- time(T), push_box(monkey,l2,T),on(monkey,trainer,T). :- time(T), push_box(monkey,l3,T),on(monkey,box,T). :- time(T), push_box(monkey,l3,T),on(monkey,trainer,T). :- time(T), push_box(monkey,l4,T),on(monkey,box,T). :- time(T), push_box(monkey,l4,T),on(monkey,trainer,T). :- time(T), push_box(monkey,l1,T),at(box,l1,T). :- time(T), push_box(monkey,l2,T),at(box,l2,T). :- time(T), push_box(monkey,l3,T),at(box,l3,T). :- time(T), push_box(monkey,l4,T),at(box,l4,T). :- time(T), push_box(monkey,l1,T),at(monkey,l1,T),at(box,l2,T). :- time(T), push_box(monkey,l1,T),at(monkey,l1,T),at(box,l3,T). :- time(T), push_box(monkey,l1,T),at(monkey,l1,T),at(box,l4,T). :- time(T), push_box(monkey,l1,T),at(monkey,l2,T),at(box,l1,T). :- time(T), push_box(monkey,l1,T),at(monkey,l2,T),at(box,l3,T). :- time(T), push_box(monkey,l1,T),at(monkey,l2,T),at(box,l4,T). :- time(T), push_box(monkey,l1,T),at(monkey,l3,T),at(box,l1,T). :- time(T), push_box(monkey,l1,T),at(monkey,l3,T),at(box,l2,T). :- time(T), push_box(monkey,l1,T),at(monkey,l3,T),at(box,l4,T). :- time(T), push_box(monkey,l1,T),at(monkey,l4,T),at(box,l1,T). :- time(T), push_box(monkey,l1,T),at(monkey,l4,T),at(box,l2,T). :- time(T), push_box(monkey,l1,T),at(monkey,l4,T),at(box,l3,T). :- time(T), push_box(monkey,l2,T),at(monkey,l1,T),at(box,l2,T). :- time(T), push_box(monkey,l2,T),at(monkey,l1,T),at(box,l3,T). :- time(T), push_box(monkey,l2,T),at(monkey,l1,T),at(box,l4,T). :- time(T), push_box(monkey,l2,T),at(monkey,l2,T),at(box,l1,T). :- time(T), push_box(monkey,l2,T),at(monkey,l2,T),at(box,l3,T). :- time(T), push_box(monkey,l2,T),at(monkey,l2,T),at(box,l4,T). :- time(T), push_box(monkey,l2,T),at(monkey,l3,T),at(box,l1,T). :- time(T), push_box(monkey,l2,T),at(monkey,l3,T),at(box,l2,T). :- time(T), push_box(monkey,l2,T),at(monkey,l3,T),at(box,l4,T). :- time(T), push_box(monkey,l2,T),at(monkey,l4,T),at(box,l1,T). :- time(T), push_box(monkey,l2,T),at(monkey,l4,T),at(box,l2,T). :- time(T), push_box(monkey,l2,T),at(monkey,l4,T),at(box,l3,T). :- time(T), push_box(monkey,l3,T),at(monkey,l1,T),at(box,l2,T). :- time(T), push_box(monkey,l3,T),at(monkey,l1,T),at(box,l3,T). :- time(T), push_box(monkey,l3,T),at(monkey,l1,T),at(box,l4,T). :- time(T), push_box(monkey,l3,T),at(monkey,l2,T),at(box,l1,T). :- time(T), push_box(monkey,l3,T),at(monkey,l2,T),at(box,l3,T). :- time(T), push_box(monkey,l3,T),at(monkey,l2,T),at(box,l4,T). :- time(T), push_box(monkey,l3,T),at(monkey,l3,T),at(box,l1,T). :- time(T), push_box(monkey,l3,T),at(monkey,l3,T),at(box,l2,T). :- time(T), push_box(monkey,l3,T),at(monkey,l3,T),at(box,l4,T). :- time(T), push_box(monkey,l3,T),at(monkey,l4,T),at(box,l1,T). :- time(T), push_box(monkey,l3,T),at(monkey,l4,T),at(box,l2,T). :- time(T), push_box(monkey,l3,T),at(monkey,l4,T),at(box,l3,T). :- time(T), push_box(monkey,l4,T),at(monkey,l1,T),at(box,l2,T). :- time(T), push_box(monkey,l4,T),at(monkey,l1,T),at(box,l3,T). :- time(T), push_box(monkey,l4,T),at(monkey,l1,T),at(box,l4,T). :- time(T), push_box(monkey,l4,T),at(monkey,l2,T),at(box,l1,T). :- time(T), push_box(monkey,l4,T),at(monkey,l2,T),at(box,l3,T). :- time(T), push_box(monkey,l4,T),at(monkey,l2,T),at(box,l4,T). :- time(T), push_box(monkey,l4,T),at(monkey,l3,T),at(box,l1,T). :- time(T), push_box(monkey,l4,T),at(monkey,l3,T),at(box,l2,T). :- time(T), push_box(monkey,l4,T),at(monkey,l3,T),at(box,l4,T). :- time(T), push_box(monkey,l4,T),at(monkey,l4,T),at(box,l1,T). :- time(T), push_box(monkey,l4,T),at(monkey,l4,T),at(box,l2,T). :- time(T), push_box(monkey,l4,T),at(monkey,l4,T),at(box,l3,T). :- time(T), walk(monkey,l1,T),on(monkey,box,T). :- time(T), walk(monkey,l1,T),on(monkey,trainer,T). :- time(T), walk(monkey,l2,T),on(monkey,box,T). :- time(T), walk(monkey,l2,T),on(monkey,trainer,T). :- time(T), walk(monkey,l3,T),on(monkey,box,T). :- time(T), walk(monkey,l3,T),on(monkey,trainer,T). :- time(T), walk(monkey,l4,T),on(monkey,box,T). :- time(T), walk(monkey,l4,T),on(monkey,trainer,T). :- time(T), walk(monkey,l1,T),at(monkey,l1,T). :- time(T), walk(monkey,l2,T),at(monkey,l2,T). :- time(T), walk(monkey,l3,T),at(monkey,l3,T). :- time(T), walk(monkey,l4,T),at(monkey,l4,T). :- time(T), walk(trainer,l1,T),at(trainer,l1,T). :- time(T), walk(trainer,l2,T),at(trainer,l2,T). :- time(T), walk(trainer,l3,T),at(trainer,l3,T). :- time(T), walk(trainer,l4,T),at(trainer,l4,T). :- time(T), grab_banana(monkey,T),has_banana(monkey,T). :- time(T), grab_banana(monkey,T),at(monkey,l1,T),at(banana,l2,T). :- time(T), grab_banana(monkey,T),at(monkey,l1,T),at(banana,l3,T). :- time(T), grab_banana(monkey,T),at(monkey,l1,T),at(banana,l4,T). :- time(T), grab_banana(monkey,T),at(monkey,l2,T),at(banana,l1,T). :- time(T), grab_banana(monkey,T),at(monkey,l2,T),at(banana,l3,T). :- time(T), grab_banana(monkey,T),at(monkey,l2,T),at(banana,l4,T). :- time(T), grab_banana(monkey,T),at(monkey,l3,T),at(banana,l1,T). :- time(T), grab_banana(monkey,T),at(monkey,l3,T),at(banana,l2,T). :- time(T), grab_banana(monkey,T),at(monkey,l3,T),at(banana,l4,T). :- time(T), grab_banana(monkey,T),at(monkey,l4,T),at(banana,l1,T). :- time(T), grab_banana(monkey,T),at(monkey,l4,T),at(banana,l2,T). :- time(T), grab_banana(monkey,T),at(monkey,l4,T),at(banana,l3,T). :- time(T), grab_banana(monkey,T),non(monkey,box,T),non(monkey,trainer,T). :- time(T), scream(monkey,T),on(monkey,box,T). :- time(T), scream(monkey,T),on(monkey,trainer,T). :- time(T), scream(monkey,T),at(monkey,l1,T),at(trainer,l1,T). :- time(T), scream(monkey,T),at(monkey,l2,T),at(trainer,l2,T). :- time(T), scream(monkey,T),at(monkey,l3,T),at(trainer,l3,T). :- time(T), scream(monkey,T),at(monkey,l4,T),at(trainer,l4,T). %%% End of section: Executability Conditions %%%% %%% Section: Serialization of Actions %%% :- time(T), climb_on(monkey,box,T), climb_on(monkey,trainer,T). :- time(T), climb_on(monkey,box,T), push_box(monkey,l1,T). :- time(T), climb_on(monkey,box,T), push_box(monkey,l2,T). :- time(T), climb_on(monkey,box,T), push_box(monkey,l3,T). :- time(T), climb_on(monkey,box,T), push_box(monkey,l4,T). :- time(T), climb_on(monkey,box,T), walk(monkey,l1,T). :- time(T), climb_on(monkey,box,T), walk(monkey,l2,T). :- time(T), climb_on(monkey,box,T), walk(monkey,l3,T). :- time(T), climb_on(monkey,box,T), walk(monkey,l4,T). :- time(T), climb_on(monkey,box,T), walk(trainer,l1,T). :- time(T), climb_on(monkey,box,T), walk(trainer,l2,T). :- time(T), climb_on(monkey,box,T), walk(trainer,l3,T). :- time(T), climb_on(monkey,box,T), walk(trainer,l4,T). :- time(T), climb_on(monkey,box,T), grab_banana(monkey,T). :- time(T), climb_on(monkey,box,T), scream(monkey,T). :- time(T), climb_on(monkey,trainer,T), push_box(monkey,l1,T). :- time(T), climb_on(monkey,trainer,T), push_box(monkey,l2,T). :- time(T), climb_on(monkey,trainer,T), push_box(monkey,l3,T). :- time(T), climb_on(monkey,trainer,T), push_box(monkey,l4,T). :- time(T), climb_on(monkey,trainer,T), walk(monkey,l1,T). :- time(T), climb_on(monkey,trainer,T), walk(monkey,l2,T). :- time(T), climb_on(monkey,trainer,T), walk(monkey,l3,T). :- time(T), climb_on(monkey,trainer,T), walk(monkey,l4,T). :- time(T), climb_on(monkey,trainer,T), walk(trainer,l1,T). :- time(T), climb_on(monkey,trainer,T), walk(trainer,l2,T). :- time(T), climb_on(monkey,trainer,T), walk(trainer,l3,T). :- time(T), climb_on(monkey,trainer,T), walk(trainer,l4,T). :- time(T), climb_on(monkey,trainer,T), grab_banana(monkey,T). :- time(T), climb_on(monkey,trainer,T), scream(monkey,T). :- time(T), push_box(monkey,l1,T), push_box(monkey,l2,T). :- time(T), push_box(monkey,l1,T), push_box(monkey,l3,T). :- time(T), push_box(monkey,l1,T), push_box(monkey,l4,T). :- time(T), push_box(monkey,l1,T), walk(monkey,l1,T). :- time(T), push_box(monkey,l1,T), walk(monkey,l2,T). :- time(T), push_box(monkey,l1,T), walk(monkey,l3,T). :- time(T), push_box(monkey,l1,T), walk(monkey,l4,T). :- time(T), push_box(monkey,l1,T), walk(trainer,l1,T). :- time(T), push_box(monkey,l1,T), walk(trainer,l2,T). :- time(T), push_box(monkey,l1,T), walk(trainer,l3,T). :- time(T), push_box(monkey,l1,T), walk(trainer,l4,T). :- time(T), push_box(monkey,l1,T), grab_banana(monkey,T). :- time(T), push_box(monkey,l1,T), scream(monkey,T). :- time(T), push_box(monkey,l2,T), push_box(monkey,l3,T). :- time(T), push_box(monkey,l2,T), push_box(monkey,l4,T). :- time(T), push_box(monkey,l2,T), walk(monkey,l1,T). :- time(T), push_box(monkey,l2,T), walk(monkey,l2,T). :- time(T), push_box(monkey,l2,T), walk(monkey,l3,T). :- time(T), push_box(monkey,l2,T), walk(monkey,l4,T). :- time(T), push_box(monkey,l2,T), walk(trainer,l1,T). :- time(T), push_box(monkey,l2,T), walk(trainer,l2,T). :- time(T), push_box(monkey,l2,T), walk(trainer,l3,T). :- time(T), push_box(monkey,l2,T), walk(trainer,l4,T). :- time(T), push_box(monkey,l2,T), grab_banana(monkey,T). :- time(T), push_box(monkey,l2,T), scream(monkey,T). :- time(T), push_box(monkey,l3,T), push_box(monkey,l4,T). :- time(T), push_box(monkey,l3,T), walk(monkey,l1,T). :- time(T), push_box(monkey,l3,T), walk(monkey,l2,T). :- time(T), push_box(monkey,l3,T), walk(monkey,l3,T). :- time(T), push_box(monkey,l3,T), walk(monkey,l4,T). :- time(T), push_box(monkey,l3,T), walk(trainer,l1,T). :- time(T), push_box(monkey,l3,T), walk(trainer,l2,T). :- time(T), push_box(monkey,l3,T), walk(trainer,l3,T). :- time(T), push_box(monkey,l3,T), walk(trainer,l4,T). :- time(T), push_box(monkey,l3,T), grab_banana(monkey,T). :- time(T), push_box(monkey,l3,T), scream(monkey,T). :- time(T), push_box(monkey,l4,T), walk(monkey,l1,T). :- time(T), push_box(monkey,l4,T), walk(monkey,l2,T). :- time(T), push_box(monkey,l4,T), walk(monkey,l3,T). :- time(T), push_box(monkey,l4,T), walk(monkey,l4,T). :- time(T), push_box(monkey,l4,T), walk(trainer,l1,T). :- time(T), push_box(monkey,l4,T), walk(trainer,l2,T). :- time(T), push_box(monkey,l4,T), walk(trainer,l3,T). :- time(T), push_box(monkey,l4,T), walk(trainer,l4,T). :- time(T), push_box(monkey,l4,T), grab_banana(monkey,T). :- time(T), push_box(monkey,l4,T), scream(monkey,T). :- time(T), walk(monkey,l1,T), walk(monkey,l2,T). :- time(T), walk(monkey,l1,T), walk(monkey,l3,T). :- time(T), walk(monkey,l1,T), walk(monkey,l4,T). :- time(T), walk(monkey,l1,T), walk(trainer,l1,T). :- time(T), walk(monkey,l1,T), walk(trainer,l2,T). :- time(T), walk(monkey,l1,T), walk(trainer,l3,T). :- time(T), walk(monkey,l1,T), walk(trainer,l4,T). :- time(T), walk(monkey,l1,T), grab_banana(monkey,T). :- time(T), walk(monkey,l1,T), scream(monkey,T). :- time(T), walk(monkey,l2,T), walk(monkey,l3,T). :- time(T), walk(monkey,l2,T), walk(monkey,l4,T). :- time(T), walk(monkey,l2,T), walk(trainer,l1,T). :- time(T), walk(monkey,l2,T), walk(trainer,l2,T). :- time(T), walk(monkey,l2,T), walk(trainer,l3,T). :- time(T), walk(monkey,l2,T), walk(trainer,l4,T). :- time(T), walk(monkey,l2,T), grab_banana(monkey,T). :- time(T), walk(monkey,l2,T), scream(monkey,T). :- time(T), walk(monkey,l3,T), walk(monkey,l4,T). :- time(T), walk(monkey,l3,T), walk(trainer,l1,T). :- time(T), walk(monkey,l3,T), walk(trainer,l2,T). :- time(T), walk(monkey,l3,T), walk(trainer,l3,T). :- time(T), walk(monkey,l3,T), walk(trainer,l4,T). :- time(T), walk(monkey,l3,T), grab_banana(monkey,T). :- time(T), walk(monkey,l3,T), scream(monkey,T). :- time(T), walk(monkey,l4,T), walk(trainer,l1,T). :- time(T), walk(monkey,l4,T), walk(trainer,l2,T). :- time(T), walk(monkey,l4,T), walk(trainer,l3,T). :- time(T), walk(monkey,l4,T), walk(trainer,l4,T). :- time(T), walk(monkey,l4,T), grab_banana(monkey,T). :- time(T), walk(monkey,l4,T), scream(monkey,T). :- time(T), walk(trainer,l1,T), walk(trainer,l2,T). :- time(T), walk(trainer,l1,T), walk(trainer,l3,T). :- time(T), walk(trainer,l1,T), walk(trainer,l4,T). :- time(T), walk(trainer,l1,T), grab_banana(monkey,T). :- time(T), walk(trainer,l1,T), scream(monkey,T). :- time(T), walk(trainer,l2,T), walk(trainer,l3,T). :- time(T), walk(trainer,l2,T), walk(trainer,l4,T). :- time(T), walk(trainer,l2,T), grab_banana(monkey,T). :- time(T), walk(trainer,l2,T), scream(monkey,T). :- time(T), walk(trainer,l3,T), walk(trainer,l4,T). :- time(T), walk(trainer,l3,T), grab_banana(monkey,T). :- time(T), walk(trainer,l3,T), scream(monkey,T). :- time(T), walk(trainer,l4,T), grab_banana(monkey,T). :- time(T), walk(trainer,l4,T), scream(monkey,T). :- time(T), grab_banana(monkey,T), scream(monkey,T). %%% End of section: Serialtization of Actions %%%% %%% Section: default laws %%%% nprompted(trainer,T) :- time(T), not prompted(trainer,T). %%% End section: default laws %%%% ==================== monkey_problem - initial situation and goal file produced by the translator %%% File with Initial Conditions and Goal for Smodels %%% compute 1 {non(monkey,box,0), non(monkey,trainer,0), nhas_banana(monkey,0), at(monkey,l1,0), at(banana,l2,0), at(box,l3,0), at(trainer,l4,0), nprompted(trainer,0), has_banana(monkey,lasttime)} %%% End of file with Initial Conditions and Goal %%%%