12:-module(htncode,[]).
13
14:-multifile(user:push_env_ctx/0). 15:-dynamic(user:push_env_ctx/0). 16
21
23:- ensure_loaded(library(logicmoo_common)). 24:- ensure_loaded(library(planner_api)). 25:- use_module(library(logicmoo_planner)). 26
27:- kb_shared(baseKB:mpred_prop/3). 28
29:- ensure_loaded(library(logicmoo/util_structs)). 30:- ensure_loaded(library(logicmoo/util_bb_env)). 31:- prolog_load_context(file,File),ain(user:env_source_file(File)). 32
33:-op(500,fx,env_call).
35
43
44
45planner_failure(Why,Info):-dmsg(error,Why-Info),banner_party(error,'FAILURE_PLANNER'),print_message(error,'FAILURE_PLANNER'(Why,Info)),!. 46
47:-thread_local t_l:doing/1. 48
49statistics_runtime(CP):-statistics(runtime,[_,CP0]), (CP0==0 -> CP= 0.0000000000001 ; CP is (CP0/1000)) . 50statistics_walltime(CP):-statistics(walltime,[_,CP0]), (CP0==0 -> CP= 0.0000000000001 ; CP is (CP0/1000)) . 51
52
53
76 81:-dynamic my_stats/1.
82
83
84:-multifile(on_call_decl_hyhtn/0). 85:-export(on_call_decl_hyhtn/0). 87on_call_decl_hyhtn :- decl_env_mpred_dom([kb(dom,tasks),stubType(dyn)], ( htn_task/3, planner_task/3, planner_task_slow/3 )).
88
89on_call_decl_hyhtn :- decl_env_mpred_dom([stubType(dyn),kb(dom,cache)],(temp_assertIndivConds/1)). 90on_call_decl_hyhtn :- decl_env_mpred_dom([stubType(dyn),kb(dom,cache)],(is_of_primitive_sort/2, is_of_sort/2)).
91on_call_decl_hyhtn :- decl_env_mpred_dom([stubType(dyn),kb(dom,cache)],(methodC/7, opParent/6,operatorC/5,gOperator/3)).
92on_call_decl_hyhtn :- decl_env_mpred_dom([stubType(dyn),kb(dom,cache)],(objectsC/2,objectsD/2,atomic_invariantsC/1)). 93on_call_decl_hyhtn :- decl_env_mpred_dom([stubType(dyn),kb(dom,cache)],(objectsOfSort/2)). 94on_call_decl_hyhtn :- decl_env_mpred_dom([stubType(dyn),kb(dom,cache) ,(related_op/2, gsubstate_classes/3, gsstates/3)).
95
96on_call_decl_hyhtn :- decl_env_mpred_task([stubType(dyn),kb(node,cache)],(initial_state/1)).
97on_call_decl_hyhtn :- decl_env_mpred_task([stubType(dyn),kb(node,cache) ,(op_score/2)).
98on_call_decl_hyhtn :- decl_env_mpred_task([stubType(dyn),kb(node,cache),(node/5,final_node/1)).
99on_call_decl_hyhtn :- decl_env_mpred_task([stubType(dyn),kb(node,cache)],(tp_goal/3,closed_node/6,solved_node/2, goal_related_search/1)).
101on_call_decl_hyhtn :- decl_env_mpred_task([stubType(dyn),kb(node,cache)],(goal_related/3)).
102on_call_decl_hyhtn :- decl_env_mpred_task([stubType(dyn),kb(node,cache)],(current_num/2)).
103on_call_decl_hyhtn :- decl_env_mpred_task([stubType(dyn),kb(node,cache)],(tn/6)). 104on_call_decl_hyhtn :- decl_env_mpred_task([stubType(dyn),kb(node,cache)],(tp_node/6)).
107
109on_call_decl_hyhtn :- decl_env_mpred_dom([kb(dom,tasks),stubType(dyn)], ( htn_task/3, planner_task/3, planner_task_slow/3 )).
110
112on_call_decl_hyhtn :-
113 decl_env_mpred_dom([kb(dom,file),stubType(dyn)],[domain_name/1,sorts/2,substate_classes/3,objects/2,predicates/1,inconsistent_constraint/1,atomic_invariants/1,
114 implied_invariant/2,operator/4,
115 116 method/6]).
117
118:-export(call_decl_hyhtn/0). 119
121
122call_decl_hyhtn:-must(doall(on_call_decl_hyhtn)).
123
125 126
127
128
132
133
135tryff(Call):- predicate_property(Call,_),!,once(tryf((Call,assert(passed_test_try(Call))))),fail.
136tryf(Call):- predicate_property(Call,_),!,catch(Call,E,dmsg(E = Call)).
137trye(Call):- catch(Call,E,((dmsg(error(E , Call)),throw(trace),Call))).
138
139:-dynamic(passed_test_try/1). 140:-dynamic(testing_already/0). 141
142check_passed_any:-not(not(passed_test_try(_))),nl,listing(passed_test_try/1).
143
144ttm:-retractall(passed_test_try(_)),fail.
145ttm:-testing_already,!.
146ttm:-asserta(testing_already), make, retractall(testing_already),fail.
147
148
149:-export(banner_party/2). 150banner_party(E,BANNER):-
151 ansicall(yellow,(
152 format("% xxxxxxxxxxxxxxx ~w xxxxxxxxxxxxxxxxxxx~n",[E]),
153 forall(t_l:doing(X),dmsg(E,doing(X))),
154 dmsg5(E,BANNER),
155 format("% xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx~n",[]))).
156
157
158subst_eq_h(A,B,C,D):- nd_subst(A,B,C,D),!.
159subst_eq_h(A,B,C,D):- throw(trace), nd_subst(A,B,C,D),!.
160
161
162:-export(term_expansion_alias/2). 163term_expansion_alias(In,Out):-term_expansion_alias([],In,Out).
164term_expansion_alias(Not,In,Out):-term_alias(I,O),not(member(I,Not)),subst_eq_h(In,I,O,M), In\=@=M,!, term_expansion_alias([I|Not],M,Out).
165term_expansion_alias(_Not,InOut,InOut).
166term_alias(cond,se).
167term_alias(se,se).
168term_alias(state,ss).
169term_alias(trans,sc).
170term_alias(ne,dif).
171term_alias(neq,dif).
173term_alias(startOcl,start).
174term_alias(startOCL,start).
175
176
179
180
181tasks:-
182 Call = get_tasks(N,Goal,State),
183 setof(Call,Call,List),list_to_set(List,Set),!,
184 env_info(kb(dom,file)),!,
185 once((ignore(forall(member(Call,Set),
186 locally(t_l:doing(tasks(N,Goal)),
187 ((
188 must(nonvar(Goal)),must(nonvar(State)),
189 ignore(N=Goal),
190 must((term_expansion_alias((Goal:-State),(GGoal:-GState)))),
191 must(nonvar(GGoal)),must(nonvar(GState)),
192 banner_party(informational,('GOAL'(N):-GGoal)),
193 must(((once( once(startOCL(GGoal,GState))*->banner_party(informational,'SUCCESSS');banner_party(error,'FAILUR!!!!!!!!!!!!!!!!!!!!!!!!!!!E')))))))))))).
194
195t:- once(run_header_tests).
196
197tt:-catch(ttm,E,dmsg(E)),!.
198
199tt:-tryff((tasks)).
200tt:-tryff((task1)).
201tt:-tryff((task2)).
202tt:-tryff((task3)).
203tt:-tryff((task4)).
204tt:-tryff((task5)).
205tt:-tryff((task6)).
206tt:-tryff((task7)).
207tt:-tryff((task8)).
208tt:-tryff((task9)).
209tt:-tryff((task10)).
210tt:-tryff((task11)).
211tt:-tryff((task22)).
212tt:-tryff((task33)).
213tt:-tryff((task44)).
214tt:-check_passed_any,!.
215
216
217tdom:-tdom([htn1,ty,ocl1,r3]).
218tdom2:-tdom([ocl2,htn2,htn3,htn4]).
219
220tdomfile(F):-tdomcall(load_data_file(F)).
221tdomcall(Call):- trye(once((env_clear_doms_and_tasks,trye(Call),tt))).
222
223tdom([]):-!.
224tdom([H|T]):- !, tdom(H),tdom(T).
225tdom(H):- predicate_property(H,_),!, throw(trace),call(H).
226tdom(F):- tdom1(F),!.
227tdom(F):- expand_file_name(F,List),List\=[],!,tdom1(List).
228tdom(F):- throw(tdom(F)).
229
230tdom1([]):-!.
231tdom1([H|T]):- !, tdom(H),tdom(T).
232tdom1(F):- tdom2(F),!.
233tdom1(FIn):- atom(FIn),tdom2(FIn).
234
235tdom2(FIn):- tdom3(FIn),!.
236tdom2(FIn):- atom_concat('domains_ocl/',FIn,F), tdom3(F),!.
237
238tdom3(FIn):- tdom4(FIn).
239tdom3(FIn):- atom_concat(FIn,'htn',F),tdom4(F).
240tdom3(FIn):- atom_concat(FIn,'ocl',F),tdom4(F).
241
242tdom4(F):- exists_file(F),!,tdomfile(F).
243
244
245:- discontiguous(post_header_hook/0).:-retractall(canDoTermExp).
249post_header_hook:-asserta(canDoTermExp).
250
251:-export(env_clear_doms_and_tasks/0). 252env_clear_doms_and_tasks:- env_clear(kb(dom,file)),env_clear(kb(dom,tasks)),env_clear(kb(dom,cache)),!.
253
254:- op(100,xfy,( cl:('=>'))). 255
257post_header_hook:-set_prolog_flag(verbose_load,full).
258post_header_hook:-use_module(library(lists)).
259
261:- style_check(-singleton). 262:- style_check(+discontiguous). 263
264
266:-if(exists_source(library(gui_tracer))). 267post_header_hook:- user:use_module(library(gui_tracer)),catch(guitracer,_,true).
268:-endif.:- !.
270post_header:- dmsg(post_header),fail, forall(clause(post_header_hook,G),G).
271
272
273:- discontiguous(header_tests/0). 274
275run_tests(Call) :-
276 statistics_runtime(InTime),
277 locally(doing(run_tests(Call)),
278 call_cleanup(Call,
279 ((
280 statistics_runtime(OutTime),
281 Time is OutTime - InTime,
282 banner_party(informational,runtests(Call) = time(Time)))))).
283
:- run_tests(forall(clause(header_tests,G),run_tests(G))).
285
286
287:-export(test_ocl/1). 288test_ocl(File):- forall(filematch(File,FM),test_ocl0(FM)).
289test_ocl0(File):- time(locally(t_l:doing(test_ocl(File)),
290 once((env_clear_doms_and_tasks,clean_problem,l_file(File),tasks)))).
291
:-test_ocl('domains_ocl/*.ocl').
293
294
295:- style_check(-singleton). 296:- style_check(-discontiguous). 298
300
301
302:-use_module(library(system)).
303
304
305
306:- dynamic htn_task/3.
307:- multifile htn_task/3.
308:- dynamic planner_task/3.
309
310htn_task(Id,Goal,Init):-planner_task(Id,Goal,Init).
311
314:-dynamic
315
316 domain_name/1,
317 sorts/2,
318 objects/2,
319 predicates/1,
320 atomic_invariants/1,
321 substate_classes/3,
322 method/6,
323 operator/4,
324 implied_invariant/2,
325 inconsistent_constraint/1.
326
327:-discontiguous
328 domain_name/1,
329 sorts/2,
330 objects/2,
331 predicates/1,
332 atomic_invariants/1,
333 substate_classes/3,
334 method/6,
335 operator/4,
336 implied_invariant/2,
337 inconsistent_constraint/1. 338
339
346
347
349:- dynamic kill_file/1,solution_file/1.
351my_stats(0).
352solution_file(fred).
353
354
357:- dynamic gsstates/3, gpred/2.
358:- op(100,xfy,'=>').
371
372:- dynamic op_num/1.
373:- dynamic sum/1.
375:- dynamic methodC/7, operatorC/5, my_stats/1.
377:- dynamic tp_node/6,tn/6.
378:- dynamic solved_node/2.
379:- dynamic closed_node/6.
380:- dynamic gsubstate_classes/3.
381:- dynamic current_num/2.
382:- dynamic produce/4,goal_related/1. 383
384incr_op_num:- flag(op_num,X,X+1).
385set_op_num(X):-flag(op_num,_,X).
386current_op_num(X):- flag(op_num,X,X).
387
388
389
390startOCL(Goal,Init):-
391 clean_problem,
392 dmsg('OCL-PLANNER-TASK'(Goal)),
393 must(planner_interface(Goal,Init,Sol,_,TNLst)),
394 show_result_and_clean(F,Id,Sol,TNLst).
395
396
397get_tasks(N,Goal,State):- htn_task(N,Goal,State).
399get_tasks(N,Goal,State):- env_call planner_task(N,Goal,State).
400
401:- set_op_num(0). 402:-asserta(my_stats(0)). 403
404l_file(File):- \+ exists_file(File),!,forall(filematch(File,FM),l_file(FM)).
405l_file(F):- env_consult(ocl:F).
406l_file(F):-
407 if_defined(cl:force_reload_mpred_file(F),
408 if_defined(cl:with_mpred_consult(cl:consult(F)),cl:consult(F))).
409
410solve_file(F):-with_filematch(l_file(wfm(F))), doall(solve(_)).
411solve:- solve_file(test_hyhtn).
412
413
414
415solve(Id) :- fail,
416 no_repeats(get_tasks(Id,Goal,Init)),
417 planner_interface(Goal,Init,Sol,_),
418 show_result_and_clean(_,Id,Sol,[Id]).
419
420solve(Id) :-
421 htn_task(Id,Goal,Init),
422 once(planner_interface(Goal,Init,Sol,_)),
431 clean_problem.
432
433show_result_and_clean(F,Id,Sol,TNLst):-
434 435 tell(user),
436 format('~NSOLUTION for TASK ~w~n',[Id]),
437 display_sol(Sol),
438 439 440 nop((reverse(TNLst,TNForward), display_details(TNForward), write('END PLANNER RESULT'))),
441 told,
442 clean_problem.
443
444write_out_test_data(_MoreID,_Id):-!.
445write_out_test_data(MoreID,Id):-
446 must((
447
448 (var(Id)->statistics(walltime,[Id,_]);true),
449 (push_env_ctx-> A= pushed_ ; A=nonpushed_ ),
450 atom_concat(A,Id,TN),atom_concat(TN,MoreID,TTN),
451 lws(TTN))),!.
452
453display_sol([]).
454display_sol([H|T]) :-
455 write(H),
456 nl,
457 display_sol(T).
458
459display_details([]):-!.
460display_details([H|T]):-!,display_details(H),display_details(T),!.
461display_details(tn(TN,Name,Pre,Post,Temp,Dec)):-
463 nl,write('BEGIN METHOD'),nl,write(TN),write(';'),
464 nl,write('Name:'),write(Name),write(';'),
465 nl,write('Pre-condition:'),write(Pre),write(';'),
467 nl,write('Index Transitions:'),write('=>'),write(Post),write(';'),
469 nl,write('Temporal Constraints:'),write(Temp),write(';'),
470 nl,write('Decomposition:'),write(Dec),write(';'),
471 nl.
472
473display_details(H):-dmsg((display_details:-H)).
474
475clean_problem:-
476 retractall(current_num(_,_)),
477 retractall(node(_,_,_,_,_)),
478 retractall(tn(_,_,_,_,_,_)),
479 retractall(gpredicates(_,_)),
480 retractall(gsubstate_classes(_,_,_)),
481 retractall(methodC(_,_,_,_,_,_,_)),
482 retractall(operatorC(_,_,_,_,_)),
483 retractall(goal_related(_)),
484 retractall(produce(_,_,_,_)),
485 retractall(solved_node(_,_)),
486 retractall(tp_node(_,_,_,_,_,_)),
487 retractall(closed_node(_,_,_,_,_,_)),
488 retractall(score_list(_)),
489 set_op_num(0),
490 assert(my_stats(0)).
491
492planner_interface(G,I, SOLN,NODES):-
493 time(ground_hierarchy),
494 change_op_representation,
495 find_relate_state,
496 set_op_num(0),
497 statistics(runtime,[_,Time]),
498 (retract(my_stats(_)) ; true),
499 assert(my_stats(Time)),
500 make_problem_into_node(I, G, Node),
501 assert(Node),
502 start_solve(SOLN,NODES).
503planner_interface(G,I, SOLN,NODES):-
504 tell(user),nl,write('failure in initial node'),!.
505
506
507
509
511getN_name(node(Name, _, _, _,_), Name).
512getN_pre(node(_,Pre, _, _, _), Pre).
513getN_decomp(node(_, _, Decomp,_,_), Decomp).
514getH_temp(node(_, _, _,Temps, _), Temps).
515getN_statics(node(_,_,_,_,Statics), Statics).
516
518start_solve(SOLN,NODES):-
519 kill_file(Kill),
520 file_exists(Kill).
522
523start_solve(Sol,OPNUM):-
524 retract(final_node(Node)),
525 retractall(current_num(_,_)),
526 getN_statics(Node,Statics),
527 statics_consist(Statics),
528 extract_solution(Node,Sol,SIZE),
529 statistics(runtime,[_,CP]),
530 TIM is CP/1000,
531 current_op_num(OPNUM),
532 set_op_num(0),
533 nl, nl, write('CPU Time = '),write(CP),nl,
534 write('TIME TAKEN = '),write(TIM),
535 write(' SECONDS'),nl,
536 write('Solution SIZE = '),write(SIZE),nl,
537 write('Operator Used = '),write(OPNUM),nl,
538 write('Solution:\n '),writeq(Sol),nl,
539 write('***************************************'),
540 assert(time_taken(CP)),
541 assert(soln_size(SIZE)),
542 assert(plan_used(OPNUM)),
543 retractall(tn(_,_,_,_,_,_)),!.
544
545start_solve(Sol,OPNUM):-
546 select_node(Node),
548 549 process_node(Node),
550 start_solve(Sol,OPNUM),!.
551start_solve(Sol,OPNUM):-
552 tell(user), write('+++ task FAILED +++'),
553 clean_problem.
554
556
558process_node(Node) :-
559 getN_name(Node, Name),
560 getN_pre(Node, Pre),
561 getN_decomp(Node, Dec),
562 getH_temp(Node, Temps),
563 getN_statics(Node, Statics),
564 expand_decomp(Dec,Pre,Post,Temps,Temp1,Statics,Statics1,Dec1),
565 statics_consist(Statics),
566 assert_node(Name,Pre,Dec1,Temp1,Statics1).
567
568assert_node(Name,Pre,Decomp,Temp,Statics):-
569 all_HP_expanded(Decomp),
570 assert(final_node(node(Name,Pre,Decomp,Temp,Statics))),!.
571assert_node(Name,Pre,Dec,Temp,Statics):-
572 gensym_special(root,SYM),
573 assert(node(SYM,Pre,Dec,Temp,Statics)),!.
574
575all_HP_expanded([]):-!.
576all_HP_expanded([step(HPid,Name,_,_,exp(TN))|THPS]):-
577 all_HP_expanded(THPS),!.
579expand_decomp([],Post,Post,Temp,Temp,Statics,Statics,[]):-!.
581expand_decomp([step(HPid,Name,Pre0,Post0,exp(TN))|Decomp],Pre,Post,Temp,Temp1,Statics,Statics1,[step(HPid,Name,State1,Post1,exp(TN))|Decomp1]):-
582 state_achieved(Pre0,Pre,State1),
583 state_change(State1,Pre0,Post0,Post1),
584 statics_consist(Statics),
585 expand_decomp(Decomp,Post1,Post,Temp,Temp1,Statics,Statics1,Decomp1),!.
586
588expand_decomp([step(HPid,ACH,Pre0,Post0,unexp)|Decomp],Pre,Post,Temp,Temp1,Statics,Statics1,Decomp1):-
589 ACH=..[achieve|_],
590 state_achieved(Pre0,Pre,State),
591 statics_consist(Statics),
592 expand_decomp_ach([step(HPid,ACH,State,Post0,unexp)|Decomp],State,Post,Temp,Temp1,Statics,Statics1,Decomp1),!.
617expand_decomp([step(HPid,Name,undefd,undefd,unexp)|Decomp],Pre,Post,Temp,Temp1,Statics,Statics1,[step(HPid,Name,Pre0,Post0,exp(TN))|Decomp1]):-
618 methodC(Name,Pre0,Post0,Statics0,Temp0,achieve(ACH),Dec0),
619 append_cut(Statics0,Statics,Statics2),
620 statics_consist(Statics2),
621 remove_unneed(Statics2,[],Statics3),
622 state_achieved(Pre0,Pre,State1),
624 statics_consist(Statics3),
625 apply_method1(HPid,TN,Name,State1,Pre0,ACH,Post0,State,Statics3,Temp0,Dec0),
630 incr_op_num,
632 expand_decomp(Decomp,State,Post,Temp,Temp1,Statics2,Statics1,Decomp1),!.
633
634
635
636
637
638
639
640
642expand_decomp([step(HPid,Name,undefd,undefd,unexp)|Decomp],Pre,Post,Temp,Temp1,Statics,Statics1,[step(HPid,Name,Pre0,Post0,exp(Name))|Decomp1]):-
643 operatorC(Name,Pre0,Post0,Cond,Statics0),
644 append_cut(Statics0,Statics,Statics2),
645 statics_consist(Statics2),
646 remove_unneed(Statics2,[],Statics21),
647 state_achieved(Pre0,Pre,State1),
648 state_change(State1,Pre0,Post0,State2),
649 cond_state_change(State2,Cond,State),
651 statics_consist_instance(Statics0),
653 incr_op_num,
654 expand_decomp(Decomp,State,Post,Temp,Temp1,Statics21,Statics1,Decomp1),!.
655
657expand_decomp([step(HP,N,Pre0,Post0,unexp)|Decomp],Pre,Post,Temp,Temp1,Statics,Statics1,Decomp1):-
658 get_another_step(step(HP2,N2,Pre2,Post2,Exp),Pre,Statics,
659 HP,Temp,Temp2,Decomp,Decomp2),
660 expand_decomp([step(HP2,N2,Pre2,Post2,Exp),step(HP,N,Pre0,Post0,unexp)|Decomp2],Pre,Post,Temp2,Temp1,Statics,Statics1,Decomp1).
661
686
688get_another_step(A,Pre,Statics,HP,Temp,Temp1,[],Dec2):-fail.
689get_another_step(step(HP2,Name2,Pre2,Post2,Exp),Pre,Statics,HP,Temp,[before(HP2,HP)|Temp],Dec,Dec2):-
690 member(step(HP2,Name2,Pre2,Post2,Exp),Dec),
691 not(necessarily_before(HP,HP2, Temp)),
692 state_achieved(Pre2,Pre,_),
693 statics_consist(Statics),
694 list_take(Dec,[step(HP2,Name2,Pre2,Post2,Exp)],Dec2).
695
699expand_decomp_ach([step(HPid,ACH,Pre,Post0,unexp)|Decomp],Pre,Post,Temp,Temp1,Statics,Statics1,Decomp1):-
700 state_achieved(Post0,Pre,State),
701 statics_consist(Statics),
704 remove_temp(Temp,HPid,Temp,Temp2),
705 expand_decomp(Decomp,State,Post,Temp2,Temp1,Statics,Statics1,Decomp1),!.
706
708expand_decomp_ach([step(HPid,ACH,Pre,Post0,unexp)|Decomp],Pre,Post,Temp,Temp1,Statics,Statics1,[step(HPid,ACH,Pre,Post0,exp(TN))|Decomp1]):-
709 expand_hp(HPid,TN,ACH,Pre,Post0,State,Statics,Statics2),
710 expand_decomp(Decomp,State,Post,Temp,Temp1,Statics2,Statics1,Decomp1),!.
711
713expand_hp(HPid,TN,ACH,Pre,Post,State,Statics,Statics1):-
714 direct_expand_hp(HPid,TN,ACH,Pre,Post,State,Statics,Statics1),!.
718expand_hp(HPid,TN,ACH,Pre,Post,State,Statics,Statics1):-
719 make_to_steps1(Pre,Post,Steps),
720 gensym_special(tp,TP),
721 get_all_related_goal(Post),
722 get_score(100,[],Steps,Score),
723 assert(tp_node(TP,Pre,Post,Statics,Score,Steps)),
724 fwsearch(TN,Statics1,State),
725 clean_temp_nodes.
726
730make_to_steps1(Pre,[],[]):-!.
731make_to_steps1(Pre,[se(Sort,Obj,SE)|Post],Steps):-
732 state_achieved([se(Sort,Obj,SE)],Pre,_),
733 make_to_steps1(Pre,Post,Steps),!.
734make_to_steps1(Pre,[se(Sort,Obj,SE)|Post],[step(HP,achieve(se(Sort,Obj,SE)),undefd,[se(Sort,Obj,SE)],unexp)|Steps]):-
735 objects(Sort,Objls), 736 gensym_special(hp,HP),
737 make_to_steps1(Pre,Post,Steps),!.
738make_to_steps1(Pre,[se(Sort,Obj,SE)|Post],[step(HP,achieve(se(Sort,Obj,SE)),undefd,[se(Sort,Obj,SE)],unexp)|Steps]):-
739 var(Obj),
740 gensym_special(hp,HP),
741 make_to_steps1(Pre,Post,Steps),!.
742make_to_steps1(Pre,[se(SortN,Obj,SE)|Post],[step(HP,achieve(se(PSort,Obj,SE)),undefd,[se(PSort,Obj,SE)],unexp)|Steps]):-
743 not(var(Obj)),
744 find_prim_sort(SortN,PSortls),
745 member(PSort,PSortls),
746 objects(PSort,Objls),
747 member(Obj,Objls),
748 gensym_special(hp,HP),
749 make_to_steps1(Pre,Post,Steps),!.
750
751
753get_all_related_goal(Goal):-
754 retractall(goal_related(_)),
755 assert(goal_related(Goal)),
756 get_all_related_goal1(Goal,States),
757 retractall(goal_related(_)),
758 assert(goal_related(States)),!.
760
761get_all_related_goal1([],States):-
762 setof(State,goal_related(State),States1),
763 set_flatten(States1,[],States),!.
764get_all_related_goal1([se(Sort,Obj,SE)|Rest],States):-
765 produce(se(Sort,Obj,SE1),A,OPre,ST),
766 state_achieved([se(Sort,Obj,SE)],[se(Sort,Obj,SE1)],_),
767 retract(goal_related(List)),
768 set_append_e(List,OPre,List1),
769 assert(goal_related(List1)),
770 fail.
771get_all_related_goal1([se(SortN,Obj,SE)|Rest],States):-
772 nonvar(Obj),
773 objects(Sort,Objls),
774 not(not(member(Obj,Objls))),
775 produce(se(Sort,Obj,SE1),A,OPre,ST),
776 state_achieved([se(Sort,Obj,SE)],[se(Sort,Obj,SE1)],_),
777 retract(goal_related(List)),
778 set_append_e(List,OPre,List1),
779 assert(goal_related(List1)),
780 fail.
781get_all_related_goal1([se(SortN,Obj,SE)|Rest],States):-
782 var(Obj),
783 find_prim_sort(SortN,Sortls),
784 member(Sort,Sortls),
785 produce(se(Sort,Obj,SE1),A,OPre,ST),
786 state_achieved([se(Sort,Obj,SE)],[se(Sort,Obj,SE1)],_),
787 retract(goal_related(List)),
788 set_append_e(List,OPre,List1),
789 assert(goal_related(List1)),
790 fail.
791get_all_related_goal1([se(Sort,Obj,SE)|Rest],States):-
792 get_all_related_goal1(Rest,States).
793
796take_out_achieved(Pre,[se(Sort,Obj,SE)],[],[se(Sort,Obj,SE)]):-!.
797take_out_achieved(Pre,[],Post,Post):-!.
800take_out_achieved(Pre,[se(Sort,Obj,ST)|Post],Post0,Post1):-
801 var(Obj),
802 append(Post0,[se(Sort,Obj,ST)],Post2),
803 take_out_achieved(Pre,Post,Post2,Post1),!.
804take_out_achieved(Pre,[se(Sort,Obj,ST)|Post],Post0,Post1):-
805 member(se(Sort,Obj,ST1),Pre),
806 append_diff(Sort,Obj,ST,ST1,Post0,Post2),
807 list_take(Pre,[se(Sort,Obj,ST1)],Pre2),
808 take_out_achieved(Pre2,Post,Post2,Post1),!.
809
811append_diff(Sort,Obj,ST,ST1,Post0,Post0):-
812 not_conflict(Sort,Obj,ST,ST1,STN),!.
813append_diff(Sort,Obj,ST,ST1,Post0,Post1):-
814 append(Post0,[se(Sort,Obj,ST)],Post1),!.
816
818direct_expand_hp(HPid,Tn0,ACH,Pre,Post,Pre1,Statics,Statics):-
819 tn(Tn0,Name,Pre0,Post0,Temp0,Decomp0),
820 state_achieved(Pre0,Pre,State1),
821 state_achieved(Post,Post0,_),
822 state_change(State1,Pre0,Post0,Pre1),
823 statics_consist(Statics),
825 incr_op_num,
826 !.
828
831direct_expand_hp(HPid,Name,Name,Pre,Post,State,Statics,Statics1):-
832 operatorC(Name,Pre0,Post0,Cond,Statics0),
833 append_cut(Statics0,Statics,Statics1),
834 statics_consist(Statics11),
835 remove_unneed(Statics11,[],Statics1),
836 post_instant(Post0,Cond,Statics1,Post),
837 state_achieved(Pre0,Pre,State1),
838 state_change(State1,Pre0,Post0,State2),
839 cond_state_change(State2,Cond,State3),
840 state_achieved(Post,State3,State),
841 statics_consist_instance(Statics0),
844 incr_op_num,
845 !.
846
849direct_expand_hp(HPid,Name,ACH,Pre,Post,State,Statics,Statics1):-
850 operatorC(Name,Pre0,Post0,Cond,Statics0),
851 append_cut(Statics0,Statics,Statics2),
852 statics_consist(Statics2),
853 remove_unneed(Statics2,[],Statics1),
854 post_instant(Post0,Cond,Statics1,Post),
855 state_achieved(Pre0,Pre,State1),
856 state_change(State1,Pre0,Post0,State2),
857 cond_state_change(State2,Cond,State3),
858 state_achieved(Post,State3,State),
859 statics_consist(Statics1),
862 incr_op_num,
863 !.
864
867direct_expand_hp(HPid,TN,ACH,Pre,Post,State1,Statics,Statics1):-
868 methodC(Name,Pre0,Post0,Statics0,Temp0,achieve(ACH0),Dec0),
869 append_cut(Statics0,Statics,Statics2),
870 statics_consist(Statics2),
871 remove_unneed(Statics2,[],Statics1),
872 post_instant(Post0,[],Statics1,Post),
873 state_achieved(Pre0,Pre,Pre1),
874 state_achieved(Post,Post0,Post01),
875 statics_consist(Statics1),
876 apply_method1(HPid,TN,Name,Pre1,Pre0,ACH0,Post01,State1,Statics1,Temp0,Dec0),!.
877
881apply_method(HPid,TN,Name,Pre,Pre0,Post0,State,Statics,Temp,Dec):-
882 make_dec0(HPid,Dec,Temp,Dec0,Temp0),
883 expand_method(Dec0,Pre,Post,Temp0,Temp1,Statics,Statics1,Dec1),
884 state_achieved(Post0,Post,State),
885 statics_consist(Statics),
888 incr_op_num,
889 make_tn(TN,Name,Pre,State,Temp1,Dec1),!.
890
891make_dec0(HPid,Dec,Temp,Dec0,Temp0):-
892 make_dec01(HPid,1,Dec,Dec0),
893 change_temp(HPid,Temp,[],Temp0),!.
894make_dec1(HPid,Pre,ACH,Statics,Temp,Dec,Temp1,Dec1):-
895 state_achieved(ACH,Pre,_),
896 make_dec01(HPid,1,Dec,Dec1),
897 change_temp(HPid,Temp,[],Temp1).
898make_dec1(HPid,Pre,ACH,Statics,Temp,Dec,[before(STID0,STID1)|Temp1],[step(STID0,achieve(ACH),Pre,ACH,unexp)|Dec1]):-
899 gensym_num(HPid,0,STID0),
900 gensym_num(HPid,1,STID1),
901 make_dec01(HPid,1,Dec,Dec1),
902 change_temp(HPid,Temp,[],Temp1),!.
903
904make_dec01(HPid,_,[],[]):-!.
905make_dec01(HPid,Num,[HDec|TDec],[step(STID,HDec,undefd,undefd,unexp)|TDec0]):-
906 operatorC(HDec,_,_,_,_),
907 gensym_num(HPid,Num,STID),
908 Num1 is Num + 1,
909 make_dec01(HPid,Num1,TDec,TDec0).
910make_dec01(HPid,Num,[HDec|TDec],[step(STID,HDec,undefd,undefd,unexp)|TDec0]):-
911 methodC(HDec,_,_,_,_,_,_),
912 gensym_num(HPid,Num,STID),
913 Num1 is Num + 1,
914 make_dec01(HPid,Num1,TDec,TDec0).
915
916change_temp(HPid,[],Temp2,Temp2):-!.
917change_temp(HPid,[before(N1,N2)|Temp],Temp2,[before(ST1,ST2)|Temp0]):-
918 gensym_num(HPid,N1,ST1),
919 gensym_num(HPid,N2,ST2),
920 change_temp(HPid,Temp,Temp2,Temp0),!.
921
924expand_method([],Post,Post,Temp,Temp,Statics,Statics,[]):-!.
925expand_method([step(HPid,Name,undefd,undefd,unexp)|Decomp],Pre,Post,Temp,Temp1,Statics,Statics1,[step(HPid,Name,Pre0,Post0,exp(TN))|Decomp1]):-
926 tn(TN,Name,Pre0,Post0,Temp0,Decomp0),
927 state_achieved(Pre0,Pre,State1),
928 state_change(State1,Pre0,Post0,State),
929 statics_consist(Statics),
931 incr_op_num,
933 expand_method(Decomp,State,Post,Temp,Temp1,Statics,Statics1,Decomp1).
934expand_method([step(HPid,Name,undefd,undefd,unexp)|Decomp],Pre,Post,Temp,Temp1,Statics,Statics1,[step(HPid,Name,Pre0,Post0,exp(Name))|Decomp1]):-
935 operatorC(Name,Pre0,Post0,Cond,Statics0),
936 append_cut(Statics0,Statics,Statics2),
937 statics_consist(Statics2),
938 remove_unneed(Statics2,[],Statics21),
939 post_instant(Post0,Cond,Statics21,Post0),
940 state_achieved(Pre0,Pre,State1),
941 state_change(State1,Pre0,Post0,State2),
942 cond_state_change(State2,Cond,State3),
943 state_achieved(Post0,State3,State),
944 statics_consist_instance(Statics0),
947 incr_op_num,
948 expand_method(Decomp,State,Post,Temp,Temp1,Statics21,Statics1,Decomp1).
949expand_method([step(HPid,Name,undefd,undefd,unexp)|Decomp],Pre,Post,Temp,Temp1,Statics,Statics1,[step(HPid,Name,Pre0,Post0,exp(TN))|Decomp1]):-
950 methodC(Name,Pre0,Post0,Statics0,Temp0,ACH,Dec0),
951 append_cut(Statics0,Statics,Statics2),
952 statics_consist(Statics2),
953 remove_unneed(Statics2,[],Statics21),
954 post_instant(Post0,[],Statics21,Post0),
955 state_achieved(Pre0,Pre,State1),
956 statics_consist(Statics21),
957 apply_method(HPid,TN,Name,State1,Pre0,Post0,State,Statics21,Temp0,Dec0),
958 expand_method(Decomp,State,Post,Temp,Temp1,Statics21,Statics1,Decomp1).
960
964apply_method1(HPid,TN,Name,Pre,Pre0,ACH,Post0,State,Statics,Temp,Dec):-
965 make_dec1(HPid,Pre,ACH,Statics,Temp,Dec,Temp2,Dec2),
966 expand_decomp(Dec2,Pre,Post,Temp2,Temp1,Statics,Statics1,Dec1),
967 state_achieved(Post0,Post,State),
970 incr_op_num,
971 make_tn(TN,Name,Pre,State,Temp1,Dec1),!.
972
973
975
977fwsearch(TN,ST,State):-
978 retract(solved_node(ST,step(HP,Name,Pre,State,exp(TN)))).
979fwsearch(TN,ST,State):-
980 select_tnode(tp_node(TP,Pre,Post,Statics,Score,Dec)),
981 assert(closed_node(TP,Pre,Post,Statics,Score,Dec)),
982 expand_node(Statics,Statics1,Pre,Post,Dec,[],Dec1),
983 assert_tnode(TP,Pre,Post,Statics1,Score,Dec1),
984 solved_node(_,_), 985 fwsearch(TN,ST,State).
986fwsearch(TN,ST,State):-
987 tp_node(TP,Pre,Post,Statics,Score,Dec),
988 fwsearch(TN,ST,State).
989
990clean_temp_nodes:-
991 retractall(current_num(tp,_)),
992 retractall(tp_node(_,_,_,_,_,_)),
993 retractall(closed_node(_,_,_,_,_,_)),!.
994
996expand_node(Statics,Statics,Pre,Post,[],List,List):-
997 state_achieved(Post,Pre,_),!.
998expand_node(Statics,Statics1,Pre,Post,[step(HP,Name,_,Post0,unexp)|Rest],List,Dec1):-
999 state_achieved(Post0,Pre,_),
1000 expand_node(Statics,Statics1,Pre,Post,Rest,List,Dec1),!.
1001expand_node(Statics,Statics1,Pre,Post,[step(HP,Name,_,Post0,unexp)|Rest],List,Dec1):-
1002 direct_expand_hp(HP,TN,Name,Pre,Post0,State,Statics,Statics2),
1003 append(List,[step(HP,Name,Pre,State,exp(TN))],List2),
1004 remove_achieved_rest(State,Statics2,Rest,Rest1),
1005 make_to_steps(State,Post,Steps,Rest1),
1006 append(Rest1,Steps,Rest2),
1007 expand_node(Statics2,Statics1,State,Post,Rest2,List2,Dec1).
1008expand_node(Statics,Statics1,Pre,Post,[step(HP,Name,_,Post0,unexp)|Rest],List,Dec1):-
1009 apply_op(Statics,Statics1,[step(HP,Name,Pre,Post0,unexp)|Rest],List,Dec1).
1010expand_node(Statics,Statics1,Pre,Post,[step(HP,Name,Pre0,Post0,exp(TN))|TDec],List,Dec1):-
1011 append(List,[step(HP,Name,Pre0,Post0,exp(TN))],List2),
1012 expand_node(Statics,Statics1,Post0,Post,TDec,List2,Dec1),!.
1013
1014remove_achieved_rest(State,Statics,[],[]):-!.
1015remove_achieved_rest(State,Statics,[step(HP,Name,_,Post0,unexp)|Rest],Rest1):-
1016 state_achieved(Post0,State,_),
1017 remove_achieved_rest(State,Statics,Rest,Rest1),!.
1018remove_achieved_rest(State,Statics,[HP|Rest],[HP|Rest1]):-
1019 remove_achieved_rest(State,Statics,Rest,Rest1),!.
1020
1023apply_op(Statics,Statics1,[step(HP,Name,Pre,[se(Sort,Obj,SE)],unexp)|Rest],List,Dec):-
1024 produce(se(Sort,Obj,SE1),OP,OPre,ST),
1025 append_cut(Statics,ST,Statics2),
1026 statics_consist(Statics2),
1027 remove_unneed(Statics2,[],Statics1),
1028 state_achieved([se(Sort,Obj,SE)],[se(Sort,Obj,SE1)],_),
1029 instantiate(OPre,Statics1),
1030 not(member(step(_,OP,_,_,_),Rest)),
1031 make_to_steps(Pre,OPre,Steps,Rest),
1032 change_head_state(Pre,Steps,Steps1),
1033 append(List,Steps1,List2),
1034 append(List2,[step(HP,OP,undefd,[se(Sort,Obj,SE)],unexp)|Rest],Dec).
1036apply_op(Statics,Statics1,[step(HP,Name,Pre,[se(SortN,Obj,SE)],unexp)|Rest],List,Dec):-
1037 find_prim_sort(SortN,PSortls),
1038 member(Sort,PSortls),
1039 produce(se(Sort,Obj,SE1),OP,OPre,ST),
1040 append_cut(Statics,ST,Statics2),
1041 statics_consist(Statics2),
1042 remove_unneed(Statics2,[],Statics1),
1043 state_achieved([se(Sort,Obj,SE)],[se(Sort,Obj,SE1)],_),
1044 instantiate(OPre,Statics1),
1045 not(member(step(_,OP,_,_,_),Rest)),
1046 make_to_steps(Pre,OPre,Steps,Rest),
1047 change_head_state(Pre,Steps,Steps1),
1048 append(List,Steps1,List2),
1049 append(List2,[step(HP,OP,undefd,[se(Sort,Obj,SE)],unexp)|Rest],Dec).
1051
1054make_to_steps(Pre,[],[],Rest):-!.
1055make_to_steps(Pre,[se(Sort,Obj,SE)|Post],Steps,Rest):-
1056 state_achieved([se(Sort,Obj,SE)],Pre,_),
1057 make_to_steps(Pre,Post,Steps,Rest),!.
1058make_to_steps(Pre,[se(Sort,Obj,SE)|Post],Steps,Rest):-
1059 member(step(_,achieve(se(Sort,Obj,SE)),_,_),Rest),
1060 make_to_steps(Pre,Post,Steps,Rest),!.
1061make_to_steps(Pre,[se(Sort,Obj,SE)|Post],[step(HP,achieve(se(Sort,Obj,SE)),undefd,[se(Sort,Obj,SE)],unexp)|Steps],Rest):-
1062 gensym_special(hp,HP),
1063 make_to_steps(Pre,Post,Steps,Rest),!.
1064
1065change_head_state(Pre,[step(HP,A,undefd,B,unexp)|Steps],[step(HP,A,Pre,B,unexp)|Steps]):-!.
1066
1068instantiate([],Statics).
1069instantiate([se(Sort,Obj,SE)|States],Statics):-
1070 nonvar(Obj),
1071 instantiate(States,Statics),!.
1072instantiate([se(Sort,Obj,SE)|States],Statics):-
1073 ground(SE),
1074 instantiate(States,Statics),!.
1075instantiate([se(Sort,Obj,SE)|States],Statics):-
1076 var(Obj),
1077 get_sort_objects(Sort,Objls),
1078 member(Obj,Objls),
1079 statics_consist_instance(Statics),
1080 instantiate(States,Statics).
1081
1082
1084select_tnode(tp_node(HPid,Pre,Post,Statics,Score,Dec)) :-
1085 retractall(score_list(LS)),
1086 assert(score_list([])),
1087 lowest_score(Score),
1088 retract(tp_node(HPid,Pre,Post,Statics,Score,Dec)),!.
1090
1092lowest_score(LScore):-
1093 tp_node(HPid,Pre,Post,Statics,Score,Dec),
1094 retract(score_list(LS)),
1095 assert(score_list([Score|LS])),
1096 fail.
1097lowest_score(LScore):-
1098 retract(score_list(D)),
1099 sort(D,[LScore|SD]).
1100
1101:- style_check(-discontiguous).
1103assert_tnode(TP,Pre,Post,Statics,Score1,Dec):-
1104 all_HP_expanded(Dec),
1105 combine_exp_steps2(Dec,OneDec),
1106 assert(solved_node(Statics,OneDec)),!.
1107
1108combine_exp_steps2([OneDec],OneDec):-!.
1109combine_exp_steps2([Dec1,Dec2|Rest],OneDec):-
1110 combine_steps1(Dec1,Dec2,OneDec1),
1111 combine_exp_steps2([OneDec1|Rest],OneDec),!.
1116assert_tnode(TP,Pre,Post,Statics,Score,Dec):-
1117 combine_exp_steps(Dec,ExpDec,UnexpDec),
1118 assert_tnode1(TP,Pre,Post,Statics,Score,ExpDec,UnexpDec),!.
1119
1120:- style_check(+discontiguous).
1121
1122assert_tnode1(TP,Pre,Post,Statics,Score,ExpDec,UnexpDec):-
1123 existing_node(ExpDec,UnexpDec,Statics).
1124assert_tnode1(TP,Pre,Post,Statics,Score,ExpDec,UnexpDec):-
1125 get_score(Score,ExpDec,UnexpDec,Score1),
1126 gensym_special(tp,TP1),
1127 append(ExpDec,UnexpDec,Dec),
1128 assert(tp_node(TP1,Pre,Post,Statics,Score1,Dec)),!.
1129
1131combine_exp_steps([step(A,B,C,D,unexp)|Rest],[],[step(A,B,C,D,unexp)|Rest]):-!.
1132combine_exp_steps([step(A,B,C,D,exp(TN)),step(A1,B1,C1,D1,unexp)|Rest],[step(A,B,C,D,exp(TN))],[step(A1,B1,C1,D1,unexp)|Rest]):-!.
1133combine_exp_steps([step(A1,B1,C1,D1,exp(TN1)),step(A2,B2,C2,D2,exp(TN2))|Rest],ExpDec,UnexpDec):-
1134 combine_steps1(step(A1,B1,C1,D1,exp(TN1)),step(A2,B2,C2,D2,exp(TN2)),ExpDec1),
1135 combine_exp_steps([ExpDec1|Rest],ExpDec,UnexpDec),!.
1136
1137combine_steps1(step(HP1,Name1,Pre1,Post1,exp(TN1)),step(HP2,Name2,Pre2,Post2,exp(TN2)),step(HP,achieve(Post2),Pre1,Post2,exp(TN))):-
1138 find_only_changed(Pre1,Post2,[],Pre0,[],Post0),
1139 not(isemptylist(Post0)),
1140 gensym_special(hp,HP),
1141 gensym_special(tn,TN),
1142 assert(tn(TN,achieve(Post0),Pre0,Post0,[before(TN1,TN2)],[step(HP1,Name1,Pre1,Post1,exp(TN1)),step(HP2,Name2,Pre2,Post2,exp(TN2))])),!.
1143
1145existing_node([step(_,_,Pre,Post,exp(TN))],UnexpDec,Statics):-
1146 tp_node(_,_,_,Statics0,_,[step(_,_,Pre0,Post0,exp(TN0))|Rest]),
1147 append_st(Statics,Statics0,Statics1),
1148 all_equal(Pre,Pre0,Statics1),
1149 all_equal(Post,Post0,Statics1),
1150 existing_node([],UnexpDec,Statics1).
1151existing_node([step(_,_,Pre,Post,exp(TN))],UnexpDec,Statics):-
1152 closed_node(_,_,_,Statics0,_,[step(_,_,Pre0,Post0,exp(TN0))|Rest]),
1153 append_st(Statics,Statics0,Statics1),
1154 all_equal(Pre,Pre0,Statics1),
1155 all_equal(Post,Post0,Statics1),
1156 existing_node([],UnexpDec,Statics1).
1157existing_node([],[step(_,Name,Pre,_,unexp)|Rest],Statics):-
1158 tp_node(_,_,_,Statics0,_,[step(_,Name,Pre0,_,_,unexp)|Rest]),
1159 append_st(Statics,Statics0,Statics1),
1160 all_equal(Pre,Pre0,Statics1).
1161existing_node([],[step(_,Name,Pre,_,unexp)|Rest],Statics):-
1162 closed_node(_,_,_,Statics0,_,[step(_,Name,Pre0,_,_,unexp)|Rest]),
1163 append_st(Statics,Statics0,Statics1),
1164 all_equal(Pre,Pre0,Statics1).
1165
1166
1167
1168
1169all_equal([],[],Statics):-
1170 statics_consist(Statics),!.
1171all_equal([se(Sort,Obj,SE)|Pre],[se(Sort,Obj,SE1)|Pre1],Statics):-
1172 is_achieved(SE,SE1),
1173 all_equal(Pre,Pre1,Statics),!.
1174all_equal([se(Sort,Obj,SE)|Pre],Pre1,Statics):-
1175 member(se(Sort,Obj,SE1),Pre1),
1176 list_take(Pre1,[se(Sort1,Obj1,SE1)],Pre2),
1177 all_equal(Pre,Pre1,Statics),!.
1178
1179get_score(Score,[],UnExpDec,Score1):-
1180 length(UnExpDec,Len),
1181 Score1 is Score+Len,!.
1182get_score(Score,[step(HP,Name,Pre0,Post0,exp(TN))],UnExpDec,Score1):-
1183 goal_related(States),
1184 state_achieved_Num(Post0,States,0,Num),
1185 length(UnExpDec,Len),
1186 Score1 is Score-Num,!.
1187
1191state_achieved_Num([],Pre0,Num,Num):-!.
1192state_achieved_Num([se(Sort,Obj,SE)|Post],Pre0,N,Num):-
1193 member(se(Sort,Obj,SE0),Pre0),
1194 state_achieved([se(Sort,Obj,SE0)],[se(Sort,Obj,SE)],_),
1195 N1 is N+1,
1196 state_achieved_Num(Post,Pre0,N1,Num),!.
1197state_achieved_Num([se(Sort,Obj,SE)|Post],Pre0,N,Num):-
1198 state_achieved_Num(Post,Pre0,N,Num),!.
1199
1204find_relate_state:-
1205 operatorC(A,Pre,Post,Cond,ST),
1206 assert_related_states(A,Pre,Post,Cond,ST),
1207 fail.
1208find_relate_state.
1209
1210assert_related_states(A,Pre,Post,Cond,ST):-
1211 assert_related_states1(A,Pre,Post,ST),
1212 assert_related_states2(A,Pre,Cond,ST).
1213
1216assert_related_states1(A,Pre,[],ST):-!.
1218assert_related_states1(A,Pre,[se(Sort,Obj,SE)|Post],ST):-
1219 member_e(se(Sort,Obj,SE),Pre),
1220 assert_related_states1(A,Pre,Post,ST),!.
1222assert_related_states1(A,Pre,[se(Sort,Obj,SE)|Post],ST):-
1223 assert(produce(se(Sort,Obj,SE),A,Pre,ST)),
1224 assert_related_states1(A,Pre,Post,ST),!.
1225
1228assert_related_states2(A,Pre,SC,ST):-
1229 make_sc_primitive(SC,PSC),
1230 assert_related_states21(A,Pre,PSC,ST).
1231
1232assert_related_states21(A,Pre,[],ST):-!.
1233assert_related_states21(A,Pre,[sc(Sort,Obj,SE=>SS)|Trans],ST):-
1234 rem_statics([se(Sort,Obj,SE)],[se(Sort,Obj,SER)],St1),
1235 rem_statics([se(Sort,Obj,SS)],[se(Sort,Obj,SSR)],St2),
1236 append_cut(ST,St1,ST1),
1237 append_cut(ST1,St2,ST21),
1238 remove_unneed(ST21,[],ST2),
1239 append_cut(Pre,[se(Sort,Obj,SER)],Pre1),
1240 assert(produce(se(Sort,Obj,SSR),A,Pre1,ST2)),
1241 assert_related_states21(A,Pre,Trans,ST),!.
1242
1246pre_changed_Num([],Pre0,Num,Num):-!.
1247pre_changed_Num([se(Sort,Obj,SE)|Pre],Pre0,N,Num):-
1248 state_achieved([se(Sort,Obj,SE)],Pre0,_),
1249 N1 is N+1,
1250 pre_changed_Num(Pre,Pre0,N1,Num),!.
1251pre_changed_Num([se(Sort,Obj,SE)|Pre],Pre0,N,Num):-
1252 pre_changed_Num(Pre,Pre0,N,Num),!.
1253
1254
1255
1260remove_temp([],HP1,List,List):-!.
1261remove_temp([before(HP1,HP2)|Temp],HP1,List,Temp1):-
1262 remove_temp_before(List,before(HP1,HP2),List2),
1263 remove_temp(Temp,HP1,List2,Temp1),!.
1264remove_temp([before(HP2,HP1)|Temp],HP1,List,Temp1):-
1265 remove_temp_after(List,before(HP2,HP1),List2),
1266 remove_temp(Temp,HP1,List2,Temp1),!.
1267remove_temp([before(HPX,HPY)|Temp],HP1,List,Temp1):-
1268 remove_temp(Temp,HP1,List,Temp1),!.
1269
1271remove_temp_before([],before(HP1,HP2),[]):-!.
1272remove_temp_before([before(HP1,HP2)|T],before(HP1,HP2),T1):-
1273 remove_temp_before(T,before(HP1,HP2),T1),!.
1274remove_temp_before([before(HP3,HP1)|T],before(HP1,HP2),[before(HP3,HP2)|T1]):-
1275 remove_temp_before(T,before(HP1,HP2),T1),!.
1276remove_temp_before([before(HPX,HPY)|T],before(HP1,HP2),[before(HPX,HPY)|T1]):-
1277 remove_temp_before(T,before(HP1,HP2),T1),!.
1279remove_temp_after([],before(HP1,HP2),[]):-!.
1280remove_temp_after([before(HP2,HP1)|T],before(HP2,HP1),T1):-
1281 remove_temp_after(T,before(HP2,HP1),T1),!.
1282remove_temp_after([before(HP1,HP3)|T],before(HP2,HP1),[before(HP2,HP3)|T1]):-
1283 remove_temp_after(T,before(HP2,HP1),T1),!.
1284remove_temp_after([before(HPX,HPY)|T],before(HP2,HP1),[before(HPX,HPY)|T1]):-
1285 remove_temp_after(T,before(HP2,HP1),T1),!.
1286
1287remove_dec(HPid,[],[]):-!.
1288remove_dec(HPid,[step(HPid,_,_,_,_)|Dec],Dec1):-
1289 remove_dec(HPid,Dec,Dec1),!.
1290remove_dec(HPid,[step(A,B,C,D,F)|Dec],[step(A,B,C,D,F)|Dec1]):-
1291 remove_dec(HPid,Dec,Dec1),!.
1292
1296state_achieved(undefd,State,State):-!.
1297state_achieved(State1,State2,State3):-
1298 state_achieved1(State1,State2,State3).
1299
1300state_achieved1([],State2,State2).
1301state_achieved1([se(Sort,Obj,ST1)|State1],State2,[se(Sort,Obj,STN)|State]):-
1302 get_sort_objects(Sort,Objls),
1303 member(Obj,Objls),
1304 member(se(Sort,Obj,ST2),State2),
1305 not_conflict(Sort,Obj,ST1,ST2,STN),
1306 list_take(State2,[se(Sort,Obj,ST2)],State21),
1307 state_achieved1(State1,State21,State).
1308state_achieved1([se(Sort1,Obj,ST1)|State1],State2,[se(Sort,Obj,STN)|State]):-
1309 not(objects(Sort1,Objls)),
1310 find_prim_sort(Sort1,Sortls),
1311 member(se(Sort,Obj,ST2),State2),
1312 member(Sort,Sortls),
1313 not_conflict(Sort,Obj,ST1,ST2,STN),
1314 list_take(State2,[se(Sort,Obj,ST2)],State21),
1315 state_achieved1(State1,State21,State).
1316
1318not_conflict(Sort,Obj,ST,ST1,NewST):-
1319 gsubstate_classes(Sort,Obj,Substateclasses),
1320 member(State0,Substateclasses),
1321 is_achieved(ST,State0),
1322 is_achieved(ST1,State0),
1323 set_append_e(ST,ST1,NewST),!.
1324
1326is_achieved([],_):-!.
1327is_achieved([H|T], State) :-
1328 is_statics(H),
1329 is_achieved(T,State),!.
1330is_achieved([H|T], State) :-
1331 member(H,State),
1332 is_achieved(T,State),!.
1333
1335is_statics(ne(A,B)):-!.
1336is_statics(is_of_sort(A,B)):-!.
1337is_statics(is_of_primitive_sort(A,B)):-!.
1338is_statics(Pred):-
1339 functor(Pred,FF,NN),
1340 functor(Pred1,FF,NN),
1341 atomic_invariants(Atom),
1342 member(Pred1,Atom),!.
1343
1344
1346
1350state_change([],Pre0,Post0,[]):-!.
1351state_change(Pre,[],[],Pre):-!.
1354state_change([se(Sort,Obj,SE)|Pre],Pre0,Post0,[se(Sort,Obj,NewSS)|State]):-
1355 member(se(Sort,Obj,SE0),Pre0),
1356 member(se(Sort,Obj,SS0),Post0),
1357 not_conflict(Sort,Obj,SE,SE0,_),
1358 state_change1(SE,SE0,SS0,NewSS),
1359 list_take(Pre0,[se(Sort,Obj,SE0)],Pre1),
1360 list_take(Post0,[se(Sort,Obj,SS0)],Post1),
1361 state_change(Pre,Pre1,Post1,State),!.
1364state_change([se(Sort,Obj,SE)|Pre],Pre0,Post0,[se(Sort,Obj,SE)|State]):-
1365 state_change(Pre,Pre0,Post0,State),!.
1366
1367state_change1([],SE0,SS0,SS0):-!.
1368state_change1([HSE|TSE],SE0,SS0,SS1):-
1369 member(HSE,SE0),
1370 state_change1(TSE,SE0,SS0,SS1),!.
1371state_change1([HSE|TSE],SE0,SS0,[HSE|SS1]):-
1372 state_change1(TSE,SE0,SS0,SS1),!.
1378cond_state_change([],Cond,[]):-!.
1379cond_state_change(State,[],State):-!.
1380cond_state_change([se(Sort,Obj,SE)|Pre],Cond,[se(Sort,Obj,NewSS)|State]):-
1381 member(sc(Sort1,Obj,SE0=>SS0),Cond),
1382 statics_consist([is_of_sort(Obj,Sort1),is_of_sort(Obj,Sort)]),
1383 not_conflict(Sort,Obj,SE,SE0,_),
1384 state_change1(SE,SE0,SS0,NewSS),
1385 cond_state_change(Pre,Cond,State),!.
1386cond_state_change([se(Sort,Obj,SE)|Pre],Cond,[se(Sort,Obj,SE)|State]):-
1387 cond_state_change(Pre,Cond,State),!.
1388
1392post_changed(Post0,Cond,Statics,[se(Sort,Obj,SE)|Post]):-
1393 member(se(Sort,Obj,SE0),Post0),
1394 state_achieved([se(Sort,Obj,SE0)],[se(Sort,Obj,SE)],_),
1395 statics_consist(Statics).
1396post_changed(Post0,Cond,Statics,[se(Sort,Obj,SE)|Post]):-
1397 member(sc(Sort,Obj,SE1=>SS),Cond),
1398 state_achieved([se(Sort,Obj,SS)],[se(Sort,Obj,SE)],_),
1399 statics_consist(Statics).
1400post_changed(Post0,Cond,Statics,[se(Sort,Obj,SE)|Post]):-
1401 post_changed(Post0,Cond,Statics,Post).
1402
1403all_achieved([],Statics,Post).
1404all_achieved([se(Sort,Obj,SL)|Pre],Statics,Post):-
1405 not(member(se(Sort,Obj,SR),Post)),
1406 all_achieved(Pre,Statics,Post).
1407all_achieved([se(Sort,Obj,SL)|Pre],Statics,Post):-
1408 member(se(Sort,Obj,SR),Post),
1409 is_achieved(SL,SR),
1410 statics_consist_instance(Statics),
1411 all_achieved(Pre,Statics,Post).
1412
1413
1417post_instant(Post0,Cond,Statics,[]):-!.
1418post_instant(Post0,Cond,Statics,[se(Sort,Obj,SE)|Post]):-
1419 member(se(Sort,Obj,SE0),Post0),
1420 statics_consist(Statics).
1421post_instant(Post0,Cond,Statics,[se(Sort,Obj,SE)|Post]):-
1422 member(sc(Sort,Obj,SE1=>SS),Cond),
1423 statics_consist(Statics).
1424post_instant(Post0,Cond,Statics,[se(Sort,Obj,SE)|Post]):-
1425 member(sc(Sort0,Obj,SE1=>SS),Cond),
1426 not(objects(Sort0,_)),
1427 subsorts(Sort0,Sortls),
1428 not(not(member(Sort,Sortls))),
1429 statics_consist(Statics).
1430post_instant(Post0,Cond,Statics,[se(Sort,Obj,SE)|Post]):-
1431 post_instant(Post0,Cond,Statics,Post),!.
1433
1437
1438make_problem_into_node(I,goal(L,TM,STATS), NN) :-
1439 make_problem_up(L, STEPS),
1440 make_num_hp(TM,Temp),
1441 sort_steps(STEPS,Temp,STEPS1),
1442 make_ss_to_se(I,I_Pre),
1443 NN = node(root,I_Pre,STEPS1 ,Temp, STATS),!.
1444
1446make_problem_up([],[]):-!.
1447make_problem_up([achieve(L)|R],[step(HP,achieve(L1),undefd,[L1],unexp)|RS]):-
1448 1449 make_ss_to_se([L],[L1]),
1450 gensym_special(hp,HP),
1451 make_problem_up(R, RS),!.
1452make_problem_up([achieve(L)|R],[step(HP,achieve(L1),undefd,L1,unexp)|RS]):-
1453 1454 make_ss_to_se(L,L1),
1455 gensym_special(hp,HP),
1456 make_problem_up(R, RS),!.
1457make_problem_up([O|R],[step(HP,O,undefd,undefd,unexp)|RS]):-
1458 methodC(O,Pre,Post,Statics1,Temp,ACH,Dec),
1459 gensym_special(hp,HP),
1460 make_problem_up(R, RS),!.
1461make_problem_up([O|R],
1462 [step(HP,O,undefd,undefd,unexp)|RS]):-
1463 operatorC(O,Pre,Post,Cond,Statics1),
1464 gensym_special(hp,HP),
1465 make_problem_up(R, RS),!.
1466
1467make_num_hp([],[]):-!.
1468make_num_hp([before(N1,N2)|TM],[before(H1,H2)|Temp]):-
1469 gensym_num(hp,N1,H1),
1470 gensym_num(hp,N2,H2),
1471 make_num_hp(TM,Temp),!.
1472
1475sort_steps(Steps,[],Steps):-!.
1476sort_steps([Steps|[]],[],[Steps]):-!.
1477sort_steps(Steps,Temp,OrderedST):-
1478 steps_in_temp(Temp,[],ST),
1479 sort_steps1(Temp,ST,OrderedSTID),
1480 sort_steps2(Steps,OrderedSTID,[],OrderedST),!.
1481
1483steps_in_temp([],ST,ST):-!.
1484steps_in_temp([before(H1,H2)|TT],List,ST):-
1485 set_append_e(List,[H1,H2],List1),
1486 steps_in_temp(TT,List1,ST),!.
1487
1489sort_steps1(Temp,[],[]):-!.
1490sort_steps1(Temp,[HP1|TST],[HPF|OST]):-
1491 earliest_step(HP1,HPF,Temp,TST,TST1),
1492 sort_steps1(Temp,TST1,OST),!.
1493
1494earliest_step(HPF,HPF,Temp,[],[]):-!.
1495earliest_step(HP1,HPF,Temp,[HP2|TST],[HP1|TST1]):-
1496 member(before(HP2,HP1),Temp),
1497 earliest_step(HP2,HPF,Temp,TST,TST1),!.
1498earliest_step(HP1,HPF,Temp,[HP2|TST],[HP2|TST1]):-
1499 earliest_step(HP1,HPF,Temp,TST,TST1),!.
1500
1502sort_steps2(OtherST,[],OrderedST1,OrderedST):-
1503 append(OrderedST1,OtherST,OrderedST),!.
1504sort_steps2(Steps,[HP|THPS],List,OrderedST):-
1505 member(step(HP,N,Pre,Post,F),Steps),
1506 append(List,[step(HP,N,Pre,Post,F)],List1),
1507 list_take(Steps,[step(HP,N,Pre,Post,F)],Steps1),
1508 sort_steps2(Steps1,THPS,List1,OrderedST),!.
1509sort_steps2(Steps,[HP|THPS],List,OrderedST):-
1510 sort_steps2(Steps,THPS,List,OrderedST),!.
1512
1514make_ss_to_se([],[]):-!.
1515make_ss_to_se([ss(Sort,Obj,Post)|TPost],[se(Sort,Obj,Post)|TPre]):-
1516 make_ss_to_se(TPost,TPre),!.
1517make_ss_to_se([se(Sort,Obj,Post)|TPost],[se(Sort,Obj,Post)|TPre]):-
1518 make_ss_to_se(TPost,TPre),!.
1519
(Node,PHPs,SIZE1) :-
1525 1526 getN_decomp(Node, HPs),
1527 push_to_primitive(HPs,[],PHPs),
1528 pprint(PHPs,1,SIZE),
1529 SIZE1 is SIZE -1,!.
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1553change_op_representation :-
1554 method(A,B,C,Stat,T,Dec),
1555 make_ss_to_se(B,B0),
1556 make_se_primitive(B0,B1),
1557 make_sc_primitive(C,C1),
1558 get_preconditions(C1,B1,Pre,Post),
1559 rem_statics(Post, PostR,St1),
1560 rem_statics(Pre, PreR,St2),
1561 append_cut(St1,St2,Statics),
1562 append_cut(Stat,Statics,Statics1),
1563 remove_unneed(Statics1,[],Statics2),
1564 get_achieval(A,Dec,T,Dec1,T1,ACH),
1565 assert(methodC(A,PreR,PostR,Statics2,T1,achieve(ACH),Dec1)),
1566 fail.
1567change_op_representation :-
1568 operator(A,B,C,D),
1569 make_ss_to_se(B,B0),
1570 make_se_primitive(B0,B1),
1571 make_sc_primitive(C,C1),
1573 1574 get_preconditions(C1,B1,Pre,Post),
1575 rem_statics(Post, PostR,St1),
1576 rem_statics(Pre, PreR,St2),
1577 append_cut(St1,St2,Statics1),
1578 remove_unneed(Statics1,[],Statics),
1579 statics_consist(Statics),
1580 assert(operatorC(A,PreR,PostR,D,Statics)),
1581 fail.
1582change_op_representation:-
1583 retractall(current_num(sm,_)),!.
1584
1585get_preconditions([],Prev,Prev,Prev) :-!.
1586get_preconditions([sc(S,X,From =>To)|Rest],Prev,[se(S,X,From1)|Pre],[se(S,X,To1)|Post]):-
1587 member_e(se(S,X,PSE),Prev),
1588 append(PSE,From,From1),
1589 append(PSE,To,To1),
1590 list_take(Prev,[se(S,X,PSE)],Prev1),
1591 get_preconditions(Rest,Prev1, Pre,Post),!.
1592get_preconditions([sc(S,X,From =>To)|Rest],Prev,[se(S,X,From)|Pre],[se(S,X,To)|Post]):-
1593 get_preconditions(Rest,Prev, Pre,Post),!.
1594get_preconditions([],Prev,Prev,Prev) :-!.
1595
1597get_achieval(A,Dec,T,Dec1,T1,Achieval):-
1598 retractall(current_num(sm,_)),
1599 make_dec(A,Dec,Dec1,T,T1,[],Achieval),!.
1600make_dec(A,[],[],Temp,Temp,Achieval,Achieval):-!.
1601make_dec(A,[HD|TD],TD1,Temp,Temp1,Achieval,Achieval1):-
1602 HD=..[achieve|Goal],
1603 current_num(sm,Num),
1604 replace_achieval_temp(Temp,Temp0,Num),
1605 make_ss_to_se(Goal,Goal0),
1606 append(Achieval,Goal0,Achieval0),
1607 make_dec(A,TD,TD1,Temp0,Temp1,Achieval0,Achieval1),!.
1608make_dec(A,[HD|TD],TD1,Temp,Temp1,Achieval,Achieval1):-
1609 HD=..[achieve|Goal],
1610 not(current_num(sm,Num)),
1611 replace_achieval_temp(Temp,Temp0,1),
1612 make_ss_to_se(Goal,Goal0),
1613 append(Achieval,Goal0,Achieval0),
1614 make_dec(A,TD,TD1,Temp0,Temp1,Achieval0,Achieval1).
1615make_dec(A,[HD|TD],[HD|TD1],Temp,Temp1,Achieval,Achieval1):-
1616 HD=..[DecName|Goal],
1617 DecName\==achieve,
1618 gensym_special(sm,SM),
1619 current_num(sm,Num),
1620 make_dec(A,TD,TD1,Temp,Temp1,Achieval,Achieval1),!.
1621
1623replace_achieval_temp(Temp,Temp1,Num):-
1624 change_all_numbers(Temp,Num,Temp00),
1625 tidy_temp(Temp00,Temp1).
1626
1627change_all_numbers([],Num,[]):-!.
1628change_all_numbers([HTemp|TTemp],Num,[HTemp00|TTemp00]):-
1629 HTemp=..[before|Nums],
1630 change_nums(Nums,Num,Nums1),
1631 HTemp00=..[before|Nums1],
1632 change_all_numbers(TTemp,Num,TTemp00).
1633
1634change_nums([],Num,[]):-!.
1635change_nums([Num1|TN],Num,[Num1|TN1]):-
1636 Num1<Num,
1637 change_nums(TN,Num,TN1),!.
1638change_nums([Num1|TN],Num,[Num2|TN1]):-
1639 Num1>Num,
1640 Num2 is Num1-1,
1641 change_nums(TN,Num,TN1),!.
1642change_nums([Num|TN],Num,[0|TN1]):-
1643 change_nums(TN,Num,TN1),!.
1644
1646tidy_temp(Temp,Temp1):-
1647 member(before(Num,0),Temp),
1648 list_take(Temp,[before(Num,0)],Temp0),
1649 change_laters(Temp0,Num,Temp01),
1650 tidy_temp(Temp01,Temp1).
1651tidy_temp([],[]):-!.
1652tidy_temp([before(0,Num)|Temp],Temp0):-
1653 tidy_temp(Temp,Temp0),!.
1654tidy_temp([before(Num1,Num2)|Temp],[before(Num1,Num2)|Temp0]):-
1655 tidy_temp(Temp,Temp0),!.
1656
1657change_laters([before(0,Num2)|Temp],Num,[before(Num,Num2)|Temp0]):-
1658 change_laters(Temp,Num,Temp0).
1659change_laters([before(Num1,0)|Temp],Num,[before(Num1,0)|Temp0]):-
1660 change_laters(Temp,Num,Temp0).
1661change_laters([before(Num1,Num2)|Temp],Num,[before(Num1,Num2)|Temp0]):-
1662 change_laters(Temp,Num,Temp0).
1663
1665make_se_primitive([],[]).
1666make_se_primitive([se(Sort,Obj,ST)|SE],[se(Sort,Obj,ST)|SE0]):-
1667 find_prim_sort(Sort,[Sort]),!,
1668 make_se_primitive(SE,SE0).
1669make_se_primitive([se(Sort,Obj,ST)|SE],[se(PSort,Obj,ST)|SE0]):-
1670 find_prim_sort(Sort,PSorts),
1671 member(PSort,PSorts),
1672 make_se_primitive(SE,SE0).
1673
1675make_sc_primitive([],[]).
1676make_sc_primitive([sc(Sort,Obj,SE1=>SE2)|ST],[sc(Sort,Obj,SE1=>SE2)|ST0]):-
1677 find_prim_sort(Sort,[Sort]),!,
1678 make_sc_primitive(ST,ST0).
1679make_sc_primitive([sc(Sort,Obj,SE1=>SE2)|ST],[sc(PSort,Obj,SE1=>SE2)|ST0]):-
1680 find_prim_sort(Sort,PSorts),
1681 member(PSort,PSorts),
1682 make_sc_primitive(ST,ST0).
1684make_tn(TN,Name,Pre,Post,Temp,Dec):-
1685 gensym_special(tn,TN),
1686 find_only_changed(Pre,Post,[],Pre1,[],Post1),
1688 assert(tn(TN,Name,Pre1,Post1,Temp,Dec)),!.
1689
1690find_only_changed([],[],Pre,Pre,Post,Post):-!.
1692find_only_changed([se(Sort,Obj,ST)|Pre],[se(Sort,Obj,ST)|Post],Pre0,Pre1,Post0,Post1):-
1693 find_only_changed(Pre,Post,Pre0,Pre1,Post0,Post1),!.
1694find_only_changed([se(Sort,Obj,ST)|Pre],Post,Pre0,Pre1,Post0,Post1):-
1695 member(se(Sort,Obj,ST1),Post),
1696 list_take(Post,[se(Sort,Obj,ST1)],Post2),
1697 append_changed(se(Sort,Obj,ST),se(Sort,Obj,ST1),Pre0,Pre3,Post0,Post3),
1698 find_only_changed(Pre,Post2,Pre3,Pre1,Post3,Post1),!.
1699find_only_changed([se(Sort,Obj,ST)|Pre],Post,Pre0,Pre1,Post0,Post1):-
1700 member(se(SortN,Obj,ST1),Post),
1701 list_take(Post,[se(SortN,Obj,ST1)],Post2),
1702 append_changed(se(Sort,Obj,ST),se(SortN,Obj,ST1),Pre0,Pre3,Post0,Post3),
1703 find_only_changed(Pre,Post2,Pre3,Pre1,Post3,Post1),!.
1705
1708append_changed(se(Sort,Obj,ST),se(Sort1,Obj,ST1),Pre0,Pre0,Post0,Post0):-
1709 not_conflict(Sort,Obj,ST,ST1,_),!.
1710append_changed(se(Sort,Obj,ST),se(Sort1,Obj,ST1),Pre0,Pre3,Post0,Post3):-
1711 append(Pre0,[se(Sort,Obj,ST)],Pre3),
1712 append(Post0,[se(Sort,Obj,ST1)],Post3),!.
1713
1714
1715
1717push_to_primitive([],PHPs,PHPs) :-!.
1718push_to_primitive([step(HPID,_,_,_,exp(TN))|HPs],List,PHPs) :-
1719 tn(TN,Name,Pre,Post,Temp,Dec),
1720 push_to_primitive(Dec,List,Dec1),
1721 push_to_primitive(HPs,Dec1,PHPs),!.
1722push_to_primitive([step(HPID,_,_,_,exp(Name))|HPs],List,PHPs):-
1723 append(List,[Name],List1),
1724 push_to_primitive(HPs,List1,PHPs),!.
1725
1726
1728
1729possibly_before(I,J,Temps) :-
1730 \+ necessarily_before(J,I,Temps), !.
1731
1732necessarily_before(J,I,Temps) :-
1733 member(before(J,I),Temps),!.
1734necessarily_before(J,I,Temps) :-
1735 member(before(J,Z),Temps),
1736 necessarily_before(Z,I,Temps),!.
1737
1739
1741select_node(node(Name,Pre,Temp,Decomp,Statics)) :-
1742 retract(node(Name,Pre,Temp,Decomp,Statics)),
1747 !.
1748
1749is_of_primitive_sort(X,Y) :-
1750 objects(Y,L),member(X,L).
1751is_of_sort(X,Y) :-
1752 is_of_primitive_sort(X,Y).
1753is_of_sort(X,Y) :-
1754 sorts(Y,SL),member(Z,SL),is_of_sort(X,Z).
1755
1756find_all_upper([],[]).
1757find_all_upper([HVars|TV],[HSorts|TS]):-
1758 uppersorts(HSorts,Upsorts),
1759 member(HVars,Upsorts),
1760 find_all_upper(TV,TS).
1761
1763find_prim_sort(Sort,PS):-
1764 subsorts(Sort,Subsorts),
1765 split_prim_noprim(Subsorts,PS,NP),!.
1766
1768get_sort_objects(Sort,Objs):-
1769 find_prim_sort(Sort,PSorts),
1770 get_objects1(PSorts,Objls),
1771 flatten(Objls,[],Objs),!.
1772
1773get_objects1([],[]):-!.
1774get_objects1([PS1|RS],[Objls1|Objls]):-
1775 objects(PS1,Objls1),
1776 get_objects1(RS,Objls),!.
1777
1779subsorts(Sort,Subsorts):-
1780 sort_down([Sort],[Sort],Subsorts),!.
1781
1782sort_down([],Subsorts,Subsorts):-!.
1783sort_down([HOpen|TOpen],List,Sortslist):-
1784 sorts(HOpen,Sorts),
1785 append(List,Sorts,List1),
1786 append(TOpen,Sorts,Open1),
1787 sort_down(Open1,List1,Sortslist),!.
1788sort_down([HOpen|TOpen],List,Sortslist):-
1789 sort_down(TOpen,List,Sortslist),!.
1790
1792uppersorts(Sort,Uppersorts):-
1793 objects(Sort,Objls),
1794 sort_up(Sort,[Sort],Uppersorts),!.
1795uppersorts(Sort,Uppersorts):-
1796 sorts(Sort,Sortls),
1797 sort_up(Sort,[Sort],Uppersorts),!.
1798uppersorts(Obj,Sortls):-
1799 objects(Sort,Objls),
1800 member(Obj, Objls),
1801 sort_up(Sort,[Sort],Sortls),!.
1802
1803sort_up(Sort, List,Sortslist):-
1804 sorts(non_primitive_sorts,NPSorts),
1805 sort_up1(Sort,NPSorts,NPSorts,List,Sortslist),!.
1806
1807sort_up1(Sort,[],NPSorts,Sortslist,Sortslist):-!.
1808sort_up1(Sort,[HNPSorts|TNPSorts],NPSorts,List,Sortslist):-
1809 sorts(HNPSorts,Sorts),
1810 member(Sort,Sorts),
1811 append(List, [HNPSorts], List1),
1812 sort_up(HNPSorts,List1,Sortslist),!.
1813sort_up1(Sort,[HNPSorts|TNPSorts],NPSorts,List,Sortslist):-
1814 sort_up1(Sort,TNPSorts,NPSorts,List,Sortslist),!.
1815
1817split_prim_noprim([],[],[]):-!.
1818split_prim_noprim([HS|TS],[HS|TP],NP):-
1819 objects(HS,Obj),
1820 split_prim_noprim(TS,TP,NP),!.
1821split_prim_noprim([HS|TS],PS,[HS|NP]):-
1822 split_prim_noprim(TS,PS,NP),!.
1823
1824
1825
1826
1827
1829statics_consist_instance([]):-!.
1830statics_consist_instance(Statics) :-
1831 get_invariants(Invs),
1832 statics_consist_instance0(Invs,Statics).
1833
1834statics_consist_instance0(Invs,[]):-!.
1835statics_consist_instance0(Invs,[ne_back(A,B)|TStatics]):-
1836 not(A==B),
1837 statics_consist_instance0(Invs,TStatics).
1838statics_consist_instance0(Invs,[ne(A,B)|TStatics]):-
1839 append(TStatics,[ne_back(A,B)],TStatics1),
1840 statics_consist_instance0(Invs,TStatics1),!.
1841statics_consist_instance0(Invs,[is_of_sort(Obj,Sort)|TStatics]):-
1842 is_of_sort(Obj,Sort),
1843 statics_consist_instance0(Invs,TStatics).
1844statics_consist_instance0(Invs,[is_of_primitive_sort(Obj,Sort)|TStatics]):-
1845 is_of_primitive_sort(Obj,Sort),
1846 statics_consist_instance0(Invs,TStatics).
1847statics_consist_instance0(Invs,[Pred|TStatics]):-
1848 member(Pred,Invs),
1849 statics_consist_instance0(Invs,TStatics).
1850
1853statics_consist([]):-!.
1854statics_consist(Statics):-
1855 get_invariants(Invs),
1856 statics_consist1(Invs,Statics),!.
1857
1858statics_consist1(Invs,[]):-!.
1859statics_consist1(Invs,[ne_back(A,B)|TStatics]):-
1860 not(A==B),
1861 statics_consist1(Invs,TStatics),!.
1862statics_consist1(Invs,[ne(A,B)|TStatics]):-
1863 append(TStatics,[ne_back(A,B)],TStatics1),
1864 statics_consist1(Invs,TStatics1),!.
1865statics_consist1(Invs,[is_of_sort(Obj,Sort)|TStatics]):-
1866 get_sort_objects(Sort,Objs),
1867 obj_member(Obj,Objs),
1868 statics_consist1(Invs,TStatics),!.
1869statics_consist1(Invs,[is_of_primitive_sort(Obj,Sort)|TStatics]):-
1870 objects(Sort,Objs),
1871 obj_member(Obj,Objs),
1872 statics_consist1(Invs,TStatics),!.
1873statics_consist1(Invs,[Pred|TStatics]):-
1874 pred_member(Pred,Invs),
1875 statics_consist1(Invs,TStatics),!.
1876
1878
1880get_invariants(Invs) :-
1881 atomic_invariants(Invs),!.
1882
1883rem_statics([ss(S,X,Preds)|Post], [ss(S,X,PredR)|PostR],Rt1) :-
1884 filter_list(Preds, is_a_dynamic_pred,PredR),
1885 filter_list(Preds, is_a_static_pred, R),
1886 rem_statics(Post, PostR,Rt),
1887 append(Rt,[is_of_sort(X,S)|R],Rt1),!.
1888rem_statics([se(S,X,Preds)|Post], [se(S,X,PredR)|PostR],Rt1) :-
1889 filter_list(Preds, is_a_dynamic_pred,PredR),
1890 filter_list(Preds, is_a_static_pred, R),
1891 rem_statics(Post, PostR,Rt),
1892 append(Rt,[is_of_sort(X,S)|R],Rt1),!.
1893rem_statics([], [],[]) :-!.
1894
1895
1896
1898
1899isemptylist([]):-!.
1900
1901
1902member_cut(X,[X|_]) :- !.
1903member_cut(X,[_|Y]) :- member_cut(X,Y),!.
1904
1905member_e(X,[Y|_]):-
1906 X==Y,!.
1907member_e(X,[Y|L]):-
1908 var(Y),
1909 member_e(X,L),!.
1910member_e(ss(Sort,Obj,SE),[ss(Sort,Obj1,SE)|_]):-
1911 Obj==Obj1,!.
1912member_e(se(Sort,Obj,SE),[se(Sort,Obj1,SE)|_]):-
1913 Obj==Obj1,!.
1914member_e(sc(Sort,Obj,SE1=>SE2),[sc(Sort,Obj1,SE1=>SE2)|_]):-
1915 Obj==Obj1,!.
1916member_e(X,[Y|L]):- member_e(X,L),!.
1919u_mem_cut(_,[]):-!,fail.
1920u_mem_cut(X,[Y|_]) :- X == Y,!.
1921u_mem_cut(X,[_|L]) :- u_mem_cut(X,L),!.
1922
1923
1928obj_member(X,[X|[]]):-!.
1929obj_member(X,List):-
1930 obj_member0(X,List),!.
1931obj_member0(X,[Y|_]):-
1932 var(X),!. 1933obj_member0(X,[Y|_]):-
1934 X==Y,!.
1935obj_member0(X,[_|Y]) :- obj_member0(X,Y),!.
1936
1941pred_member(ne(A,B),List):-
1942 A\==B,!.
1943pred_member(is_of_sort(A,B),List):-
1944 get_sort_objects(B,Objls),
1945 obj_member(A,Objls),!.
1946pred_member(is_of_primitive_sort(A,B),List):-
1947 objects(B,Objls),
1948 obj_member(A,Objls),!.
1949pred_member(X,List):-
1950 setof(X,member(X,List),Refined),
1951 pred_member0(X,Refined),!.
1952pred_member0(X,[X|[]]):-!.
1953pred_member0(X,Y):-
1954 pred_member1(X,Y),!.
1955pred_member1(X,[Y|_]):-
1956 X=..[H|XLs],
1957 Y=..[H|YLs],
1958 vequal(XLs,YLs),!.
1959pred_member1(X,[_|Y]):- pred_member1(X,Y),!.
1960
1961
1962
1963append_cut([],L,L) :- !.
1964append_cut([H|T],L,[H|Z]) :- append_cut(T,L,Z),!.
1965
1969append_st(ST1,ST2,ST):-
1970 append_cut(ST1,ST2,ST0),
1971 remove_unneed(ST0,[],ST),!.
1972
1975remove_unneed([],C,C):-!.
1976remove_unneed([A|B], Z, C):-
1977 var(A),
1978 member_e(A,Z),
1979 remove_unneed(B, Z, C),! .
1980remove_unneed([A|B], Z, C):-
1981 var(A),
1982 append(Z,[A],D),
1983 remove_unneed(B, D, C),!.
1984remove_unneed([A|B], Z, C):-
1985 ground(A),
1986 remove_unneed(B, Z, C),!.
1987remove_unneed([A|B], Z, C):-
1988 A=..[ne|Paras],
1989 append(Z,[A],D),
1990 remove_unneed(B, D, C),!.
1991remove_unneed([A|B], Z, C):-
1992 A=..[Pred|Paras],
1993 same_var_member(A,Z),
1994 remove_unneed(B, Z, C),!.
1995remove_unneed([A|B], Z, C):-
1996 append(Z,[A],D),
1997 remove_unneed(B, D, C),!.
1998
1999same_var_member(Pred,[Pred1|List]):-
2000 var(Pred1),
2001 same_var_member(Pred,List),!.
2002same_var_member(Pred,[Pred1|List]):-
2003 Pred==Pred1,!.
2004same_var_member(Pred,[Pred1|List]):-
2005 Pred=..[H|T],
2006 Pred1=..[H|T1],
2007 same_var_member1(T,T1),!.
2008same_var_member(Pred,[Pred1|List]):-
2009 same_var_member(Pred,List),!.
2010
2011same_var_member1([],[]):-!.
2012same_var_member1([H1|T],[H2|T]):-
2013 var(H1),
2014 H1==H2,!.
2015same_var_member1([H|T1],[H|T2]):-
2016 var(T1),
2017 T1==T2,!.
2018same_var_member1([H1|T1],[H2|T2]):-
2019 H1==H2,
2020 same_var_member1(T1,T2),!.
2021
2022
2026set_append_e(A,B,C):-
2027 append_cut(A,B,D),
2028 remove_dup(D,[],C),!.
2029
2031remove_dup([],C,C):-!.
2032remove_dup([A|B],Z,C) :-
2033 member_e(A, Z),
2034 remove_dup(B, Z, C),! .
2035remove_dup([A|B], Z, C):-
2036 append(Z,[A],D),
2037 remove_dup(B, D, C),!.
2038
2039vequal([],[]):-!.
2040vequal([X|XLs],[Y|YLs]):-
2041 var(X),
2042 vequal(XLs,YLs),!.
2043vequal([X|XLs],[Y|YLs]):-
2044 var(Y),
2045 vequal(XLs,YLs),!.
2046vequal([X|XLs],[Y|YLs]):-
2047 X==Y,
2048 vequal(XLs,YLs),!.
2049
2050
2052
2054is_a_static_pred(X) :-
2055 atomic_invariants( A ),
2056 not( not( member(X,A) )),!.
2057is_a_static_pred(ne(_,_)) :-!.
2058is_a_static_pred(is_of_sort(_,_)) :-!.
2059
2060is_a_dynamic_pred(X) :-
2061 not( is_a_static_pred(X) ),!.
2062
2066
2067filter_list([X|Rest],Op,[X|Rest1]) :-
2068 Op =.. OL,
2069 append(OL,[X],OL1),
2070 Pred =.. OL1,
2071 call(Pred),
2072 filter_list(Rest,Op,Rest1),!.
2073filter_list([_|Rest],Op,Rest1) :-
2074 filter_list(Rest,Op,Rest1),!.
2075filter_list([],_,[]).
2076
2077
2078
2087
2088file_exists(Filename):-exists_file(Filename).
2089
2092subtract([],_,[]):-!.
2093subtract([A|B],C,D) :-
2094 member(A,C),
2095 subtract(B,C,D),!.
2096subtract([A|B],C,[A|D]) :-
2097 subtract(B,C,D),!.
2098
2100
2101list_take(R,[E|R1],R2):-
2102 remove_el(R,E,RR),
2103 list_take(RR,R1,R2),!.
2104list_take(R,[_|R1],R2):-
2105 list_take(R,R1,R2),!.
2106list_take(A,[],A) :- !.
2107
2108 2110remove_el([],_,[]) :- ! .
2111remove_el([A|B],A,B) :- ! .
2112remove_el([A|B],C,[A|D]) :-
2113 remove_el(B,C,D) .
2114
2116
2117gensym_special(Root,Atom) :-
2118 getnum(Root,Num),
2119 name(Root,Name1),
2120 name(Num,Name2),
2121 append(Name1,Name2,Name),
2122 name(Atom,Name).
2123
2124getnum(Root,Num) :-
2125 retract(current_num(Root,Num1)),!,
2126 Num is Num1+1,
2127 asserta(current_num(Root,Num)).
2128
2129getnum(Root,1) :- asserta(current_num(Root,1)).
2130
2131
2133
2134gensym_num(Root,Num,Atom):-
2135 name(Root,Name),
2136 name(Num,Name1),
2137 append(Name,Name1,Name2),
2138 name(Atom,Name2),!.
2139
2140
2142pprint([],SIZE,SIZE):-!.
2143pprint([HS|TS],Size0,SIZE):-
2144 list(HS),
2145 pprint(HS,Size0,Size1),
2146 pprint(TS,Size1,SIZE),!.
2147pprint([HS|TS],Size0,SIZE):-
2150 Size1 is Size0+1,
2151 pprint(TS,Size1,SIZE),!.
2152
2153
2155
2156flatten([HO|TO], List, O_List):-
2157 append(HO, List, List_tmp),
2158 flatten(TO, List_tmp, O_List),!.
2159flatten([H|TO], List,O_List):-
2160 append([H], List, List_tmp),
2161 flatten(TO, List_tmp, O_List).
2162flatten([], [HList|T], O_List):-
2163 HList = [],
2164 flatten(T, [], O_List).
2165flatten([], [HList|T], O_List):-
2166 list(HList),
2167 flatten([HList|T],[], O_List),!.
2168flatten([], L,L):-!.
2169
2171set_flatten([HO|TO], List, O_List):-
2172 set_append_e(HO, List, List_tmp),
2173 set_flatten(TO, List_tmp, O_List),!.
2174set_flatten([H|TO], List,O_List):-
2175 set_append_e([H], List, List_tmp),
2176 set_flatten(TO, List_tmp, O_List).
2177set_flatten([], [HList|T], O_List):-
2178 HList = [],
2179 set_flatten(T, [], O_List).
2180set_flatten([], [HList|T], O_List):-
2181 list(HList),
2182 set_flatten([HList|T],[], O_List),!.
2183set_flatten([], L,L):-!.
2184
2187list(A) :-
2188 var(A) ,
2189 ! ,
2190 fail .
2191list(A) :-
2192 functor(A,'.',_).
2194:- assert(time_taken(0)).
2195:- assert(soln_size(0)).
2196:- assert(plan_used(0)).
2197
2198solve(N,FN):-
2199 N < FN,
2200 tell(user),
2201 nl,write('task '), write(N),write(': '),nl,
2202 solution_file(F),
2203 tell(F),
2204 nl,write('task '), write(N),write(': '),nl,
2205 solve(N),
2206 Ni is N+1,
2207 solve(Ni,FN).
2208solve(FN,FN):-
2209 tell(user),nl,write('task '),
2210 write(FN),write(': '),nl,
2211 solution_file(F),
2212 tell(F),
2213 nl,write('task '),
2214 write(FN),write(': '),nl,
2215 solve(FN),
2216 retractall(sum(_)),
2217 assert(sum(0)),
2218 sum_time(CP),
2219 retractall(sum(_)),
2220 assert(sum(0)),
2221 sum_size(SIZE),
2222 TIM is CP /1000,
2223 retractall(sum(_)),
2224 assert(sum(0)),
2225 sum_plan(PLAN),
2226 retractall(time_taken(_)),
2227 retractall(soln_size(_)),
2228 retractall(plan_used(_)),
2229 nl,write('total time '),write(TIM),write(' seconds'),
2230 nl,write('total size '),write(SIZE),
2231 nl,write('plan used '),write(PLAN),
2232 nl,
2233 told.
2234
2235sum_time(TIM):-
2236 time_taken(CP),
2237 retract(sum(N)),
2238 N1 is N +CP,
2239 assert(sum(N1)),
2240 fail.
2241sum_time(TIM):-
2242 sum(TIM).
2243sum_size(SIZE):-
2244 soln_size(S),
2245 retract(sum(N)),
2246 N1 is N +S,
2247 assert(sum(N1)),
2248 fail.
2249sum_size(SIZE):-
2250 sum(SIZE).
2251
2252
2253sum_plan(Plan):-
2254 plan_used(PL),
2255 retract(sum(N)),
2256 N1 is N +PL,
2257 assert(sum(N1)),
2258 fail.
2259sum_plan(Plan):-
2260 sum(Plan).
2261
2262
2264ground_hierarchy:-
2265 ground_predicates,
2266 ground_substate_class,!.
2267
2270ground_predicates:-
2271 predicates(Preds),
2272 grounding_preds(Preds),
2273 collect_grounded_pred,!.
2274
2275grounding_preds([]).
2277grounding_preds([HPred|TP]):-
2278 functor(HPred,FF,NN),
2279 functor(APred,FF,NN),
2280 atomic_invariants(Atom),
2281 member(APred,Atom),
2282 ground_all_var_atom(HPred),
2283 grounding_preds(TP).
2285grounding_preds([HPred|TP]):-
2286 functor(HPred,FF,NN),
2287 functor(GPred,FF,NN),
2288 ground_all_var(GPred,HPred),
2289 grounding_preds(TP).
2290
2292collect_grounded_pred:-
2293 gpred(Pred,_),
2294 setof(GPred,gpred(Pred,GPred),GPredls),
2295 retractall(gpred(Pred,_)),
2296 assert(gpredicates(Pred,GPredls)),
2297 fail.
2298collect_grounded_pred.
2299
2302ground_substate_class:-
2303 substate_classes(Sort,Obj,Substate),
2304 find_prim_sort(Sort,PS),
2305 assert_subclass(PS,Obj,Substate),
2306 fail.
2307ground_substate_class:-
2308 collect_grounded_substates.
2309
2310assert_subclass([],Obj,Substate).
2311assert_subclass([HS|TS],Obj,Substate):-
2312 assert(gsstates(HS,Obj,Substate)),
2313 assert_subclass(TS,Obj,Substate).
2314
2315collect_grounded_substates:-
2316 gsstates(Sort,Obj,_),
2317 setof(SStates,gsstates(Sort,Obj,SStates),GSStates),
2318 retractall(gsstates(Sort,Obj,_)),
2319 all_combined(GSStates,GSStates0),
2320 assert(gsubstate_classes(Sort,Obj,GSStates0)),
2321 fail.
2322collect_grounded_substates.
2323
2324all_combined(SStates,CSStates):-
2325 xprod(SStates,CSStates1),
2326 flat_interal(CSStates1,CSStates),!.
2327
2328flat_interal([],[]):-!.
2329flat_interal([HSS1|TSS1],[HSS|TSS]):-
2330 flatten(HSS1,[],HSS),
2331 flat_interal(TSS1,TSS),!.
2332
2333ground_all_var_atom(HPred):-
2334 functor(HPred,FF,NN),
2335 functor(GPred,FF,NN),
2336 functor(APred,FF,NN),
2337 atomic_invariants(Atom),
2338 member(APred,Atom),
2339 GPred=..[Name|Vars],
2340 APred=..[Name|Sorts],
2341 ground_all_var_atom0(Vars,Sorts),
2342 assert_gpred(GPred),
2343 fail.
2344ground_all_var_atom(HPred).
2345
2346ground_all_var_atom0([],[]).
2347ground_all_var_atom0([HVars|TV],[HSorts|TS]):-
2348 subsorts(HSorts,Subsorts),
2349 split_prim_noprim(Subsorts,PSorts,NPSorts),
2350 member(LS,PSorts),
2351 objects(LS,Objls),
2352 member(HVars,Objls),
2353 ground_all_var_atom0(TV,TS).
2354ground_all_var_atom0([HVar|TV],[HASorts|TS]):-
2355 objects(Sorts,Objls),
2356 member(HASorts,Objls),
2357 HVar=HASorts,
2358 ground_all_var_atom0(TV,TS).
2359
2360ground_all_var(GPred,HPred):-
2361 GPred=..[Name|Vars],
2362 HPred=..[Name|Sorts],
2363 ground_all_var0(Vars,Sorts),
2364 not(inconsistent_constraint([GPred])),
2365 assert_gpred(GPred),
2366 fail.
2367ground_all_var(GPred,HPred).
2368
2369ground_all_var0([],[]).
2370ground_all_var0([HVars|TV],[HSorts|TS]):-
2371 objects(HSorts,Objls),
2372 member(HVars,Objls),
2373 ground_all_var0(TV,TS).
2374ground_all_var0([HVars|TV],[HSorts|TS]):-
2375 subsorts(HSorts,Subsorts),
2376 split_prim_noprim(Subsorts,PSorts,NPSorts),
2377 member(LS,PSorts),
2378 objects(LS,Objls),
2379 member(HVars,Objls),
2380 ground_all_var0(TV,TS).
2381
2383
2384assert_gpred(GPred):-
2385 functor(GPred,FF,NN),
2386 functor(UPred,FF,NN),
2387 assert_gpred0(GPred,UPred),!.
2388
2389assert_gpred0(GPred,UPred):-
2390 GPred=..[Name|PSorts],
2391 UPred=..[Name|Vars],
2392 get_obj_sort(Vars,PSorts),
2393 assert(gpred(UPred,GPred)),
2394 fail.
2395assert_gpred0(GPred,UPred).
2396
2397get_obj_sort([],[]):-!.
2398get_obj_sort([HVars|TV],[HObj|TS]):-
2399 objects(HVars,Objls),
2400 member(HObj,Objls),
2401 get_obj_sort(TV,TS),!.
2402
2403delete_all_nodes :-
2404 retractall(node(_,_,_,_,_)),
2405 retractall(final_node(_)),
2406 retractall(tp_node(_,_,_,_,_,_)),
2407 retractall(closed_node(_,_,_,_,_,_)),
2408 retractall(solved_node(_,_,_)).
2409delete_all_nodes :- !.
2410
2411
2414xprod(A,B,C) :-
2415 xprod([A,B],C) .
2416
2417xprod([],[]).
2418xprod(A,E) :-
2419 xprod(A,B,C,D) ,
2420 F =..[^,C,D] ,
2421 call(setof(B,F,E)) .
2422
2423xprod([X],[A],A,member(A,X)) .
2424xprod([X,Y],[A,B],C,(D,E)) :-
2425 C =..[^,A,B] ,
2426 D =..[member,A,X] ,
2427 E =..[member,B,Y] .
2428xprod([X|Y],[A|E],D,(F,G)) :-
2429 D =..[^,A,C] ,
2430 F =..[member,A,X] ,
2431 xprod(Y,E,C,G).
2432
2433
2434:- include(translog4_domain).
2435:- include(translog4_ops).
2438:- include(translog4_problems).
2439
2440:- fixup_exports.
htncode
% Provides a prolog database env % % % % Logicmoo Project PrologMUD: A MUD server written in Prolog % Maintainer: Douglas Miles % Denton, TX 2005, 2010, 2014 % Dec 13, 2035 % */