53b412d1a8
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1697 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
9229 lines
254 KiB
Prolog
9229 lines
254 KiB
Prolog
/* Generated by CHR bootstrap compiler
|
|
From: chr_translate.chr
|
|
Date: [84,104,117,32,83,101,112,32,50,56,32,49,51,58,50,53,58,53,56,32,50,48,48,54,10]
|
|
|
|
DO NOT EDIT. EDIT THE CHR FILE INSTEAD
|
|
*/
|
|
|
|
:-module(chr_translate,[chr_translate/2]).
|
|
:-use_module(chr_runtime).
|
|
:-style_check((-singleton)).
|
|
:-style_check((-discontiguous)).
|
|
:-use_module(library(lists)).
|
|
:-use_module(hprolog).
|
|
:-use_module(library(assoc)).
|
|
:-use_module(pairlist).
|
|
:-use_module(library(ordsets)).
|
|
:-use_module(a_star).
|
|
:-use_module(listmap).
|
|
:-use_module(clean_code).
|
|
:-use_module(builtins).
|
|
:-use_module(find).
|
|
:-use_module(guard_entailment).
|
|
:-use_module(chr_compiler_options).
|
|
:-use_module(chr_compiler_utility).
|
|
:-include(chr_op).
|
|
:-op(1150,fx,chr_type).
|
|
:-op(1130,xfx,--->).
|
|
:-op(1150,fx,+).
|
|
:-op(1150,fx,-).
|
|
:-op(1150,fx,?).
|
|
set_constraint_indices(A) :-
|
|
set_constraint_indices(A,1).
|
|
set_constraint_indices([],A) :-
|
|
B is A-1,
|
|
max_constraint_index(B).
|
|
set_constraint_indices([A|B],C) :-
|
|
(
|
|
(
|
|
chr_pp_flag(debugable,on)
|
|
;
|
|
may_trigger(A)
|
|
;
|
|
is_stored(A),
|
|
get_store_type(A,default)
|
|
) ->
|
|
constraint_index(A,C),
|
|
D is C+1,
|
|
set_constraint_indices(B,D)
|
|
;
|
|
set_constraint_indices(B,C)
|
|
).
|
|
chr_translate(A,B) :-
|
|
init_chr_pp_flags,
|
|
partition_clauses(A,C,D,E),
|
|
check_declared_constraints(C),
|
|
( C==[] ->
|
|
insert_declarations(E,B)
|
|
;
|
|
generate_show_constraint(C,F,D,G),
|
|
add_constraints(F),
|
|
add_rules(G),
|
|
check_rules(G,F),
|
|
add_occurrences(G),
|
|
functional_dependency_analysis(G),
|
|
set_semantics_rules(G),
|
|
symmetry_analysis(G),
|
|
guard_simplification,
|
|
storage_analysis(F),
|
|
observation_analysis(F),
|
|
ai_observation_analysis(F),
|
|
late_allocation(F),
|
|
assume_constraint_stores(F),
|
|
set_constraint_indices(F),
|
|
constraints_code(F,H),
|
|
validate_store_type_assumptions(F),
|
|
store_management_preds(F,I),
|
|
insert_declarations(E,J),
|
|
chr_module_declaration(K),
|
|
append_lists([J,I,H,K],B)
|
|
).
|
|
store_management_preds(A,B) :-
|
|
generate_attach_detach_a_constraint_all(A,C),
|
|
generate_indexed_variables_clauses(A,D),
|
|
generate_attach_increment(E),
|
|
generate_attr_unify_hook(F),
|
|
generate_extra_clauses(A,G),
|
|
generate_insert_delete_constraints(A,H),
|
|
generate_attach_code(A,I),
|
|
generate_counter_code(J),
|
|
append_lists([C,D,E,F,G,H,I,J],B).
|
|
insert_declarations(A,B) :-
|
|
append(A,[(:-use_module(chr(chr_runtime))),(:-use_module(chr(chr_hashtable_store))),(:-use_module(library('clp/clp_events')))],B).
|
|
generate_counter_code(A) :-
|
|
( chr_pp_flag(store_counter,on) ->
|
|
A=[('$counter_init'(B):-nb_setval(B,0)),('$counter'(C,D):-nb_getval(C,D)),('$counter_inc'(E):-nb_getval(E,F),G is F+1,nb_setval(E,G)),(:-'$counter_init'('$insert_counter')),(:-'$counter_init'('$delete_counter')),('$insert_counter_inc':-'$counter_inc'('$insert_counter')),('$delete_counter_inc':-'$counter_inc'('$delete_counter')),(counter_stats(H,I):-'$counter'('$insert_counter',H),'$counter'('$delete_counter',I))]
|
|
;
|
|
A=[]
|
|
).
|
|
chr_module_declaration(A) :-
|
|
get_target_module(B),
|
|
( B\==chr_translate ->
|
|
A=[(:-multifile chr:'$chr_module'/1),chr:'$chr_module'(B)]
|
|
;
|
|
A=[]
|
|
).
|
|
partition_clauses([],[],[],[]).
|
|
partition_clauses([A|B],C,D,E) :-
|
|
( parse_rule(A,F) ->
|
|
C=G,
|
|
D=[F|H],
|
|
E=I
|
|
;
|
|
( is_declaration(A,J) ->
|
|
append(J,G,C),
|
|
D=H,
|
|
E=I
|
|
)
|
|
;
|
|
( is_module_declaration(A,K) ->
|
|
target_module(K),
|
|
C=G,
|
|
D=H,
|
|
E=[A|I]
|
|
)
|
|
;
|
|
( is_type_definition(A) ->
|
|
C=G,
|
|
D=H,
|
|
E=I
|
|
)
|
|
;
|
|
( A=(handler _) ->
|
|
format('CHR compiler WARNING: ~w.
|
|
',[A]),
|
|
format(' `--> SICStus compatibility: ignoring handler/1 declaration.
|
|
',[]),
|
|
C=G,
|
|
D=H,
|
|
E=I
|
|
)
|
|
;
|
|
( A=(rules _) ->
|
|
format('CHR compiler WARNING: ~w.
|
|
',[A]),
|
|
format(' `--> SICStus compatibility: ignoring rules/1 declaration.
|
|
',[]),
|
|
C=G,
|
|
D=H,
|
|
E=I
|
|
)
|
|
;
|
|
( A=option(L,M) ->
|
|
handle_option(L,M),
|
|
C=G,
|
|
D=H,
|
|
E=I
|
|
)
|
|
;
|
|
C=G,
|
|
D=H,
|
|
E=[A|I]
|
|
),
|
|
partition_clauses(B,G,H,I).
|
|
is_declaration(A,B) :-
|
|
( A=(:-C) ->
|
|
true
|
|
;
|
|
A=C
|
|
),
|
|
C=..[constraints,D],
|
|
conj2list(D,E),
|
|
extract_type_mode(E,B).
|
|
extract_type_mode([],[]).
|
|
extract_type_mode([B/C|A],[B/C|D]) :-
|
|
!,
|
|
extract_type_mode(A,D).
|
|
extract_type_mode([A|B],[C|D]) :-
|
|
functor(A,E,F),
|
|
C=E/F,
|
|
A=..[_|G],
|
|
extract_types_and_modes(G,H,I),
|
|
constraint_type(E/F,H),
|
|
constraint_mode(E/F,I),
|
|
extract_type_mode(B,D).
|
|
extract_types_and_modes([],[],[]).
|
|
extract_types_and_modes([(+B)|A],[B|C],[+|D]) :-
|
|
!,
|
|
extract_types_and_modes(A,C,D).
|
|
extract_types_and_modes([(?B)|A],[B|C],[?|D]) :-
|
|
!,
|
|
extract_types_and_modes(A,C,D).
|
|
extract_types_and_modes([(-B)|A],[B|C],[?|D]) :-
|
|
!,
|
|
extract_types_and_modes(A,C,D).
|
|
extract_types_and_modes([A|_],_,_) :-
|
|
format('CHR compiler ERROR: Illegal mode/type declaration "~w".
|
|
',[A]),
|
|
format(' `--> correct syntax is +type, -type or ?type.
|
|
',[]),
|
|
fail.
|
|
is_type_definition(A) :-
|
|
( A=(:-B) ->
|
|
true
|
|
;
|
|
A=B
|
|
),
|
|
B=..[chr_type,C],
|
|
( C=(D--->E) ->
|
|
tdisj2list(E,F),
|
|
type_definition(D,F)
|
|
;
|
|
format('CHR compiler WARNING: Illegal type definition "~w".
|
|
',[C]),
|
|
format(' `--> Ignoring this malformed type definition.
|
|
',[])
|
|
).
|
|
tdisj2list(A,B) :-
|
|
tdisj2list(A,B,[]).
|
|
tdisj2list(A,B,C) :-
|
|
A=(D;E),
|
|
!,
|
|
tdisj2list(D,B,F),
|
|
tdisj2list(E,F,C).
|
|
tdisj2list(B,[B|A],A).
|
|
parse_rule(A,B) :-
|
|
A=(C@D),
|
|
!,
|
|
rule(D,yes(C),B).
|
|
parse_rule(A,B) :-
|
|
rule(A,no,B).
|
|
rule(A,B,C) :-
|
|
A=(D pragma E),
|
|
!,
|
|
is_rule(D,F,G),
|
|
conj2list(E,H),
|
|
inc_rule_count(I),
|
|
C=pragma(F,G,H,B,I).
|
|
rule(A,B,C) :-
|
|
is_rule(A,D,E),
|
|
inc_rule_count(F),
|
|
C=pragma(D,E,[],B,F).
|
|
is_rule(A,B,C) :-
|
|
A=(D==>E),
|
|
!,
|
|
conj2list(D,F),
|
|
get_ids(F,G,H),
|
|
C=ids([],G),
|
|
( E=(I '|' J) ->
|
|
B=rule([],H,I,J)
|
|
;
|
|
B=rule([],H,true,E)
|
|
).
|
|
is_rule(A,B,C) :-
|
|
A=(D<=>E),
|
|
!,
|
|
( E=(F '|' G) ->
|
|
H=F,
|
|
I=G
|
|
;
|
|
H=true,
|
|
I=E
|
|
),
|
|
( D=(J\K) ->
|
|
conj2list(J,L),
|
|
conj2list(K,M),
|
|
get_ids(L,N,O,0,P),
|
|
get_ids(M,Q,R,P,_),
|
|
C=ids(Q,N)
|
|
;
|
|
conj2list(D,M),
|
|
O=[],
|
|
get_ids(M,Q,R),
|
|
C=ids(Q,[])
|
|
),
|
|
B=rule(R,O,H,I).
|
|
get_ids(A,B,C) :-
|
|
get_ids(A,B,C,0,_).
|
|
get_ids([],[],[],A,A).
|
|
get_ids([A|B],[C|D],[E|F],C,G) :-
|
|
( A=E#C ->
|
|
true
|
|
;
|
|
E=A
|
|
),
|
|
H is C+1,
|
|
get_ids(B,D,F,H,G).
|
|
is_module_declaration((:-module(A)),A).
|
|
is_module_declaration((:-module(A,_)),A).
|
|
add_constraints([]).
|
|
add_constraints([A|B]) :-
|
|
max_occurrence(A,0),
|
|
A=_/C,
|
|
length(D,C),
|
|
set_elems(D,?),
|
|
constraint_mode(A,D),
|
|
add_constraints(B).
|
|
add_rules([]).
|
|
add_rules([A|B]) :-
|
|
A=pragma(_,_,_,_,C),
|
|
rule(C,A),
|
|
add_rules(B).
|
|
check_declared_constraints(A) :-
|
|
check_declared_constraints(A,[]).
|
|
check_declared_constraints([],_).
|
|
check_declared_constraints([A|B],C) :-
|
|
( memberchk_eq(A,C) ->
|
|
format('CHR compiler ERROR: constraint ~w multiply defined.
|
|
',[A]),
|
|
format(' `--> Remove redundant declaration!
|
|
',[]),
|
|
fail
|
|
;
|
|
true
|
|
),
|
|
check_declared_constraints(B,[A|C]).
|
|
check_rules([],_).
|
|
check_rules([A|B],C) :-
|
|
check_rule(A,C),
|
|
check_rules(B,C).
|
|
check_rule(A,B) :-
|
|
check_rule_indexing(A),
|
|
A=pragma(C,_,D,_,_),
|
|
C=rule(E,F,_,_),
|
|
append(E,F,G),
|
|
check_head_constraints(G,B,A),
|
|
check_pragmas(D,A).
|
|
check_head_constraints([],_,_).
|
|
check_head_constraints([A|B],C,D) :-
|
|
functor(A,E,F),
|
|
( member(E/F,C) ->
|
|
check_head_constraints(B,C,D)
|
|
;
|
|
format('CHR compiler ERROR: Undeclared constraint ~w in head of ~@.
|
|
',[E/F,format_rule(D)]),
|
|
format(' `--> Constraint should be one of ~w.
|
|
',[C]),
|
|
fail
|
|
).
|
|
check_pragmas([],_).
|
|
check_pragmas([A|B],C) :-
|
|
check_pragma(A,C),
|
|
check_pragmas(B,C).
|
|
check_pragma(A,B) :-
|
|
var(A),
|
|
!,
|
|
format('CHR compiler ERROR: invalid pragma ~w in ~@.
|
|
',[A,format_rule(B)]),
|
|
format(' `--> Pragma should not be a variable!
|
|
',[]),
|
|
fail.
|
|
check_pragma(passive(A),B) :-
|
|
!,
|
|
B=pragma(_,ids(C,D),_,_,E),
|
|
( memberchk_eq(A,C) ->
|
|
true
|
|
;
|
|
( memberchk_eq(A,D) ->
|
|
true
|
|
)
|
|
;
|
|
format('CHR compiler ERROR: invalid identifier ~w in pragma passive in ~@.
|
|
',[A,format_rule(B)]),
|
|
fail
|
|
),
|
|
passive(E,A).
|
|
check_pragma(A,B) :-
|
|
A=already_in_heads,
|
|
!,
|
|
format('CHR compiler WARNING: currently unsupported pragma ~w in ~@.
|
|
',[A,format_rule(B)]),
|
|
format(' `--> Pragma is ignored. Termination and correctness may be affected
|
|
',[]).
|
|
check_pragma(A,B) :-
|
|
A=already_in_head(_),
|
|
!,
|
|
format('CHR compiler WARNING: currently unsupported pragma ~w in ~@.
|
|
',[A,format_rule(B)]),
|
|
format(' `--> Pragma is ignored. Termination and correctness may be affected
|
|
',[]).
|
|
check_pragma(A,B) :-
|
|
format('CHR compiler ERROR: invalid pragma ~w in ~@.
|
|
',[A,format_rule(B)]),
|
|
format(' `--> Pragma should be one of passive/1!
|
|
',[]),
|
|
fail.
|
|
format_rule(A) :-
|
|
A=pragma(_,_,_,B,C),
|
|
( B=yes(D) ->
|
|
write('rule '),
|
|
write(D)
|
|
;
|
|
write('rule number '),
|
|
write(C)
|
|
).
|
|
check_rule_indexing(A) :-
|
|
A=pragma(B,_,_,_,_),
|
|
B=rule(C,D,E,_),
|
|
term_variables(C-D,F),
|
|
remove_anti_monotonic_guards(E,F,G),
|
|
check_indexing(C,G-D),
|
|
check_indexing(D,G-C).
|
|
remove_anti_monotonic_guards(A,B,C) :-
|
|
conj2list(A,D),
|
|
remove_anti_monotonic_guard_list(D,B,E),
|
|
list2conj(E,C).
|
|
remove_anti_monotonic_guard_list([],_,[]).
|
|
remove_anti_monotonic_guard_list([A|B],C,D) :-
|
|
( A=var(E),
|
|
memberchk_eq(E,C) ->
|
|
D=F
|
|
;
|
|
D=[A|F]
|
|
),
|
|
remove_anti_monotonic_guard_list(B,C,F).
|
|
check_indexing([],_).
|
|
check_indexing([A|B],C) :-
|
|
functor(A,D,E),
|
|
A=..[_|F],
|
|
term_variables(B-C,G),
|
|
check_indexing(F,1,D/E,G),
|
|
check_indexing(B,[A|C]).
|
|
check_indexing([],_,_,_).
|
|
check_indexing([A|B],C,D,E) :-
|
|
( is_indexed_argument(D,C) ->
|
|
true
|
|
;
|
|
( nonvar(A) ->
|
|
indexed_argument(D,C)
|
|
)
|
|
;
|
|
term_variables(B,F),
|
|
append(F,E,G),
|
|
( memberchk_eq(A,G) ->
|
|
indexed_argument(D,C)
|
|
;
|
|
true
|
|
)
|
|
),
|
|
H is C+1,
|
|
term_variables(A,I),
|
|
append(I,E,J),
|
|
check_indexing(B,H,D,J).
|
|
add_occurrences([]).
|
|
add_occurrences([A|B]) :-
|
|
A=pragma(rule(C,D,_,_),ids(E,F),_,_,G),
|
|
add_occurrences(C,E,G),
|
|
add_occurrences(D,F,G),
|
|
add_occurrences(B).
|
|
add_occurrences([],[],_).
|
|
add_occurrences([A|B],[C|D],E) :-
|
|
functor(A,F,G),
|
|
H=F/G,
|
|
new_occurrence(H,E,C),
|
|
add_occurrences(B,D,E).
|
|
is_observed(A,B) :-
|
|
is_self_observer(A),
|
|
ai_is_observed(A,B).
|
|
observation_analysis(A) :-
|
|
( chr_pp_flag(observation,on) ->
|
|
observation_analysis(A,A)
|
|
;
|
|
true
|
|
).
|
|
observation_analysis([],_).
|
|
observation_analysis([A|B],C) :-
|
|
get_max_occurrence(A,D),
|
|
observation_analysis_occurrences(A,1,D,C),
|
|
observation_analysis(B,C).
|
|
observation_analysis_occurrences(A,B,C,D) :-
|
|
( B>C ->
|
|
true
|
|
;
|
|
observation_analysis_occurrence(A,B,D),
|
|
E is B+1,
|
|
observation_analysis_occurrences(A,E,C,D)
|
|
).
|
|
observation_analysis_occurrence(A,B,C) :-
|
|
get_occurrence(A,B,D,E),
|
|
( is_passive(D,E) ->
|
|
true
|
|
;
|
|
get_rule(D,F),
|
|
F=pragma(rule(G,H,_,I),ids(J,K),_,_,_),
|
|
( select2(E,L,J,G,_,M) ->
|
|
append(M,H,N)
|
|
;
|
|
( select2(E,L,K,H,_,O) ->
|
|
append(O,G,N)
|
|
)
|
|
),
|
|
observe_heads(A,N),
|
|
observe_body(A,I,C)
|
|
).
|
|
observe_heads(A,B) :-
|
|
findall(C/D,(member(E,B),functor(E,C,D)),F),
|
|
observe_all(A,F).
|
|
observe_all(A,B) :-
|
|
( B=[C|D] ->
|
|
observes(A,C),
|
|
observe_all(A,D)
|
|
;
|
|
true
|
|
).
|
|
spawn_all(A,B) :-
|
|
( B=[C|D] ->
|
|
spawns_observer(A,C),
|
|
spawn_all(A,D)
|
|
;
|
|
true
|
|
).
|
|
spawn_all_triggers(A,B) :-
|
|
( B=[C|D] ->
|
|
( may_trigger(C) ->
|
|
spawns_observer(A,C)
|
|
;
|
|
true
|
|
),
|
|
spawn_all_triggers(A,D)
|
|
;
|
|
true
|
|
).
|
|
observe_body(A,B,C) :-
|
|
( var(B) ->
|
|
spawn_all(A,C)
|
|
;
|
|
( B=true ->
|
|
true
|
|
)
|
|
;
|
|
( B=fail ->
|
|
true
|
|
)
|
|
;
|
|
( B=(D,E) ->
|
|
observe_body(A,D,C),
|
|
observe_body(A,E,C)
|
|
)
|
|
;
|
|
( B=(D;E) ->
|
|
observe_body(A,D,C),
|
|
observe_body(A,E,C)
|
|
)
|
|
;
|
|
( B=(D->E) ->
|
|
observe_body(A,D,C),
|
|
observe_body(A,E,C)
|
|
)
|
|
;
|
|
( functor(B,F,G),
|
|
member(F/G,C) ->
|
|
spawns_observer(A,F/G)
|
|
)
|
|
;
|
|
( B=(_=_) ->
|
|
spawn_all_triggers(A,C)
|
|
)
|
|
;
|
|
( B=(_ is _) ->
|
|
spawn_all_triggers(A,C)
|
|
)
|
|
;
|
|
( binds_b(B,H) ->
|
|
( H==[] ->
|
|
true
|
|
;
|
|
spawn_all_triggers(A,C)
|
|
)
|
|
)
|
|
;
|
|
spawn_all(A,C)
|
|
).
|
|
late_allocation_analysis(A) :-
|
|
( chr_pp_flag(late_allocation,on) ->
|
|
late_allocation(A)
|
|
;
|
|
true
|
|
).
|
|
late_allocation([]).
|
|
late_allocation([A|B]) :-
|
|
allocation_occurrence(A,1),
|
|
late_allocation(B).
|
|
generate_attach_detach_a_constraint_all([],[]).
|
|
generate_attach_detach_a_constraint_all([A|B],C) :-
|
|
(
|
|
(
|
|
chr_pp_flag(debugable,on)
|
|
;
|
|
may_trigger(A)
|
|
) ->
|
|
generate_attach_a_constraint(A,D),
|
|
generate_detach_a_constraint(A,E)
|
|
;
|
|
D=[],
|
|
E=[]
|
|
),
|
|
generate_attach_detach_a_constraint_all(B,F),
|
|
append_lists([D,E,F],C).
|
|
generate_attach_a_constraint(C,[A,B]) :-
|
|
generate_attach_a_constraint_empty_list(C,A),
|
|
get_max_constraint_index(D),
|
|
( D==1 ->
|
|
generate_attach_a_constraint_1_1(C,B)
|
|
;
|
|
generate_attach_a_constraint_t_p(C,B)
|
|
).
|
|
generate_attach_a_constraint_skeleton(A,B,C,D) :-
|
|
make_name(attach_,A,E),
|
|
F=..[E|B],
|
|
D=(F:-C).
|
|
generate_attach_a_constraint_empty_list(A,B) :-
|
|
generate_attach_a_constraint_skeleton(A,[[],_],true,B).
|
|
generate_attach_a_constraint_1_1(A,B) :-
|
|
F=[[C|D],E],
|
|
generate_attach_a_constraint_skeleton(A,F,G,B),
|
|
generate_attach_body_1(A,C,E,H),
|
|
make_name(attach_,A,I),
|
|
J=..[I,D,E],
|
|
chr_pp_flag(solver_events,K),
|
|
( K\==none ->
|
|
F=[[C|_],E],
|
|
get_target_module(L),
|
|
M=clp_events:subscribe(C,K,L,chr_runtime:'chr run_suspensions'([E]))
|
|
;
|
|
M=true
|
|
),
|
|
G=(H,M,J).
|
|
generate_attach_body_1(_,A,B,C) :-
|
|
get_target_module(D),
|
|
C=(get_attr(A,D,E)->F=[B|E],put_attr(A,D,F);put_attr(A,D,[B])).
|
|
generate_attach_a_constraint_t_p(A,B) :-
|
|
F=[[C|D],E],
|
|
generate_attach_a_constraint_skeleton(A,F,G,B),
|
|
make_name(attach_,A,H),
|
|
I=..[H,D,E],
|
|
generate_attach_body_n(A,C,E,J),
|
|
chr_pp_flag(solver_events,K),
|
|
( K\==none ->
|
|
F=[[C|_],E],
|
|
get_target_module(L),
|
|
M=clp_events:subscribe(C,K,L,chr_runtime:'chr run_suspensions'([E]))
|
|
;
|
|
M=true
|
|
),
|
|
G=(J,M,I).
|
|
generate_attach_body_n(A/B,C,D,E) :-
|
|
get_constraint_index(A/B,F),
|
|
or_pattern(F,G),
|
|
get_max_constraint_index(H),
|
|
make_attr(H,I,J,K),
|
|
nth(F,J,L),
|
|
substitute(L,J,[D|L],M),
|
|
make_attr(H,I,M,N),
|
|
substitute(L,J,[D],O),
|
|
make_attr(H,P,O,Q),
|
|
copy_term(J,R),
|
|
nth(F,R,[D]),
|
|
chr_delete(R,[D],S),
|
|
set_elems(S,[]),
|
|
make_attr(H,G,R,T),
|
|
get_target_module(U),
|
|
E=(get_attr(C,U,V)->V=K,(I/\G=:=G->put_attr(C,U,N);P is I\/G,put_attr(C,U,Q));put_attr(C,U,T)).
|
|
generate_detach_a_constraint(C,[A,B]) :-
|
|
generate_detach_a_constraint_empty_list(C,A),
|
|
get_max_constraint_index(D),
|
|
( D==1 ->
|
|
generate_detach_a_constraint_1_1(C,B)
|
|
;
|
|
generate_detach_a_constraint_t_p(C,B)
|
|
).
|
|
generate_detach_a_constraint_empty_list(A,B) :-
|
|
make_name(detach_,A,C),
|
|
D=[[],_],
|
|
E=..[C|D],
|
|
B=(E:-true).
|
|
generate_detach_a_constraint_1_1(A,B) :-
|
|
make_name(detach_,A,C),
|
|
G=[[D|E],F],
|
|
H=..[C|G],
|
|
I=..[C,E,F],
|
|
generate_detach_body_1(A,D,F,J),
|
|
K=(J,I),
|
|
B=(H:-K).
|
|
generate_detach_body_1(_,A,B,C) :-
|
|
get_target_module(D),
|
|
C=(get_attr(A,D,E)->'chr sbag_del_element'(E,B,F),(F==[]->del_attr(A,D);put_attr(A,D,F));true).
|
|
generate_detach_a_constraint_t_p(A,B) :-
|
|
make_name(detach_,A,C),
|
|
G=[[D|E],F],
|
|
H=..[C|G],
|
|
I=..[C,E,F],
|
|
generate_detach_body_n(A,D,F,J),
|
|
K=(J,I),
|
|
B=(H:-K).
|
|
generate_detach_body_n(A/B,C,D,E) :-
|
|
get_constraint_index(A/B,F),
|
|
or_pattern(F,G),
|
|
and_pattern(F,H),
|
|
get_max_constraint_index(I),
|
|
make_attr(I,J,K,L),
|
|
nth(F,K,M),
|
|
substitute(M,K,[],N),
|
|
make_attr(I,O,N,P),
|
|
substitute(M,K,Q,R),
|
|
make_attr(I,J,R,S),
|
|
get_target_module(T),
|
|
E=(get_attr(C,T,U)->U=L,(J/\G=:=G->'chr sbag_del_element'(M,D,Q),(Q==[]->O is J/\H,(O==0->del_attr(C,T);put_attr(C,T,P));put_attr(C,T,S));true);true).
|
|
generate_indexed_variables_clauses(A,B) :-
|
|
( forsome(C,A,chr_translate:may_trigger(C)) ->
|
|
generate_indexed_variables_clauses_(A,B)
|
|
;
|
|
B=[]
|
|
).
|
|
generate_indexed_variables_clauses_([],[]).
|
|
generate_indexed_variables_clauses_([A|B],C) :-
|
|
( is_stored(A) ->
|
|
C=[D|E],
|
|
generate_indexed_variables_clause(A,D)
|
|
;
|
|
C=E
|
|
),
|
|
generate_indexed_variables_clauses_(B,E).
|
|
create_indexed_variables_body([],[],_,_,_,empty,0).
|
|
create_indexed_variables_body([A|B],[C|D],E,F,G,H,I) :-
|
|
J is F+1,
|
|
create_indexed_variables_body(B,D,K,J,G,L,M),
|
|
( C\== +,
|
|
is_indexed_argument(G,F) ->
|
|
( L==empty ->
|
|
H=term_variables(A,E)
|
|
;
|
|
H=(term_variables(A,E,K),L)
|
|
),
|
|
I=M
|
|
;
|
|
E=K,
|
|
H=L,
|
|
I is M+1
|
|
).
|
|
generate_extra_clauses(A,B) :-
|
|
generate_activate_clause(B,C),
|
|
generate_remove_clause(C,D),
|
|
generate_allocate_clause(D,E),
|
|
generate_insert_constraint_internal(E,F),
|
|
global_indexed_variables_clause(A,F,[]).
|
|
generate_remove_clause(A,B) :-
|
|
( is_used_auxiliary_predicate(remove_constraint_internal) ->
|
|
A=[C|B],
|
|
use_auxiliary_predicate(chr_indexed_variables),
|
|
C=(remove_constraint_internal(D,E,F):-arg(2,D,G),G=mutable(H),'chr update_mutable'(removed,G),(compound(H)->E=[],F=no;H==removed->E=[],F=no;F=yes,chr_indexed_variables(D,E)))
|
|
;
|
|
A=B
|
|
).
|
|
generate_activate_clause(A,B) :-
|
|
( is_used_auxiliary_predicate(activate_constraint) ->
|
|
A=[C|B],
|
|
use_auxiliary_predicate(chr_indexed_variables),
|
|
C=(activate_constraint(D,E,F,G):-arg(2,F,H),H=mutable(I),'chr update_mutable'(active,H),(nonvar(G)->true;arg(4,F,J),J=mutable(K),G is K+1,'chr update_mutable'(G,J)),(compound(I)->term_variables(I,E),'chr none_locked'(E),D=yes;I==removed->chr_indexed_variables(F,E),D=yes;E=[],D=no))
|
|
;
|
|
A=B
|
|
).
|
|
generate_allocate_clause(A,B) :-
|
|
( is_used_auxiliary_predicate(allocate_constraint) ->
|
|
A=[C|B],
|
|
use_auxiliary_predicate(chr_indexed_variables),
|
|
C=(allocate_constraint(D,E,F,G):-E=..[suspension,H,I,D,J,K,F|G],J=mutable(0),'chr empty_history'(L),K=mutable(L),chr_indexed_variables(E,M),I=mutable(passive(M)),'chr gen_id'(H))
|
|
;
|
|
A=B
|
|
).
|
|
generate_insert_constraint_internal(A,B) :-
|
|
( is_used_auxiliary_predicate(insert_constraint_internal) ->
|
|
A=[C|B],
|
|
use_auxiliary_predicate(chr_indexed_variables),
|
|
C=(insert_constraint_internal(yes,D,E,F,G,H):-E=..[suspension,I,J,F,K,L,G|H],chr_indexed_variables(E,D),'chr none_locked'(D),J=mutable(active),K=mutable(0),L=mutable(M),'chr empty_history'(M),'chr gen_id'(I))
|
|
;
|
|
A=B
|
|
).
|
|
global_indexed_variables_clause(A,B,C) :-
|
|
( is_used_auxiliary_predicate(chr_indexed_variables) ->
|
|
B=[D|C],
|
|
( chr_pp_flag(reduced_indexing,on) ->
|
|
( forsome(E,A,chr_translate:may_trigger(E)) ->
|
|
I=(G=..[_,_,_,_,_,_,F|_],'$indexed_variables'(F,H))
|
|
;
|
|
I=true,
|
|
H=[]
|
|
),
|
|
D=(chr_indexed_variables(G,H):-I)
|
|
;
|
|
D=(chr_indexed_variables(G,H):-'chr chr_indexed_variables'(G,H))
|
|
)
|
|
;
|
|
B=C
|
|
).
|
|
generate_attach_increment(A) :-
|
|
get_max_constraint_index(B),
|
|
( B>0 ->
|
|
A=[C,D],
|
|
generate_attach_increment_empty(C),
|
|
( B==1 ->
|
|
generate_attach_increment_one(D)
|
|
;
|
|
generate_attach_increment_many(B,D)
|
|
)
|
|
;
|
|
A=[]
|
|
).
|
|
generate_attach_increment_empty((attach_increment([],_):-true)).
|
|
generate_attach_increment_one(A) :-
|
|
E=attach_increment([B|C],D),
|
|
get_target_module(F),
|
|
J=('chr not_locked'(B),(get_attr(B,F,G)->sort(G,H),merge(D,H,I),put_attr(B,F,I);put_attr(B,F,D)),attach_increment(C,D)),
|
|
A=(E:-J).
|
|
generate_attach_increment_many(A,B) :-
|
|
make_attr(A,C,D,E),
|
|
make_attr(A,F,G,H),
|
|
K=attach_increment([I|J],E),
|
|
bagof(P,O^N^M^L^(member2(D,G,O-N),P=(sort(N,M),'chr merge_attributes'(O,M,L))),Q),
|
|
list2conj(Q,R),
|
|
bagof(V,U^T^S^member((U,'chr merge_attributes'(T,S,V)),Q),W),
|
|
make_attr(A,X,W,Y),
|
|
get_target_module(Z),
|
|
B1=('chr not_locked'(I),(get_attr(I,Z,A1)->A1=H,R,X is C\/F,put_attr(I,Z,Y);put_attr(I,Z,E)),attach_increment(J,E)),
|
|
B=(K:-B1).
|
|
generate_attr_unify_hook(A) :-
|
|
get_max_constraint_index(B),
|
|
( B==0 ->
|
|
A=[]
|
|
;
|
|
A=[C],
|
|
( B==1 ->
|
|
generate_attr_unify_hook_one(C)
|
|
;
|
|
generate_attr_unify_hook_many(B,C)
|
|
)
|
|
).
|
|
generate_attr_unify_hook_one(A) :-
|
|
D=attr_unify_hook(B,C),
|
|
get_target_module(E),
|
|
make_run_suspensions(F,G),
|
|
make_run_suspensions(B,H),
|
|
M=(sort(B,I),(var(C)->(get_attr(C,E,J)->true;J=[]),sort(J,K),'chr merge_attributes'(I,K,F),put_attr(C,E,F),G;(compound(C)->term_variables(C,L),attach_increment(L,I);true),H)),
|
|
A=(D:-M).
|
|
generate_attr_unify_hook_many(A,B) :-
|
|
make_attr(A,C,D,E),
|
|
make_attr(A,F,G,H),
|
|
bagof(K,J^I^(member(J,D),K=sort(J,I)),L),
|
|
list2conj(L,M),
|
|
bagof(I,J^member(sort(J,I),L),N),
|
|
bagof(S,R^Q^P^O^(member2(N,G,R-Q),S=(sort(Q,P),'chr merge_attributes'(R,P,O))),T),
|
|
bagof(O,R^P^U^member((U,'chr merge_attributes'(R,P,O)),T),V),
|
|
list2conj(T,W),
|
|
make_attr(A,X,V,Y),
|
|
make_attr(A,C,N,Z),
|
|
B1=attr_unify_hook(E,A1),
|
|
get_target_module(C1),
|
|
make_run_suspensions_loop(V,D1),
|
|
make_run_suspensions_loop(N,E1),
|
|
H1=(M,(var(A1)->(get_attr(A1,C1,F1)->F1=H,W,X is C\/F,put_attr(A1,C1,Y),D1;put_attr(A1,C1,Z),E1);(compound(A1)->term_variables(A1,G1),attach_increment(G1,Z);true),E1)),
|
|
B=(B1:-H1).
|
|
make_run_suspensions(A,B) :-
|
|
( chr_pp_flag(debugable,on) ->
|
|
B='chr run_suspensions_d'(A)
|
|
;
|
|
B='chr run_suspensions'(A)
|
|
).
|
|
make_run_suspensions_loop(A,B) :-
|
|
( chr_pp_flag(debugable,on) ->
|
|
B='chr run_suspensions_loop_d'(A)
|
|
;
|
|
B='chr run_suspensions_loop'(A)
|
|
).
|
|
generate_insert_delete_constraints([],[]).
|
|
generate_insert_delete_constraints([A|B],C) :-
|
|
( is_stored(A) ->
|
|
C=[D,E|F],
|
|
generate_insert_delete_constraint(A,D,E)
|
|
;
|
|
C=F
|
|
),
|
|
generate_insert_delete_constraints(B,F).
|
|
generate_insert_delete_constraint(A,B,C) :-
|
|
get_store_type(A,D),
|
|
generate_insert_constraint(D,A,B),
|
|
generate_delete_constraint(D,A,C).
|
|
generate_insert_constraint(A,B,C) :-
|
|
make_name('$insert_in_store_',B,D),
|
|
F=..[D,E],
|
|
generate_insert_constraint_body(A,B,E,G),
|
|
( chr_pp_flag(store_counter,on) ->
|
|
H='$insert_counter_inc'
|
|
;
|
|
H=true
|
|
),
|
|
C=(F:-H,G).
|
|
generate_insert_constraint_body(default,A,B,C) :-
|
|
get_target_module(_),
|
|
get_max_constraint_index(D),
|
|
( D==1 ->
|
|
generate_attach_body_1(A,E,B,F)
|
|
;
|
|
generate_attach_body_n(A,E,B,F)
|
|
),
|
|
C=('chr global_term_ref_1'(E),F).
|
|
generate_insert_constraint_body(multi_hash(A),B,C,D) :-
|
|
generate_multi_hash_insert_constraint_bodies(A,B,C,D).
|
|
generate_insert_constraint_body(global_ground,A,B,C) :-
|
|
global_ground_store_name(A,D),
|
|
C=(nb_getval(D,E),b_setval(D,[B|E])).
|
|
generate_insert_constraint_body(global_singleton,A,B,C) :-
|
|
global_singleton_store_name(A,D),
|
|
C=b_setval(D,B).
|
|
generate_insert_constraint_body(multi_store(A),B,C,D) :-
|
|
find_with_var_identity(F,[C],(member(E,A),chr_translate:generate_insert_constraint_body(E,B,C,F)),G),
|
|
list2conj(G,D).
|
|
generate_multi_hash_insert_constraint_bodies([],_,_,true).
|
|
generate_multi_hash_insert_constraint_bodies([A|B],E,F,(C,D)) :-
|
|
multi_hash_store_name(E,A,G),
|
|
multi_hash_key(E,A,F,H,I),
|
|
C=(H,nb_getval(G,J),insert_ht(J,I,F)),
|
|
generate_multi_hash_insert_constraint_bodies(B,E,F,D).
|
|
generate_delete_constraint(A,B,C) :-
|
|
make_name('$delete_from_store_',B,D),
|
|
F=..[D,E],
|
|
generate_delete_constraint_body(A,B,E,G),
|
|
( chr_pp_flag(store_counter,on) ->
|
|
H='$delete_counter_inc'
|
|
;
|
|
H=true
|
|
),
|
|
C=(F:-H,G).
|
|
generate_delete_constraint_body(default,A,B,C) :-
|
|
get_target_module(_),
|
|
get_max_constraint_index(D),
|
|
( D==1 ->
|
|
generate_detach_body_1(A,E,B,F),
|
|
C=('chr global_term_ref_1'(E),F)
|
|
;
|
|
generate_detach_body_n(A,E,B,F),
|
|
C=('chr global_term_ref_1'(E),F)
|
|
).
|
|
generate_delete_constraint_body(multi_hash(A),B,C,D) :-
|
|
generate_multi_hash_delete_constraint_bodies(A,B,C,D).
|
|
generate_delete_constraint_body(global_ground,A,B,C) :-
|
|
global_ground_store_name(A,D),
|
|
C=(nb_getval(D,E),'chr sbag_del_element'(E,B,F),b_setval(D,F)).
|
|
generate_delete_constraint_body(global_singleton,A,_,B) :-
|
|
global_singleton_store_name(A,C),
|
|
B=b_setval(C,[]).
|
|
generate_delete_constraint_body(multi_store(A),B,C,D) :-
|
|
find_with_var_identity(F,[C],(member(E,A),chr_translate:generate_delete_constraint_body(E,B,C,F)),G),
|
|
list2conj(G,D).
|
|
generate_multi_hash_delete_constraint_bodies([],_,_,true).
|
|
generate_multi_hash_delete_constraint_bodies([A|B],E,F,(C,D)) :-
|
|
multi_hash_store_name(E,A,G),
|
|
multi_hash_key(E,A,F,H,I),
|
|
C=(H,nb_getval(G,J),delete_ht(J,I,F)),
|
|
generate_multi_hash_delete_constraint_bodies(B,E,F,D).
|
|
generate_delete_constraint_call(A,B,C) :-
|
|
make_name('$delete_from_store_',A,D),
|
|
C=..[D,B].
|
|
generate_insert_constraint_call(A,B,C) :-
|
|
make_name('$insert_in_store_',A,D),
|
|
C=..[D,B].
|
|
generate_attach_code(C,[A|B]) :-
|
|
enumerate_stores_code(C,A),
|
|
generate_attach_code(C,B,[]).
|
|
generate_attach_code([],A,A).
|
|
generate_attach_code([A|B],C,D) :-
|
|
get_store_type(A,E),
|
|
generate_attach_code(E,A,C,F),
|
|
generate_attach_code(B,F,D).
|
|
generate_attach_code(default,_,A,A).
|
|
generate_attach_code(multi_hash(A),B,C,D) :-
|
|
multi_hash_store_initialisations(A,B,C,E),
|
|
multi_hash_via_lookups(A,B,E,D).
|
|
generate_attach_code(global_ground,A,B,C) :-
|
|
global_ground_store_initialisation(A,B,C).
|
|
generate_attach_code(global_singleton,A,B,C) :-
|
|
global_singleton_store_initialisation(A,B,C).
|
|
generate_attach_code(multi_store(A),B,C,D) :-
|
|
multi_store_generate_attach_code(A,B,C,D).
|
|
multi_store_generate_attach_code([],_,A,A).
|
|
multi_store_generate_attach_code([A|B],C,D,E) :-
|
|
generate_attach_code(A,C,D,F),
|
|
multi_store_generate_attach_code(B,C,F,E).
|
|
multi_hash_store_initialisations([],_,A,A).
|
|
multi_hash_store_initialisations([A|B],C,D,E) :-
|
|
multi_hash_store_name(C,A,F),
|
|
D=[(:-new_ht(H),nb_setval(F,H))|G],
|
|
multi_hash_store_initialisations(B,C,G,E).
|
|
global_ground_store_initialisation(A,B,C) :-
|
|
global_ground_store_name(A,D),
|
|
B=[(:-nb_setval(D,[]))|C].
|
|
global_singleton_store_initialisation(A,B,C) :-
|
|
global_singleton_store_name(A,D),
|
|
B=[(:-nb_setval(D,[]))|C].
|
|
multi_hash_via_lookups([],_,A,A).
|
|
multi_hash_via_lookups([A|B],C,D,E) :-
|
|
multi_hash_via_lookup_name(C,A,F),
|
|
I=..[F,G,H],
|
|
multi_hash_store_name(C,A,J),
|
|
L=(nb_getval(J,K),lookup_ht(K,G,H)),
|
|
D=[(I:-L)|M],
|
|
multi_hash_via_lookups(B,C,M,E).
|
|
multi_hash_via_lookup_name(A/B,C,D) :-
|
|
( integer(C) ->
|
|
E=C
|
|
;
|
|
( is_list(C) ->
|
|
atom_concat_list(C,E)
|
|
)
|
|
),
|
|
atom_concat_list(['$via1_multi_hash_',A,/,B,-,E],D).
|
|
multi_hash_store_name(A/B,C,D) :-
|
|
get_target_module(E),
|
|
( integer(C) ->
|
|
F=C
|
|
;
|
|
( is_list(C) ->
|
|
atom_concat_list(C,F)
|
|
)
|
|
),
|
|
atom_concat_list(['$chr_store_multi_hash_',E,:,A,/,B,-,F],D).
|
|
multi_hash_key(_/_,A,B,C,D) :-
|
|
(
|
|
( integer(A) ->
|
|
E=A
|
|
;
|
|
A=[E]
|
|
) ->
|
|
F is E+6,
|
|
C=arg(F,B,D)
|
|
;
|
|
( is_list(A) ->
|
|
sort(A,G),
|
|
find_with_var_identity(arg(H,B,I)-I,[B],(member(E,G),H is E+6),J),
|
|
pairup(K,L,J),
|
|
D=..[k|L],
|
|
list2conj(K,C)
|
|
)
|
|
).
|
|
multi_hash_key_args(A,B,C) :-
|
|
( integer(A) ->
|
|
arg(A,B,D),
|
|
C=[D]
|
|
;
|
|
( is_list(A) ->
|
|
sort(A,E),
|
|
term_variables(B,F),
|
|
find_with_var_identity(D,F,(member(G,E),arg(G,B,D)),C)
|
|
)
|
|
).
|
|
global_ground_store_name(A/B,C) :-
|
|
get_target_module(D),
|
|
atom_concat_list(['$chr_store_global_ground_',D,:,A,/,B],C).
|
|
global_singleton_store_name(A/B,C) :-
|
|
get_target_module(D),
|
|
atom_concat_list(['$chr_store_global_singleton_',D,:,A,/,B],C).
|
|
enumerate_stores_code(A,B) :-
|
|
D='$enumerate_suspensions'(C),
|
|
enumerate_store_bodies(A,C,E),
|
|
list2disj(E,F),
|
|
B=(D:-F).
|
|
enumerate_store_bodies([],_,[]).
|
|
enumerate_store_bodies([A|B],C,D) :-
|
|
( is_stored(A) ->
|
|
get_store_type(A,E),
|
|
enumerate_store_body(E,A,C,F),
|
|
D=[F|G]
|
|
;
|
|
D=G
|
|
),
|
|
enumerate_store_bodies(B,C,G).
|
|
enumerate_store_body(default,A,B,C) :-
|
|
get_constraint_index(A,D),
|
|
get_target_module(E),
|
|
get_max_constraint_index(F),
|
|
I=('chr global_term_ref_1'(G),get_attr(G,E,H)),
|
|
( F>1 ->
|
|
J is D+1,
|
|
L=(arg(J,H,K),'chr sbag_member'(B,K))
|
|
;
|
|
L='chr sbag_member'(B,H)
|
|
),
|
|
C=(I,L).
|
|
enumerate_store_body(multi_hash([A|_]),B,C,D) :-
|
|
multi_hash_enumerate_store_body(A,B,C,D).
|
|
enumerate_store_body(global_ground,A,B,C) :-
|
|
global_ground_store_name(A,D),
|
|
C=(nb_getval(D,E),'chr sbag_member'(B,E)).
|
|
enumerate_store_body(global_singleton,A,B,C) :-
|
|
global_singleton_store_name(A,D),
|
|
C=(nb_getval(D,B),B\==[]).
|
|
enumerate_store_body(multi_store(A),B,C,D) :-
|
|
once((member(E,A),enumerate_store_body(E,B,C,D))).
|
|
multi_hash_enumerate_store_body(A,B,C,D) :-
|
|
multi_hash_store_name(B,A,E),
|
|
D=(nb_getval(E,F),value_ht(F,C)).
|
|
guard_simplification :-
|
|
( chr_pp_flag(guard_simplification,on) ->
|
|
multiple_occ_constraints_checked([]),
|
|
simplify_guards(1)
|
|
;
|
|
true
|
|
).
|
|
add_type_information_(_,[],true) :-
|
|
!.
|
|
add_type_information_(C,[A|B],D) :-
|
|
!,
|
|
add_type_information(C,A,E),
|
|
D=(E,F),
|
|
add_type_information_(C,B,F).
|
|
compute_derived_info(_,[],_,_,_,_,_,_,[],[]) :-
|
|
!.
|
|
compute_derived_info(C,[A|B],D,E,F,G,H,I,J,K) :-
|
|
!,
|
|
copy_term(C-F,L),
|
|
variable_replacement(C-F,L,M),
|
|
append(A,M,N),
|
|
list2conj(C,O),
|
|
negate_b(O,P),
|
|
make_head_matchings_explicit_not_negated2(E,D,Q),
|
|
list2conj(Q,R),
|
|
term_variables(N,S),
|
|
term_variables(C-F-Q,T),
|
|
new_vars(T,S,U),
|
|
append(N,U,V),
|
|
negate_b(F,W),
|
|
( F==true ->
|
|
X=P
|
|
;
|
|
X=(P;R,W)
|
|
),
|
|
copy_with_variable_replacement(X,Y,V),
|
|
copy_with_variable_replacement(F,Z,V),
|
|
copy_with_variable_replacement(C,A1,V),
|
|
list2conj(A1,B1),
|
|
add_guard_to_head(H,Z,C1),
|
|
add_guard_to_head(C1,B1,D1),
|
|
compute_derived_info(C,B,D,E,F,G,H,I,E1,F1),
|
|
append([Y],E1,J),
|
|
append([D1],F1,K).
|
|
simplify_guard(A,B,C,D,E) :-
|
|
conj2list(A,F),
|
|
guard_entailment:simplify_guards(C,B,F,G,E),
|
|
list2conj(G,D).
|
|
new_vars([],_,[]).
|
|
new_vars([A|B],C,D) :-
|
|
( memberchk_eq(A,C) ->
|
|
new_vars(B,C,D)
|
|
;
|
|
D=[A-E,E-A|F],
|
|
new_vars(B,C,F)
|
|
).
|
|
head_subset(A,B,C) :-
|
|
head_subset(A,B,C,[],_).
|
|
head_subset([],A,B,C,D) :-
|
|
!,
|
|
B=C,
|
|
D=A.
|
|
head_subset([A|B],C,D,E,F) :-
|
|
!,
|
|
head_subset(A,C,G,E,H),
|
|
head_subset(B,H,I,G,J),
|
|
D=I,
|
|
F=J.
|
|
head_subset(C,[A|B],D,E,F) :-
|
|
!,
|
|
(
|
|
head_subset(C,A,G,E,_),
|
|
D=G,
|
|
F=B
|
|
;
|
|
head_subset(C,B,H,E,I),
|
|
D=H,
|
|
F=[A|I]
|
|
).
|
|
head_subset(A,B,C,D,E) :-
|
|
variable_replacement(A,B,D,C),
|
|
E=[].
|
|
make_head_matchings_explicit(A,B,C) :-
|
|
extract_variables(A,D),
|
|
make_matchings_explicit(D,E,[],[],_,C),
|
|
insert_variables(E,A,B).
|
|
make_head_matchings_explicit_not_negated(A,B,C) :-
|
|
extract_variables(A,D),
|
|
make_matchings_explicit_not_negated(D,E,[],C),
|
|
insert_variables(E,A,B).
|
|
make_head_matchings_explicit_not_negated2(A,B,C) :-
|
|
extract_variables(A,D),
|
|
extract_variables(B,E),
|
|
make_matchings_explicit_not_negated(D,E,[],C).
|
|
extract_variables([],[]).
|
|
extract_variables([A|B],C) :-
|
|
A=..[_|D],
|
|
extract_variables(B,E),
|
|
append(D,E,C).
|
|
insert_variables([],[],[]) :-
|
|
!.
|
|
insert_variables(E,[A|B],[C|D]) :-
|
|
A=..[F|G],
|
|
length(G,H),
|
|
take_first_N(E,H,I,J),
|
|
C=..[F|I],
|
|
insert_variables(J,B,D).
|
|
take_first_N(A,0,[],A) :-
|
|
!.
|
|
take_first_N([A|B],D,[A|C],E) :-
|
|
F is D-1,
|
|
take_first_N(B,F,C,E).
|
|
make_matchings_explicit([],[],_,A,A,[]).
|
|
make_matchings_explicit([A|B],[C|D],E,F,G,H) :-
|
|
( var(A) ->
|
|
( memberchk_eq(A,E) ->
|
|
list2disj(F,I),
|
|
H=[(I;C==A)|J],
|
|
K=E
|
|
;
|
|
H=J,
|
|
C=A,
|
|
K=[A|E]
|
|
),
|
|
L=F
|
|
;
|
|
functor(A,M,N),
|
|
A=..[M|O],
|
|
make_matchings_explicit(O,P,E,F,Q,R),
|
|
S=..[M|P],
|
|
( R==[] ->
|
|
H=[functor(C,M,N)|J]
|
|
;
|
|
list2conj(R,T),
|
|
list2disj(F,I),
|
|
U=(C\=S;I;T),
|
|
H=[functor(C,M,N),U|J]
|
|
),
|
|
L=[C\=S|Q],
|
|
term_variables(O,V),
|
|
append(E,V,K)
|
|
),
|
|
make_matchings_explicit(B,D,K,L,G,J).
|
|
make_matchings_explicit_not_negated([],[],_,[]).
|
|
make_matchings_explicit_not_negated([A|B],[C|D],E,F) :-
|
|
F=[C=A|G],
|
|
H=E,
|
|
make_matchings_explicit_not_negated(B,D,H,G).
|
|
add_guard_to_head([],_,[]).
|
|
add_guard_to_head([A|B],E,[C|D]) :-
|
|
( var(A) ->
|
|
find_guard_info_for_var(A,E,C)
|
|
;
|
|
functor(A,F,_),
|
|
A=..[F|G],
|
|
add_guard_to_head(G,E,H),
|
|
C=..[F|H]
|
|
),
|
|
add_guard_to_head(B,E,D).
|
|
find_guard_info_for_var(C,(A,B),D) :-
|
|
!,
|
|
find_guard_info_for_var(C,A,E),
|
|
find_guard_info_for_var(E,B,D).
|
|
find_guard_info_for_var(A,B,C) :-
|
|
( B=(D=E),
|
|
A==D ->
|
|
C=E
|
|
;
|
|
( B=functor(F,G,H),
|
|
A==F,
|
|
ground(G),
|
|
ground(H) ->
|
|
length(I,H),
|
|
C=..[G|I]
|
|
)
|
|
;
|
|
C=A
|
|
).
|
|
replace_some_heads(A,B,_,[],A,B,_,_,[]) :-
|
|
!.
|
|
replace_some_heads([],[A|B],[C|D],[E|F],[],[G|H],I,J,K) :-
|
|
!,
|
|
( C==E ->
|
|
G=E,
|
|
replace_some_heads([],B,D,F,[],H,I,J,K)
|
|
;
|
|
( E=functor(L,M,N),
|
|
C==L ->
|
|
length(O,N),
|
|
( var(A) ->
|
|
P=[],
|
|
G=..[M|O]
|
|
;
|
|
A=..[M|Q],
|
|
use_same_args(Q,O,R,I,J,P),
|
|
G=..[M|R]
|
|
),
|
|
replace_some_heads([],B,D,F,[],H,I,J,S),
|
|
append(P,S,K)
|
|
)
|
|
;
|
|
G=A,
|
|
replace_some_heads([],B,D,[E|F],[],H,I,J,K)
|
|
).
|
|
replace_some_heads([A|B],I,[C|D],[E|F],[G|H],J,K,L,M) :-
|
|
!,
|
|
( C==E ->
|
|
G=E,
|
|
replace_some_heads(B,I,D,F,H,J,K,L,M)
|
|
;
|
|
( E=functor(N,O,P),
|
|
C==N ->
|
|
length(Q,P),
|
|
( var(A) ->
|
|
R=[],
|
|
G=..[O|Q]
|
|
;
|
|
A=..[O|S],
|
|
use_same_args(S,Q,T,K,L,R),
|
|
G=..[O|T]
|
|
),
|
|
replace_some_heads(B,I,D,F,H,J,K,L,U),
|
|
append(R,U,M)
|
|
)
|
|
;
|
|
G=A,
|
|
replace_some_heads(B,I,D,[E|F],H,J,K,L,M)
|
|
).
|
|
use_same_args([],[],[],_,_,[]).
|
|
use_same_args([A|B],[_|C],[D|E],F,G,H) :-
|
|
var(A),
|
|
!,
|
|
D=A,
|
|
use_same_args(B,C,E,F,G,H).
|
|
use_same_args([A|B],[C|D],[E|F],G,H,I) :-
|
|
nonvar(A),
|
|
!,
|
|
( vars_occur_in(A,H) ->
|
|
I=[C=A|J]
|
|
;
|
|
I=J
|
|
),
|
|
E=C,
|
|
use_same_args(B,D,F,G,H,J).
|
|
simplify_heads([],_,_,_,[],[]).
|
|
simplify_heads([A|B],C,D,E,F,G) :-
|
|
A=(H=I),
|
|
(
|
|
(
|
|
nonvar(I)
|
|
;
|
|
vars_occur_in(I,B-C)
|
|
),
|
|
guard_entailment:entails_guard(C,H=I) ->
|
|
( vars_occur_in(I,D-B-C) ->
|
|
G=J,
|
|
F=K
|
|
;
|
|
( vars_occur_in(I,E) ->
|
|
G=[H=I|J]
|
|
;
|
|
G=J
|
|
),
|
|
F=[H|K]
|
|
)
|
|
;
|
|
( nonvar(I),
|
|
functor(I,L,M),
|
|
guard_entailment:entails_guard([functor(H,L,M)|C],H=I) ->
|
|
G=J,
|
|
( vars_occur_in(I,D-B-C) ->
|
|
F=K
|
|
;
|
|
F=[functor(H,L,M)|K]
|
|
)
|
|
)
|
|
;
|
|
F=K,
|
|
G=J
|
|
),
|
|
simplify_heads(B,[A|C],D,E,K,J).
|
|
vars_occur_in(A,B) :-
|
|
term_variables(A,C),
|
|
term_variables(B,D),
|
|
intersect_eq(C,D,E),
|
|
E\==[].
|
|
flatten_stuff([A|B],C) :-
|
|
!,
|
|
flatten_stuff(A,D),
|
|
flatten_stuff(B,E),
|
|
append(D,E,C).
|
|
flatten_stuff((A;B),C) :-
|
|
!,
|
|
flatten_stuff(A,D),
|
|
flatten_stuff(B,E),
|
|
append(D,E,C).
|
|
flatten_stuff((A,B),C) :-
|
|
!,
|
|
flatten_stuff(A,D),
|
|
flatten_stuff(B,E),
|
|
append(D,E,C).
|
|
flatten_stuff(chr_pp_not_in_store(A),[A]) :-
|
|
!.
|
|
flatten_stuff(_,[]).
|
|
unify_stuff(_,[],[]).
|
|
unify_stuff(E,[A|B],[C|D]) :-
|
|
A\==C,
|
|
term_variables(A,F),
|
|
term_variables(C,G),
|
|
intersect_eq(F,G,H),
|
|
check_safe_unif(A,C,H),
|
|
variable_replacement(A,C,I),
|
|
check_replacement(I),
|
|
term_variables(I,J),
|
|
list_difference_eq(J,F,K),
|
|
intersect_eq(E,K,L),
|
|
L==[],
|
|
A=C,
|
|
unify_stuff(E,B,D),
|
|
!.
|
|
unify_stuff(B,C,[_|A]) :-
|
|
unify_stuff(B,C,A).
|
|
unify_stuff(B,[_|A],C) :-
|
|
unify_stuff(B,A,C).
|
|
check_safe_unif(A,B,C) :-
|
|
var(A),
|
|
!,
|
|
var(B),
|
|
(
|
|
(
|
|
memberchk_eq(A,C)
|
|
;
|
|
memberchk_eq(B,C)
|
|
) ->
|
|
A==B
|
|
;
|
|
true
|
|
).
|
|
check_safe_unif([],[],_) :-
|
|
!.
|
|
check_safe_unif([A|B],[C|D],E) :-
|
|
!,
|
|
check_safe_unif(A,C,E),
|
|
!,
|
|
check_safe_unif(B,D,E).
|
|
check_safe_unif(A,B,C) :-
|
|
nonvar(A),
|
|
!,
|
|
nonvar(B),
|
|
A=..[D|E],
|
|
B=..[D|F],
|
|
check_safe_unif(E,F,C).
|
|
check_safe_unif2(A,_) :-
|
|
var(A),
|
|
!.
|
|
check_safe_unif2([],[]) :-
|
|
!.
|
|
check_safe_unif2([A|B],[C|D]) :-
|
|
!,
|
|
check_safe_unif2(A,C),
|
|
!,
|
|
check_safe_unif2(B,D).
|
|
check_safe_unif2(A,B) :-
|
|
nonvar(A),
|
|
!,
|
|
nonvar(B),
|
|
A=..[C|D],
|
|
B=..[C|E],
|
|
check_safe_unif2(D,E).
|
|
check_replacement(A) :-
|
|
check_replacement(A,B),
|
|
sort(B,C),
|
|
length(C,D),
|
|
!,
|
|
length(B,D).
|
|
check_replacement([],[]).
|
|
check_replacement([B-_|A],[B|C]) :-
|
|
check_replacement(A,C).
|
|
add_failing_occ(A,B,C,D,E,F,_,G,H) :-
|
|
A=pragma(rule(_,_,I,_),ids(J,K),_,_,_),
|
|
append(K,J,L),
|
|
missing_partner_cond(B,C,L,D,M,N,G),
|
|
copy_term((N,B,C),(Q,O,P)),
|
|
variable_replacement((N,B,C),(Q,O,P),H),
|
|
copy_with_variable_replacement(I,R,H),
|
|
extract_explicit_matchings(R,S),
|
|
negate_b(S,T),
|
|
copy_with_variable_replacement(M,U,H),
|
|
( check_safe_unif2(F,Q),
|
|
F=Q ->
|
|
E=[(T;U)]
|
|
;
|
|
E=[chr_pp_void_info]
|
|
).
|
|
missing_partner_cond([],[],[],_,fail,_,_).
|
|
missing_partner_cond([A|B],[_|C],[D|E],D,F,A,G) :-
|
|
!,
|
|
missing_partner_cond(B,C,E,D,F,A,G).
|
|
missing_partner_cond([A|B],[_|C],[_|D],G,H,I,E/F) :-
|
|
H=(chr_pp_not_in_store(A);J),
|
|
missing_partner_cond(B,C,D,G,J,I,E/F).
|
|
extract_explicit_matchings(A=B) :-
|
|
var(A),
|
|
var(B),
|
|
!,
|
|
A=B.
|
|
extract_explicit_matchings(A==B) :-
|
|
var(A),
|
|
var(B),
|
|
!,
|
|
A=B.
|
|
extract_explicit_matchings((A,B),C) :-
|
|
!,
|
|
( extract_explicit_matchings(A) ->
|
|
extract_explicit_matchings(B,C)
|
|
;
|
|
C=(A,D),
|
|
extract_explicit_matchings(B,D)
|
|
).
|
|
extract_explicit_matchings(A,B) :-
|
|
!,
|
|
( extract_explicit_matchings(A) ->
|
|
B=true
|
|
;
|
|
B=A
|
|
).
|
|
add_mode_info([],[],true).
|
|
add_mode_info([+|A],[B|C],D) :-
|
|
!,
|
|
D=(ground(B),E),
|
|
add_mode_info(A,C,E).
|
|
add_mode_info([_|A],[_|B],C) :-
|
|
add_mode_info(A,B,C).
|
|
types2condition([],[],[],[],[]).
|
|
types2condition([A|B],[C|D],[E|F],[G|H],I) :-
|
|
( get_type_definition(A,J) ->
|
|
type2condition(J,C,E,K),
|
|
( G\== + ->
|
|
L=[\+ground(C)|K]
|
|
;
|
|
L=K
|
|
),
|
|
list2disj(L,M),
|
|
I=[M|N],
|
|
types2condition(B,D,F,H,N)
|
|
;
|
|
( builtin_type(A,C,O) ->
|
|
I=[O|N],
|
|
types2condition(B,D,F,H,N)
|
|
)
|
|
;
|
|
format('CHR compiler ERROR: Undefined type ~w.
|
|
',[A]),
|
|
fail
|
|
).
|
|
type2condition([],_,_,[]).
|
|
type2condition([A|B],C,D,E) :-
|
|
( builtin_type(A,C,F) ->
|
|
true
|
|
;
|
|
real_type(A,C,D,F)
|
|
),
|
|
item2list(F,G),
|
|
type2condition(B,C,D,H),
|
|
append(G,H,E).
|
|
item2list([],[]) :-
|
|
!.
|
|
item2list([A|B],[A|B]) :-
|
|
!.
|
|
item2list(A,B) :-
|
|
B=[A].
|
|
builtin_type(A,_,true) :-
|
|
var(A),
|
|
!.
|
|
builtin_type(any,_,true).
|
|
builtin_type(int,A,integer(A)).
|
|
builtin_type(number,A,number(A)).
|
|
builtin_type(float,A,float(A)).
|
|
builtin_type(natural,A,(integer(A),A>=0)).
|
|
real_type(A,B,C,D) :-
|
|
( nonvar(A) ->
|
|
functor(A,E,F),
|
|
( F==0 ->
|
|
D=(B=E)
|
|
;
|
|
A=..[_|G],
|
|
length(H,F),
|
|
I=..[E|H],
|
|
( var(C) ->
|
|
D=functor(B,E,F)
|
|
;
|
|
( functor(C,E,F) ->
|
|
C=..[_|J],
|
|
nested_types(G,H,J,K),
|
|
D=(functor(B,E,F),B=I,K)
|
|
)
|
|
;
|
|
D=functor(B,E,F)
|
|
)
|
|
)
|
|
;
|
|
format('CHR compiler ERROR: Illegal type definition (must be nonvar).
|
|
',[]),
|
|
fail
|
|
).
|
|
nested_types([],[],[],true).
|
|
nested_types([A|B],[C|D],[E|F],G) :-
|
|
( get_type_definition(A,H) ->
|
|
type2condition(H,C,E,I),
|
|
list2disj(I,J),
|
|
G=(J,K),
|
|
nested_types(B,D,F,K)
|
|
;
|
|
( builtin_type(A,C,L) ->
|
|
G=(L,K),
|
|
nested_types(B,D,F,K)
|
|
)
|
|
;
|
|
format('CHR compiler ERROR: Undefined type ~w inside type definition.
|
|
',[A]),
|
|
fail
|
|
).
|
|
storage_analysis(A) :-
|
|
( chr_pp_flag(storage_analysis,on) ->
|
|
check_constraint_storages(A)
|
|
;
|
|
true
|
|
).
|
|
check_constraint_storages([]).
|
|
check_constraint_storages([A|B]) :-
|
|
check_constraint_storage(A),
|
|
check_constraint_storages(B).
|
|
check_constraint_storage(A) :-
|
|
get_max_occurrence(A,B),
|
|
check_occurrences_storage(A,1,B).
|
|
check_occurrences_storage(A,B,C) :-
|
|
( B>C ->
|
|
stored_completing(A,1,0)
|
|
;
|
|
check_occurrence_storage(A,B),
|
|
D is B+1,
|
|
check_occurrences_storage(A,D,C)
|
|
).
|
|
check_occurrence_storage(A,B) :-
|
|
get_occurrence(A,B,C,D),
|
|
( is_passive(C,D) ->
|
|
stored(A,B,maybe)
|
|
;
|
|
get_rule(C,E),
|
|
E=pragma(rule(F,G,H,I),ids(J,K),_,_,_),
|
|
( select2(D,L,J,F,_,_) ->
|
|
check_storage_head1(L,B,F,G,H)
|
|
;
|
|
( select2(D,M,K,G,_,_) ->
|
|
check_storage_head2(M,B,F,I)
|
|
)
|
|
)
|
|
).
|
|
check_storage_head1(A,B,C,D,E) :-
|
|
functor(A,F,G),
|
|
H=F/G,
|
|
( C==[A],
|
|
D==[],
|
|
guard_entailment:entails_guard([chr_pp_headvariables(A)],E),
|
|
A=..[_|I],
|
|
no_matching(I,[]) ->
|
|
stored(H,B,no)
|
|
;
|
|
stored(H,B,maybe)
|
|
).
|
|
no_matching([],_).
|
|
no_matching([A|B],C) :-
|
|
var(A),
|
|
\+memberchk_eq(A,C),
|
|
no_matching(B,[A|C]).
|
|
check_storage_head2(A,B,C,D) :-
|
|
functor(A,E,F),
|
|
G=E/F,
|
|
(
|
|
(
|
|
C\==[],
|
|
D==true
|
|
;
|
|
\+is_observed(E/F,B)
|
|
) ->
|
|
stored(G,B,maybe)
|
|
;
|
|
stored(G,B,yes)
|
|
).
|
|
constraints_code(A,B) :-
|
|
constraints_code1(A,C,[]),
|
|
clean_clauses(C,B).
|
|
constraint_prelude(A/B,C) :-
|
|
vars_susp(B,D,E,F),
|
|
G=..[A|D],
|
|
build_head(A,B,[0],F,H),
|
|
get_target_module(I),
|
|
J=..[A|D],
|
|
( chr_pp_flag(debugable,on) ->
|
|
use_auxiliary_predicate(insert_constraint_internal),
|
|
generate_insert_constraint_call(A/B,E,K),
|
|
make_name(attach_,A/B,L),
|
|
N=..[L,M,E],
|
|
P=(arg(2,E,O),'chr update_mutable'(inactive,O)),
|
|
C=(G:-insert_constraint_internal(_,M,E,I:H,J,D),K,N,P,('chr debug_event'(call(E)),H;'chr debug_event'(fail(E)),!,fail),('chr debug_event'(exit(E));'chr debug_event'(redo(E)),fail))
|
|
;
|
|
( get_allocation_occurrence(A/B,0) ->
|
|
gen_insert_constraint_internal_goal(A/B,Q,F,D,E),
|
|
P=(arg(2,E,O),'chr update_mutable'(inactive,O)),
|
|
C=(G:-Q,P,H)
|
|
)
|
|
;
|
|
C=(G:-H)
|
|
).
|
|
gen_cond_attach_clause(A/B,C,D,E) :-
|
|
( is_finally_stored(A/B) ->
|
|
get_allocation_occurrence(A/B,F),
|
|
get_max_occurrence(A/B,G),
|
|
( chr_pp_flag(debugable,off),
|
|
G<F ->
|
|
( may_trigger(A/B) ->
|
|
gen_cond_attach_goal(A/B,H,I,J,K)
|
|
;
|
|
gen_insert_constraint_internal_goal(A/B,H,I,J,K)
|
|
)
|
|
;
|
|
vars_susp(B,J,K,I),
|
|
gen_uncond_attach_goal(A/B,K,H,_)
|
|
),
|
|
( chr_pp_flag(debugable,on) ->
|
|
L=..[A|J],
|
|
M='chr debug_event'(insert(L#K))
|
|
;
|
|
M=true
|
|
),
|
|
build_head(A,B,C,I,N),
|
|
O=(N:-M,H),
|
|
D=[O|E]
|
|
;
|
|
D=E
|
|
).
|
|
gen_cond_attach_goal(A/B,C,D,E,F) :-
|
|
vars_susp(B,E,F,D),
|
|
build_head(A,B,[0],D,G),
|
|
( may_trigger(A/B) ->
|
|
make_name(attach_,A/B,H),
|
|
J=..[H,I,F]
|
|
;
|
|
J=true
|
|
),
|
|
get_target_module(K),
|
|
L=..[A|E],
|
|
generate_insert_constraint_call(A/B,F,M),
|
|
use_auxiliary_predicate(insert_constraint_internal),
|
|
use_auxiliary_predicate(activate_constraint),
|
|
C=((var(F)->insert_constraint_internal(N,I,F,K:G,L,E);activate_constraint(N,I,F,_)),(N==yes->M,J;true)).
|
|
gen_insert_constraint_internal_goal(A/B,C,D,E,F) :-
|
|
vars_susp(B,E,F,D),
|
|
( may_trigger(A/B) ->
|
|
make_name(attach_,A/B,G),
|
|
I=..[G,H,F],
|
|
build_head(A,B,[0],D,J),
|
|
get_target_module(K),
|
|
L=K:J
|
|
;
|
|
I=true,
|
|
L=true
|
|
),
|
|
M=..[A|E],
|
|
generate_insert_constraint_call(A/B,F,N),
|
|
use_auxiliary_predicate(insert_constraint_internal),
|
|
C=(insert_constraint_internal(_,H,F,L,M,E),N,I).
|
|
gen_uncond_attach_goal(A,B,C,D) :-
|
|
( may_trigger(A) ->
|
|
make_name(attach_,A,E),
|
|
G=..[E,F,B]
|
|
;
|
|
G=true
|
|
),
|
|
generate_insert_constraint_call(A,B,H),
|
|
( chr_pp_flag(late_allocation,on) ->
|
|
use_auxiliary_predicate(activate_constraint),
|
|
C=(activate_constraint(I,F,B,D),(I==yes->H,G;true))
|
|
;
|
|
use_auxiliary_predicate(activate_constraint),
|
|
C=activate_constraint(I,F,B,D)
|
|
).
|
|
head1_code(A,B,C,D,E,F,G,H,I) :-
|
|
D=pragma(J,_,_,_,K),
|
|
J=rule(_,L,_,_),
|
|
( L==[] ->
|
|
reorder_heads(K,A,B,C,M,N),
|
|
simplification_code(A,M,N,D,E,F,G,H,I)
|
|
;
|
|
simpagation_head1_code(A,B,C,D,E,G,H,I)
|
|
).
|
|
head2_code(A,B,C,D,E,F,G,H,I) :-
|
|
D=pragma(J,_,_,_,K),
|
|
J=rule(L,_,_,_),
|
|
( L==[] ->
|
|
reorder_heads(K,A,B,C,M,N),
|
|
propagation_code(A,M,N,J,K,E,F,G,H,I)
|
|
;
|
|
simpagation_head2_code(A,B,C,D,E,F,G,H,I)
|
|
).
|
|
gen_alloc_inc_clause(A/B,C,D,E,F) :-
|
|
vars_susp(B,G,H,I),
|
|
build_head(A,B,D,I,J),
|
|
inc_id(D,K),
|
|
build_head(A,B,K,I,L),
|
|
gen_occ_allocation(A/B,C,G,H,I,M),
|
|
N=(J:-M,L),
|
|
E=[N|F].
|
|
gen_cond_allocation(A,B,C,D,E) :-
|
|
gen_allocation(A,B,C,D,F),
|
|
E=(var(B)->F;true).
|
|
gen_allocation(C,D,A/B,E,F) :-
|
|
( may_trigger(A/B) ->
|
|
build_head(A,B,[0],E,G),
|
|
get_target_module(H),
|
|
I=H:G
|
|
;
|
|
I=true
|
|
),
|
|
J=..[A|C],
|
|
use_auxiliary_predicate(allocate_constraint),
|
|
F=allocate_constraint(I,D,J,C).
|
|
gen_occ_allocation(A,B,C,D,E,F) :-
|
|
get_allocation_occurrence(A,G),
|
|
( chr_pp_flag(debugable,off),
|
|
B==G ->
|
|
( may_trigger(A) ->
|
|
gen_cond_allocation(C,D,A,E,F)
|
|
;
|
|
gen_allocation(C,D,A,E,F)
|
|
)
|
|
;
|
|
F=true
|
|
).
|
|
guard_via_reschedule(A,B,C,D) :-
|
|
( chr_pp_flag(guard_via_reschedule,on) ->
|
|
guard_via_reschedule_main(A,B,C,D)
|
|
;
|
|
append(A,B,E),
|
|
list2conj(E,D)
|
|
).
|
|
guard_via_reschedule_main(A,B,C,D) :-
|
|
initialize_unit_dictionary(C,E),
|
|
build_units(A,B,E,F),
|
|
dependency_reorder(F,G),
|
|
units2goal(G,D).
|
|
units2goal([],true).
|
|
units2goal([unit(_,B,_,_)|A],(B,C)) :-
|
|
units2goal(A,C).
|
|
dependency_reorder(A,B) :-
|
|
dependency_reorder(A,[],B).
|
|
dependency_reorder([],A,B) :-
|
|
reverse(A,B).
|
|
dependency_reorder([A|B],C,D) :-
|
|
A=unit(_,_,E,F),
|
|
( E==fixed ->
|
|
G=[A|C]
|
|
;
|
|
dependency_insert(C,A,F,G)
|
|
),
|
|
dependency_reorder(B,G,D).
|
|
dependency_insert([],A,_,[A]).
|
|
dependency_insert([A|B],C,D,E) :-
|
|
A=unit(F,_,_,_),
|
|
( memberchk(F,D) ->
|
|
E=[C,A|B]
|
|
;
|
|
E=[A|G],
|
|
dependency_insert(B,C,D,G)
|
|
).
|
|
build_units(A,B,C,D) :-
|
|
build_retrieval_units(A,1,E,C,F,D,G),
|
|
build_guard_units(B,E,F,G).
|
|
build_retrieval_units([],A,A,B,B,C,C).
|
|
build_retrieval_units([A|B],C,D,E,F,G,H) :-
|
|
term_variables(A,I),
|
|
update_unit_dictionary(I,C,E,J,[],K),
|
|
G=[unit(C,A,movable,K)|L],
|
|
M is C+1,
|
|
build_retrieval_units2(B,M,D,J,F,L,H).
|
|
build_retrieval_units2([],A,A,B,B,C,C).
|
|
build_retrieval_units2([A|B],C,D,E,F,G,H) :-
|
|
term_variables(A,I),
|
|
update_unit_dictionary(I,C,E,J,[],K),
|
|
G=[unit(C,A,fixed,K)|L],
|
|
M is C+1,
|
|
build_retrieval_units(B,M,D,J,F,L,H).
|
|
initialize_unit_dictionary(A,B) :-
|
|
term_variables(A,C),
|
|
pair_all_with(C,0,B).
|
|
update_unit_dictionary([],_,A,A,B,B).
|
|
update_unit_dictionary([A|B],C,D,E,F,G) :-
|
|
( lookup_eq(D,A,H) ->
|
|
(
|
|
(
|
|
H==C
|
|
;
|
|
memberchk(H,F)
|
|
) ->
|
|
I=F
|
|
;
|
|
I=[H|F]
|
|
),
|
|
J=D
|
|
;
|
|
J=[A-C|D],
|
|
I=F
|
|
),
|
|
update_unit_dictionary(B,C,J,E,I,G).
|
|
build_guard_units(A,B,C,D) :-
|
|
( A=[E] ->
|
|
D=[unit(B,E,fixed,[])]
|
|
;
|
|
( A=[E|F] ->
|
|
term_variables(E,G),
|
|
update_unit_dictionary2(G,B,C,H,[],I),
|
|
D=[unit(B,E,movable,I)|J],
|
|
K is B+1,
|
|
build_guard_units(F,K,H,J)
|
|
)
|
|
).
|
|
update_unit_dictionary2([],_,A,A,B,B).
|
|
update_unit_dictionary2([A|B],C,D,E,F,G) :-
|
|
( lookup_eq(D,A,H) ->
|
|
(
|
|
(
|
|
H==C
|
|
;
|
|
memberchk(H,F)
|
|
) ->
|
|
I=F
|
|
;
|
|
I=[H|F]
|
|
),
|
|
J=[A-C|D]
|
|
;
|
|
J=[A-C|D],
|
|
I=F
|
|
),
|
|
update_unit_dictionary2(B,C,J,E,I,G).
|
|
functional_dependency_analysis(A) :-
|
|
( chr_pp_flag(functional_dependency_analysis,on) ->
|
|
functional_dependency_analysis_main(A)
|
|
;
|
|
true
|
|
).
|
|
functional_dependency_analysis_main([]).
|
|
functional_dependency_analysis_main([A|B]) :-
|
|
( discover_unique_pattern(A,C,D,E,F) ->
|
|
functional_dependency(C,D,E,F)
|
|
;
|
|
true
|
|
),
|
|
functional_dependency_analysis_main(B).
|
|
discover_unique_pattern(C,A/B,D,E,F) :-
|
|
C=pragma(G,_,_,_,D),
|
|
G=rule(H,I,J,_),
|
|
( H=[K],
|
|
I=[L] ->
|
|
true
|
|
;
|
|
( H=[K,L],
|
|
I==[] ->
|
|
true
|
|
)
|
|
),
|
|
check_unique_constraints(K,L,J,D,M),
|
|
term_variables(K,N),
|
|
select_pragma_unique_variables(N,M,O),
|
|
copy_term_nat(K-O,E-F),
|
|
functor(K,A,B).
|
|
select_pragma_unique_variables([],_,[]).
|
|
select_pragma_unique_variables([A|B],C,D) :-
|
|
( lookup_eq(C,A,_) ->
|
|
D=E
|
|
;
|
|
D=[A|E]
|
|
),
|
|
select_pragma_unique_variables(B,C,E).
|
|
set_semantics_rules(A) :-
|
|
( chr_pp_flag(set_semantics_rule,on) ->
|
|
set_semantics_rules_main(A)
|
|
;
|
|
true
|
|
).
|
|
set_semantics_rules_main([]).
|
|
set_semantics_rules_main([A|B]) :-
|
|
set_semantics_rule_main(A),
|
|
set_semantics_rules_main(B).
|
|
set_semantics_rule_main(A) :-
|
|
A=pragma(B,C,_,_,D),
|
|
( B=rule([E],[F],true,_),
|
|
C=ids([G],[H]),
|
|
\+is_passive(D,G),
|
|
functor(E,I,J),
|
|
get_functional_dependency(I/J,D,K,L),
|
|
copy_term_nat(K-L,E-M),
|
|
copy_term_nat(K-L,F-N),
|
|
M==N ->
|
|
passive(D,H)
|
|
;
|
|
true
|
|
).
|
|
check_unique_constraints(A,B,C,D,E) :-
|
|
\+any_passive_head(D),
|
|
variable_replacement(A-B,B-A,E),
|
|
copy_with_variable_replacement(C,F,E),
|
|
negate_b(C,G),
|
|
once(entails_b(G,F)).
|
|
symmetry_analysis(A) :-
|
|
( chr_pp_flag(check_unnecessary_active,off) ->
|
|
true
|
|
;
|
|
symmetry_analysis_main(A)
|
|
).
|
|
symmetry_analysis_main([]).
|
|
symmetry_analysis_main([A|B]) :-
|
|
A=pragma(E,ids(C,D),_,_,F),
|
|
E=rule(G,H,_,_),
|
|
(
|
|
(
|
|
\+chr_pp_flag(check_unnecessary_active,simplification)
|
|
;
|
|
H==[]
|
|
),
|
|
G\==[] ->
|
|
symmetry_analysis_heads(G,C,[],[],E,F),
|
|
symmetry_analysis_heads(H,D,[],[],E,F)
|
|
;
|
|
true
|
|
),
|
|
symmetry_analysis_main(B).
|
|
symmetry_analysis_heads([],[],_,_,_,_).
|
|
symmetry_analysis_heads([A|B],[C|D],E,F,G,H) :-
|
|
( \+is_passive(H,C),
|
|
member2(E,F,I-J),
|
|
\+is_passive(H,J),
|
|
variable_replacement(I,A,K),
|
|
copy_with_variable_replacement(G,L,K),
|
|
identical_rules(G,L) ->
|
|
passive(H,C)
|
|
;
|
|
true
|
|
),
|
|
symmetry_analysis_heads(B,D,[A|E],[C|F],G,H).
|
|
simplification_code(C,D,E,F,A/B,G,H,I,J) :-
|
|
F=pragma(K,_,_,_,_),
|
|
head_info(C,B,_,L,M,N),
|
|
build_head(A,B,H,M,O),
|
|
get_constraint_mode(A/B,P),
|
|
head_arg_matches(N,P,[],Q,R,[],S),
|
|
rest_heads_retrieval_and_matching(D,E,C,T,U,R,V,[],[],[],S,_),
|
|
guard_body_copies2(K,V,W,X),
|
|
guard_via_reschedule(T,W,O-Q,Y),
|
|
gen_uncond_susps_detachments(U,D,Z),
|
|
gen_cond_susp_detachment(H,L,A/B,A1),
|
|
( chr_pp_flag(debugable,on) ->
|
|
K=rule(_,_,B1,C1),
|
|
my_term_copy(B1-C1,V,D1-E1),
|
|
G1='chr debug_event'(try([L|F1],[],D1,E1)),
|
|
H1='chr debug_event'(apply([L|F1],[],D1,E1)),
|
|
instrument_goal(I1,G1,H1,J1)
|
|
;
|
|
J1=I1
|
|
),
|
|
( unconditional_occurrence(A/B,G),
|
|
chr_pp_flag(late_allocation,on) ->
|
|
I1=true
|
|
;
|
|
I1=!
|
|
),
|
|
K1=(O:-Q,Y,J1,Z,A1,X),
|
|
I=[K1|J].
|
|
head_arg_matches(A,B,C,D,E) :-
|
|
head_arg_matches(A,B,C,D,E,[],_).
|
|
head_arg_matches(A,B,C,D,E,F,G) :-
|
|
head_arg_matches_(A,B,C,F,H,E,G),
|
|
list2conj(H,D).
|
|
head_arg_matches_([],[],A,B,[],A,B).
|
|
head_arg_matches_([B-C|A],[D|E],F,G,H,I,J) :-
|
|
( var(B) ->
|
|
( lookup_eq(F,B,K) ->
|
|
( D= + ->
|
|
( memberchk_eq(B,G) ->
|
|
H=[C=K|L],
|
|
M=G
|
|
;
|
|
H=[C==K|L],
|
|
M=[B|G]
|
|
)
|
|
;
|
|
H=[C==K|L],
|
|
M=G
|
|
),
|
|
N=F
|
|
;
|
|
N=[B-C|F],
|
|
H=L,
|
|
( D= + ->
|
|
M=[B|G]
|
|
;
|
|
M=G
|
|
)
|
|
),
|
|
O=A,
|
|
P=E
|
|
;
|
|
( atomic(B) ->
|
|
( D= + ->
|
|
H=[C=B|L]
|
|
;
|
|
H=[C==B|L]
|
|
),
|
|
F=N,
|
|
M=G,
|
|
O=A,
|
|
P=E
|
|
)
|
|
;
|
|
( D== +,
|
|
is_ground(G,B) ->
|
|
copy_with_variable_replacement(B,Q,F),
|
|
H=[C=Q|L],
|
|
F=N,
|
|
M=G,
|
|
O=A,
|
|
P=E
|
|
)
|
|
;
|
|
B=..[_|R],
|
|
functor(B,S,T),
|
|
functor(U,S,T),
|
|
U=..[_|V],
|
|
( D= + ->
|
|
H=[C=U|L]
|
|
;
|
|
H=[nonvar(C),C=U|L]
|
|
),
|
|
pairup(R,V,W),
|
|
append(W,A,O),
|
|
replicate(T,D,X),
|
|
append(X,E,P),
|
|
N=F,
|
|
M=G
|
|
),
|
|
head_arg_matches_(O,P,N,M,L,I,J).
|
|
is_ground(A,B) :-
|
|
( ground(B) ->
|
|
true
|
|
;
|
|
( compound(B) ->
|
|
B=..[_|C],
|
|
maplist(is_ground(A),C)
|
|
)
|
|
;
|
|
memberchk_eq(B,A)
|
|
).
|
|
rest_heads_retrieval_and_matching(A,B,C,D,E,F,G) :-
|
|
rest_heads_retrieval_and_matching(A,B,C,D,E,F,G,[],[],[],[],_).
|
|
rest_heads_retrieval_and_matching(A,B,C,D,E,F,G,H,I,J) :-
|
|
rest_heads_retrieval_and_matching(A,B,C,D,E,F,G,H,I,J,[],_).
|
|
rest_heads_retrieval_and_matching(A,B,C,D,E,F,G,H,I,J,K,L) :-
|
|
( A=[_|_] ->
|
|
rest_heads_retrieval_and_matching_n(A,B,H,I,C,D,E,F,G,J,K,L)
|
|
;
|
|
D=[],
|
|
E=[],
|
|
F=G,
|
|
K=L
|
|
).
|
|
rest_heads_retrieval_and_matching_n([],_,_,_,_,[],[],A,A,B,C,C) :-
|
|
instantiate_pattern_goals(B).
|
|
rest_heads_retrieval_and_matching_n([A|B],[_|C],H,I,J,[D|E],[F|G],K,L,M,N,O) :-
|
|
functor(A,P,Q),
|
|
head_info(A,Q,R,_,_,S),
|
|
get_store_type(P/Q,T),
|
|
( T==default ->
|
|
passive_head_via(A,[J|H],M,K,U,V,W),
|
|
get_max_constraint_index(X),
|
|
( X==1 ->
|
|
Y=V
|
|
;
|
|
get_constraint_index(P/Q,Z),
|
|
make_attr(X,_,A1,V),
|
|
nth(Z,A1,Y)
|
|
),
|
|
create_get_mutable(active,B1,C1),
|
|
get_constraint_mode(P/Q,D1),
|
|
head_arg_matches(S,D1,K,E1,F1,N,G1),
|
|
I1=(U,'chr sbag_member'(F,Y),F=H1,C1)
|
|
;
|
|
existential_lookup(T,A,[J|H],K,H1,B1,I1,F,S,J1),
|
|
get_constraint_mode(P/Q,D1),
|
|
filter_mode(J1,S,D1,K1),
|
|
head_arg_matches(J1,K1,K,E1,F1,N,G1),
|
|
W=M
|
|
),
|
|
H1=..[suspension,_,B1,_,_,_,_|R],
|
|
different_from_other_susps(A,F,H,I,L1),
|
|
D=(I1,L1,E1),
|
|
rest_heads_retrieval_and_matching_n(B,C,[A|H],[F|I],J,E,G,F1,L,W,G1,O).
|
|
filter_mode([],_,_,[]).
|
|
filter_mode([B-C|A],[_-E|D],[F|G],H) :-
|
|
( C==E ->
|
|
H=[F|I],
|
|
filter_mode(A,D,G,I)
|
|
;
|
|
filter_mode([B-C|A],D,G,H)
|
|
).
|
|
instantiate_pattern_goals([]).
|
|
instantiate_pattern_goals([_-attr(B,C,D)|A]) :-
|
|
get_max_constraint_index(E),
|
|
( E==1 ->
|
|
D=true
|
|
;
|
|
make_attr(E,F,_,B),
|
|
or_list(C,G),
|
|
!,
|
|
D=(F/\G=:=G)
|
|
),
|
|
instantiate_pattern_goals(A).
|
|
check_unique_keys([],_).
|
|
check_unique_keys([A|B],C) :-
|
|
lookup_eq(C,A,_),
|
|
check_unique_keys(B,C).
|
|
different_from_other_susps(A,B,C,D,E) :-
|
|
different_from_other_susps_(C,D,A,B,F),
|
|
list2conj(F,E).
|
|
different_from_other_susps_(_,[],_,_,[]) :-
|
|
!.
|
|
different_from_other_susps_([A|B],[C|D],E,F,G) :-
|
|
( functor(E,H,I),
|
|
functor(A,H,I),
|
|
copy_term_nat(A-E,J-K),
|
|
\+ \+J=K ->
|
|
G=[F\==C|L]
|
|
;
|
|
G=L
|
|
),
|
|
different_from_other_susps_(B,D,E,F,L).
|
|
passive_head_via(A,B,C,D,E,F,G) :-
|
|
functor(A,H,I),
|
|
get_constraint_index(H/I,J),
|
|
common_variables(A,B,K),
|
|
translate(K,D,L),
|
|
or_pattern(J,M),
|
|
( permutation(L,N),
|
|
lookup_eq(C,N,attr(F,O,_)) ->
|
|
member(M,O),
|
|
!,
|
|
G=C,
|
|
E=true
|
|
;
|
|
E=(P,Q),
|
|
gen_get_mod_constraints(L,P,F),
|
|
G=[L-attr(F,[M|_],Q)|C]
|
|
).
|
|
common_variables(A,B,C) :-
|
|
term_variables(A,D),
|
|
term_variables(B,E),
|
|
intersect_eq(D,E,C).
|
|
gen_get_mod_constraints(A,B,C) :-
|
|
get_target_module(D),
|
|
( A==[] ->
|
|
B=('chr global_term_ref_1'(E),get_attr(E,D,F),F=C)
|
|
;
|
|
( A=[G] ->
|
|
I='chr via_1'(G,H)
|
|
;
|
|
( A=[G,J] ->
|
|
I='chr via_2'(G,J,H)
|
|
)
|
|
;
|
|
I='chr via'(A,H)
|
|
),
|
|
B=(I,get_attr(H,D,F),F=C)
|
|
).
|
|
guard_body_copies(A,B,C,D) :-
|
|
guard_body_copies2(A,B,E,D),
|
|
list2conj(E,C).
|
|
guard_body_copies2(A,B,C,D) :-
|
|
A=rule(_,_,E,F),
|
|
conj2list(E,G),
|
|
split_off_simple_guard(G,B,H,I),
|
|
my_term_copy(H-I,B,L,J-K),
|
|
append(J,[M],C),
|
|
term_variables(I,N),
|
|
term_variables(K,O),
|
|
( chr_pp_flag(guard_locks,on),
|
|
bagof('chr lock'(P)-(chr_runtime:unlock(P)),Q^(lists:member(Q,N),pairlist:lookup_eq(B,Q,P),memberchk_eq(P,O)),R) ->
|
|
once(pairup(S,T,R))
|
|
;
|
|
S=[],
|
|
T=[]
|
|
),
|
|
list2conj(S,U),
|
|
list2conj(T,V),
|
|
list2conj(K,W),
|
|
M=(U,W,V),
|
|
my_term_copy(F,L,D).
|
|
split_off_simple_guard([],_,[],[]).
|
|
split_off_simple_guard([A|B],C,D,E) :-
|
|
( simple_guard(A,C) ->
|
|
D=[A|F],
|
|
split_off_simple_guard(B,C,F,E)
|
|
;
|
|
D=[],
|
|
E=[A|B]
|
|
).
|
|
simple_guard(A,B) :-
|
|
binds_b(A,C),
|
|
\+ (member(D,C),lookup_eq(B,D,_)).
|
|
gen_cond_susp_detachment(A,B,C,D) :-
|
|
( is_stored(C) ->
|
|
(
|
|
(
|
|
A==[0]
|
|
;
|
|
get_allocation_occurrence(C,E),
|
|
get_max_occurrence(C,F),
|
|
F<E
|
|
),
|
|
\+may_trigger(C),
|
|
chr_pp_flag(late_allocation,on) ->
|
|
D=true
|
|
;
|
|
gen_uncond_susp_detachment(B,C,G),
|
|
( chr_pp_flag(late_allocation,on) ->
|
|
D=(var(B)->true;G)
|
|
;
|
|
D=G
|
|
)
|
|
)
|
|
;
|
|
D=true
|
|
).
|
|
gen_uncond_susp_detachment(A,B,C) :-
|
|
( is_stored(B) ->
|
|
( may_trigger(B) ->
|
|
make_name(detach_,B,D),
|
|
F=..[D,E,A]
|
|
;
|
|
F=true
|
|
),
|
|
( chr_pp_flag(debugable,on) ->
|
|
G='chr debug_event'(remove(A))
|
|
;
|
|
G=true
|
|
),
|
|
generate_delete_constraint_call(B,A,H),
|
|
use_auxiliary_predicate(remove_constraint_internal),
|
|
C=(G,remove_constraint_internal(A,E,I),(I==yes->H,F;true))
|
|
;
|
|
C=true
|
|
).
|
|
gen_uncond_susps_detachments([],[],true).
|
|
gen_uncond_susps_detachments([A|B],[C|D],(E,F)) :-
|
|
functor(C,G,H),
|
|
gen_uncond_susp_detachment(A,G/H,E),
|
|
gen_uncond_susps_detachments(B,D,F).
|
|
simpagation_head1_code(C,D,E,F,A/B,G,H,I) :-
|
|
F=pragma(K,ids(_,J),_,_,_),
|
|
K=rule(_,L,M,N),
|
|
head_info(C,B,_,O,P,Q),
|
|
get_constraint_mode(A/B,R),
|
|
head_arg_matches(Q,R,[],S,T,[],U),
|
|
build_head(A,B,G,P,V),
|
|
append(D,L,W),
|
|
append(E,J,X),
|
|
reorder_heads(_,C,W,X,Y,Z),
|
|
rest_heads_retrieval_and_matching(Y,Z,C,A1,B1,T,C1,[],[],[],U,_),
|
|
split_by_ids(Z,B1,E,D1,E1),
|
|
guard_body_copies2(K,C1,F1,G1),
|
|
guard_via_reschedule(A1,F1,V-S,H1),
|
|
gen_uncond_susps_detachments(D1,D,I1),
|
|
gen_cond_susp_detachment(G,O,A/B,J1),
|
|
( chr_pp_flag(debugable,on) ->
|
|
my_term_copy(M-N,C1,K1-L1),
|
|
M1='chr debug_event'(try([O|D1],E1,K1,L1)),
|
|
N1='chr debug_event'(apply([O|D1],E1,K1,L1)),
|
|
instrument_goal(!,M1,N1,O1)
|
|
;
|
|
O1=!
|
|
),
|
|
P1=(V:-S,H1,O1,I1,J1,G1),
|
|
H=[P1|I].
|
|
split_by_ids([],[],_,[],[]).
|
|
split_by_ids([A|B],[C|D],E,F,G) :-
|
|
( memberchk_eq(A,E) ->
|
|
F=[C|H],
|
|
G=I
|
|
;
|
|
F=H,
|
|
G=[C|I]
|
|
),
|
|
split_by_ids(B,D,E,H,I).
|
|
simpagation_head2_code(A,B,C,D,E,F,G,H,I) :-
|
|
D=pragma(L,ids(J,K),_,_,M),
|
|
L=rule(N,_,O,P),
|
|
append(N,B,Q),
|
|
append(J,C,R),
|
|
reorder_heads(M,A,Q,R,[S|T],[U|V]),
|
|
simpagation_head2_prelude(A,S,[T,O,P],E,F,G,H,W),
|
|
extend_id(G,X),
|
|
( memberchk_eq(U,K) ->
|
|
simpagation_universal_searches(T,V,K,[S,A],L,E,Y,Z,A1,X,B1,W,C1)
|
|
;
|
|
W=C1,
|
|
X=B1,
|
|
Y=T,
|
|
Z=[S,A],
|
|
A1=V
|
|
),
|
|
universal_search_iterator_end(Z,Y,L,E,B1,C1,D1),
|
|
simpagation_head2_new_worker(Z,Y,A1,D,E,F,B1,D1,I).
|
|
simpagation_universal_searches([],[],_,A,_,_,[],A,[],B,B,C,C).
|
|
simpagation_universal_searches(C,[A|B],D,E,F,G,H,I,J,K,L,M,N) :-
|
|
C=[O|P],
|
|
inc_id(K,Q),
|
|
universal_search_iterator_end(E,C,F,G,K,M,R),
|
|
universal_search_iterator(C,E,F,G,K,R,S),
|
|
( memberchk_eq(A,D) ->
|
|
simpagation_universal_searches(P,B,D,[O|E],F,G,H,I,J,Q,L,S,N)
|
|
;
|
|
L=Q,
|
|
S=N,
|
|
H=P,
|
|
I=[O|E],
|
|
B=J
|
|
).
|
|
simpagation_head2_prelude(C,D,E,A/B,F,G,H,I) :-
|
|
head_info(C,B,J,K,L,M),
|
|
build_head(A,B,G,L,N),
|
|
get_constraint_mode(A/B,O),
|
|
head_arg_matches(M,O,[],P,Q),
|
|
lookup_passive_head(D,[C],Q,R,S),
|
|
gen_occ_allocation(A/B,F,J,K,L,T),
|
|
extend_id(G,U),
|
|
extra_active_delegate_variables(C,[D|E],Q,V),
|
|
append([S|L],V,W),
|
|
build_head(A,B,U,W,X),
|
|
Y=(N:-P,R,!,T,X),
|
|
H=[Y|I].
|
|
extra_active_delegate_variables(A,B,C,D) :-
|
|
A=..[_|E],
|
|
delegate_variables(A,B,C,E,D).
|
|
passive_delegate_variables(A,B,C,D,E) :-
|
|
term_variables(B,F),
|
|
delegate_variables(A,C,D,F,E).
|
|
delegate_variables(A,B,C,D,E) :-
|
|
term_variables(A,F),
|
|
term_variables(B,G),
|
|
intersect_eq(F,G,H),
|
|
list_difference_eq(H,D,I),
|
|
translate(I,C,E).
|
|
simpagation_head2_new_worker([A|B],E,F,G,C/D,H,I,J,K) :-
|
|
G=pragma(M,ids(L,_),N,_,_),
|
|
M=rule(_,_,O,P),
|
|
get_prop_inner_loop_vars(B,[A,E,O,P],Q,R,S,T),
|
|
gen_var(U),
|
|
gen_var(V),
|
|
functor(A,W,X),
|
|
gen_vars(X,Y),
|
|
head_info(A,X,Y,U,_,Z),
|
|
get_constraint_mode(W/X,A1),
|
|
head_arg_matches(Z,A1,R,B1,C1),
|
|
E1=..[suspension,_,D1,_,_,_,_|Y],
|
|
different_from_other_susps(A,U,B,T,F1),
|
|
create_get_mutable(active,D1,G1),
|
|
H1=(U=E1,G1,F1,B1),
|
|
I1=[[U|V]|Q],
|
|
build_head(C,D,I,I1,J1),
|
|
rest_heads_retrieval_and_matching(E,F,[A|B],K1,L1,C1,M1,[A|B],[U|T],[]),
|
|
split_by_ids(F,L1,L,N1,O1),
|
|
split_by_ids(F,E,L,P1,_),
|
|
gen_uncond_susps_detachments([U|N1],[A|P1],Q1),
|
|
R1=[V|Q],
|
|
build_head(C,D,I,R1,S1),
|
|
T1=[[]|Q],
|
|
build_head(C,D,I,T1,U1),
|
|
guard_body_copies2(M,M1,V1,W1),
|
|
guard_via_reschedule(K1,V1,v(J1,H1),X1),
|
|
( W1\==true,
|
|
is_observed(C/D,H) ->
|
|
gen_uncond_attach_goal(C/D,S,Y1,Z1),
|
|
gen_state_cond_call(S,D,S1,Z1,A2),
|
|
gen_state_cond_call(S,D,U1,Z1,B2)
|
|
;
|
|
Y1=true,
|
|
A2=S1,
|
|
B2=U1
|
|
),
|
|
( chr_pp_flag(debugable,on) ->
|
|
my_term_copy(O-P,R,C2-D2),
|
|
E2='chr debug_event'(try([U|N1],[S|O1],C2,D2)),
|
|
F2='chr debug_event'(apply([U|N1],[S|O1],C2,D2))
|
|
;
|
|
E2=true,
|
|
F2=true
|
|
),
|
|
( member(unique(_,G2),N),
|
|
check_unique_keys(G2,R) ->
|
|
H2=(J1:-H1->(X1,E2->F2,Q1,Y1,W1,B2;U1);S1)
|
|
;
|
|
H2=(J1:-H1,X1,E2->F2,Q1,Y1,W1,A2;S1)
|
|
),
|
|
J=[H2|K].
|
|
gen_state_cond_call(A,B,C,D,E) :-
|
|
length(F,B),
|
|
I=..[suspension,_,G,_,H,_,_|F],
|
|
create_get_mutable(active,G,J),
|
|
create_get_mutable(D,H,K),
|
|
E=(A=I,J,K->'chr update_mutable'(inactive,G),C;true).
|
|
propagation_code(A,B,C,D,E,F,G,H,I,J) :-
|
|
( B==[] ->
|
|
propagation_single_headed(A,D,E,F,G,H,I,J)
|
|
;
|
|
propagation_multi_headed(A,B,C,D,E,F,G,H,I,J)
|
|
).
|
|
propagation_single_headed(C,D,E,A/B,F,G,H,I) :-
|
|
head_info(C,B,J,K,L,M),
|
|
build_head(A,B,G,L,N),
|
|
inc_id(G,O),
|
|
build_head(A,B,O,L,P),
|
|
get_constraint_mode(A/B,Q),
|
|
head_arg_matches(M,Q,[],R,S),
|
|
guard_body_copies(D,S,T,U),
|
|
gen_occ_allocation(A/B,F,J,K,L,V),
|
|
W=P,
|
|
( U\==true,
|
|
is_observed(A/B,F) ->
|
|
gen_uncond_attach_goal(A/B,K,X,Y),
|
|
gen_state_cond_call(K,B,W,Y,Z)
|
|
;
|
|
X=true,
|
|
Z=W
|
|
),
|
|
( unconditional_occurrence(A/B,F),
|
|
chr_pp_flag(late_allocation,on) ->
|
|
A1=true
|
|
;
|
|
A1=!
|
|
),
|
|
( chr_pp_flag(debugable,on) ->
|
|
D=rule(_,_,B1,C1),
|
|
my_term_copy(B1-C1,S,D1-E1),
|
|
F1='chr debug_event'(try([],[K],D1,E1)),
|
|
G1='chr debug_event'(apply([],[K],D1,E1)),
|
|
instrument_goal(A1,F1,G1,H1)
|
|
;
|
|
H1=A1
|
|
),
|
|
( may_trigger(A/B) ->
|
|
I1='chr novel_production'(K,E),
|
|
J1='chr extend_history'(K,E)
|
|
;
|
|
I1=true,
|
|
J1=true
|
|
),
|
|
K1=(N:-R,V,I1,T,H1,J1,X,U,Z),
|
|
H=[K1|I].
|
|
propagation_multi_headed(A,B,C,D,E,F,G,H,I,J) :-
|
|
B=[K|L],
|
|
propagation_prelude(A,B,D,F,G,H,I,M),
|
|
extend_id(H,N),
|
|
propagation_nested_code(L,[K,A],C,D,E,F,G,N,M,J).
|
|
propagation_prelude(E,[A|B],F,C/D,G,H,I,J) :-
|
|
head_info(E,D,K,L,M,N),
|
|
build_head(C,D,H,M,O),
|
|
get_constraint_mode(C/D,P),
|
|
head_arg_matches(N,P,[],Q,R),
|
|
F=rule(_,_,S,T),
|
|
extra_active_delegate_variables(E,[A,B,S,T],R,U),
|
|
lookup_passive_head(A,[E],R,V,W),
|
|
gen_occ_allocation(C/D,G,K,L,M,X),
|
|
extend_id(H,Y),
|
|
append([W|M],U,Z),
|
|
build_head(C,D,Y,Z,A1),
|
|
B1=A1,
|
|
C1=(O:-Q,V,!,X,B1),
|
|
I=[C1|J].
|
|
propagation_nested_code([],[A|B],C,D,E,F,G,H,I,J) :-
|
|
universal_search_iterator_end([A|B],[],D,F,H,I,K),
|
|
propagation_body(A,B,C,D,E,F,G,H,K,J).
|
|
propagation_nested_code([A|B],C,D,E,F,G,H,I,J,K) :-
|
|
universal_search_iterator_end(C,[A|B],E,G,I,J,L),
|
|
universal_search_iterator([A|B],C,E,G,I,L,M),
|
|
inc_id(I,N),
|
|
propagation_nested_code(B,[A|C],D,E,F,G,H,N,M,K).
|
|
propagation_body(C,D,E,F,G,A/B,H,I,J,K) :-
|
|
F=rule(_,_,L,M),
|
|
get_prop_inner_loop_vars(D,[C,L,M],N,O,P,Q),
|
|
gen_var(R),
|
|
gen_var(S),
|
|
functor(C,T,U),
|
|
gen_vars(U,V),
|
|
X=..[suspension,_,W,_,_,_,_|V],
|
|
create_get_mutable(active,W,Y),
|
|
Z=(R=X,Y),
|
|
A1=[[R|S]|N],
|
|
build_head(A,B,I,A1,B1),
|
|
C1=[S|N],
|
|
build_head(A,B,I,C1,D1),
|
|
E1=D1,
|
|
C=..[_|F1],
|
|
pairup(F1,V,G1),
|
|
get_constraint_mode(T/U,H1),
|
|
head_arg_matches(G1,H1,O,I1,J1),
|
|
different_from_other_susps(C,R,D,Q,K1),
|
|
guard_body_copies(F,J1,L1,M1),
|
|
( M1\==true,
|
|
is_observed(A/B,H) ->
|
|
gen_uncond_attach_goal(A/B,P,N1,O1),
|
|
gen_state_cond_call(P,B,E1,O1,P1)
|
|
;
|
|
N1=true,
|
|
P1=E1
|
|
),
|
|
( is_least_occurrence(G) ->
|
|
Q1=true,
|
|
R1=true
|
|
;
|
|
get_occurrence(A/B,H,_,S1),
|
|
history_susps(E,[R|Q],P,S1,T1),
|
|
U1=..[t,G|T1],
|
|
bagof('chr novel_production'(V1,W1),(lists:member(V1,T1),W1=X1),Y1),
|
|
list2conj(Y1,Z1),
|
|
Q1=(X1=U1,Z1),
|
|
R1='chr extend_history'(P,X1)
|
|
),
|
|
( chr_pp_flag(debugable,on) ->
|
|
F=rule(_,_,L,M),
|
|
my_term_copy(L-M,J1,A2-B2),
|
|
C2='chr debug_event'(try([],[P,R|Q],A2,B2)),
|
|
D2='chr debug_event'(apply([],[P,R|Q],A2,B2))
|
|
;
|
|
C2=true,
|
|
D2=true
|
|
),
|
|
E2=(B1:-Z,K1,I1,Q1,L1,C2->D2,R1,N1,M1,P1;E1),
|
|
J=[E2|K].
|
|
history_susps(A,B,C,D,E) :-
|
|
reverse(B,F),
|
|
pairup([D|A],[C|F],G),
|
|
sort(G,H),
|
|
pairup(_,E,H).
|
|
get_prop_inner_loop_vars([A],B,C,D,E,[]) :-
|
|
!,
|
|
functor(A,F,G),
|
|
head_info(A,G,_,E,H,I),
|
|
get_constraint_mode(F/G,J),
|
|
head_arg_matches(I,J,[],_,D),
|
|
extra_active_delegate_variables(A,B,D,K),
|
|
append(H,K,C).
|
|
get_prop_inner_loop_vars([A|B],E,F,G,H,[C|D]) :-
|
|
get_prop_inner_loop_vars(B,[A|E],I,J,H,D),
|
|
functor(A,K,L),
|
|
gen_var(M),
|
|
head_info(A,L,_,C,_,N),
|
|
get_constraint_mode(K/L,O),
|
|
head_arg_matches(N,O,J,_,G),
|
|
passive_delegate_variables(A,B,E,G,P),
|
|
append(P,[C,M|I],F).
|
|
gen_var_susp_list_for([A],B,C,D,E,F) :-
|
|
!,
|
|
functor(A,G,H),
|
|
head_info(A,H,_,F,E,I),
|
|
get_constraint_mode(G/H,J),
|
|
head_arg_matches(I,J,[],_,C),
|
|
extra_active_delegate_variables(A,B,C,K),
|
|
append(E,K,D).
|
|
gen_var_susp_list_for([A|B],C,D,E,F,G) :-
|
|
gen_var_susp_list_for(B,[A|C],H,F,_,_),
|
|
functor(A,I,J),
|
|
gen_var(G),
|
|
head_info(A,J,_,K,_,L),
|
|
get_constraint_mode(I/J,M),
|
|
head_arg_matches(L,M,H,_,D),
|
|
passive_delegate_variables(A,B,C,D,N),
|
|
append(N,[K,G|F],E).
|
|
pre_vars_and_susps([A],B,C,D,[]) :-
|
|
!,
|
|
functor(A,E,F),
|
|
head_info(A,F,_,_,G,H),
|
|
get_constraint_mode(E/F,I),
|
|
head_arg_matches(H,I,[],_,D),
|
|
extra_active_delegate_variables(A,B,D,J),
|
|
append(G,J,C).
|
|
pre_vars_and_susps([A|B],E,F,G,[C|D]) :-
|
|
pre_vars_and_susps(B,[A|E],H,I,D),
|
|
functor(A,J,K),
|
|
gen_var(L),
|
|
head_info(A,K,_,C,_,M),
|
|
get_constraint_mode(J/K,N),
|
|
head_arg_matches(M,N,I,_,G),
|
|
passive_delegate_variables(A,B,E,G,O),
|
|
append(O,[C,L|H],F).
|
|
reorder_heads(A,B,C,D,E,F) :-
|
|
( chr_pp_flag(reorder_heads,on) ->
|
|
reorder_heads_main(A,B,C,D,E,F)
|
|
;
|
|
E=C,
|
|
F=D
|
|
).
|
|
reorder_heads_main(A,B,C,D,E,F) :-
|
|
term_variables(B,G),
|
|
H=entry([],[],G,C,D,A),
|
|
copy_term_nat(H,I),
|
|
a_star(I,J^(chr_translate:final_data(J)),M^L^K^(chr_translate:expand_data(M,L,K)),N),
|
|
I=H,
|
|
N=entry(O,P,_,_,_,_),
|
|
reverse(O,E),
|
|
reverse(P,F).
|
|
final_data(A) :-
|
|
A=entry(_,_,_,_,[],_).
|
|
expand_data(A,B,C) :-
|
|
A=entry(D,E,F,G,H,I),
|
|
select2(J,K,G,H,L,M),
|
|
term_variables([J|F],N),
|
|
B=entry([J|D],[K|E],N,L,M,I),
|
|
order_score(J,K,F,L,I,C).
|
|
order_score(A,B,C,D,E,F) :-
|
|
functor(A,G,H),
|
|
get_store_type(G/H,I),
|
|
order_score(I,A,B,C,D,E,F).
|
|
order_score(default,A,_,B,C,_,D) :-
|
|
term_variables(A,E),
|
|
term_variables(C,F),
|
|
order_score_vars(E,B,F,D).
|
|
order_score(multi_hash(A),B,_,C,_,_,D) :-
|
|
order_score_indexes(A,B,C,0,D).
|
|
order_score(global_ground,A,_,_,_,_,B) :-
|
|
functor(A,_,C),
|
|
( _==[] ->
|
|
B=10
|
|
;
|
|
( C==0 ->
|
|
B=1000
|
|
)
|
|
;
|
|
( C>0 ->
|
|
B=10000
|
|
)
|
|
).
|
|
order_score(global_singleton,_,_,_,_,_,A) :-
|
|
A=1.
|
|
order_score(multi_store(A),B,C,D,E,F,G) :-
|
|
find_with_var_identity(I,t(B,D,E),(lists:member(H,A),chr_translate:order_score(H,B,C,D,E,F,I)),J),
|
|
min_list(J,G).
|
|
order_score_indexes([],_,_,A,B) :-
|
|
A>0,
|
|
B=100.
|
|
order_score_indexes([A|B],C,D,E,F) :-
|
|
multi_hash_key_args(A,C,G),
|
|
( forall(H,G,memberchk_eq(H,D)) ->
|
|
I is E+1
|
|
;
|
|
I=E
|
|
),
|
|
order_score_indexes(B,C,D,I,F).
|
|
order_score_vars(A,B,C,D) :-
|
|
order_score_count_vars(A,B,C,E-F-G),
|
|
( E-F-G==0-0-0 ->
|
|
D=0
|
|
;
|
|
( E>0 ->
|
|
D is max(10-E,0)
|
|
)
|
|
;
|
|
( F>0 ->
|
|
D is max(10-F,1)*10
|
|
)
|
|
;
|
|
D is max(10-G,1)*100
|
|
).
|
|
order_score_count_vars([],_,_,0-0-0).
|
|
order_score_count_vars([A|B],F,G,C-D-E) :-
|
|
order_score_count_vars(B,F,G,H-I-J),
|
|
( memberchk_eq(A,F) ->
|
|
C is H+1,
|
|
D=I,
|
|
E=J
|
|
;
|
|
( memberchk_eq(A,G) ->
|
|
D is I+1,
|
|
C=H,
|
|
E=J
|
|
)
|
|
;
|
|
E is J+1,
|
|
C=H,
|
|
D=I
|
|
).
|
|
create_get_mutable(A,B,C) :-
|
|
B=mutable(A),
|
|
C=true.
|
|
gen_var(_).
|
|
gen_vars(A,B) :-
|
|
length(B,A).
|
|
head_info(A,B,C,D,E,F) :-
|
|
vars_susp(B,C,D,E),
|
|
A=..[_|G],
|
|
pairup(G,C,F).
|
|
inc_id([A|B],[C|B]) :-
|
|
C is A+1.
|
|
dec_id([A|B],[C|B]) :-
|
|
C is A-1.
|
|
extend_id(A,[0|A]).
|
|
next_id([_,A|B],[C|B]) :-
|
|
C is A+1.
|
|
build_head(A,B,C,D,E) :-
|
|
buildName(A,B,C,F),
|
|
(
|
|
(
|
|
chr_pp_flag(debugable,on)
|
|
;
|
|
is_stored(A/B),
|
|
has_active_occurrence(A/B),
|
|
(
|
|
may_trigger(A/B)
|
|
;
|
|
get_allocation_occurrence(A/B,G),
|
|
get_max_occurrence(A/B,H),
|
|
H>=G
|
|
)
|
|
) ->
|
|
E=..[F|D]
|
|
;
|
|
init(D,I),
|
|
E=..[F|I]
|
|
).
|
|
buildName(A,B,C,D) :-
|
|
(
|
|
(
|
|
chr_pp_flag(debugable,on)
|
|
;
|
|
once((is_stored(A/B),(has_active_occurrence(A/B);chr_pp_flag(late_allocation,off)),(may_trigger(A/B);get_allocation_occurrence(A/B,E),get_max_occurrence(A/B,F),F>=E);C\=[0]))
|
|
) ->
|
|
atom_concat(A,/,G),
|
|
atom_concat(G,B,H),
|
|
buildName_(C,H,D)
|
|
;
|
|
D=A
|
|
).
|
|
buildName_([],A,A).
|
|
buildName_([A|B],C,D) :-
|
|
buildName_(B,C,E),
|
|
atom_concat(E,'__',F),
|
|
atom_concat(F,A,D).
|
|
vars_susp(A,B,C,D) :-
|
|
length(B,A),
|
|
append(B,[C],D).
|
|
make_attr(A,B,C,D) :-
|
|
length(C,A),
|
|
D=..[v,B|C].
|
|
or_pattern(A,B) :-
|
|
C is A-1,
|
|
B is 1<<C.
|
|
and_pattern(A,B) :-
|
|
C is A-1,
|
|
D is 1<<C,
|
|
B is-1*(D+1).
|
|
make_name(C,A/B,D) :-
|
|
atom_concat_list([C,A,/,B],D).
|
|
lookup_passive_head(A,B,C,D,E) :-
|
|
functor(A,F,G),
|
|
get_store_type(F/G,H),
|
|
lookup_passive_head(H,A,B,C,D,E).
|
|
lookup_passive_head(default,A,B,C,D,E) :-
|
|
passive_head_via(A,B,[],C,D,F,G),
|
|
instantiate_pattern_goals(G),
|
|
get_max_constraint_index(H),
|
|
( H==1 ->
|
|
E=F
|
|
;
|
|
functor(A,I,J),
|
|
get_constraint_index(I/J,K),
|
|
make_attr(H,_,L,F),
|
|
nth(K,L,E)
|
|
).
|
|
lookup_passive_head(multi_hash(A),B,_,C,D,E) :-
|
|
once((member(F,A),multi_hash_key_args(F,B,G),translate(G,C,H))),
|
|
( H=[I] ->
|
|
true
|
|
;
|
|
I=..[k|H]
|
|
),
|
|
functor(B,J,K),
|
|
multi_hash_via_lookup_name(J/K,F,L),
|
|
D=..[L,I,E],
|
|
update_store_type(J/K,multi_hash([F])).
|
|
lookup_passive_head(global_ground,A,_,_,B,C) :-
|
|
functor(A,D,E),
|
|
global_ground_store_name(D/E,F),
|
|
B=nb_getval(F,C),
|
|
update_store_type(D/E,global_ground).
|
|
lookup_passive_head(global_singleton,A,_,_,B,C) :-
|
|
functor(A,D,E),
|
|
global_singleton_store_name(D/E,F),
|
|
B=(nb_getval(F,G),G\==[],C=[G]),
|
|
update_store_type(D/E,global_singleton).
|
|
lookup_passive_head(multi_store(A),B,C,D,E,F) :-
|
|
once((member(G,A),lookup_passive_head(G,B,C,D,E,F))).
|
|
existential_lookup(global_singleton,A,_,_,B,_,C,D,E,E) :-
|
|
!,
|
|
functor(A,F,G),
|
|
global_singleton_store_name(F/G,H),
|
|
C=(nb_getval(H,D),D\==[],D=B),
|
|
update_store_type(F/G,global_singleton).
|
|
existential_lookup(multi_store(A),B,C,D,E,F,G,H,I,J) :-
|
|
!,
|
|
once((member(K,A),existential_lookup(K,B,C,D,E,F,G,H,I,J))).
|
|
existential_lookup(multi_hash(A),B,_,C,D,E,F,G,H,I) :-
|
|
!,
|
|
once((member(J,A),multi_hash_key_args(J,B,K),translate(K,C,L))),
|
|
( L=[M] ->
|
|
true
|
|
;
|
|
M=..[k|L]
|
|
),
|
|
functor(B,N,O),
|
|
multi_hash_via_lookup_name(N/O,J,P),
|
|
R=..[P,M,Q],
|
|
create_get_mutable(active,E,S),
|
|
F=(R,'chr sbag_member'(G,Q),G=D,S),
|
|
hash_index_filter(H,J,I),
|
|
update_store_type(N/O,multi_hash([J])).
|
|
existential_lookup(A,B,C,D,E,F,G,H,I,I) :-
|
|
lookup_passive_head(A,B,C,D,J,K),
|
|
create_get_mutable(active,F,L),
|
|
G=(J,'chr sbag_member'(H,K),H=E,L).
|
|
hash_index_filter(A,B,C) :-
|
|
( integer(B) ->
|
|
D=[B]
|
|
;
|
|
D=B
|
|
),
|
|
hash_index_filter(A,D,1,C).
|
|
hash_index_filter([],_,_,[]).
|
|
hash_index_filter([A|B],C,D,E) :-
|
|
( C=[F|G] ->
|
|
H is D+1,
|
|
( F>D ->
|
|
E=[A|I],
|
|
hash_index_filter(B,[F|G],H,I)
|
|
;
|
|
( F==D ->
|
|
E=I,
|
|
hash_index_filter(B,G,H,I)
|
|
)
|
|
)
|
|
;
|
|
E=[A|B]
|
|
).
|
|
assume_constraint_stores([]).
|
|
assume_constraint_stores([A|B]) :-
|
|
( \+may_trigger(A),
|
|
is_stored(A),
|
|
get_store_type(A,default) ->
|
|
get_indexed_arguments(A,C),
|
|
findall(D,(sublist(D,C),D\==[]),E),
|
|
( get_functional_dependency(A,1,F,G),
|
|
all_distinct_var_args(F),
|
|
G==[] ->
|
|
assumed_store_type(A,global_singleton)
|
|
;
|
|
assumed_store_type(A,multi_store([multi_hash(E),global_ground]))
|
|
)
|
|
;
|
|
true
|
|
),
|
|
assume_constraint_stores(B).
|
|
all_distinct_var_args(A) :-
|
|
A=..[_|B],
|
|
copy_term_nat(B,C),
|
|
all_distinct_var_args_(C).
|
|
all_distinct_var_args_([]).
|
|
all_distinct_var_args_([A|B]) :-
|
|
var(A),
|
|
A=t,
|
|
all_distinct_var_args_(B).
|
|
get_indexed_arguments(A,B) :-
|
|
A=_/C,
|
|
get_indexed_arguments(1,C,A,B).
|
|
get_indexed_arguments(A,B,C,D) :-
|
|
( A>B ->
|
|
D=[]
|
|
;
|
|
( is_indexed_argument(C,A) ->
|
|
D=[A|E]
|
|
;
|
|
D=E
|
|
),
|
|
F is A+1,
|
|
get_indexed_arguments(F,B,C,E)
|
|
).
|
|
validate_store_type_assumptions([]).
|
|
validate_store_type_assumptions([A|B]) :-
|
|
validate_store_type_assumption(A),
|
|
validate_store_type_assumptions(B).
|
|
universal_search_iterator_end([A|B],E,F,C/D,G,H,I) :-
|
|
F=rule(_,_,J,K),
|
|
gen_var_susp_list_for(B,[A,E,J,K],_,L,M,N),
|
|
O=[[]|L],
|
|
build_head(C,D,G,O,P),
|
|
( G=[0|_] ->
|
|
next_id(G,Q),
|
|
R=M
|
|
;
|
|
dec_id(G,Q),
|
|
R=[N|M]
|
|
),
|
|
build_head(C,D,Q,R,S),
|
|
T=(P:-S),
|
|
H=[T|I].
|
|
universal_search_iterator([A|B],[C|D],G,E/F,H,I,J) :-
|
|
G=rule(_,_,K,L),
|
|
pre_vars_and_susps(D,[C,A,B,K,L],M,N,O),
|
|
gen_var(P),
|
|
functor(C,Q,R),
|
|
gen_vars(R,S),
|
|
head_info(C,R,S,T,_,U),
|
|
get_constraint_mode(Q/R,V),
|
|
head_arg_matches(U,V,N,W,X),
|
|
Z=..[suspension,_,Y,_,_,_,_|S],
|
|
different_from_other_susps(C,T,D,O,A1),
|
|
create_get_mutable(active,Y,B1),
|
|
C1=(T=Z,B1,A1,W),
|
|
lookup_passive_head(A,[C|D],X,D1,E1),
|
|
inc_id(H,F1),
|
|
G1=[[T|P]|M],
|
|
build_head(E,F,H,G1,H1),
|
|
passive_delegate_variables(C,D,[A,B,K,L],X,I1),
|
|
append([E1|I1],[T,P|M],J1),
|
|
build_head(E,F,F1,J1,K1),
|
|
L1=[P|M],
|
|
build_head(E,F,H,L1,M1),
|
|
N1=(H1:-C1,D1->K1;M1),
|
|
I=[N1|J].
|
|
ai_observation_analysis(A) :-
|
|
( chr_pp_flag(ai_observation_analysis,on) ->
|
|
list_to_ord_set(A,_),
|
|
abstract_constraints(A),
|
|
ai_observation_schedule_initial_calls(A)
|
|
;
|
|
true
|
|
).
|
|
ai_observation_schedule_initial_calls([]).
|
|
ai_observation_schedule_initial_calls([A|B]) :-
|
|
ai_observation_schedule_initial_call(A),
|
|
ai_observation_schedule_initial_calls(B).
|
|
ai_observation_schedule_initial_call(A) :-
|
|
ai_observation_top(A,B),
|
|
initial_call_pattern(B).
|
|
ai_observation_schedule_new_calls([],_).
|
|
ai_observation_schedule_new_calls([A|B],C) :-
|
|
C=odom(_,D),
|
|
initial_call_pattern(odom(A,D)),
|
|
ai_observation_schedule_new_calls(B,C).
|
|
ai_observation_lub(odom(A,B),odom(A,C),odom(A,D)) :-
|
|
ord_intersect(B,C,D).
|
|
ai_observation_top(B,odom(B,A)) :-
|
|
ord_empty(A).
|
|
ai_observation_leq(odom(A,B),odom(A,C)) :-
|
|
ord_subset(C,B).
|
|
ai_observation_observe(odom(A,B),D,odom(A,C)) :-
|
|
ord_del_element(B,D,C).
|
|
ai_observation_observe_list(odom(A,B),D,odom(A,C)) :-
|
|
list_to_ord_set(D,E),
|
|
ord_subtract(B,E,C).
|
|
ai_observation_abstract_constraint(A,B,C) :-
|
|
functor(A,D,E),
|
|
C=D/E,
|
|
member(C,B).
|
|
ai_observation_abstract_constraints(A,B,C) :-
|
|
findall(E,(member(D,A),ai_observation_abstract_constraint(D,B,E)),C).
|
|
ai_observation_abstract_goal(A,B,C) :-
|
|
ai_observation_abstract_goal(A,B,C,[]).
|
|
ai_observation_abstract_goal((A,B),C,D,E) :-
|
|
!,
|
|
ai_observation_abstract_goal(A,C,D,F),
|
|
ai_observation_abstract_goal(B,C,F,E).
|
|
ai_observation_abstract_goal((A;B),C,D,E) :-
|
|
!,
|
|
ai_observation_abstract_goal(A,C,D,F),
|
|
ai_observation_abstract_goal(B,C,F,E).
|
|
ai_observation_abstract_goal((A->B),C,D,E) :-
|
|
!,
|
|
ai_observation_abstract_goal(A,C,D,F),
|
|
ai_observation_abstract_goal(B,C,F,E).
|
|
ai_observation_abstract_goal(C,D,[A|B],B) :-
|
|
ai_observation_abstract_constraint(C,D,A),
|
|
!.
|
|
ai_observation_abstract_goal(true,_,A,A) :-
|
|
!.
|
|
ai_observation_abstract_goal(writeln(_),_,A,A) :-
|
|
!.
|
|
ai_observation_abstract_goal(_,_,[A|B],B) :-
|
|
A=builtin.
|
|
ai_observation_is_observed(odom(_,A),B) :-
|
|
\+ord_memberchk(B,A).
|
|
unconditional_occurrence(A,B) :-
|
|
get_occurrence(A,B,C,_),
|
|
get_rule(C,D),
|
|
D=pragma(E,_,_,_,_),
|
|
copy_term_nat(E,F),
|
|
F=rule(G,H,I,_),
|
|
guard_entailment:entails_guard([chr_pp_headvariables(G,H)],I),
|
|
once((G=[J],H==[];H=[J],G==[],\+may_trigger(A))),
|
|
functor(J,_,_),
|
|
J=..[_|K],
|
|
unconditional_occurrence_args(K).
|
|
unconditional_occurrence_args([]).
|
|
unconditional_occurrence_args([A|B]) :-
|
|
var(A),
|
|
A=x,
|
|
unconditional_occurrence_args(B).
|
|
generate_show_constraint(A,B,C,D) :-
|
|
( chr_pp_flag(show,on) ->
|
|
B=['$show'/0|A],
|
|
generate_show_rules(A,D,[E|C]),
|
|
inc_rule_count(F),
|
|
E=pragma(rule(['$show'],[],true,true),ids([0],[]),[],no,F)
|
|
;
|
|
B=A,
|
|
D=C
|
|
).
|
|
generate_show_rules([],A,A).
|
|
generate_show_rules([B/C|A],[D|E],F) :-
|
|
functor(G,B,C),
|
|
inc_rule_count(H),
|
|
D=pragma(rule([],['$show',G],true,writeln(G)),ids([],[0,1]),[passive(1)],no,H),
|
|
generate_show_rules(A,E,F).
|
|
:-use_module(chr(chr_runtime)).
|
|
:-use_module(chr(chr_hashtable_store)).
|
|
:-use_module(library('clp/clp_events')).
|
|
'attach_type_definition/2'([],_).
|
|
'attach_type_definition/2'([A|B],C) :-
|
|
( get_attr(A,chr_translate,D) ->
|
|
E=[C|D],
|
|
put_attr(A,chr_translate,E)
|
|
;
|
|
put_attr(A,chr_translate,[C])
|
|
),
|
|
true,
|
|
'attach_type_definition/2'(B,C).
|
|
'detach_type_definition/2'([],_).
|
|
'detach_type_definition/2'([A|B],C) :-
|
|
( get_attr(A,chr_translate,D) ->
|
|
'chr sbag_del_element'(D,C,E),
|
|
( E==[] ->
|
|
del_attr(A,chr_translate)
|
|
;
|
|
put_attr(A,chr_translate,E)
|
|
)
|
|
;
|
|
true
|
|
),
|
|
'detach_type_definition/2'(B,C).
|
|
'$indexed_variables'(B,A) :-
|
|
B=target_module(_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=indexed_argument(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=constraint_mode(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=store_type(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=actual_store_types(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=assumed_store_type(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=rule_count(_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=passive(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=occurrence(_,_,_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=max_occurrence(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=allocation_occurrence(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=rule(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=least_occurrence(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=constraint_index(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=max_constraint_index(_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=observes(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=spawns_observer(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=observes_indirectly(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=prev_guard_list(_,_,_,_,_,_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=set_all_passive(_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=multiple_occ_constraints_checked(_),
|
|
A=[].
|
|
'$indexed_variables'(C,B) :-
|
|
C=type_definition(A,_),
|
|
term_variables(A,B).
|
|
'$indexed_variables'(B,A) :-
|
|
B=constraint_type(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=add_type_information(_,_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=stored(_,_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=stored_complete(_,_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=check_all_passive(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=constraints_code1(_,_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=use_auxiliary_predicate(_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=functional_dependency(_,_,_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=initial_call_pattern(_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=call_pattern(_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=final_answer_pattern(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=abstract_constraints(_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=depends_on(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=depends_on_ap(_,_,_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=depends_on_goal(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=ai_observed(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=ai_not_observed(_,_),
|
|
A=[].
|
|
'$indexed_variables'(B,A) :-
|
|
B=depends_on_as(_,_,_),
|
|
A=[].
|
|
attach_increment([],_).
|
|
attach_increment([B|C],A) :-
|
|
'chr not_locked'(B),
|
|
( get_attr(B,chr_translate,D) ->
|
|
sort(D,E),
|
|
merge(A,E,F),
|
|
put_attr(B,chr_translate,F)
|
|
;
|
|
put_attr(B,chr_translate,A)
|
|
),
|
|
attach_increment(C,A).
|
|
attr_unify_hook(A,B) :-
|
|
sort(A,D),
|
|
( var(B) ->
|
|
( get_attr(B,chr_translate,E) ->
|
|
true
|
|
;
|
|
E=[]
|
|
),
|
|
sort(E,F),
|
|
'chr merge_attributes'(D,F,C),
|
|
put_attr(B,chr_translate,C),
|
|
'chr run_suspensions'(C)
|
|
;
|
|
( compound(B) ->
|
|
term_variables(B,G),
|
|
attach_increment(G,D)
|
|
;
|
|
true
|
|
),
|
|
'chr run_suspensions'(A)
|
|
).
|
|
activate_constraint(A,B,C,D) :-
|
|
arg(2,C,E),
|
|
E=mutable(F),
|
|
'chr update_mutable'(active,E),
|
|
( nonvar(D) ->
|
|
true
|
|
;
|
|
arg(4,C,G),
|
|
G=mutable(H),
|
|
D is H+1,
|
|
'chr update_mutable'(D,G)
|
|
),
|
|
( compound(F) ->
|
|
term_variables(F,B),
|
|
'chr none_locked'(B),
|
|
A=yes
|
|
;
|
|
( F==removed ->
|
|
chr_indexed_variables(C,B),
|
|
A=yes
|
|
)
|
|
;
|
|
B=[],
|
|
A=no
|
|
).
|
|
remove_constraint_internal(A,B,C) :-
|
|
arg(2,A,D),
|
|
D=mutable(E),
|
|
'chr update_mutable'(removed,D),
|
|
( compound(E) ->
|
|
B=[],
|
|
C=no
|
|
;
|
|
( E==removed ->
|
|
B=[],
|
|
C=no
|
|
)
|
|
;
|
|
C=yes,
|
|
chr_indexed_variables(A,B)
|
|
).
|
|
allocate_constraint(A,B,C,D) :-
|
|
B=..[suspension,E,F,A,G,H,C|D],
|
|
G=mutable(0),
|
|
'chr empty_history'(I),
|
|
H=mutable(I),
|
|
chr_indexed_variables(B,J),
|
|
F=mutable(passive(J)),
|
|
'chr gen_id'(E).
|
|
insert_constraint_internal(yes,A,B,C,D,E) :-
|
|
B=..[suspension,F,G,C,H,I,D|E],
|
|
chr_indexed_variables(B,A),
|
|
'chr none_locked'(A),
|
|
G=mutable(active),
|
|
H=mutable(0),
|
|
I=mutable(J),
|
|
'chr empty_history'(J),
|
|
'chr gen_id'(F).
|
|
chr_indexed_variables(A,C) :-
|
|
A=..[_,_,_,_,_,_,B|_],
|
|
'$indexed_variables'(B,C).
|
|
'$insert_in_store_target_module/1'(A) :-
|
|
true,
|
|
b_setval('$chr_store_global_singleton_chr_translate:target_module/1',A).
|
|
'$delete_from_store_target_module/1'(_) :-
|
|
true,
|
|
b_setval('$chr_store_global_singleton_chr_translate:target_module/1',[]).
|
|
'$insert_in_store_indexed_argument/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:indexed_argument/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_indexed_argument/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:indexed_argument/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_constraint_mode/2'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:constraint_mode/2',B),
|
|
b_setval('$chr_store_global_ground_chr_translate:constraint_mode/2',[A|B]),
|
|
arg(7,A,C),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraint_mode/2-1',D),
|
|
insert_ht(D,C,A),
|
|
true.
|
|
'$delete_from_store_constraint_mode/2'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:constraint_mode/2',B),
|
|
'chr sbag_del_element'(B,A,C),
|
|
b_setval('$chr_store_global_ground_chr_translate:constraint_mode/2',C),
|
|
arg(7,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraint_mode/2-1',E),
|
|
delete_ht(E,D,A),
|
|
true.
|
|
'$insert_in_store_store_type/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:store_type/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_store_type/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:store_type/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_actual_store_types/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:actual_store_types/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_actual_store_types/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:actual_store_types/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_assumed_store_type/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:assumed_store_type/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_assumed_store_type/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:assumed_store_type/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_rule_count/1'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule_count/1',B),
|
|
b_setval('$chr_store_global_ground_chr_translate:rule_count/1',[A|B]).
|
|
'$delete_from_store_rule_count/1'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule_count/1',B),
|
|
'chr sbag_del_element'(B,A,C),
|
|
b_setval('$chr_store_global_ground_chr_translate:rule_count/1',C).
|
|
'$insert_in_store_passive/2'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:passive/2',B),
|
|
b_setval('$chr_store_global_ground_chr_translate:passive/2',[A|B]),
|
|
arg(7,A,C),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:passive/2-1',D),
|
|
insert_ht(D,C,A),
|
|
true.
|
|
'$delete_from_store_passive/2'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:passive/2',B),
|
|
'chr sbag_del_element'(B,A,C),
|
|
b_setval('$chr_store_global_ground_chr_translate:passive/2',C),
|
|
arg(7,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:passive/2-1',E),
|
|
delete_ht(E,D,A),
|
|
true.
|
|
'$insert_in_store_occurrence/4'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:occurrence/4',B),
|
|
b_setval('$chr_store_global_ground_chr_translate:occurrence/4',[A|B]),
|
|
arg(9,A,C),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:occurrence/4-3',D),
|
|
insert_ht(D,C,A),
|
|
true,
|
|
arg(7,A,E),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:occurrence/4-1',F),
|
|
insert_ht(F,E,A),
|
|
true.
|
|
'$delete_from_store_occurrence/4'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:occurrence/4',B),
|
|
'chr sbag_del_element'(B,A,C),
|
|
b_setval('$chr_store_global_ground_chr_translate:occurrence/4',C),
|
|
arg(9,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:occurrence/4-3',E),
|
|
delete_ht(E,D,A),
|
|
true,
|
|
arg(7,A,F),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:occurrence/4-1',G),
|
|
delete_ht(G,F,A),
|
|
true.
|
|
'$insert_in_store_max_occurrence/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:max_occurrence/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_max_occurrence/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:max_occurrence/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_allocation_occurrence/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:allocation_occurrence/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:allocation_occurrence/2',D),
|
|
b_setval('$chr_store_global_ground_chr_translate:allocation_occurrence/2',[A|D]).
|
|
'$delete_from_store_allocation_occurrence/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:allocation_occurrence/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:allocation_occurrence/2',D),
|
|
'chr sbag_del_element'(D,A,E),
|
|
b_setval('$chr_store_global_ground_chr_translate:allocation_occurrence/2',E).
|
|
'$insert_in_store_rule/2'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule/2',B),
|
|
b_setval('$chr_store_global_ground_chr_translate:rule/2',[A|B]),
|
|
arg(7,A,C),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:rule/2-1',D),
|
|
insert_ht(D,C,A),
|
|
true.
|
|
'$delete_from_store_rule/2'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule/2',B),
|
|
'chr sbag_del_element'(B,A,C),
|
|
b_setval('$chr_store_global_ground_chr_translate:rule/2',C),
|
|
arg(7,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:rule/2-1',E),
|
|
delete_ht(E,D,A),
|
|
true.
|
|
'$insert_in_store_least_occurrence/2'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:least_occurrence/2',B),
|
|
b_setval('$chr_store_global_ground_chr_translate:least_occurrence/2',[A|B]),
|
|
arg(7,A,C),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:least_occurrence/2-1',D),
|
|
insert_ht(D,C,A),
|
|
true.
|
|
'$delete_from_store_least_occurrence/2'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:least_occurrence/2',B),
|
|
'chr sbag_del_element'(B,A,C),
|
|
b_setval('$chr_store_global_ground_chr_translate:least_occurrence/2',C),
|
|
arg(7,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:least_occurrence/2-1',E),
|
|
delete_ht(E,D,A),
|
|
true.
|
|
'$insert_in_store_constraint_index/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraint_index/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_constraint_index/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraint_index/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_max_constraint_index/1'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:max_constraint_index/1',B),
|
|
b_setval('$chr_store_global_ground_chr_translate:max_constraint_index/1',[A|B]).
|
|
'$delete_from_store_max_constraint_index/1'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:max_constraint_index/1',B),
|
|
'chr sbag_del_element'(B,A,C),
|
|
b_setval('$chr_store_global_ground_chr_translate:max_constraint_index/1',C).
|
|
'$insert_in_store_observes/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:observes/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_observes/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:observes/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_spawns_observer/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:spawns_observer/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true,
|
|
arg(8,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:spawns_observer/2-2',E),
|
|
insert_ht(E,D,A),
|
|
true.
|
|
'$delete_from_store_spawns_observer/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:spawns_observer/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true,
|
|
arg(8,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:spawns_observer/2-2',E),
|
|
delete_ht(E,D,A),
|
|
true.
|
|
'$insert_in_store_observes_indirectly/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:observes_indirectly/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_observes_indirectly/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:observes_indirectly/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_prev_guard_list/7'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:prev_guard_list/7',B),
|
|
b_setval('$chr_store_global_ground_chr_translate:prev_guard_list/7',[A|B]),
|
|
arg(8,A,C),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:prev_guard_list/7-2',D),
|
|
insert_ht(D,C,A),
|
|
true,
|
|
arg(7,A,E),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:prev_guard_list/7-1',F),
|
|
insert_ht(F,E,A),
|
|
true.
|
|
'$delete_from_store_prev_guard_list/7'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:prev_guard_list/7',B),
|
|
'chr sbag_del_element'(B,A,C),
|
|
b_setval('$chr_store_global_ground_chr_translate:prev_guard_list/7',C),
|
|
arg(8,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:prev_guard_list/7-2',E),
|
|
delete_ht(E,D,A),
|
|
true,
|
|
arg(7,A,F),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:prev_guard_list/7-1',G),
|
|
delete_ht(G,F,A),
|
|
true.
|
|
'$insert_in_store_set_all_passive/1'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:set_all_passive/1-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_set_all_passive/1'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:set_all_passive/1-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_multiple_occ_constraints_checked/1'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:multiple_occ_constraints_checked/1',B),
|
|
b_setval('$chr_store_global_ground_chr_translate:multiple_occ_constraints_checked/1',[A|B]).
|
|
'$delete_from_store_multiple_occ_constraints_checked/1'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:multiple_occ_constraints_checked/1',B),
|
|
'chr sbag_del_element'(B,A,C),
|
|
b_setval('$chr_store_global_ground_chr_translate:multiple_occ_constraints_checked/1',C).
|
|
'$insert_in_store_type_definition/2'(A) :-
|
|
true,
|
|
'chr global_term_ref_1'(B),
|
|
( get_attr(B,chr_translate,C) ->
|
|
D=[A|C],
|
|
put_attr(B,chr_translate,D)
|
|
;
|
|
put_attr(B,chr_translate,[A])
|
|
).
|
|
'$delete_from_store_type_definition/2'(A) :-
|
|
true,
|
|
'chr global_term_ref_1'(B),
|
|
( get_attr(B,chr_translate,C) ->
|
|
'chr sbag_del_element'(C,A,D),
|
|
( D==[] ->
|
|
del_attr(B,chr_translate)
|
|
;
|
|
put_attr(B,chr_translate,D)
|
|
)
|
|
;
|
|
true
|
|
).
|
|
'$insert_in_store_constraint_type/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraint_type/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_constraint_type/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraint_type/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_add_type_information/3'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:add_type_information/3',B),
|
|
b_setval('$chr_store_global_ground_chr_translate:add_type_information/3',[A|B]).
|
|
'$delete_from_store_add_type_information/3'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:add_type_information/3',B),
|
|
'chr sbag_del_element'(B,A,C),
|
|
b_setval('$chr_store_global_ground_chr_translate:add_type_information/3',C).
|
|
'$insert_in_store_stored/3'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:stored/3-1',C),
|
|
insert_ht(C,B,A),
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:stored/3',D),
|
|
b_setval('$chr_store_global_ground_chr_translate:stored/3',[A|D]).
|
|
'$delete_from_store_stored/3'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:stored/3-1',C),
|
|
delete_ht(C,B,A),
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:stored/3',D),
|
|
'chr sbag_del_element'(D,A,E),
|
|
b_setval('$chr_store_global_ground_chr_translate:stored/3',E).
|
|
'$insert_in_store_stored_complete/3'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:stored_complete/3-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_stored_complete/3'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:stored_complete/3-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_check_all_passive/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:check_all_passive/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_check_all_passive/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:check_all_passive/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_constraints_code1/3'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraints_code1/3-1',C),
|
|
insert_ht(C,B,A),
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:constraints_code1/3',D),
|
|
b_setval('$chr_store_global_ground_chr_translate:constraints_code1/3',[A|D]).
|
|
'$delete_from_store_constraints_code1/3'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraints_code1/3-1',C),
|
|
delete_ht(C,B,A),
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:constraints_code1/3',D),
|
|
'chr sbag_del_element'(D,A,E),
|
|
b_setval('$chr_store_global_ground_chr_translate:constraints_code1/3',E).
|
|
'$insert_in_store_use_auxiliary_predicate/1'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:use_auxiliary_predicate/1-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_use_auxiliary_predicate/1'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:use_auxiliary_predicate/1-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_functional_dependency/4'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:functional_dependency/4-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_functional_dependency/4'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:functional_dependency/4-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_initial_call_pattern/1'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:initial_call_pattern/1',B),
|
|
b_setval('$chr_store_global_ground_chr_translate:initial_call_pattern/1',[A|B]),
|
|
arg(7,A,C),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:initial_call_pattern/1-1',D),
|
|
insert_ht(D,C,A),
|
|
true.
|
|
'$delete_from_store_initial_call_pattern/1'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:initial_call_pattern/1',B),
|
|
'chr sbag_del_element'(B,A,C),
|
|
b_setval('$chr_store_global_ground_chr_translate:initial_call_pattern/1',C),
|
|
arg(7,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:initial_call_pattern/1-1',E),
|
|
delete_ht(E,D,A),
|
|
true.
|
|
'$insert_in_store_call_pattern/1'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:call_pattern/1-1',C),
|
|
insert_ht(C,B,A),
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:call_pattern/1',D),
|
|
b_setval('$chr_store_global_ground_chr_translate:call_pattern/1',[A|D]).
|
|
'$delete_from_store_call_pattern/1'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:call_pattern/1-1',C),
|
|
delete_ht(C,B,A),
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:call_pattern/1',D),
|
|
'chr sbag_del_element'(D,A,E),
|
|
b_setval('$chr_store_global_ground_chr_translate:call_pattern/1',E).
|
|
'$insert_in_store_final_answer_pattern/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:final_answer_pattern/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_final_answer_pattern/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:final_answer_pattern/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_abstract_constraints/1'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:abstract_constraints/1',B),
|
|
b_setval('$chr_store_global_ground_chr_translate:abstract_constraints/1',[A|B]).
|
|
'$delete_from_store_abstract_constraints/1'(A) :-
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:abstract_constraints/1',B),
|
|
'chr sbag_del_element'(B,A,C),
|
|
b_setval('$chr_store_global_ground_chr_translate:abstract_constraints/1',C).
|
|
'$insert_in_store_depends_on/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:depends_on/2',D),
|
|
b_setval('$chr_store_global_ground_chr_translate:depends_on/2',[A|D]),
|
|
arg(8,A,E),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on/2-2',F),
|
|
insert_ht(F,E,A),
|
|
true.
|
|
'$delete_from_store_depends_on/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true,
|
|
nb_getval('$chr_store_global_ground_chr_translate:depends_on/2',D),
|
|
'chr sbag_del_element'(D,A,E),
|
|
b_setval('$chr_store_global_ground_chr_translate:depends_on/2',E),
|
|
arg(8,A,F),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on/2-2',G),
|
|
delete_ht(G,F,A),
|
|
true.
|
|
'$insert_in_store_depends_on_ap/4'(A) :-
|
|
true,
|
|
arg(8,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_ap/4-2',C),
|
|
insert_ht(C,B,A),
|
|
true,
|
|
arg(9,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_ap/4-3',E),
|
|
insert_ht(E,D,A),
|
|
true.
|
|
'$delete_from_store_depends_on_ap/4'(A) :-
|
|
true,
|
|
arg(8,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_ap/4-2',C),
|
|
delete_ht(C,B,A),
|
|
true,
|
|
arg(9,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_ap/4-3',E),
|
|
delete_ht(E,D,A),
|
|
true.
|
|
'$insert_in_store_depends_on_goal/2'(A) :-
|
|
true,
|
|
arg(8,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_goal/2-2',C),
|
|
insert_ht(C,B,A),
|
|
true,
|
|
arg(7,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_goal/2-1',E),
|
|
insert_ht(E,D,A),
|
|
true.
|
|
'$delete_from_store_depends_on_goal/2'(A) :-
|
|
true,
|
|
arg(8,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_goal/2-2',C),
|
|
delete_ht(C,B,A),
|
|
true,
|
|
arg(7,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_goal/2-1',E),
|
|
delete_ht(E,D,A),
|
|
true.
|
|
'$insert_in_store_ai_observed/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:ai_observed/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_ai_observed/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:ai_observed/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_ai_not_observed/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:ai_not_observed/2-1',C),
|
|
insert_ht(C,B,A),
|
|
true.
|
|
'$delete_from_store_ai_not_observed/2'(A) :-
|
|
true,
|
|
arg(7,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:ai_not_observed/2-1',C),
|
|
delete_ht(C,B,A),
|
|
true.
|
|
'$insert_in_store_depends_on_as/3'(A) :-
|
|
true,
|
|
arg(9,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_as/3-3',C),
|
|
insert_ht(C,B,A),
|
|
true,
|
|
arg(8,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_as/3-2',E),
|
|
insert_ht(E,D,A),
|
|
true.
|
|
'$delete_from_store_depends_on_as/3'(A) :-
|
|
true,
|
|
arg(9,A,B),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_as/3-3',C),
|
|
delete_ht(C,B,A),
|
|
true,
|
|
arg(8,A,D),
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_as/3-2',E),
|
|
delete_ht(E,D,A),
|
|
true.
|
|
'$enumerate_suspensions'(A) :-
|
|
(
|
|
nb_getval('$chr_store_global_singleton_chr_translate:target_module/1',A),
|
|
A\==[]
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:indexed_argument/2-1',B),
|
|
value_ht(B,A)
|
|
;
|
|
nb_getval('$chr_store_global_ground_chr_translate:constraint_mode/2',C),
|
|
'chr sbag_member'(A,C)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:store_type/2-1',D),
|
|
value_ht(D,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:actual_store_types/2-1',E),
|
|
value_ht(E,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:assumed_store_type/2-1',F),
|
|
value_ht(F,A)
|
|
;
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule_count/1',G),
|
|
'chr sbag_member'(A,G)
|
|
;
|
|
nb_getval('$chr_store_global_ground_chr_translate:passive/2',H),
|
|
'chr sbag_member'(A,H)
|
|
;
|
|
nb_getval('$chr_store_global_ground_chr_translate:occurrence/4',I),
|
|
'chr sbag_member'(A,I)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:max_occurrence/2-1',J),
|
|
value_ht(J,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:allocation_occurrence/2-1',K),
|
|
value_ht(K,A)
|
|
;
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule/2',L),
|
|
'chr sbag_member'(A,L)
|
|
;
|
|
nb_getval('$chr_store_global_ground_chr_translate:least_occurrence/2',M),
|
|
'chr sbag_member'(A,M)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraint_index/2-1',N),
|
|
value_ht(N,A)
|
|
;
|
|
nb_getval('$chr_store_global_ground_chr_translate:max_constraint_index/1',O),
|
|
'chr sbag_member'(A,O)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:observes/2-1',P),
|
|
value_ht(P,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:spawns_observer/2-1',Q),
|
|
value_ht(Q,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:observes_indirectly/2-1',R),
|
|
value_ht(R,A)
|
|
;
|
|
nb_getval('$chr_store_global_ground_chr_translate:prev_guard_list/7',S),
|
|
'chr sbag_member'(A,S)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:set_all_passive/1-1',T),
|
|
value_ht(T,A)
|
|
;
|
|
nb_getval('$chr_store_global_ground_chr_translate:multiple_occ_constraints_checked/1',U),
|
|
'chr sbag_member'(A,U)
|
|
;
|
|
'chr global_term_ref_1'(V),
|
|
get_attr(V,chr_translate,W),
|
|
'chr sbag_member'(A,W)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraint_type/2-1',X),
|
|
value_ht(X,A)
|
|
;
|
|
nb_getval('$chr_store_global_ground_chr_translate:add_type_information/3',Y),
|
|
'chr sbag_member'(A,Y)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:stored/3-1',Z),
|
|
value_ht(Z,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:stored_complete/3-1',A1),
|
|
value_ht(A1,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:check_all_passive/2-1',B1),
|
|
value_ht(B1,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraints_code1/3-1',C1),
|
|
value_ht(C1,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:use_auxiliary_predicate/1-1',D1),
|
|
value_ht(D1,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:functional_dependency/4-1',E1),
|
|
value_ht(E1,A)
|
|
;
|
|
nb_getval('$chr_store_global_ground_chr_translate:initial_call_pattern/1',F1),
|
|
'chr sbag_member'(A,F1)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:call_pattern/1-1',G1),
|
|
value_ht(G1,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:final_answer_pattern/2-1',H1),
|
|
value_ht(H1,A)
|
|
;
|
|
nb_getval('$chr_store_global_ground_chr_translate:abstract_constraints/1',I1),
|
|
'chr sbag_member'(A,I1)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on/2-1',J1),
|
|
value_ht(J1,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_ap/4-2',K1),
|
|
value_ht(K1,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_goal/2-2',L1),
|
|
value_ht(L1,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:ai_observed/2-1',M1),
|
|
value_ht(M1,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:ai_not_observed/2-1',N1),
|
|
value_ht(N1,A)
|
|
;
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_as/3-3',O1),
|
|
value_ht(O1,A)
|
|
).
|
|
:-nb_setval('$chr_store_global_singleton_chr_translate:target_module/1',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:indexed_argument/2-1',A).
|
|
'$via1_multi_hash_indexed_argument/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:indexed_argument/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:constraint_mode/2',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:constraint_mode/2-1',A).
|
|
'$via1_multi_hash_constraint_mode/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraint_mode/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:store_type/2-1',A).
|
|
'$via1_multi_hash_store_type/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:store_type/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:actual_store_types/2-1',A).
|
|
'$via1_multi_hash_actual_store_types/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:actual_store_types/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:assumed_store_type/2-1',A).
|
|
'$via1_multi_hash_assumed_store_type/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:assumed_store_type/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:rule_count/1',[]).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:passive/2',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:passive/2-1',A).
|
|
'$via1_multi_hash_passive/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:passive/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:occurrence/4',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:occurrence/4-3',A).
|
|
'$via1_multi_hash_occurrence/4-3'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:occurrence/4-3',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:occurrence/4-1',A).
|
|
'$via1_multi_hash_occurrence/4-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:occurrence/4-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:max_occurrence/2-1',A).
|
|
'$via1_multi_hash_max_occurrence/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:max_occurrence/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:allocation_occurrence/2-1',A).
|
|
'$via1_multi_hash_allocation_occurrence/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:allocation_occurrence/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:allocation_occurrence/2',[]).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:rule/2',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:rule/2-1',A).
|
|
'$via1_multi_hash_rule/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:rule/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:least_occurrence/2',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:least_occurrence/2-1',A).
|
|
'$via1_multi_hash_least_occurrence/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:least_occurrence/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:constraint_index/2-1',A).
|
|
'$via1_multi_hash_constraint_index/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraint_index/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:max_constraint_index/1',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:observes/2-1',A).
|
|
'$via1_multi_hash_observes/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:observes/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:spawns_observer/2-1',A).
|
|
'$via1_multi_hash_spawns_observer/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:spawns_observer/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:spawns_observer/2-2',A).
|
|
'$via1_multi_hash_spawns_observer/2-2'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:spawns_observer/2-2',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:observes_indirectly/2-1',A).
|
|
'$via1_multi_hash_observes_indirectly/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:observes_indirectly/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:prev_guard_list/7',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:prev_guard_list/7-2',A).
|
|
'$via1_multi_hash_prev_guard_list/7-2'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:prev_guard_list/7-2',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:prev_guard_list/7-1',A).
|
|
'$via1_multi_hash_prev_guard_list/7-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:prev_guard_list/7-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:set_all_passive/1-1',A).
|
|
'$via1_multi_hash_set_all_passive/1-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:set_all_passive/1-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:multiple_occ_constraints_checked/1',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:constraint_type/2-1',A).
|
|
'$via1_multi_hash_constraint_type/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraint_type/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:add_type_information/3',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:stored/3-1',A).
|
|
'$via1_multi_hash_stored/3-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:stored/3-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:stored/3',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:stored_complete/3-1',A).
|
|
'$via1_multi_hash_stored_complete/3-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:stored_complete/3-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:check_all_passive/2-1',A).
|
|
'$via1_multi_hash_check_all_passive/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:check_all_passive/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:constraints_code1/3-1',A).
|
|
'$via1_multi_hash_constraints_code1/3-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:constraints_code1/3-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:constraints_code1/3',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:use_auxiliary_predicate/1-1',A).
|
|
'$via1_multi_hash_use_auxiliary_predicate/1-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:use_auxiliary_predicate/1-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:functional_dependency/4-1',A).
|
|
'$via1_multi_hash_functional_dependency/4-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:functional_dependency/4-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:initial_call_pattern/1',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:initial_call_pattern/1-1',A).
|
|
'$via1_multi_hash_initial_call_pattern/1-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:initial_call_pattern/1-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:call_pattern/1-1',A).
|
|
'$via1_multi_hash_call_pattern/1-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:call_pattern/1-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:call_pattern/1',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:final_answer_pattern/2-1',A).
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:final_answer_pattern/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:abstract_constraints/1',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:depends_on/2-1',A).
|
|
'$via1_multi_hash_depends_on/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-nb_setval('$chr_store_global_ground_chr_translate:depends_on/2',[]).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:depends_on/2-2',A).
|
|
'$via1_multi_hash_depends_on/2-2'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on/2-2',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:depends_on_ap/4-2',A).
|
|
'$via1_multi_hash_depends_on_ap/4-2'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_ap/4-2',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:depends_on_ap/4-3',A).
|
|
'$via1_multi_hash_depends_on_ap/4-3'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_ap/4-3',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:depends_on_goal/2-2',A).
|
|
'$via1_multi_hash_depends_on_goal/2-2'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_goal/2-2',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:depends_on_goal/2-1',A).
|
|
'$via1_multi_hash_depends_on_goal/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_goal/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:ai_observed/2-1',A).
|
|
'$via1_multi_hash_ai_observed/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:ai_observed/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:ai_not_observed/2-1',A).
|
|
'$via1_multi_hash_ai_not_observed/2-1'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:ai_not_observed/2-1',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:depends_on_as/3-3',A).
|
|
'$via1_multi_hash_depends_on_as/3-3'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_as/3-3',C),
|
|
lookup_ht(C,A,B).
|
|
:-new_ht(A),nb_setval('$chr_store_multi_hash_chr_translate:depends_on_as/3-2',A).
|
|
'$via1_multi_hash_depends_on_as/3-2'(A,B) :-
|
|
nb_getval('$chr_store_multi_hash_chr_translate:depends_on_as/3-2',C),
|
|
lookup_ht(C,A,B).
|
|
target_module(_) :-
|
|
nb_getval('$chr_store_global_singleton_chr_translate:target_module/1',A),
|
|
A\==[],
|
|
A=suspension(_,_,_,_,_,_,_),
|
|
!.
|
|
target_module(A) :-
|
|
insert_constraint_internal(_,_,B,true,target_module(A),[A]),
|
|
'$insert_in_store_target_module/1'(B).
|
|
get_target_module(A) :-
|
|
nb_getval('$chr_store_global_singleton_chr_translate:target_module/1',B),
|
|
B\==[],
|
|
B=suspension(_,_,_,_,_,_,C),
|
|
!,
|
|
A=C.
|
|
get_target_module(user).
|
|
indexed_argument(A,B) :-
|
|
'$via1_multi_hash_indexed_argument/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
D=B,
|
|
!.
|
|
indexed_argument(A,B) :-
|
|
insert_constraint_internal(_,_,C,true,indexed_argument(A,B),[A,B]),
|
|
'$insert_in_store_indexed_argument/2'(C).
|
|
is_indexed_argument(A,B) :-
|
|
'$via1_multi_hash_indexed_argument/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
D==B,
|
|
!.
|
|
is_indexed_argument(_,_) :-
|
|
fail.
|
|
constraint_mode(A,B) :-
|
|
'constraint_mode/2__0'(A,B,_).
|
|
'constraint_mode/2__0'(A,_,_) :-
|
|
'$via1_multi_hash_constraint_mode/2-1'(A,C),
|
|
'chr sbag_member'(B,C),
|
|
B=suspension(_,mutable(active),_,_,_,_,_,_),
|
|
!.
|
|
'constraint_mode/2__0'(A,B,C) :-
|
|
A=D/E,
|
|
nb_getval('$chr_store_global_ground_chr_translate:add_type_information/3',F),
|
|
!,
|
|
allocate_constraint(true,C,constraint_mode(A,B),[A,B]),
|
|
'constraint_mode/2__0__0'(F,A,B,C,D,E).
|
|
'constraint_mode/2__0__0'([],A,B,C,_,_) :-
|
|
'constraint_mode/2__1'(A,B,C).
|
|
'constraint_mode/2__0__0'([I|N],A,B,C,D,E) :-
|
|
( I=suspension(_,mutable(active),_,_,_,_,F,G,H),
|
|
F=[J|K],
|
|
G=[L|M],
|
|
functor(J,D,E) ->
|
|
remove_constraint_internal(I,_,O),
|
|
( O==yes ->
|
|
'$delete_from_store_add_type_information/3'(I)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(X,_,C,Y),
|
|
( X==yes ->
|
|
'$insert_in_store_constraint_mode/2'(C)
|
|
;
|
|
true
|
|
),
|
|
J=..[_|P],
|
|
L=..[_|Q],
|
|
add_mode_info(B,P,R),
|
|
H=(R,S),
|
|
( get_constraint_type(D/E,T) ->
|
|
types2condition(T,P,Q,B,U),
|
|
list2conj(U,V),
|
|
S=(V,W),
|
|
add_type_information(K,M,W)
|
|
;
|
|
add_type_information(K,M,S)
|
|
),
|
|
( C=suspension(_,mutable(active),_,mutable(Y),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'constraint_mode/2__0__0'(N,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'constraint_mode/2__0__0'(N,A,B,C,D,E)
|
|
).
|
|
'constraint_mode/2__0'(A,B,C) :-
|
|
allocate_constraint(true,C,constraint_mode(A,B),[A,B]),
|
|
'constraint_mode/2__1'(A,B,C).
|
|
'constraint_mode/2__1'(_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_constraint_mode/2'(A)
|
|
;
|
|
true
|
|
).
|
|
get_constraint_mode(A,B) :-
|
|
'$via1_multi_hash_constraint_mode/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
!,
|
|
B=D.
|
|
get_constraint_mode(_/B,A) :-
|
|
replicate(B,?,A).
|
|
may_trigger(A) :-
|
|
'$via1_multi_hash_constraint_mode/2-1'(A,D),
|
|
'chr sbag_member'(B,D),
|
|
B=suspension(_,mutable(active),_,_,_,_,_,C),
|
|
'$via1_multi_hash_indexed_argument/2-1'(A,G),
|
|
'chr sbag_member'(E,G),
|
|
E=suspension(_,mutable(active),_,_,_,_,_,F),
|
|
nth(F,C,H),
|
|
H\== +,
|
|
!,
|
|
is_stored(A).
|
|
may_trigger(_) :-
|
|
chr_pp_flag(debugable,on).
|
|
store_type(A,atom_hash(B)) :-
|
|
!,
|
|
store_type(A,multi_hash([B])).
|
|
store_type(A,B) :-
|
|
insert_constraint_internal(_,_,C,true,store_type(A,B),[A,B]),
|
|
'$insert_in_store_store_type/2'(C).
|
|
get_store_type(A,B) :-
|
|
'$via1_multi_hash_store_type/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
!,
|
|
B=D.
|
|
get_store_type(A,B) :-
|
|
'$via1_multi_hash_assumed_store_type/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
!,
|
|
B=D.
|
|
get_store_type(_,default).
|
|
update_store_type(A,B) :-
|
|
'$via1_multi_hash_actual_store_types/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
member(B,D),
|
|
!.
|
|
update_store_type(A,B) :-
|
|
'$via1_multi_hash_actual_store_types/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
!,
|
|
remove_constraint_internal(C,_,F),
|
|
( F==yes ->
|
|
'$delete_from_store_actual_store_types/2'(C)
|
|
;
|
|
true
|
|
),
|
|
actual_store_types(A,[B|D]).
|
|
update_store_type(A,B) :-
|
|
actual_store_types(A,[B]).
|
|
actual_store_types(A,B) :-
|
|
insert_constraint_internal(_,_,C,true,actual_store_types(A,B),[A,B]),
|
|
'$insert_in_store_actual_store_types/2'(C).
|
|
assumed_store_type(A,B) :-
|
|
insert_constraint_internal(_,_,C,true,assumed_store_type(A,B),[A,B]),
|
|
'$insert_in_store_assumed_store_type/2'(C).
|
|
validate_store_type_assumption(A) :-
|
|
'$via1_multi_hash_actual_store_types/2-1'(A,D),
|
|
'chr sbag_member'(B,D),
|
|
B=suspension(_,mutable(active),_,_,_,_,_,C),
|
|
'$via1_multi_hash_assumed_store_type/2-1'(A,F),
|
|
'chr sbag_member'(E,F),
|
|
E=suspension(_,mutable(active),_,_,_,_,_,_),
|
|
!,
|
|
remove_constraint_internal(B,_,G),
|
|
( G==yes ->
|
|
'$delete_from_store_actual_store_types/2'(B)
|
|
;
|
|
true
|
|
),
|
|
remove_constraint_internal(E,_,H),
|
|
( H==yes ->
|
|
'$delete_from_store_assumed_store_type/2'(E)
|
|
;
|
|
true
|
|
),
|
|
store_type(A,multi_store(C)).
|
|
validate_store_type_assumption(A) :-
|
|
'$via1_multi_hash_actual_store_types/2-1'(A,D),
|
|
'chr sbag_member'(B,D),
|
|
B=suspension(_,mutable(active),_,_,_,_,_,C),
|
|
'$via1_multi_hash_store_type/2-1'(A,F),
|
|
'chr sbag_member'(E,F),
|
|
E=suspension(_,mutable(active),_,_,_,_,_,_),
|
|
!,
|
|
remove_constraint_internal(B,_,G),
|
|
( G==yes ->
|
|
'$delete_from_store_actual_store_types/2'(B)
|
|
;
|
|
true
|
|
),
|
|
remove_constraint_internal(E,_,H),
|
|
( H==yes ->
|
|
'$delete_from_store_store_type/2'(E)
|
|
;
|
|
true
|
|
),
|
|
store_type(A,multi_store(C)).
|
|
validate_store_type_assumption(_).
|
|
rule_count(A) :-
|
|
insert_constraint_internal(_,_,B,true,rule_count(A),[A]),
|
|
'$insert_in_store_rule_count/1'(B).
|
|
inc_rule_count(A) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule_count/1',D),
|
|
'chr sbag_member'(B,D),
|
|
B=suspension(_,mutable(active),_,_,_,_,C),
|
|
!,
|
|
remove_constraint_internal(B,_,E),
|
|
( E==yes ->
|
|
'$delete_from_store_rule_count/1'(B)
|
|
;
|
|
true
|
|
),
|
|
A is C+1,
|
|
rule_count(A).
|
|
inc_rule_count(1) :-
|
|
rule_count(1).
|
|
passive(A,B) :-
|
|
'passive/2__0'(A,B,_).
|
|
'passive/2__0'(A,B,_) :-
|
|
'$via1_multi_hash_passive/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
D=B,
|
|
!.
|
|
'passive/2__0'(A,B,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:allocation_occurrence/2',D),
|
|
!,
|
|
allocate_constraint(true,C,passive(A,B),[A,B]),
|
|
'passive/2__0__0'(D,A,B,C).
|
|
'passive/2__0__0'([],A,B,C) :-
|
|
'passive/2__1'(A,B,C).
|
|
'passive/2__0__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
'$via1_multi_hash_occurrence/4-1'(D,L),
|
|
'chr sbag_member'(H,L),
|
|
H=suspension(_,mutable(active),_,_,_,_,_,I,J,K),
|
|
I==E,
|
|
J==A,
|
|
K==B ->
|
|
remove_constraint_internal(F,_,M),
|
|
( M==yes ->
|
|
'$delete_from_store_allocation_occurrence/2'(F)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(O,_,C,P),
|
|
( O==yes ->
|
|
'$insert_in_store_passive/2'(C)
|
|
;
|
|
true
|
|
),
|
|
N is E+1,
|
|
allocation_occurrence(D,N),
|
|
( C=suspension(_,mutable(active),_,mutable(P),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'passive/2__0__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'passive/2__0__0'(G,A,B,C)
|
|
).
|
|
'passive/2__0'(A,B,C) :-
|
|
allocate_constraint(true,C,passive(A,B),[A,B]),
|
|
'passive/2__1'(A,B,C).
|
|
'passive/2__1'(A,B,C) :-
|
|
'$via1_multi_hash_least_occurrence/2-1'(A,D),
|
|
!,
|
|
'passive/2__1__0'(D,A,B,C).
|
|
'passive/2__1__0'([],A,B,C) :-
|
|
'passive/2__2'(A,B,C).
|
|
'passive/2__1__0'([F|I],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==A,
|
|
E=[G|H],
|
|
G==B,
|
|
'$via1_multi_hash_rule/2-1'(A,K),
|
|
'chr sbag_member'(J,K),
|
|
J=suspension(_,mutable(active),_,_,_,_,_,_) ->
|
|
remove_constraint_internal(F,_,L),
|
|
( L==yes ->
|
|
'$delete_from_store_least_occurrence/2'(F)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(M,_,C,N),
|
|
( M==yes ->
|
|
'$insert_in_store_passive/2'(C)
|
|
;
|
|
true
|
|
),
|
|
least_occurrence(A,H),
|
|
( C=suspension(_,mutable(active),_,mutable(N),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'passive/2__1__0'(I,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'passive/2__1__0'(I,A,B,C)
|
|
).
|
|
'passive/2__1'(A,B,C) :-
|
|
'passive/2__2'(A,B,C).
|
|
'passive/2__2'(A,B,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:stored/3',D),
|
|
!,
|
|
'passive/2__2__0'(D,A,B,C).
|
|
'passive/2__2__0'([],A,B,C) :-
|
|
'passive/2__3'(A,B,C).
|
|
'passive/2__2__0'([G|H],A,B,C) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,D,E,F),
|
|
F=yes,
|
|
'$via1_multi_hash_occurrence/4-1'(D,M),
|
|
'chr sbag_member'(I,M),
|
|
I=suspension(_,mutable(active),_,_,_,_,_,J,K,L),
|
|
J==E,
|
|
K==A,
|
|
L==B,
|
|
'$via1_multi_hash_stored_complete/3-1'(D,Q),
|
|
'chr sbag_member'(N,Q),
|
|
N=suspension(_,mutable(active),_,_,_,_,_,O,P),
|
|
E<O ->
|
|
remove_constraint_internal(G,_,R),
|
|
( R==yes ->
|
|
'$delete_from_store_stored/3'(G)
|
|
;
|
|
true
|
|
),
|
|
remove_constraint_internal(N,_,S),
|
|
( S==yes ->
|
|
'$delete_from_store_stored_complete/3'(N)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(U,_,C,V),
|
|
( U==yes ->
|
|
'$insert_in_store_passive/2'(C)
|
|
;
|
|
true
|
|
),
|
|
T is P-1,
|
|
stored(D,E,maybe),
|
|
stored_complete(D,O,T),
|
|
( C=suspension(_,mutable(active),_,mutable(V),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'passive/2__2__0'(H,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'passive/2__2__0'(H,A,B,C)
|
|
).
|
|
'passive/2__2'(A,B,C) :-
|
|
'passive/2__3'(A,B,C).
|
|
'passive/2__3'(A,B,C) :-
|
|
'$via1_multi_hash_rule/2-1'(A,D),
|
|
!,
|
|
'passive/2__3__0'(D,A,B,C).
|
|
'passive/2__3__0'([],A,B,C) :-
|
|
'passive/2__4'(A,B,C).
|
|
'passive/2__3__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==A,
|
|
M=t(91,F,C),
|
|
'chr novel_production'(F,M),
|
|
'chr novel_production'(C,M),
|
|
E=pragma(rule(_,_,_,_),ids([B|I],H),_,_,A) ->
|
|
'chr extend_history'(C,M),
|
|
activate_constraint(K,_,C,L),
|
|
( K==yes ->
|
|
'$insert_in_store_passive/2'(C)
|
|
;
|
|
true
|
|
),
|
|
append(I,H,J),
|
|
check_all_passive(A,J),
|
|
( C=suspension(_,mutable(active),_,mutable(L),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'passive/2__3__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'passive/2__3__0'(G,A,B,C)
|
|
).
|
|
'passive/2__3'(A,B,C) :-
|
|
'passive/2__4'(A,B,C).
|
|
'passive/2__4'(A,B,C) :-
|
|
'$via1_multi_hash_rule/2-1'(A,D),
|
|
!,
|
|
'passive/2__4__0'(D,A,B,C).
|
|
'passive/2__4__0'([],A,B,C) :-
|
|
'passive/2__5'(A,B,C).
|
|
'passive/2__4__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==A,
|
|
K=t(92,F,C),
|
|
'chr novel_production'(F,K),
|
|
'chr novel_production'(C,K),
|
|
E=pragma(rule(_,_,_,_),ids([],[B|H]),_,_,A) ->
|
|
'chr extend_history'(C,K),
|
|
activate_constraint(I,_,C,J),
|
|
( I==yes ->
|
|
'$insert_in_store_passive/2'(C)
|
|
;
|
|
true
|
|
),
|
|
check_all_passive(A,H),
|
|
( C=suspension(_,mutable(active),_,mutable(J),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'passive/2__4__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'passive/2__4__0'(G,A,B,C)
|
|
).
|
|
'passive/2__4'(A,B,C) :-
|
|
'passive/2__5'(A,B,C).
|
|
'passive/2__5'(A,B,C) :-
|
|
'$via1_multi_hash_check_all_passive/2-1'(A,D),
|
|
!,
|
|
'passive/2__5__0'(D,A,B,C).
|
|
'passive/2__5__0'([],A,B,C) :-
|
|
'passive/2__6'(A,B,C).
|
|
'passive/2__5__0'([F|I],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==A,
|
|
E=[G|H],
|
|
G==B ->
|
|
remove_constraint_internal(F,_,J),
|
|
( J==yes ->
|
|
'$delete_from_store_check_all_passive/2'(F)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(K,_,C,L),
|
|
( K==yes ->
|
|
'$insert_in_store_passive/2'(C)
|
|
;
|
|
true
|
|
),
|
|
check_all_passive(A,H),
|
|
( C=suspension(_,mutable(active),_,mutable(L),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'passive/2__5__0'(I,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'passive/2__5__0'(I,A,B,C)
|
|
).
|
|
'passive/2__5'(A,B,C) :-
|
|
'passive/2__6'(A,B,C).
|
|
'passive/2__6'(_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_passive/2'(A)
|
|
;
|
|
true
|
|
).
|
|
is_passive(A,B) :-
|
|
'$via1_multi_hash_passive/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
D==B,
|
|
!.
|
|
is_passive(_,_) :-
|
|
fail.
|
|
any_passive_head(A) :-
|
|
'$via1_multi_hash_passive/2-1'(A,C),
|
|
'chr sbag_member'(B,C),
|
|
B=suspension(_,mutable(active),_,_,_,_,_,_),
|
|
!.
|
|
any_passive_head(_) :-
|
|
fail.
|
|
new_occurrence(A,B,C) :-
|
|
'$via1_multi_hash_max_occurrence/2-1'(A,F),
|
|
'chr sbag_member'(D,F),
|
|
D=suspension(_,mutable(active),_,_,_,_,_,E),
|
|
!,
|
|
remove_constraint_internal(D,_,H),
|
|
( H==yes ->
|
|
'$delete_from_store_max_occurrence/2'(D)
|
|
;
|
|
true
|
|
),
|
|
G is E+1,
|
|
occurrence(A,G,B,C),
|
|
max_occurrence(A,G).
|
|
new_occurrence(A,B,_) :-
|
|
format('ERROR: new_occurrence: missing max_occurrence for ~w in rule ~w
|
|
',[A,B]),
|
|
fail.
|
|
occurrence(A,B,C,D) :-
|
|
'occurrence/4__0'(A,B,C,D,_).
|
|
'occurrence/4__0'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_allocation_occurrence/2-1'(A,F),
|
|
!,
|
|
allocate_constraint(true,E,occurrence(A,B,C,D),[A,B,C,D]),
|
|
'occurrence/4__0__0'(F,A,B,C,D,E).
|
|
'occurrence/4__0__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__1'(A,B,C,D,E).
|
|
'occurrence/4__0__0'([H|I],A,B,C,D,E) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,F,G),
|
|
F==A,
|
|
G==B,
|
|
'$via1_multi_hash_passive/2-1'(C,L),
|
|
'chr sbag_member'(J,L),
|
|
J=suspension(_,mutable(active),_,_,_,_,_,K),
|
|
K==D ->
|
|
remove_constraint_internal(H,_,M),
|
|
( M==yes ->
|
|
'$delete_from_store_allocation_occurrence/2'(H)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(O,_,E,P),
|
|
( O==yes ->
|
|
'$insert_in_store_occurrence/4'(E)
|
|
;
|
|
true
|
|
),
|
|
N is B+1,
|
|
allocation_occurrence(A,N),
|
|
( E=suspension(_,mutable(active),_,mutable(P),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__0__0'(I,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__0__0'(I,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__0'(A,B,C,D,E) :-
|
|
allocate_constraint(true,E,occurrence(A,B,C,D),[A,B,C,D]),
|
|
'occurrence/4__1'(A,B,C,D,E).
|
|
'occurrence/4__1'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_allocation_occurrence/2-1'(A,F),
|
|
!,
|
|
'occurrence/4__1__0'(F,A,B,C,D,E).
|
|
'occurrence/4__1__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__2'(A,B,C,D,E).
|
|
'occurrence/4__1__0'([H|I],A,B,C,D,E) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,F,G),
|
|
F==A,
|
|
G==B,
|
|
'$via1_multi_hash_rule/2-1'(C,L),
|
|
'chr sbag_member'(J,L),
|
|
J=suspension(_,mutable(active),_,_,_,_,_,K),
|
|
K=pragma(_,ids(N,_),_,_,_),
|
|
member(D,N) ->
|
|
remove_constraint_internal(H,_,M),
|
|
( M==yes ->
|
|
'$delete_from_store_allocation_occurrence/2'(H)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(P,_,E,Q),
|
|
( P==yes ->
|
|
'$insert_in_store_occurrence/4'(E)
|
|
;
|
|
true
|
|
),
|
|
O is B+1,
|
|
allocation_occurrence(A,O),
|
|
( E=suspension(_,mutable(active),_,mutable(Q),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__1__0'(I,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__1__0'(I,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__1'(A,B,C,D,E) :-
|
|
'occurrence/4__2'(A,B,C,D,E).
|
|
'occurrence/4__2'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_allocation_occurrence/2-1'(A,F),
|
|
!,
|
|
'occurrence/4__2__0'(F,A,B,C,D,E).
|
|
'occurrence/4__2__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__3'(A,B,C,D,E).
|
|
'occurrence/4__2__0'([H|I],A,B,C,D,E) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,F,G),
|
|
F==A,
|
|
G==B,
|
|
'$via1_multi_hash_rule/2-1'(C,L),
|
|
'chr sbag_member'(J,L),
|
|
J=suspension(_,mutable(active),_,_,_,_,_,K),
|
|
K=pragma(rule([_|_],_,_,true),_,_,_,_) ->
|
|
remove_constraint_internal(H,_,M),
|
|
( M==yes ->
|
|
'$delete_from_store_allocation_occurrence/2'(H)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(O,_,E,P),
|
|
( O==yes ->
|
|
'$insert_in_store_occurrence/4'(E)
|
|
;
|
|
true
|
|
),
|
|
N is B+1,
|
|
allocation_occurrence(A,N),
|
|
( E=suspension(_,mutable(active),_,mutable(P),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__2__0'(I,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__2__0'(I,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__2'(A,B,C,D,E) :-
|
|
'occurrence/4__3'(A,B,C,D,E).
|
|
'occurrence/4__3'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_allocation_occurrence/2-1'(A,F),
|
|
!,
|
|
'occurrence/4__3__0'(F,A,B,C,D,E).
|
|
'occurrence/4__3__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__4'(A,B,C,D,E).
|
|
'occurrence/4__3__0'([H|I],A,B,C,D,E) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,F,G),
|
|
F==A,
|
|
G==B,
|
|
'$via1_multi_hash_rule/2-1'(C,L),
|
|
'chr sbag_member'(J,L),
|
|
J=suspension(_,mutable(active),_,_,_,_,_,K),
|
|
K=pragma(rule([_|_],_,_,_),_,_,_,_),
|
|
\+is_observed(A,B) ->
|
|
remove_constraint_internal(H,_,M),
|
|
( M==yes ->
|
|
'$delete_from_store_allocation_occurrence/2'(H)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(O,_,E,P),
|
|
( O==yes ->
|
|
'$insert_in_store_occurrence/4'(E)
|
|
;
|
|
true
|
|
),
|
|
N is B+1,
|
|
allocation_occurrence(A,N),
|
|
( E=suspension(_,mutable(active),_,mutable(P),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__3__0'(I,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__3__0'(I,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__3'(A,B,C,D,E) :-
|
|
'occurrence/4__4'(A,B,C,D,E).
|
|
'occurrence/4__4'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_allocation_occurrence/2-1'(A,F),
|
|
!,
|
|
'occurrence/4__4__0'(F,A,B,C,D,E).
|
|
'occurrence/4__4__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__5'(A,B,C,D,E).
|
|
'occurrence/4__4__0'([H|I],A,B,C,D,E) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,F,G),
|
|
F==A,
|
|
G==B,
|
|
'$via1_multi_hash_least_occurrence/2-1'(C,L),
|
|
'chr sbag_member'(J,L),
|
|
J=suspension(_,mutable(active),_,_,_,_,_,K),
|
|
K=[],
|
|
'$via1_multi_hash_rule/2-1'(C,O),
|
|
'chr sbag_member'(M,O),
|
|
M=suspension(_,mutable(active),_,_,_,_,_,N),
|
|
N=pragma(rule([],_,_,_),_,_,_,_),
|
|
\+is_observed(A,B) ->
|
|
remove_constraint_internal(H,_,P),
|
|
( P==yes ->
|
|
'$delete_from_store_allocation_occurrence/2'(H)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(R,_,E,S),
|
|
( R==yes ->
|
|
'$insert_in_store_occurrence/4'(E)
|
|
;
|
|
true
|
|
),
|
|
Q is B+1,
|
|
allocation_occurrence(A,Q),
|
|
( E=suspension(_,mutable(active),_,mutable(S),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__4__0'(I,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__4__0'(I,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__4'(A,B,C,D,E) :-
|
|
'occurrence/4__5'(A,B,C,D,E).
|
|
'occurrence/4__5'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_least_occurrence/2-1'(C,F),
|
|
!,
|
|
'occurrence/4__5__0'(F,A,B,C,D,E).
|
|
'occurrence/4__5__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__6'(A,B,C,D,E).
|
|
'occurrence/4__5__0'([H|K],A,B,C,D,E) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,F,G),
|
|
F==C,
|
|
G=[I|J],
|
|
I==D,
|
|
'$via1_multi_hash_allocation_occurrence/2-1'(A,N),
|
|
'chr sbag_member'(L,N),
|
|
L=suspension(_,mutable(active),_,_,_,_,_,M),
|
|
M>=B,
|
|
'$via1_multi_hash_rule/2-1'(C,P),
|
|
'chr sbag_member'(O,P),
|
|
O=suspension(_,mutable(active),_,_,_,_,_,_),
|
|
\+may_trigger(A) ->
|
|
remove_constraint_internal(H,_,Q),
|
|
( Q==yes ->
|
|
'$delete_from_store_least_occurrence/2'(H)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(R,_,E,S),
|
|
( R==yes ->
|
|
'$insert_in_store_occurrence/4'(E)
|
|
;
|
|
true
|
|
),
|
|
least_occurrence(C,J),
|
|
( E=suspension(_,mutable(active),_,mutable(S),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__5__0'(K,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__5__0'(K,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__5'(A,B,C,D,E) :-
|
|
'occurrence/4__6'(A,B,C,D,E).
|
|
'occurrence/4__6'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_set_all_passive/1-1'(C,F),
|
|
!,
|
|
'occurrence/4__6__0'(F,A,B,C,D,E).
|
|
'occurrence/4__6__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__7'(A,B,C,D,E).
|
|
'occurrence/4__6__0'([G|H],A,B,C,D,E) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,F),
|
|
F==C,
|
|
K=t(71,G,E),
|
|
'chr novel_production'(G,K),
|
|
'chr novel_production'(E,K) ->
|
|
'chr extend_history'(E,K),
|
|
activate_constraint(I,_,E,J),
|
|
( I==yes ->
|
|
'$insert_in_store_occurrence/4'(E)
|
|
;
|
|
true
|
|
),
|
|
passive(C,D),
|
|
( E=suspension(_,mutable(active),_,mutable(J),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__6__0'(H,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__6__0'(H,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__6'(A,B,C,D,E) :-
|
|
'occurrence/4__7'(A,B,C,D,E).
|
|
'occurrence/4__7'(A,B,C,D,E) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:multiple_occ_constraints_checked/1',F),
|
|
!,
|
|
'occurrence/4__7__0'(F,A,B,C,D,E).
|
|
'occurrence/4__7__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__8'(A,B,C,D,E).
|
|
'occurrence/4__7__0'([G|H],A,B,C,D,E) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,F),
|
|
chr_pp_flag(occurrence_subsumption,on),
|
|
'$via1_multi_hash_prev_guard_list/7-1'(C,R),
|
|
'chr sbag_member'(P,R),
|
|
P=suspension(_,mutable(active),_,_,_,_,_,Q,_,_,_,_,_),
|
|
Q=0,
|
|
'$via1_multi_hash_occurrence/4-1'(A,L),
|
|
'chr sbag_member'(I,L),
|
|
I=suspension(_,mutable(active),_,_,_,_,_,J,K,_),
|
|
K==C,
|
|
B<J,
|
|
'$via1_multi_hash_rule/2-1'(C,O),
|
|
'chr sbag_member'(M,O),
|
|
M=suspension(_,mutable(active),_,_,_,_,_,N),
|
|
N=pragma(rule(T,_,_,_),_,_,_,C),
|
|
T\==[],
|
|
\+memberchk_eq(A,F) ->
|
|
remove_constraint_internal(G,_,S),
|
|
( S==yes ->
|
|
'$delete_from_store_multiple_occ_constraints_checked/1'(G)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(U,_,E,V),
|
|
( U==yes ->
|
|
'$insert_in_store_occurrence/4'(E)
|
|
;
|
|
true
|
|
),
|
|
first_occ_in_rule(C,A,B,D),
|
|
multiple_occ_constraints_checked([A|F]),
|
|
( E=suspension(_,mutable(active),_,mutable(V),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__7__0'(H,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__7__0'(H,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__7'(A,B,C,D,E) :-
|
|
'occurrence/4__8'(A,B,C,D,E).
|
|
'occurrence/4__8'(A,B,C,D,E) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:multiple_occ_constraints_checked/1',F),
|
|
!,
|
|
'occurrence/4__8__0'(F,A,B,C,D,E).
|
|
'occurrence/4__8__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__9'(A,B,C,D,E).
|
|
'occurrence/4__8__0'([G|H],A,B,C,D,E) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,F),
|
|
chr_pp_flag(occurrence_subsumption,on),
|
|
'$via1_multi_hash_prev_guard_list/7-1'(C,S),
|
|
'chr sbag_member'(Q,S),
|
|
Q=suspension(_,mutable(active),_,_,_,_,_,R,_,_,_,_,_),
|
|
R=0,
|
|
'$via1_multi_hash_occurrence/4-1'(A,M),
|
|
'chr sbag_member'(I,M),
|
|
I=suspension(_,mutable(active),_,_,_,_,_,J,K,L),
|
|
K==C,
|
|
J<B,
|
|
'$via1_multi_hash_rule/2-1'(C,P),
|
|
'chr sbag_member'(N,P),
|
|
N=suspension(_,mutable(active),_,_,_,_,_,O),
|
|
O=pragma(rule(U,_,_,_),_,_,_,C),
|
|
U\==[],
|
|
\+memberchk_eq(A,F) ->
|
|
remove_constraint_internal(G,_,T),
|
|
( T==yes ->
|
|
'$delete_from_store_multiple_occ_constraints_checked/1'(G)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(V,_,E,W),
|
|
( V==yes ->
|
|
'$insert_in_store_occurrence/4'(E)
|
|
;
|
|
true
|
|
),
|
|
first_occ_in_rule(C,A,J,L),
|
|
multiple_occ_constraints_checked([A|F]),
|
|
( E=suspension(_,mutable(active),_,mutable(W),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__8__0'(H,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__8__0'(H,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__8'(A,B,C,D,E) :-
|
|
'occurrence/4__9'(A,B,C,D,E).
|
|
'occurrence/4__9'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_stored/3-1'(A,F),
|
|
!,
|
|
'occurrence/4__9__0'(F,A,B,C,D,E).
|
|
'occurrence/4__9__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__10'(A,B,C,D,E).
|
|
'occurrence/4__9__0'([I|J],A,B,C,D,E) :-
|
|
( I=suspension(_,mutable(active),_,_,_,_,F,G,H),
|
|
F==A,
|
|
G==B,
|
|
H=yes,
|
|
'$via1_multi_hash_passive/2-1'(C,M),
|
|
'chr sbag_member'(K,M),
|
|
K=suspension(_,mutable(active),_,_,_,_,_,L),
|
|
L==D,
|
|
'$via1_multi_hash_stored_complete/3-1'(A,Q),
|
|
'chr sbag_member'(N,Q),
|
|
N=suspension(_,mutable(active),_,_,_,_,_,O,P),
|
|
B<O ->
|
|
remove_constraint_internal(I,_,R),
|
|
( R==yes ->
|
|
'$delete_from_store_stored/3'(I)
|
|
;
|
|
true
|
|
),
|
|
remove_constraint_internal(N,_,S),
|
|
( S==yes ->
|
|
'$delete_from_store_stored_complete/3'(N)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(U,_,E,V),
|
|
( U==yes ->
|
|
'$insert_in_store_occurrence/4'(E)
|
|
;
|
|
true
|
|
),
|
|
T is P-1,
|
|
stored(A,B,maybe),
|
|
stored_complete(A,O,T),
|
|
( E=suspension(_,mutable(active),_,mutable(V),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__9__0'(J,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__9__0'(J,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__9'(A,B,C,D,E) :-
|
|
'occurrence/4__10'(A,B,C,D,E).
|
|
'occurrence/4__10'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_occurrence/4-3'(C,F),
|
|
!,
|
|
'occurrence/4__10__0'(F,A,B,C,D,E).
|
|
'occurrence/4__10__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__11'(A,B,C,D,E).
|
|
'occurrence/4__10__0'([H|J],A,B,C,D,E) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,F,_,G,_),
|
|
G==C,
|
|
'$via1_multi_hash_max_occurrence/2-1'(F,I) ->
|
|
'occurrence/4__10__1'(I,F,H,J,A,B,C,D,E)
|
|
;
|
|
'occurrence/4__10__0'(J,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__10__1'([],_,_,F,A,B,C,D,E) :-
|
|
'occurrence/4__10__0'(F,A,B,C,D,E).
|
|
'occurrence/4__10__1'([K|M],G,A,H,B,C,D,E,F) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,I,J),
|
|
I==G,
|
|
'$via1_multi_hash_stored_complete/3-1'(G,L) ->
|
|
'occurrence/4__10__2'(L,J,K,M,G,A,H,B,C,D,E,F)
|
|
;
|
|
'occurrence/4__10__1'(M,G,A,H,B,C,D,E,F)
|
|
).
|
|
'occurrence/4__10__2'([],_,_,I,F,G,H,A,B,C,D,E) :-
|
|
'occurrence/4__10__1'(I,F,G,H,A,B,C,D,E).
|
|
'occurrence/4__10__2'([O|P],J,A,K,H,B,I,C,D,E,F,G) :-
|
|
( O=suspension(_,mutable(active),_,_,_,_,L,M,N),
|
|
L==H,
|
|
N=0,
|
|
S=t(90,G,B,O,A),
|
|
'chr novel_production'(G,S),
|
|
'chr novel_production'(B,S),
|
|
'chr novel_production'(O,S),
|
|
'chr novel_production'(A,S),
|
|
M=<J ->
|
|
'chr extend_history'(G,S),
|
|
activate_constraint(Q,_,G,R),
|
|
( Q==yes ->
|
|
'$insert_in_store_occurrence/4'(G)
|
|
;
|
|
true
|
|
),
|
|
passive(E,F),
|
|
( G=suspension(_,mutable(active),_,mutable(R),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__10__2'(P,J,A,K,H,B,I,C,D,E,F,G)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__10__2'(P,J,A,K,H,B,I,C,D,E,F,G)
|
|
).
|
|
'occurrence/4__10'(A,B,C,D,E) :-
|
|
'occurrence/4__11'(A,B,C,D,E).
|
|
'occurrence/4__11'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_occurrence/4-3'(C,F),
|
|
!,
|
|
'occurrence/4__11__0'(F,A,B,C,D,E).
|
|
'occurrence/4__11__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__12'(A,B,C,D,E).
|
|
'occurrence/4__11__0'([H|J],A,B,C,D,E) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,_,_,F,G),
|
|
F==C,
|
|
'$via1_multi_hash_max_occurrence/2-1'(A,I) ->
|
|
'occurrence/4__11__1'(I,G,H,J,A,B,C,D,E)
|
|
;
|
|
'occurrence/4__11__0'(J,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__11__1'([],_,_,F,A,B,C,D,E) :-
|
|
'occurrence/4__11__0'(F,A,B,C,D,E).
|
|
'occurrence/4__11__1'([K|M],G,A,H,B,C,D,E,F) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,I,J),
|
|
I==B,
|
|
'$via1_multi_hash_stored_complete/3-1'(B,L) ->
|
|
'occurrence/4__11__2'(L,J,K,M,G,A,H,B,C,D,E,F)
|
|
;
|
|
'occurrence/4__11__1'(M,G,A,H,B,C,D,E,F)
|
|
).
|
|
'occurrence/4__11__2'([],_,_,I,F,G,H,A,B,C,D,E) :-
|
|
'occurrence/4__11__1'(I,F,G,H,A,B,C,D,E).
|
|
'occurrence/4__11__2'([O|P],J,A,K,H,B,I,C,D,E,F,G) :-
|
|
( O=suspension(_,mutable(active),_,_,_,_,L,M,N),
|
|
L==C,
|
|
N=0,
|
|
S=t(90,B,G,O,A),
|
|
'chr novel_production'(B,S),
|
|
'chr novel_production'(G,S),
|
|
'chr novel_production'(O,S),
|
|
'chr novel_production'(A,S),
|
|
M=<J ->
|
|
'chr extend_history'(G,S),
|
|
activate_constraint(Q,_,G,R),
|
|
( Q==yes ->
|
|
'$insert_in_store_occurrence/4'(G)
|
|
;
|
|
true
|
|
),
|
|
passive(E,H),
|
|
( G=suspension(_,mutable(active),_,mutable(R),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__11__2'(P,J,A,K,H,B,I,C,D,E,F,G)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__11__2'(P,J,A,K,H,B,I,C,D,E,F,G)
|
|
).
|
|
'occurrence/4__11'(A,B,C,D,E) :-
|
|
'occurrence/4__12'(A,B,C,D,E).
|
|
'occurrence/4__12'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_stored_complete/3-1'(A,F),
|
|
!,
|
|
'occurrence/4__12__0'(F,A,B,C,D,E).
|
|
'occurrence/4__12__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__13'(A,B,C,D,E).
|
|
'occurrence/4__12__0'([H|I],A,B,C,D,E) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,F,G,_),
|
|
F==A,
|
|
L=t(99,H,E),
|
|
'chr novel_production'(H,L),
|
|
'chr novel_production'(E,L),
|
|
B>G ->
|
|
'chr extend_history'(E,L),
|
|
activate_constraint(J,_,E,K),
|
|
( J==yes ->
|
|
'$insert_in_store_occurrence/4'(E)
|
|
;
|
|
true
|
|
),
|
|
passive(C,D),
|
|
( E=suspension(_,mutable(active),_,mutable(K),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__12__0'(I,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__12__0'(I,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__12'(A,B,C,D,E) :-
|
|
'occurrence/4__13'(A,B,C,D,E).
|
|
'occurrence/4__13'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_functional_dependency/4-1'(A,F),
|
|
!,
|
|
'occurrence/4__13__0'(F,A,B,C,D,E).
|
|
'occurrence/4__13__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__14'(A,B,C,D,E).
|
|
'occurrence/4__13__0'([J|K],A,B,C,D,E) :-
|
|
( J=suspension(_,mutable(active),_,_,_,_,F,G,H,I),
|
|
F==A,
|
|
G==C,
|
|
C>1,
|
|
'$via1_multi_hash_allocation_occurrence/2-1'(A,N),
|
|
'chr sbag_member'(L,N),
|
|
L=suspension(_,mutable(active),_,_,_,_,_,M),
|
|
M>B ->
|
|
remove_constraint_internal(J,_,O),
|
|
( O==yes ->
|
|
'$delete_from_store_functional_dependency/4'(J)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(P,_,E,Q),
|
|
( P==yes ->
|
|
'$insert_in_store_occurrence/4'(E)
|
|
;
|
|
true
|
|
),
|
|
functional_dependency(A,1,H,I),
|
|
( E=suspension(_,mutable(active),_,mutable(Q),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__13__0'(K,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__13__0'(K,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__13'(A,B,C,D,E) :-
|
|
'occurrence/4__14'(A,B,C,D,E).
|
|
'occurrence/4__14'(A,B,C,D,E) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:call_pattern/1',F),
|
|
!,
|
|
'occurrence/4__14__0'(F,A,B,C,D,E).
|
|
'occurrence/4__14__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__15'(A,B,C,D,E).
|
|
'occurrence/4__14__0'([G|M],A,B,C,D,E) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,F),
|
|
F=odom(H,I),
|
|
H=occ(J,K),
|
|
J==A,
|
|
K==B,
|
|
'$via1_multi_hash_rule/2-1'(C,L) ->
|
|
'occurrence/4__14__1'(L,I,G,M,A,B,C,D,E)
|
|
;
|
|
'occurrence/4__14__0'(M,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__14__1'([],_,_,F,A,B,C,D,E) :-
|
|
'occurrence/4__14__0'(F,A,B,C,D,E).
|
|
'occurrence/4__14__1'([K|M],G,A,H,B,C,D,E,F) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,I,J),
|
|
I==D,
|
|
nb_getval('$chr_store_global_ground_chr_translate:abstract_constraints/1',L) ->
|
|
'occurrence/4__14__2'(L,J,K,M,G,A,H,B,C,D,E,F)
|
|
;
|
|
'occurrence/4__14__1'(M,G,A,H,B,C,D,E,F)
|
|
).
|
|
'occurrence/4__14__2'([],_,_,I,G,F,H,A,B,C,D,E) :-
|
|
'occurrence/4__14__1'(I,G,F,H,A,B,C,D,E).
|
|
'occurrence/4__14__2'([M|N],J,A,K,H,B,I,C,D,E,F,G) :-
|
|
( M=suspension(_,mutable(active),_,_,_,_,L),
|
|
C1=t(140,B,M,G,A),
|
|
'chr novel_production'(B,C1),
|
|
'chr novel_production'(M,C1),
|
|
'chr novel_production'(G,C1),
|
|
'chr novel_production'(A,C1),
|
|
J=pragma(rule(O,P,_,Q),ids(R,_),_,_,_),
|
|
memberchk_eq(F,R) ->
|
|
'chr extend_history'(G,C1),
|
|
activate_constraint(A1,_,G,B1),
|
|
( A1==yes ->
|
|
'$insert_in_store_occurrence/4'(G)
|
|
;
|
|
true
|
|
),
|
|
select2(F,_,R,O,_,S),
|
|
ai_observation_abstract_constraints(S,L,T),
|
|
ai_observation_observe_list(odom([],H),T,odom([],U)),
|
|
ai_observation_abstract_constraints(P,L,V),
|
|
ai_observation_observe_list(odom([],U),V,odom([],W)),
|
|
ai_observation_abstract_goal(Q,L,X),
|
|
call_pattern(odom(X,W)),
|
|
Y is D+1,
|
|
Z=odom(occ(C,Y),H),
|
|
call_pattern(Z),
|
|
depends_on_as(odom(occ(C,D),H),odom(X,W),Z),
|
|
( G=suspension(_,mutable(active),_,mutable(B1),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__14__2'(N,J,A,K,H,B,I,C,D,E,F,G)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__14__2'(N,J,A,K,H,B,I,C,D,E,F,G)
|
|
).
|
|
'occurrence/4__14'(A,B,C,D,E) :-
|
|
'occurrence/4__15'(A,B,C,D,E).
|
|
'occurrence/4__15'(A,B,C,D,E) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:call_pattern/1',F),
|
|
!,
|
|
'occurrence/4__15__0'(F,A,B,C,D,E).
|
|
'occurrence/4__15__0'([],A,B,C,D,E) :-
|
|
'occurrence/4__16'(A,B,C,D,E).
|
|
'occurrence/4__15__0'([G|M],A,B,C,D,E) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,F),
|
|
F=odom(H,I),
|
|
H=occ(J,K),
|
|
J==A,
|
|
K==B,
|
|
'$via1_multi_hash_rule/2-1'(C,L) ->
|
|
'occurrence/4__15__1'(L,I,G,M,A,B,C,D,E)
|
|
;
|
|
'occurrence/4__15__0'(M,A,B,C,D,E)
|
|
).
|
|
'occurrence/4__15__1'([],_,_,F,A,B,C,D,E) :-
|
|
'occurrence/4__15__0'(F,A,B,C,D,E).
|
|
'occurrence/4__15__1'([K|M],G,A,H,B,C,D,E,F) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,I,J),
|
|
I==D,
|
|
nb_getval('$chr_store_global_ground_chr_translate:abstract_constraints/1',L) ->
|
|
'occurrence/4__15__2'(L,J,K,M,G,A,H,B,C,D,E,F)
|
|
;
|
|
'occurrence/4__15__1'(M,G,A,H,B,C,D,E,F)
|
|
).
|
|
'occurrence/4__15__2'([],_,_,I,G,F,H,A,B,C,D,E) :-
|
|
'occurrence/4__15__1'(I,G,F,H,A,B,C,D,E).
|
|
'occurrence/4__15__2'([M|N],J,A,K,H,B,I,C,D,E,F,G) :-
|
|
( M=suspension(_,mutable(active),_,_,_,_,L),
|
|
E1=t(142,B,M,G,A),
|
|
'chr novel_production'(B,E1),
|
|
'chr novel_production'(M,E1),
|
|
'chr novel_production'(G,E1),
|
|
'chr novel_production'(A,E1),
|
|
J=pragma(rule(O,P,_,Q),ids(_,R),_,_,_),
|
|
memberchk_eq(F,R) ->
|
|
'chr extend_history'(G,E1),
|
|
activate_constraint(C1,_,G,D1),
|
|
( C1==yes ->
|
|
'$insert_in_store_occurrence/4'(G)
|
|
;
|
|
true
|
|
),
|
|
select2(F,_,R,P,_,S),
|
|
ai_observation_abstract_constraints(S,L,T),
|
|
ai_observation_observe_list(odom([],H),T,odom([],U)),
|
|
ai_observation_abstract_constraints(O,L,V),
|
|
ai_observation_observe_list(odom([],U),V,odom([],W)),
|
|
ord_add_element(W,C,X),
|
|
ai_observation_abstract_goal(Q,L,Y),
|
|
call_pattern(odom(Y,X)),
|
|
( ord_memberchk(C,W) ->
|
|
Z=no
|
|
;
|
|
Z=yes
|
|
),
|
|
A1 is D+1,
|
|
B1=odom(occ(C,A1),H),
|
|
call_pattern(B1),
|
|
depends_on_ap(odom(occ(C,D),H),odom(Y,X),B1,Z),
|
|
( G=suspension(_,mutable(active),_,mutable(D1),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'occurrence/4__15__2'(N,J,A,K,H,B,I,C,D,E,F,G)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'occurrence/4__15__2'(N,J,A,K,H,B,I,C,D,E,F,G)
|
|
).
|
|
'occurrence/4__15'(A,B,C,D,E) :-
|
|
'occurrence/4__16'(A,B,C,D,E).
|
|
'occurrence/4__16'(_,_,_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_occurrence/4'(A)
|
|
;
|
|
true
|
|
).
|
|
get_occurrence(A,B,C,D) :-
|
|
'$via1_multi_hash_occurrence/4-1'(A,I),
|
|
'chr sbag_member'(E,I),
|
|
E=suspension(_,mutable(active),_,_,_,_,_,F,G,H),
|
|
F==B,
|
|
!,
|
|
G=C,
|
|
H=D.
|
|
get_occurrence(A,B,_,_) :-
|
|
format('get_occurrence: missing occurrence ~w:~w
|
|
',[A,B]),
|
|
fail.
|
|
max_occurrence(A,B) :-
|
|
'max_occurrence/2__0'(A,B,_).
|
|
'max_occurrence/2__0'(A,B,_) :-
|
|
'$via1_multi_hash_max_occurrence/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
D>=B,
|
|
!.
|
|
'max_occurrence/2__0'(A,B,C) :-
|
|
'$via1_multi_hash_max_occurrence/2-1'(A,D),
|
|
!,
|
|
'max_occurrence/2__0__0'(D,A,B,C).
|
|
'max_occurrence/2__0__0'([],A,B,C) :-
|
|
'max_occurrence/2__1'(A,B,C).
|
|
'max_occurrence/2__0__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==A,
|
|
B>=E ->
|
|
remove_constraint_internal(F,_,H),
|
|
( H==yes ->
|
|
'$delete_from_store_max_occurrence/2'(F)
|
|
;
|
|
true
|
|
),
|
|
'max_occurrence/2__0__0'(G,A,B,C)
|
|
;
|
|
'max_occurrence/2__0__0'(G,A,B,C)
|
|
).
|
|
'max_occurrence/2__0'(A,B,C) :-
|
|
'max_occurrence/2__1'(A,B,C).
|
|
'max_occurrence/2__1'(A,B,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:occurrence/4',D),
|
|
!,
|
|
allocate_constraint(true,C,max_occurrence(A,B),[A,B]),
|
|
'max_occurrence/2__1__0'(D,A,B,C).
|
|
'max_occurrence/2__1__0'([],A,B,C) :-
|
|
'max_occurrence/2__2'(A,B,C).
|
|
'max_occurrence/2__1__0'([F|H],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,_,_,D,E),
|
|
'$via1_multi_hash_stored_complete/3-1'(A,G) ->
|
|
'max_occurrence/2__1__1'(G,D,E,F,H,A,B,C)
|
|
;
|
|
'max_occurrence/2__1__0'(H,A,B,C)
|
|
).
|
|
'max_occurrence/2__1__1'([],_,_,_,D,A,B,C) :-
|
|
'max_occurrence/2__1__0'(D,A,B,C).
|
|
'max_occurrence/2__1__1'([K|M],E,F,A,G,B,C,D) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,H,I,J),
|
|
H==B,
|
|
J=0,
|
|
'$via1_multi_hash_occurrence/4-1'(B,L) ->
|
|
'max_occurrence/2__1__2'(L,I,K,M,E,F,A,G,B,C,D)
|
|
;
|
|
'max_occurrence/2__1__1'(M,E,F,A,G,B,C,D)
|
|
).
|
|
'max_occurrence/2__1__2'([],_,_,H,D,E,F,G,A,B,C) :-
|
|
'max_occurrence/2__1__1'(H,D,E,F,G,A,B,C).
|
|
'max_occurrence/2__1__2'([M|N],I,A,J,F,G,B,H,C,D,E) :-
|
|
( M=suspension(_,mutable(active),_,_,_,_,K,_,L,_),
|
|
M\==B,
|
|
K==C,
|
|
L==F,
|
|
Q=t(90,B,M,A,E),
|
|
'chr novel_production'(B,Q),
|
|
'chr novel_production'(M,Q),
|
|
'chr novel_production'(A,Q),
|
|
'chr novel_production'(E,Q),
|
|
I=<D ->
|
|
'chr extend_history'(E,Q),
|
|
activate_constraint(O,_,E,P),
|
|
( O==yes ->
|
|
'$insert_in_store_max_occurrence/2'(E)
|
|
;
|
|
true
|
|
),
|
|
passive(F,G),
|
|
( E=suspension(_,mutable(active),_,mutable(P),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'max_occurrence/2__1__2'(N,I,A,J,F,G,B,H,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'max_occurrence/2__1__2'(N,I,A,J,F,G,B,H,C,D,E)
|
|
).
|
|
'max_occurrence/2__1'(A,B,C) :-
|
|
allocate_constraint(true,C,max_occurrence(A,B),[A,B]),
|
|
'max_occurrence/2__2'(A,B,C).
|
|
'max_occurrence/2__2'(A,B,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:call_pattern/1',D),
|
|
!,
|
|
'max_occurrence/2__2__0'(D,A,B,C).
|
|
'max_occurrence/2__2__0'([],A,B,C) :-
|
|
'max_occurrence/2__3'(A,B,C).
|
|
'max_occurrence/2__2__0'([E|F],A,B,C) :-
|
|
( E=suspension(_,mutable(active),_,_,_,_,D),
|
|
D=odom(G,H),
|
|
G=occ(I,J),
|
|
I==A,
|
|
M=t(138,E,C),
|
|
'chr novel_production'(E,M),
|
|
'chr novel_production'(C,M),
|
|
J>B ->
|
|
'chr extend_history'(C,M),
|
|
activate_constraint(K,_,C,L),
|
|
( K==yes ->
|
|
'$insert_in_store_max_occurrence/2'(C)
|
|
;
|
|
true
|
|
),
|
|
final_answer_pattern(odom(occ(A,J),H),odom([],H)),
|
|
( C=suspension(_,mutable(active),_,mutable(L),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'max_occurrence/2__2__0'(F,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'max_occurrence/2__2__0'(F,A,B,C)
|
|
).
|
|
'max_occurrence/2__2'(A,B,C) :-
|
|
'max_occurrence/2__3'(A,B,C).
|
|
'max_occurrence/2__3'(_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_max_occurrence/2'(A)
|
|
;
|
|
true
|
|
).
|
|
get_max_occurrence(A,B) :-
|
|
'$via1_multi_hash_max_occurrence/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
!,
|
|
B=D.
|
|
get_max_occurrence(A,B) :-
|
|
format('WARNING: get_max_occurrence: missing max occurrence for ~w
|
|
',[A]),
|
|
B=0.
|
|
allocation_occurrence(A,B) :-
|
|
'allocation_occurrence/2__0'(A,B,_).
|
|
'allocation_occurrence/2__0'(A,B,_) :-
|
|
'$via1_multi_hash_occurrence/4-1'(A,G),
|
|
'chr sbag_member'(C,G),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D,E,F),
|
|
D=B,
|
|
'$via1_multi_hash_passive/2-1'(E,J),
|
|
'chr sbag_member'(H,J),
|
|
H=suspension(_,mutable(active),_,_,_,_,_,I),
|
|
I=F,
|
|
!,
|
|
K is B+1,
|
|
allocation_occurrence(A,K).
|
|
'allocation_occurrence/2__0'(A,B,_) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule/2',F),
|
|
'chr sbag_member'(C,F),
|
|
C=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
'$via1_multi_hash_occurrence/4-1'(A,K),
|
|
'chr sbag_member'(G,K),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,H,I,J),
|
|
H=B,
|
|
I=D,
|
|
E=pragma(_,ids(L,_),_,_,_),
|
|
member(J,L),
|
|
!,
|
|
M is B+1,
|
|
allocation_occurrence(A,M).
|
|
'allocation_occurrence/2__0'(A,B,_) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule/2',F),
|
|
'chr sbag_member'(C,F),
|
|
C=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
'$via1_multi_hash_occurrence/4-1'(A,J),
|
|
'chr sbag_member'(G,J),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,H,I,_),
|
|
H=B,
|
|
I=D,
|
|
E=pragma(rule([_|_],_,_,true),_,_,_,_),
|
|
!,
|
|
K is B+1,
|
|
allocation_occurrence(A,K).
|
|
'allocation_occurrence/2__0'(A,B,_) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule/2',F),
|
|
'chr sbag_member'(C,F),
|
|
C=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
'$via1_multi_hash_occurrence/4-1'(A,J),
|
|
'chr sbag_member'(G,J),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,H,I,_),
|
|
H=B,
|
|
I=D,
|
|
E=pragma(rule([_|_],_,_,_),_,_,_,_),
|
|
\+is_observed(A,B),
|
|
!,
|
|
K is B+1,
|
|
allocation_occurrence(A,K).
|
|
'allocation_occurrence/2__0'(A,B,_) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule/2',F),
|
|
'chr sbag_member'(C,F),
|
|
C=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
'$via1_multi_hash_occurrence/4-1'(A,M),
|
|
'chr sbag_member'(J,M),
|
|
J=suspension(_,mutable(active),_,_,_,_,_,K,L,_),
|
|
K=B,
|
|
L=D,
|
|
'$via1_multi_hash_least_occurrence/2-1'(D,I),
|
|
'chr sbag_member'(G,I),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,H),
|
|
H=[],
|
|
E=pragma(rule([],_,_,_),_,_,_,_),
|
|
\+is_observed(A,B),
|
|
!,
|
|
N is B+1,
|
|
allocation_occurrence(A,N).
|
|
'allocation_occurrence/2__0'(A,B,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:least_occurrence/2',D),
|
|
!,
|
|
allocate_constraint(true,C,allocation_occurrence(A,B),[A,B]),
|
|
'allocation_occurrence/2__0__0'(D,A,B,C).
|
|
'allocation_occurrence/2__0__0'([],A,B,C) :-
|
|
'allocation_occurrence/2__1'(A,B,C).
|
|
'allocation_occurrence/2__0__0'([F|I],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
E=[G|H],
|
|
'$via1_multi_hash_occurrence/4-1'(A,N),
|
|
'chr sbag_member'(J,N),
|
|
J=suspension(_,mutable(active),_,_,_,_,_,K,L,M),
|
|
L==D,
|
|
M==G,
|
|
B>=K,
|
|
'$via1_multi_hash_rule/2-1'(D,P),
|
|
'chr sbag_member'(O,P),
|
|
O=suspension(_,mutable(active),_,_,_,_,_,_),
|
|
\+may_trigger(A) ->
|
|
remove_constraint_internal(F,_,Q),
|
|
( Q==yes ->
|
|
'$delete_from_store_least_occurrence/2'(F)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(R,_,C,S),
|
|
( R==yes ->
|
|
'$insert_in_store_allocation_occurrence/2'(C)
|
|
;
|
|
true
|
|
),
|
|
least_occurrence(D,H),
|
|
( C=suspension(_,mutable(active),_,mutable(S),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'allocation_occurrence/2__0__0'(I,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'allocation_occurrence/2__0__0'(I,A,B,C)
|
|
).
|
|
'allocation_occurrence/2__0'(A,B,C) :-
|
|
allocate_constraint(true,C,allocation_occurrence(A,B),[A,B]),
|
|
'allocation_occurrence/2__1'(A,B,C).
|
|
'allocation_occurrence/2__1'(A,B,C) :-
|
|
'$via1_multi_hash_functional_dependency/4-1'(A,D),
|
|
!,
|
|
'allocation_occurrence/2__1__0'(D,A,B,C).
|
|
'allocation_occurrence/2__1__0'([],A,B,C) :-
|
|
'allocation_occurrence/2__2'(A,B,C).
|
|
'allocation_occurrence/2__1__0'([H|I],A,B,C) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,D,E,F,G),
|
|
D==A,
|
|
E>1,
|
|
'$via1_multi_hash_occurrence/4-1'(A,M),
|
|
'chr sbag_member'(J,M),
|
|
J=suspension(_,mutable(active),_,_,_,_,_,K,L,_),
|
|
L==E,
|
|
B>K ->
|
|
remove_constraint_internal(H,_,N),
|
|
( N==yes ->
|
|
'$delete_from_store_functional_dependency/4'(H)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(O,_,C,P),
|
|
( O==yes ->
|
|
'$insert_in_store_allocation_occurrence/2'(C)
|
|
;
|
|
true
|
|
),
|
|
functional_dependency(A,1,F,G),
|
|
( C=suspension(_,mutable(active),_,mutable(P),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'allocation_occurrence/2__1__0'(I,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'allocation_occurrence/2__1__0'(I,A,B,C)
|
|
).
|
|
'allocation_occurrence/2__1'(A,B,C) :-
|
|
'allocation_occurrence/2__2'(A,B,C).
|
|
'allocation_occurrence/2__2'(_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_allocation_occurrence/2'(A)
|
|
;
|
|
true
|
|
).
|
|
get_allocation_occurrence(A,B) :-
|
|
'$via1_multi_hash_allocation_occurrence/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
!,
|
|
B=D.
|
|
get_allocation_occurrence(_,A) :-
|
|
chr_pp_flag(late_allocation,off),
|
|
A=0.
|
|
rule(A,B) :-
|
|
'rule/2__0'(A,B,_).
|
|
'rule/2__0'(A,B,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:allocation_occurrence/2',D),
|
|
!,
|
|
allocate_constraint(true,C,rule(A,B),[A,B]),
|
|
'rule/2__0__0'(D,A,B,C).
|
|
'rule/2__0__0'([],A,B,C) :-
|
|
'rule/2__1'(A,B,C).
|
|
'rule/2__0__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
'$via1_multi_hash_occurrence/4-1'(D,L),
|
|
'chr sbag_member'(H,L),
|
|
H=suspension(_,mutable(active),_,_,_,_,_,I,J,K),
|
|
I==E,
|
|
J==A,
|
|
B=pragma(_,ids(N,_),_,_,_),
|
|
member(K,N) ->
|
|
remove_constraint_internal(F,_,M),
|
|
( M==yes ->
|
|
'$delete_from_store_allocation_occurrence/2'(F)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(P,_,C,Q),
|
|
( P==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
O is E+1,
|
|
allocation_occurrence(D,O),
|
|
( C=suspension(_,mutable(active),_,mutable(Q),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__0__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__0__0'(G,A,B,C)
|
|
).
|
|
'rule/2__0'(A,B,C) :-
|
|
allocate_constraint(true,C,rule(A,B),[A,B]),
|
|
'rule/2__1'(A,B,C).
|
|
'rule/2__1'(A,B,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:allocation_occurrence/2',D),
|
|
!,
|
|
'rule/2__1__0'(D,A,B,C).
|
|
'rule/2__1__0'([],A,B,C) :-
|
|
'rule/2__2'(A,B,C).
|
|
'rule/2__1__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
'$via1_multi_hash_occurrence/4-1'(D,K),
|
|
'chr sbag_member'(H,K),
|
|
H=suspension(_,mutable(active),_,_,_,_,_,I,J,_),
|
|
I==E,
|
|
J==A,
|
|
B=pragma(rule([_|_],_,_,true),_,_,_,_) ->
|
|
remove_constraint_internal(F,_,L),
|
|
( L==yes ->
|
|
'$delete_from_store_allocation_occurrence/2'(F)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(N,_,C,O),
|
|
( N==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
M is E+1,
|
|
allocation_occurrence(D,M),
|
|
( C=suspension(_,mutable(active),_,mutable(O),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__1__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__1__0'(G,A,B,C)
|
|
).
|
|
'rule/2__1'(A,B,C) :-
|
|
'rule/2__2'(A,B,C).
|
|
'rule/2__2'(A,B,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:allocation_occurrence/2',D),
|
|
!,
|
|
'rule/2__2__0'(D,A,B,C).
|
|
'rule/2__2__0'([],A,B,C) :-
|
|
'rule/2__3'(A,B,C).
|
|
'rule/2__2__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
'$via1_multi_hash_occurrence/4-1'(D,K),
|
|
'chr sbag_member'(H,K),
|
|
H=suspension(_,mutable(active),_,_,_,_,_,I,J,_),
|
|
I==E,
|
|
J==A,
|
|
B=pragma(rule([_|_],_,_,_),_,_,_,_),
|
|
\+is_observed(D,E) ->
|
|
remove_constraint_internal(F,_,L),
|
|
( L==yes ->
|
|
'$delete_from_store_allocation_occurrence/2'(F)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(N,_,C,O),
|
|
( N==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
M is E+1,
|
|
allocation_occurrence(D,M),
|
|
( C=suspension(_,mutable(active),_,mutable(O),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__2__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__2__0'(G,A,B,C)
|
|
).
|
|
'rule/2__2'(A,B,C) :-
|
|
'rule/2__3'(A,B,C).
|
|
'rule/2__3'(A,B,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:allocation_occurrence/2',D),
|
|
!,
|
|
'rule/2__3__0'(D,A,B,C).
|
|
'rule/2__3__0'([],A,B,C) :-
|
|
'rule/2__4'(A,B,C).
|
|
'rule/2__3__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
'$via1_multi_hash_least_occurrence/2-1'(A,J),
|
|
'chr sbag_member'(H,J),
|
|
H=suspension(_,mutable(active),_,_,_,_,_,I),
|
|
I=[],
|
|
'$via1_multi_hash_occurrence/4-1'(D,N),
|
|
'chr sbag_member'(K,N),
|
|
K=suspension(_,mutable(active),_,_,_,_,_,L,M,_),
|
|
L==E,
|
|
M==A,
|
|
B=pragma(rule([],_,_,_),_,_,_,_),
|
|
\+is_observed(D,E) ->
|
|
remove_constraint_internal(F,_,O),
|
|
( O==yes ->
|
|
'$delete_from_store_allocation_occurrence/2'(F)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(Q,_,C,R),
|
|
( Q==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
P is E+1,
|
|
allocation_occurrence(D,P),
|
|
( C=suspension(_,mutable(active),_,mutable(R),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__3__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__3__0'(G,A,B,C)
|
|
).
|
|
'rule/2__3'(A,B,C) :-
|
|
'rule/2__4'(A,B,C).
|
|
'rule/2__4'(A,B,C) :-
|
|
'$via1_multi_hash_least_occurrence/2-1'(A,D),
|
|
!,
|
|
'rule/2__4__0'(D,A,B,C).
|
|
'rule/2__4__0'([],A,B,C) :-
|
|
'rule/2__5'(A,B,C).
|
|
'rule/2__4__0'([F|I],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==A,
|
|
E=[G|H],
|
|
nb_getval('$chr_store_global_ground_chr_translate:allocation_occurrence/2',M),
|
|
'chr sbag_member'(J,M),
|
|
J=suspension(_,mutable(active),_,_,_,_,K,L),
|
|
'$via1_multi_hash_occurrence/4-1'(K,R),
|
|
'chr sbag_member'(N,R),
|
|
N=suspension(_,mutable(active),_,_,_,_,_,O,P,Q),
|
|
P==A,
|
|
Q==G,
|
|
L>=O,
|
|
\+may_trigger(K) ->
|
|
remove_constraint_internal(F,_,S),
|
|
( S==yes ->
|
|
'$delete_from_store_least_occurrence/2'(F)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(T,_,C,U),
|
|
( T==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
least_occurrence(A,H),
|
|
( C=suspension(_,mutable(active),_,mutable(U),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__4__0'(I,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__4__0'(I,A,B,C)
|
|
).
|
|
'rule/2__4'(A,B,C) :-
|
|
'rule/2__5'(A,B,C).
|
|
'rule/2__5'(A,B,C) :-
|
|
'$via1_multi_hash_least_occurrence/2-1'(A,D),
|
|
!,
|
|
'rule/2__5__0'(D,A,B,C).
|
|
'rule/2__5__0'([],A,B,C) :-
|
|
'rule/2__6'(A,B,C).
|
|
'rule/2__5__0'([F|I],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==A,
|
|
E=[G|H],
|
|
'$via1_multi_hash_passive/2-1'(A,L),
|
|
'chr sbag_member'(J,L),
|
|
J=suspension(_,mutable(active),_,_,_,_,_,K),
|
|
K==G ->
|
|
remove_constraint_internal(F,_,M),
|
|
( M==yes ->
|
|
'$delete_from_store_least_occurrence/2'(F)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(N,_,C,O),
|
|
( N==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
least_occurrence(A,H),
|
|
( C=suspension(_,mutable(active),_,mutable(O),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__5__0'(I,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__5__0'(I,A,B,C)
|
|
).
|
|
'rule/2__5'(A,B,C) :-
|
|
'rule/2__6'(A,B,C).
|
|
'rule/2__6'(A,B,C) :-
|
|
B=pragma(rule([],_,_,_),ids([],D),_,_,_),
|
|
!,
|
|
activate_constraint(E,_,C,F),
|
|
( E==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
least_occurrence(A,D),
|
|
( C=suspension(_,mutable(active),_,mutable(F),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__7'(A,B,C)
|
|
;
|
|
true
|
|
).
|
|
'rule/2__6'(A,B,C) :-
|
|
'rule/2__7'(A,B,C).
|
|
'rule/2__7'(A,B,C) :-
|
|
'$via1_multi_hash_prev_guard_list/7-2'(A,D),
|
|
!,
|
|
'rule/2__7__0'(D,A,B,C).
|
|
'rule/2__7__0'([],A,B,C) :-
|
|
'rule/2__8'(A,B,C).
|
|
'rule/2__7__0'([K|L],A,B,C) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,D,E,F,G,H,I,J),
|
|
E==A,
|
|
B=pragma(rule(N,O,P,_),_,_,_,A),
|
|
N\==[],
|
|
append(N,O,Q),
|
|
make_head_matchings_explicit(Q,R,S),
|
|
term_variables(R+F,T),
|
|
strip_attributes(T,U),
|
|
setof(V,chr_translate:head_subset(R,F,V),W),
|
|
restore_attributes(T,U),
|
|
W\=[] ->
|
|
remove_constraint_internal(K,_,M),
|
|
( M==yes ->
|
|
'$delete_from_store_prev_guard_list/7'(K)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(G1,_,C,H1),
|
|
( G1==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
compute_derived_info(S,W,R,Q,P,I,F,J,X,Y),
|
|
append(H,X,Z),
|
|
list2conj(Z,A1),
|
|
conj2list(A1,B1),
|
|
append(Y,J,C1),
|
|
list2conj(C1,D1),
|
|
conj2list(D1,E1),
|
|
F1 is A-1,
|
|
prev_guard_list(D,F1,F,G,B1,I,E1),
|
|
( C=suspension(_,mutable(active),_,mutable(H1),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__7__0'(L,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__7__0'(L,A,B,C)
|
|
).
|
|
'rule/2__7'(A,B,C) :-
|
|
'rule/2__8'(A,B,C).
|
|
'rule/2__8'(A,B,C) :-
|
|
'$via1_multi_hash_prev_guard_list/7-1'(A,J),
|
|
'chr sbag_member'(D,J),
|
|
D=suspension(_,mutable(active),_,_,_,_,_,E,F,G,H,I,_),
|
|
E=0,
|
|
B=pragma(rule(N,O,G,P),K,L,M,A),
|
|
G\==true,
|
|
append(I,H,Q),
|
|
simplify_guard(G,P,Q,R,S),
|
|
G\==R,
|
|
!,
|
|
remove_constraint_internal(D,_,T),
|
|
( T==yes ->
|
|
'$delete_from_store_prev_guard_list/7'(D)
|
|
;
|
|
true
|
|
),
|
|
( var(C) ->
|
|
true
|
|
;
|
|
remove_constraint_internal(C,_,U),
|
|
( U==yes ->
|
|
'$delete_from_store_rule/2'(C)
|
|
;
|
|
true
|
|
)
|
|
),
|
|
rule(A,pragma(rule(N,O,R,S),K,L,M,A)),
|
|
prev_guard_list(A,0,F,R,H,I,[]).
|
|
'rule/2__8'(A,B,C) :-
|
|
'$via1_multi_hash_prev_guard_list/7-1'(A,D),
|
|
!,
|
|
'rule/2__8__0'(D,A,B,C).
|
|
'rule/2__8__0'([],A,B,C) :-
|
|
'rule/2__9'(A,B,C).
|
|
'rule/2__8__0'([I|J],A,B,C) :-
|
|
( I=suspension(_,mutable(active),_,_,_,_,D,E,_,F,G,H,_),
|
|
D==A,
|
|
E=0,
|
|
chr_pp_flag(check_impossible_rules,on),
|
|
B=pragma(rule(_,_,F,_),_,_,_,A),
|
|
append(H,G,L),
|
|
guard_entailment:entails_guard(L,fail) ->
|
|
remove_constraint_internal(I,_,K),
|
|
( K==yes ->
|
|
'$delete_from_store_prev_guard_list/7'(I)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(M,_,C,N),
|
|
( M==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
format('CHR compiler WARNING: heads will never match in ~@.
|
|
',[format_rule(B)]),
|
|
format(' `--> In the refined operational semantics (rules applied in textual order)
|
|
',[]),
|
|
format(' this rule will never fire! (given the declared types/modes)
|
|
',[]),
|
|
format(' Removing this redundant rule by making all its heads passive...
|
|
',[]),
|
|
format(' ... next warning is caused by this ...
|
|
',[]),
|
|
set_all_passive(A),
|
|
( C=suspension(_,mutable(active),_,mutable(N),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__8__0'(J,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__8__0'(J,A,B,C)
|
|
).
|
|
'rule/2__8'(A,B,C) :-
|
|
'rule/2__9'(A,B,C).
|
|
'rule/2__9'(A,B,C) :-
|
|
'$via1_multi_hash_prev_guard_list/7-1'(A,J),
|
|
'chr sbag_member'(D,J),
|
|
D=suspension(_,mutable(active),_,_,_,_,_,E,F,G,H,I,_),
|
|
E=0,
|
|
B=pragma(rule(N,O,G,P),K,L,M,A),
|
|
simplify_heads(I,H,G,P,Q,R),
|
|
Q\==[],
|
|
extract_variables(N,S),
|
|
extract_variables(O,T),
|
|
extract_variables(F,U),
|
|
replace_some_heads(S,T,U,Q,V,W,G,P,X),
|
|
insert_variables(V,N,Y),
|
|
insert_variables(W,O,Z),
|
|
append(R,X,A1),
|
|
list2conj(A1,B1),
|
|
C1=pragma(rule(Y,Z,G,(B1,P)),K,L,M,A),
|
|
(
|
|
N\==Y
|
|
;
|
|
O\==Z
|
|
),
|
|
!,
|
|
( var(C) ->
|
|
true
|
|
;
|
|
remove_constraint_internal(C,_,D1),
|
|
( D1==yes ->
|
|
'$delete_from_store_rule/2'(C)
|
|
;
|
|
true
|
|
)
|
|
),
|
|
rule(A,C1).
|
|
'rule/2__9'(A,B,C) :-
|
|
'$via1_multi_hash_prev_guard_list/7-1'(A,D),
|
|
!,
|
|
'rule/2__9__0'(D,A,B,C).
|
|
'rule/2__9__0'([],A,B,C) :-
|
|
'rule/2__10'(A,B,C).
|
|
'rule/2__9__0'([G|H],A,B,C) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,D,E,_,F,_,_,_),
|
|
D==A,
|
|
E=0,
|
|
L=t(73,G,C),
|
|
'chr novel_production'(G,L),
|
|
'chr novel_production'(C,L),
|
|
chr_pp_flag(check_impossible_rules,on),
|
|
B=pragma(rule(_,_,F,_),_,_,_,A),
|
|
conj2list(F,I),
|
|
guard_entailment:entails_guard(I,fail) ->
|
|
'chr extend_history'(C,L),
|
|
activate_constraint(J,_,C,K),
|
|
( J==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
format('CHR compiler WARNING: guard will always fail in ~@.
|
|
',[format_rule(B)]),
|
|
format(' Removing this redundant rule by making all its heads passive...
|
|
',[]),
|
|
format(' ... next warning is caused by this ...
|
|
',[]),
|
|
set_all_passive(A),
|
|
( C=suspension(_,mutable(active),_,mutable(K),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__9__0'(H,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__9__0'(H,A,B,C)
|
|
).
|
|
'rule/2__9'(A,B,C) :-
|
|
'rule/2__10'(A,B,C).
|
|
'rule/2__10'(A,B,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:multiple_occ_constraints_checked/1',D),
|
|
!,
|
|
'rule/2__10__0'(D,A,B,C).
|
|
'rule/2__10__0'([],A,B,C) :-
|
|
'rule/2__11'(A,B,C).
|
|
'rule/2__10__0'([E|F],A,B,C) :-
|
|
( E=suspension(_,mutable(active),_,_,_,_,D),
|
|
chr_pp_flag(occurrence_subsumption,on),
|
|
'$via1_multi_hash_prev_guard_list/7-1'(A,R),
|
|
'chr sbag_member'(P,R),
|
|
P=suspension(_,mutable(active),_,_,_,_,_,Q,_,_,_,_,_),
|
|
Q=0,
|
|
'$via1_multi_hash_occurrence/4-3'(A,K),
|
|
'chr sbag_member'(G,K),
|
|
G=suspension(_,mutable(active),_,_,_,_,H,I,_,J),
|
|
'$via1_multi_hash_occurrence/4-1'(H,O),
|
|
'chr sbag_member'(L,O),
|
|
L=suspension(_,mutable(active),_,_,_,_,_,M,N,_),
|
|
L\==G,
|
|
N==A,
|
|
I<M,
|
|
B=pragma(rule(T,_,_,_),_,_,_,A),
|
|
T\==[],
|
|
\+memberchk_eq(H,D) ->
|
|
remove_constraint_internal(E,_,S),
|
|
( S==yes ->
|
|
'$delete_from_store_multiple_occ_constraints_checked/1'(E)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(U,_,C,V),
|
|
( U==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
first_occ_in_rule(A,H,I,J),
|
|
multiple_occ_constraints_checked([H|D]),
|
|
( C=suspension(_,mutable(active),_,mutable(V),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__10__0'(F,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__10__0'(F,A,B,C)
|
|
).
|
|
'rule/2__10'(A,B,C) :-
|
|
'rule/2__11'(A,B,C).
|
|
'rule/2__11'(A,B,C) :-
|
|
'$via1_multi_hash_passive/2-1'(A,D),
|
|
!,
|
|
'rule/2__11__0'(D,A,B,C).
|
|
'rule/2__11__0'([],A,B,C) :-
|
|
'rule/2__12'(A,B,C).
|
|
'rule/2__11__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==A,
|
|
M=t(91,C,F),
|
|
'chr novel_production'(C,M),
|
|
'chr novel_production'(F,M),
|
|
B=pragma(rule(_,_,_,_),ids([E|I],H),_,_,A) ->
|
|
'chr extend_history'(C,M),
|
|
activate_constraint(K,_,C,L),
|
|
( K==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
append(I,H,J),
|
|
check_all_passive(A,J),
|
|
( C=suspension(_,mutable(active),_,mutable(L),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__11__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__11__0'(G,A,B,C)
|
|
).
|
|
'rule/2__11'(A,B,C) :-
|
|
'rule/2__12'(A,B,C).
|
|
'rule/2__12'(A,B,C) :-
|
|
'$via1_multi_hash_passive/2-1'(A,D),
|
|
!,
|
|
'rule/2__12__0'(D,A,B,C).
|
|
'rule/2__12__0'([],A,B,C) :-
|
|
'rule/2__13'(A,B,C).
|
|
'rule/2__12__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==A,
|
|
K=t(92,C,F),
|
|
'chr novel_production'(C,K),
|
|
'chr novel_production'(F,K),
|
|
B=pragma(rule(_,_,_,_),ids([],[E|H]),_,_,A) ->
|
|
'chr extend_history'(C,K),
|
|
activate_constraint(I,_,C,J),
|
|
( I==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
check_all_passive(A,H),
|
|
( C=suspension(_,mutable(active),_,mutable(J),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__12__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__12__0'(G,A,B,C)
|
|
).
|
|
'rule/2__12'(A,B,C) :-
|
|
'rule/2__13'(A,B,C).
|
|
'rule/2__13'(A,B,C) :-
|
|
'$via1_multi_hash_check_all_passive/2-1'(A,D),
|
|
!,
|
|
'rule/2__13__0'(D,A,B,C).
|
|
'rule/2__13__0'([],A,B,C) :-
|
|
'rule/2__14'(A,B,C).
|
|
'rule/2__13__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==A,
|
|
E=[] ->
|
|
remove_constraint_internal(F,_,H),
|
|
( H==yes ->
|
|
'$delete_from_store_check_all_passive/2'(F)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(I,_,C,J),
|
|
( I==yes ->
|
|
'$insert_in_store_rule/2'(C)
|
|
;
|
|
true
|
|
),
|
|
format('CHR compiler WARNING: all heads passive in ~@.
|
|
',[format_rule(B)]),
|
|
format(' `--> Rule never fires. Check your program, this might be a bug!
|
|
',[]),
|
|
( C=suspension(_,mutable(active),_,mutable(J),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__13__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__13__0'(G,A,B,C)
|
|
).
|
|
'rule/2__13'(A,B,C) :-
|
|
'rule/2__14'(A,B,C).
|
|
'rule/2__14'(A,B,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:call_pattern/1',D),
|
|
!,
|
|
'rule/2__14__0'(D,A,B,C).
|
|
'rule/2__14__0'([],A,B,C) :-
|
|
'rule/2__15'(A,B,C).
|
|
'rule/2__14__0'([E|K],A,B,C) :-
|
|
( E=suspension(_,mutable(active),_,_,_,_,D),
|
|
D=odom(F,G),
|
|
F=occ(H,I),
|
|
'$via1_multi_hash_occurrence/4-1'(H,J) ->
|
|
'rule/2__14__1'(J,H,I,G,E,K,A,B,C)
|
|
;
|
|
'rule/2__14__0'(K,A,B,C)
|
|
).
|
|
'rule/2__14__1'([],_,_,_,_,D,A,B,C) :-
|
|
'rule/2__14__0'(D,A,B,C).
|
|
'rule/2__14__1'([M|O],F,G,E,A,H,B,C,D) :-
|
|
( M=suspension(_,mutable(active),_,_,_,_,I,J,K,L),
|
|
I==F,
|
|
J==G,
|
|
K==B,
|
|
nb_getval('$chr_store_global_ground_chr_translate:abstract_constraints/1',N) ->
|
|
'rule/2__14__2'(N,L,M,O,F,G,E,A,H,B,C,D)
|
|
;
|
|
'rule/2__14__1'(O,F,G,E,A,H,B,C,D)
|
|
).
|
|
'rule/2__14__2'([],_,_,I,F,G,E,D,H,A,B,C) :-
|
|
'rule/2__14__1'(I,F,G,E,D,H,A,B,C).
|
|
'rule/2__14__2'([M|N],J,A,K,G,H,F,B,I,C,D,E) :-
|
|
( M=suspension(_,mutable(active),_,_,_,_,L),
|
|
C1=t(140,B,M,A,E),
|
|
'chr novel_production'(B,C1),
|
|
'chr novel_production'(M,C1),
|
|
'chr novel_production'(A,C1),
|
|
'chr novel_production'(E,C1),
|
|
D=pragma(rule(O,P,_,Q),ids(R,_),_,_,_),
|
|
memberchk_eq(J,R) ->
|
|
'chr extend_history'(E,C1),
|
|
activate_constraint(A1,_,E,B1),
|
|
( A1==yes ->
|
|
'$insert_in_store_rule/2'(E)
|
|
;
|
|
true
|
|
),
|
|
select2(J,_,R,O,_,S),
|
|
ai_observation_abstract_constraints(S,L,T),
|
|
ai_observation_observe_list(odom([],F),T,odom([],U)),
|
|
ai_observation_abstract_constraints(P,L,V),
|
|
ai_observation_observe_list(odom([],U),V,odom([],W)),
|
|
ai_observation_abstract_goal(Q,L,X),
|
|
call_pattern(odom(X,W)),
|
|
Y is H+1,
|
|
Z=odom(occ(G,Y),F),
|
|
call_pattern(Z),
|
|
depends_on_as(odom(occ(G,H),F),odom(X,W),Z),
|
|
( E=suspension(_,mutable(active),_,mutable(B1),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__14__2'(N,J,A,K,G,H,F,B,I,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__14__2'(N,J,A,K,G,H,F,B,I,C,D,E)
|
|
).
|
|
'rule/2__14'(A,B,C) :-
|
|
'rule/2__15'(A,B,C).
|
|
'rule/2__15'(A,B,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:call_pattern/1',D),
|
|
!,
|
|
'rule/2__15__0'(D,A,B,C).
|
|
'rule/2__15__0'([],A,B,C) :-
|
|
'rule/2__16'(A,B,C).
|
|
'rule/2__15__0'([E|K],A,B,C) :-
|
|
( E=suspension(_,mutable(active),_,_,_,_,D),
|
|
D=odom(F,G),
|
|
F=occ(H,I),
|
|
'$via1_multi_hash_occurrence/4-1'(H,J) ->
|
|
'rule/2__15__1'(J,H,I,G,E,K,A,B,C)
|
|
;
|
|
'rule/2__15__0'(K,A,B,C)
|
|
).
|
|
'rule/2__15__1'([],_,_,_,_,D,A,B,C) :-
|
|
'rule/2__15__0'(D,A,B,C).
|
|
'rule/2__15__1'([M|O],F,G,E,A,H,B,C,D) :-
|
|
( M=suspension(_,mutable(active),_,_,_,_,I,J,K,L),
|
|
I==F,
|
|
J==G,
|
|
K==B,
|
|
nb_getval('$chr_store_global_ground_chr_translate:abstract_constraints/1',N) ->
|
|
'rule/2__15__2'(N,L,M,O,F,G,E,A,H,B,C,D)
|
|
;
|
|
'rule/2__15__1'(O,F,G,E,A,H,B,C,D)
|
|
).
|
|
'rule/2__15__2'([],_,_,I,F,G,E,D,H,A,B,C) :-
|
|
'rule/2__15__1'(I,F,G,E,D,H,A,B,C).
|
|
'rule/2__15__2'([M|N],J,A,K,G,H,F,B,I,C,D,E) :-
|
|
( M=suspension(_,mutable(active),_,_,_,_,L),
|
|
E1=t(142,B,M,A,E),
|
|
'chr novel_production'(B,E1),
|
|
'chr novel_production'(M,E1),
|
|
'chr novel_production'(A,E1),
|
|
'chr novel_production'(E,E1),
|
|
D=pragma(rule(O,P,_,Q),ids(_,R),_,_,_),
|
|
memberchk_eq(J,R) ->
|
|
'chr extend_history'(E,E1),
|
|
activate_constraint(C1,_,E,D1),
|
|
( C1==yes ->
|
|
'$insert_in_store_rule/2'(E)
|
|
;
|
|
true
|
|
),
|
|
select2(J,_,R,P,_,S),
|
|
ai_observation_abstract_constraints(S,L,T),
|
|
ai_observation_observe_list(odom([],F),T,odom([],U)),
|
|
ai_observation_abstract_constraints(O,L,V),
|
|
ai_observation_observe_list(odom([],U),V,odom([],W)),
|
|
ord_add_element(W,G,X),
|
|
ai_observation_abstract_goal(Q,L,Y),
|
|
call_pattern(odom(Y,X)),
|
|
( ord_memberchk(G,W) ->
|
|
Z=no
|
|
;
|
|
Z=yes
|
|
),
|
|
A1 is H+1,
|
|
B1=odom(occ(G,A1),F),
|
|
call_pattern(B1),
|
|
depends_on_ap(odom(occ(G,H),F),odom(Y,X),B1,Z),
|
|
( E=suspension(_,mutable(active),_,mutable(D1),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'rule/2__15__2'(N,J,A,K,G,H,F,B,I,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'rule/2__15__2'(N,J,A,K,G,H,F,B,I,C,D,E)
|
|
).
|
|
'rule/2__15'(A,B,C) :-
|
|
'rule/2__16'(A,B,C).
|
|
'rule/2__16'(_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_rule/2'(A)
|
|
;
|
|
true
|
|
).
|
|
get_rule(A,B) :-
|
|
'$via1_multi_hash_rule/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
!,
|
|
B=D.
|
|
get_rule(_,_) :-
|
|
fail.
|
|
least_occurrence(A,B) :-
|
|
'least_occurrence/2__0'(A,B,_).
|
|
'least_occurrence/2__0'(A,[],B) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:allocation_occurrence/2',C),
|
|
!,
|
|
allocate_constraint(true,B,least_occurrence(A,[]),[A,[]]),
|
|
'least_occurrence/2__0__0'(C,A,[],B).
|
|
'least_occurrence/2__0__0'([],A,B,C) :-
|
|
'least_occurrence/2__1'(A,B,C).
|
|
'least_occurrence/2__0__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
'$via1_multi_hash_occurrence/4-1'(D,K),
|
|
'chr sbag_member'(H,K),
|
|
H=suspension(_,mutable(active),_,_,_,_,_,I,J,_),
|
|
I==E,
|
|
J==A,
|
|
'$via1_multi_hash_rule/2-1'(A,N),
|
|
'chr sbag_member'(L,N),
|
|
L=suspension(_,mutable(active),_,_,_,_,_,M),
|
|
M=pragma(rule([],_,_,_),_,_,_,_),
|
|
\+is_observed(D,E) ->
|
|
remove_constraint_internal(F,_,O),
|
|
( O==yes ->
|
|
'$delete_from_store_allocation_occurrence/2'(F)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(Q,_,C,R),
|
|
( Q==yes ->
|
|
'$insert_in_store_least_occurrence/2'(C)
|
|
;
|
|
true
|
|
),
|
|
P is E+1,
|
|
allocation_occurrence(D,P),
|
|
( C=suspension(_,mutable(active),_,mutable(R),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'least_occurrence/2__0__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'least_occurrence/2__0__0'(G,A,B,C)
|
|
).
|
|
'least_occurrence/2__0'(A,B,C) :-
|
|
allocate_constraint(true,C,least_occurrence(A,B),[A,B]),
|
|
'least_occurrence/2__1'(A,B,C).
|
|
'least_occurrence/2__1'(A,[C|D],B) :-
|
|
'$via1_multi_hash_rule/2-1'(A,F),
|
|
'chr sbag_member'(E,F),
|
|
E=suspension(_,mutable(active),_,_,_,_,_,_),
|
|
nb_getval('$chr_store_global_ground_chr_translate:allocation_occurrence/2',J),
|
|
'chr sbag_member'(G,J),
|
|
G=suspension(_,mutable(active),_,_,_,_,H,I),
|
|
'$via1_multi_hash_occurrence/4-1'(H,O),
|
|
'chr sbag_member'(K,O),
|
|
K=suspension(_,mutable(active),_,_,_,_,_,L,M,N),
|
|
M=A,
|
|
N=C,
|
|
I>=L,
|
|
\+may_trigger(H),
|
|
!,
|
|
( var(B) ->
|
|
true
|
|
;
|
|
remove_constraint_internal(B,_,P),
|
|
( P==yes ->
|
|
'$delete_from_store_least_occurrence/2'(B)
|
|
;
|
|
true
|
|
)
|
|
),
|
|
least_occurrence(A,D).
|
|
'least_occurrence/2__1'(A,[C|D],B) :-
|
|
'$via1_multi_hash_rule/2-1'(A,F),
|
|
'chr sbag_member'(E,F),
|
|
E=suspension(_,mutable(active),_,_,_,_,_,_),
|
|
'$via1_multi_hash_passive/2-1'(A,I),
|
|
'chr sbag_member'(G,I),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,H),
|
|
H=C,
|
|
!,
|
|
( var(B) ->
|
|
true
|
|
;
|
|
remove_constraint_internal(B,_,J),
|
|
( J==yes ->
|
|
'$delete_from_store_least_occurrence/2'(B)
|
|
;
|
|
true
|
|
)
|
|
),
|
|
least_occurrence(A,D).
|
|
'least_occurrence/2__1'(_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_least_occurrence/2'(A)
|
|
;
|
|
true
|
|
).
|
|
is_least_occurrence(A) :-
|
|
'$via1_multi_hash_least_occurrence/2-1'(A,D),
|
|
'chr sbag_member'(B,D),
|
|
B=suspension(_,mutable(active),_,_,_,_,_,C),
|
|
C=[],
|
|
!.
|
|
is_least_occurrence(_) :-
|
|
fail.
|
|
constraint_index(A,B) :-
|
|
insert_constraint_internal(_,_,C,true,constraint_index(A,B),[A,B]),
|
|
'$insert_in_store_constraint_index/2'(C).
|
|
get_constraint_index(A,B) :-
|
|
'$via1_multi_hash_constraint_index/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
!,
|
|
B=D.
|
|
get_constraint_index(_,_) :-
|
|
fail.
|
|
max_constraint_index(A) :-
|
|
insert_constraint_internal(_,_,B,true,max_constraint_index(A),[A]),
|
|
'$insert_in_store_max_constraint_index/1'(B).
|
|
get_max_constraint_index(A) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:max_constraint_index/1',D),
|
|
'chr sbag_member'(B,D),
|
|
B=suspension(_,mutable(active),_,_,_,_,C),
|
|
!,
|
|
A=C.
|
|
get_max_constraint_index(0).
|
|
observes(A,B) :-
|
|
'$via1_multi_hash_observes/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
D=B,
|
|
!.
|
|
observes(A,B) :-
|
|
'$via1_multi_hash_spawns_observer/2-2'(A,C),
|
|
!,
|
|
'observes/2__0__0'(C,A,B).
|
|
'observes/2__0__0'([],A,B) :-
|
|
'observes/2__1'(A,B).
|
|
'observes/2__0__0'([E|F],A,B) :-
|
|
( E=suspension(_,mutable(active),_,_,_,_,C,D),
|
|
D==A ->
|
|
observes_indirectly(C,B),
|
|
'observes/2__0__0'(F,A,B)
|
|
;
|
|
'observes/2__0__0'(F,A,B)
|
|
).
|
|
observes(A,B) :-
|
|
'observes/2__1'(A,B).
|
|
'observes/2__1'(A,B) :-
|
|
insert_constraint_internal(_,_,C,true,observes(A,B),[A,B]),
|
|
'$insert_in_store_observes/2'(C).
|
|
spawns_observer(A,B) :-
|
|
'spawns_observer/2__0'(A,B,_).
|
|
'spawns_observer/2__0'(A,B,_) :-
|
|
'$via1_multi_hash_spawns_observer/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
D=B,
|
|
!.
|
|
'spawns_observer/2__0'(A,B,C) :-
|
|
'$via1_multi_hash_observes/2-1'(B,D),
|
|
!,
|
|
allocate_constraint(true,C,spawns_observer(A,B),[A,B]),
|
|
'spawns_observer/2__0__0'(D,A,B,C).
|
|
'spawns_observer/2__0__0'([],A,B,C) :-
|
|
'spawns_observer/2__1'(A,B,C).
|
|
'spawns_observer/2__0__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==B ->
|
|
activate_constraint(H,_,C,I),
|
|
( H==yes ->
|
|
'$insert_in_store_spawns_observer/2'(C)
|
|
;
|
|
true
|
|
),
|
|
observes_indirectly(A,E),
|
|
( C=suspension(_,mutable(active),_,mutable(I),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'spawns_observer/2__0__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'spawns_observer/2__0__0'(G,A,B,C)
|
|
).
|
|
'spawns_observer/2__0'(A,B,C) :-
|
|
allocate_constraint(true,C,spawns_observer(A,B),[A,B]),
|
|
'spawns_observer/2__1'(A,B,C).
|
|
'spawns_observer/2__1'(A,B,C) :-
|
|
'$via1_multi_hash_observes_indirectly/2-1'(B,D),
|
|
!,
|
|
'spawns_observer/2__1__0'(D,A,B,C).
|
|
'spawns_observer/2__1__0'([],A,B,C) :-
|
|
'spawns_observer/2__2'(A,B,C).
|
|
'spawns_observer/2__1__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==B,
|
|
J=t(58,C,F),
|
|
'chr novel_production'(C,J),
|
|
'chr novel_production'(F,J) ->
|
|
'chr extend_history'(C,J),
|
|
activate_constraint(H,_,C,I),
|
|
( H==yes ->
|
|
'$insert_in_store_spawns_observer/2'(C)
|
|
;
|
|
true
|
|
),
|
|
observes_indirectly(A,E),
|
|
( C=suspension(_,mutable(active),_,mutable(I),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'spawns_observer/2__1__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'spawns_observer/2__1__0'(G,A,B,C)
|
|
).
|
|
'spawns_observer/2__1'(A,B,C) :-
|
|
'spawns_observer/2__2'(A,B,C).
|
|
'spawns_observer/2__2'(_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_spawns_observer/2'(A)
|
|
;
|
|
true
|
|
).
|
|
observes_indirectly(A,B) :-
|
|
'observes_indirectly/2__0'(A,B,_).
|
|
'observes_indirectly/2__0'(A,B,_) :-
|
|
'$via1_multi_hash_observes_indirectly/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
D=B,
|
|
!.
|
|
'observes_indirectly/2__0'(A,B,C) :-
|
|
'$via1_multi_hash_spawns_observer/2-2'(A,D),
|
|
!,
|
|
allocate_constraint(true,C,observes_indirectly(A,B),[A,B]),
|
|
'observes_indirectly/2__0__0'(D,A,B,C).
|
|
'observes_indirectly/2__0__0'([],A,B,C) :-
|
|
'observes_indirectly/2__1'(A,B,C).
|
|
'observes_indirectly/2__0__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
E==A,
|
|
J=t(58,F,C),
|
|
'chr novel_production'(F,J),
|
|
'chr novel_production'(C,J) ->
|
|
'chr extend_history'(C,J),
|
|
activate_constraint(H,_,C,I),
|
|
( H==yes ->
|
|
'$insert_in_store_observes_indirectly/2'(C)
|
|
;
|
|
true
|
|
),
|
|
observes_indirectly(D,B),
|
|
( C=suspension(_,mutable(active),_,mutable(I),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'observes_indirectly/2__0__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'observes_indirectly/2__0__0'(G,A,B,C)
|
|
).
|
|
'observes_indirectly/2__0'(A,B,C) :-
|
|
allocate_constraint(true,C,observes_indirectly(A,B),[A,B]),
|
|
'observes_indirectly/2__1'(A,B,C).
|
|
'observes_indirectly/2__1'(_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_observes_indirectly/2'(A)
|
|
;
|
|
true
|
|
).
|
|
is_self_observer(A) :-
|
|
'$via1_multi_hash_observes_indirectly/2-1'(A,D),
|
|
'chr sbag_member'(B,D),
|
|
B=suspension(_,mutable(active),_,_,_,_,_,C),
|
|
C==A,
|
|
!.
|
|
is_self_observer(_) :-
|
|
chr_pp_flag(observation_analysis,off).
|
|
generate_indexed_variables_clause(B/C,A) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:constraint_mode/2',G),
|
|
'chr sbag_member'(D,G),
|
|
D=suspension(_,mutable(active),_,_,_,_,E,F),
|
|
E=B/C,
|
|
!,
|
|
functor(H,B,C),
|
|
H=..[_|I],
|
|
create_indexed_variables_body(I,F,J,1,B/C,K,L),
|
|
( K==empty ->
|
|
M=(J=[])
|
|
;
|
|
( L==0 ->
|
|
M=term_variables(N,J)
|
|
)
|
|
;
|
|
K=M
|
|
),
|
|
A=('$indexed_variables'(N,J):-N=H,M).
|
|
generate_indexed_variables_clause(A,_) :-
|
|
format('ERROR: generate_indexed_variables_clause: missing mode info for ~w
|
|
',[A]),
|
|
fail.
|
|
prev_guard_list(A,B,C,D,E,F,G) :-
|
|
'prev_guard_list/7__0'(A,B,C,D,E,F,G,_).
|
|
'prev_guard_list/7__0'(A,B,C,D,E,F,G,_) :-
|
|
'$via1_multi_hash_rule/2-1'(B,J),
|
|
'chr sbag_member'(H,J),
|
|
H=suspension(_,mutable(active),_,_,_,_,_,I),
|
|
I=pragma(rule(K,L,M,_),_,_,_,B),
|
|
K\==[],
|
|
append(K,L,N),
|
|
make_head_matchings_explicit(N,O,P),
|
|
term_variables(O+C,Q),
|
|
strip_attributes(Q,R),
|
|
setof(S,chr_translate:head_subset(O,C,S),T),
|
|
restore_attributes(Q,R),
|
|
T\=[],
|
|
!,
|
|
compute_derived_info(P,T,O,N,M,F,C,G,U,V),
|
|
append(E,U,W),
|
|
list2conj(W,X),
|
|
conj2list(X,Y),
|
|
append(V,G,Z),
|
|
list2conj(Z,A1),
|
|
conj2list(A1,B1),
|
|
C1 is B-1,
|
|
prev_guard_list(A,C1,C,D,Y,F,B1).
|
|
'prev_guard_list/7__0'(A,B,C,D,E,F,G,_) :-
|
|
B>0,
|
|
!,
|
|
H is B-1,
|
|
prev_guard_list(A,H,C,D,E,F,G).
|
|
'prev_guard_list/7__0'(A,0,B,C,D,E,F,_) :-
|
|
F\==[],
|
|
!,
|
|
add_type_information_(B,F,G),
|
|
conj2list(G,H),
|
|
term_variables(B,I),
|
|
append([chr_pp_headvariables(I)|H],D,J),
|
|
list2conj(J,K),
|
|
conj2list(K,L),
|
|
prev_guard_list(A,0,B,C,L,E,[]).
|
|
'prev_guard_list/7__0'(A,0,B,C,D,E,_,_) :-
|
|
'$via1_multi_hash_rule/2-1'(A,H),
|
|
'chr sbag_member'(F,H),
|
|
F=suspension(_,mutable(active),_,_,_,_,_,G),
|
|
G=pragma(rule(L,M,C,N),I,J,K,A),
|
|
C\==true,
|
|
append(E,D,O),
|
|
simplify_guard(C,N,O,P,Q),
|
|
C\==P,
|
|
!,
|
|
remove_constraint_internal(F,_,R),
|
|
( R==yes ->
|
|
'$delete_from_store_rule/2'(F)
|
|
;
|
|
true
|
|
),
|
|
rule(A,pragma(rule(L,M,P,Q),I,J,K,A)),
|
|
prev_guard_list(A,0,B,P,D,E,[]).
|
|
'prev_guard_list/7__0'(A,0,_,B,C,D,_,_) :-
|
|
chr_pp_flag(check_impossible_rules,on),
|
|
'$via1_multi_hash_rule/2-1'(A,G),
|
|
'chr sbag_member'(E,G),
|
|
E=suspension(_,mutable(active),_,_,_,_,_,F),
|
|
F=pragma(rule(_,_,B,_),_,_,_,A),
|
|
append(D,C,H),
|
|
guard_entailment:entails_guard(H,fail),
|
|
!,
|
|
format('CHR compiler WARNING: heads will never match in ~@.
|
|
',[format_rule(F)]),
|
|
format(' `--> In the refined operational semantics (rules applied in textual order)
|
|
',[]),
|
|
format(' this rule will never fire! (given the declared types/modes)
|
|
',[]),
|
|
format(' Removing this redundant rule by making all its heads passive...
|
|
',[]),
|
|
format(' ... next warning is caused by this ...
|
|
',[]),
|
|
set_all_passive(A).
|
|
'prev_guard_list/7__0'(A,0,B,C,D,E,F,G) :-
|
|
'$via1_multi_hash_rule/2-1'(A,H),
|
|
!,
|
|
allocate_constraint(true,G,prev_guard_list(A,0,B,C,D,E,F),[A,0,B,C,D,E,F]),
|
|
'prev_guard_list/7__0__0'(H,A,0,B,C,D,E,F,G).
|
|
'prev_guard_list/7__0__0'([],A,B,C,D,E,F,G,H) :-
|
|
'prev_guard_list/7__1'(A,B,C,D,E,F,G,H).
|
|
'prev_guard_list/7__0__0'([K|L],A,B,C,D,E,F,G,H) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,I,J),
|
|
I==A,
|
|
J=pragma(rule(Q,R,D,S),N,O,P,A),
|
|
simplify_heads(F,E,D,S,T,U),
|
|
T\==[],
|
|
extract_variables(Q,V),
|
|
extract_variables(R,W),
|
|
extract_variables(C,X),
|
|
replace_some_heads(V,W,X,T,Y,Z,D,S,A1),
|
|
insert_variables(Y,Q,B1),
|
|
insert_variables(Z,R,C1),
|
|
append(U,A1,D1),
|
|
list2conj(D1,E1),
|
|
F1=pragma(rule(B1,C1,D,(E1,S)),N,O,P,A),
|
|
(
|
|
Q\==B1
|
|
;
|
|
R\==C1
|
|
) ->
|
|
remove_constraint_internal(K,_,M),
|
|
( M==yes ->
|
|
'$delete_from_store_rule/2'(K)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(G1,_,H,H1),
|
|
( G1==yes ->
|
|
'$insert_in_store_prev_guard_list/7'(H)
|
|
;
|
|
true
|
|
),
|
|
rule(A,F1),
|
|
( H=suspension(_,mutable(active),_,mutable(H1),_,_,_,_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'prev_guard_list/7__0__0'(L,A,B,C,D,E,F,G,H)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'prev_guard_list/7__0__0'(L,A,B,C,D,E,F,G,H)
|
|
).
|
|
'prev_guard_list/7__0'(A,B,C,D,E,F,G,H) :-
|
|
allocate_constraint(true,H,prev_guard_list(A,B,C,D,E,F,G),[A,B,C,D,E,F,G]),
|
|
'prev_guard_list/7__1'(A,B,C,D,E,F,G,H).
|
|
'prev_guard_list/7__1'(A,0,B,C,D,E,F,G) :-
|
|
'$via1_multi_hash_rule/2-1'(A,H),
|
|
!,
|
|
'prev_guard_list/7__1__0'(H,A,0,B,C,D,E,F,G).
|
|
'prev_guard_list/7__1__0'([],A,B,C,D,E,F,G,H) :-
|
|
'prev_guard_list/7__2'(A,B,C,D,E,F,G,H).
|
|
'prev_guard_list/7__1__0'([K|L],A,B,C,D,E,F,G,H) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,I,J),
|
|
I==A,
|
|
P=t(73,H,K),
|
|
'chr novel_production'(H,P),
|
|
'chr novel_production'(K,P),
|
|
chr_pp_flag(check_impossible_rules,on),
|
|
J=pragma(rule(_,_,D,_),_,_,_,A),
|
|
conj2list(D,M),
|
|
guard_entailment:entails_guard(M,fail) ->
|
|
'chr extend_history'(H,P),
|
|
activate_constraint(N,_,H,O),
|
|
( N==yes ->
|
|
'$insert_in_store_prev_guard_list/7'(H)
|
|
;
|
|
true
|
|
),
|
|
format('CHR compiler WARNING: guard will always fail in ~@.
|
|
',[format_rule(J)]),
|
|
format(' Removing this redundant rule by making all its heads passive...
|
|
',[]),
|
|
format(' ... next warning is caused by this ...
|
|
',[]),
|
|
set_all_passive(A),
|
|
( H=suspension(_,mutable(active),_,mutable(O),_,_,_,_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'prev_guard_list/7__1__0'(L,A,B,C,D,E,F,G,H)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'prev_guard_list/7__1__0'(L,A,B,C,D,E,F,G,H)
|
|
).
|
|
'prev_guard_list/7__1'(A,B,C,D,E,F,G,H) :-
|
|
'prev_guard_list/7__2'(A,B,C,D,E,F,G,H).
|
|
'prev_guard_list/7__2'(A,0,B,C,D,E,F,G) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:multiple_occ_constraints_checked/1',H),
|
|
!,
|
|
'prev_guard_list/7__2__0'(H,A,0,B,C,D,E,F,G).
|
|
'prev_guard_list/7__2__0'([],A,B,C,D,E,F,G,H) :-
|
|
'prev_guard_list/7__3'(A,B,C,D,E,F,G,H).
|
|
'prev_guard_list/7__2__0'([J|K],A,B,C,D,E,F,G,H) :-
|
|
( J=suspension(_,mutable(active),_,_,_,_,I),
|
|
chr_pp_flag(occurrence_subsumption,on),
|
|
'$via1_multi_hash_occurrence/4-3'(A,O),
|
|
'chr sbag_member'(L,O),
|
|
L=suspension(_,mutable(active),_,_,_,_,M,N,_,_),
|
|
'$via1_multi_hash_occurrence/4-1'(M,W),
|
|
'chr sbag_member'(S,W),
|
|
S=suspension(_,mutable(active),_,_,_,_,_,T,U,V),
|
|
S\==L,
|
|
U==A,
|
|
T<N,
|
|
'$via1_multi_hash_rule/2-1'(A,R),
|
|
'chr sbag_member'(P,R),
|
|
P=suspension(_,mutable(active),_,_,_,_,_,Q),
|
|
Q=pragma(rule(Y,_,_,_),_,_,_,A),
|
|
Y\==[],
|
|
\+memberchk_eq(M,I) ->
|
|
remove_constraint_internal(J,_,X),
|
|
( X==yes ->
|
|
'$delete_from_store_multiple_occ_constraints_checked/1'(J)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(Z,_,H,A1),
|
|
( Z==yes ->
|
|
'$insert_in_store_prev_guard_list/7'(H)
|
|
;
|
|
true
|
|
),
|
|
first_occ_in_rule(A,M,T,V),
|
|
multiple_occ_constraints_checked([M|I]),
|
|
( H=suspension(_,mutable(active),_,mutable(A1),_,_,_,_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'prev_guard_list/7__2__0'(K,A,B,C,D,E,F,G,H)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'prev_guard_list/7__2__0'(K,A,B,C,D,E,F,G,H)
|
|
).
|
|
'prev_guard_list/7__2'(A,B,C,D,E,F,G,H) :-
|
|
'prev_guard_list/7__3'(A,B,C,D,E,F,G,H).
|
|
'prev_guard_list/7__3'(_,0,_,_,_,_,_,A) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:multiple_occ_constraints_checked/1',C),
|
|
'chr sbag_member'(B,C),
|
|
B=suspension(_,mutable(active),_,_,_,_,_),
|
|
!,
|
|
remove_constraint_internal(B,_,D),
|
|
( D==yes ->
|
|
'$delete_from_store_multiple_occ_constraints_checked/1'(B)
|
|
;
|
|
true
|
|
),
|
|
( var(A) ->
|
|
true
|
|
;
|
|
remove_constraint_internal(A,_,E),
|
|
( E==yes ->
|
|
'$delete_from_store_prev_guard_list/7'(A)
|
|
;
|
|
true
|
|
)
|
|
).
|
|
'prev_guard_list/7__3'(_,_,_,_,_,_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_prev_guard_list/7'(A)
|
|
;
|
|
true
|
|
).
|
|
simplify_guards(A) :-
|
|
'$via1_multi_hash_rule/2-1'(A,D),
|
|
'chr sbag_member'(B,D),
|
|
B=suspension(_,mutable(active),_,_,_,_,_,C),
|
|
!,
|
|
C=pragma(rule(E,F,G,_),_,_,_,A),
|
|
append(E,F,H),
|
|
make_head_matchings_explicit_not_negated(H,I,J),
|
|
add_guard_to_head(H,G,K),
|
|
L is A-1,
|
|
prev_guard_list(A,L,I,G,[],J,[K]),
|
|
multiple_occ_constraints_checked([]),
|
|
M is A+1,
|
|
simplify_guards(M).
|
|
simplify_guards(_).
|
|
set_all_passive(A) :-
|
|
'set_all_passive/1__0'(A,_).
|
|
'set_all_passive/1__0'(A,B) :-
|
|
'$via1_multi_hash_occurrence/4-3'(A,C),
|
|
!,
|
|
allocate_constraint(true,B,set_all_passive(A),[A]),
|
|
'set_all_passive/1__0__0'(C,A,B).
|
|
'set_all_passive/1__0__0'([],A,B) :-
|
|
'set_all_passive/1__1'(A,B).
|
|
'set_all_passive/1__0__0'([E|F],A,B) :-
|
|
( E=suspension(_,mutable(active),_,_,_,_,_,_,C,D),
|
|
C==A,
|
|
I=t(71,B,E),
|
|
'chr novel_production'(B,I),
|
|
'chr novel_production'(E,I) ->
|
|
'chr extend_history'(B,I),
|
|
activate_constraint(G,_,B,H),
|
|
( G==yes ->
|
|
'$insert_in_store_set_all_passive/1'(B)
|
|
;
|
|
true
|
|
),
|
|
passive(A,D),
|
|
( B=suspension(_,mutable(active),_,mutable(H),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'set_all_passive/1__0__0'(F,A,B)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'set_all_passive/1__0__0'(F,A,B)
|
|
).
|
|
'set_all_passive/1__0'(A,B) :-
|
|
allocate_constraint(true,B,set_all_passive(A),[A]),
|
|
'set_all_passive/1__1'(A,B).
|
|
'set_all_passive/1__1'(_,A) :-
|
|
( var(A) ->
|
|
true
|
|
;
|
|
remove_constraint_internal(A,_,B),
|
|
( B==yes ->
|
|
'$delete_from_store_set_all_passive/1'(A)
|
|
;
|
|
true
|
|
)
|
|
).
|
|
first_occ_in_rule(A,B,C,_) :-
|
|
'$via1_multi_hash_occurrence/4-1'(B,H),
|
|
'chr sbag_member'(D,H),
|
|
D=suspension(_,mutable(active),_,_,_,_,_,E,F,G),
|
|
F=A,
|
|
E<C,
|
|
!,
|
|
first_occ_in_rule(A,B,E,G).
|
|
first_occ_in_rule(A,B,C,D) :-
|
|
B=E/F,
|
|
functor(G,E,F),
|
|
next_occ_in_rule(A,B,C,D,[],G).
|
|
next_occ_in_rule(A,B,C,D,_,E) :-
|
|
'$via1_multi_hash_passive/2-1'(A,H),
|
|
'chr sbag_member'(F,H),
|
|
F=suspension(_,mutable(active),_,_,_,_,_,G),
|
|
'$via1_multi_hash_occurrence/4-1'(B,M),
|
|
'chr sbag_member'(I,M),
|
|
I=suspension(_,mutable(active),_,_,_,_,_,J,K,L),
|
|
K=A,
|
|
L=G,
|
|
J is C+1,
|
|
!,
|
|
next_occ_in_rule(A,B,J,D,_,E).
|
|
next_occ_in_rule(A,B,C,D,E,F) :-
|
|
'$via1_multi_hash_occurrence/4-1'(B,U),
|
|
'chr sbag_member'(Q,U),
|
|
Q=suspension(_,mutable(active),_,_,_,_,_,R,S,T),
|
|
S=A,
|
|
'$via1_multi_hash_prev_guard_list/7-1'(A,M),
|
|
'chr sbag_member'(G,M),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,H,I,J,K,L,_),
|
|
H=0,
|
|
'$via1_multi_hash_rule/2-1'(A,P),
|
|
'chr sbag_member'(N,P),
|
|
N=suspension(_,mutable(active),_,_,_,_,_,O),
|
|
R is C+1,
|
|
O=pragma(rule(V,W,J,_),ids(_,_),_,_,A),
|
|
!,
|
|
append(V,W,X),
|
|
add_failing_occ(O,X,I,D,Y,F,L,B,Z),
|
|
( Y==[chr_pp_void_info] ->
|
|
next_occ_in_rule(A,B,R,T,E,F)
|
|
;
|
|
append(Y,E,A1),
|
|
add_failing_occ(O,X,I,T,B1,F,L,B,C1),
|
|
copy_term(K,D1),
|
|
variable_replacement(K,D1,E1),
|
|
copy_with_variable_replacement(K,F1,Z),
|
|
copy_with_variable_replacement(K,G1,C1),
|
|
copy_with_variable_replacement(G1,H1,E1),
|
|
append(A1,F1,I1),
|
|
append(I1,H1,J1),
|
|
copy_with_variable_replacement(L,K1,Z),
|
|
copy_with_variable_replacement(L,L1,C1),
|
|
append(L1,J1,M1),
|
|
append([chr_pp_active_constraint(F)|K1],M1,N1),
|
|
list2conj(B1,O1),
|
|
copy_term((A1,J1,N1,O1,F),(P1,_,Q1,R1,S1)),
|
|
term_variables(P1-S1,T1),
|
|
flatten_stuff(Q1,U1),
|
|
flatten_stuff(R1,V1),
|
|
(
|
|
O1\=chr_pp_void_info,
|
|
unify_stuff(T1,U1,V1),
|
|
!,
|
|
( guard_entailment:entails_guard(Q1,R1) ->
|
|
passive(A,T)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
true
|
|
),
|
|
!,
|
|
next_occ_in_rule(A,B,R,T,A1,F)
|
|
).
|
|
next_occ_in_rule(_,_,_,_,_,_).
|
|
multiple_occ_constraints_checked(A) :-
|
|
chr_pp_flag(occurrence_subsumption,on),
|
|
nb_getval('$chr_store_global_ground_chr_translate:prev_guard_list/7',E),
|
|
'chr sbag_member'(B,E),
|
|
B=suspension(_,mutable(active),_,_,_,_,C,D,_,_,_,_,_),
|
|
D=0,
|
|
'$via1_multi_hash_rule/2-1'(C,L),
|
|
'chr sbag_member'(J,L),
|
|
J=suspension(_,mutable(active),_,_,_,_,_,K),
|
|
'$via1_multi_hash_occurrence/4-3'(C,I),
|
|
'chr sbag_member'(F,I),
|
|
F=suspension(_,mutable(active),_,_,_,_,G,H,_,_),
|
|
'$via1_multi_hash_occurrence/4-1'(G,Q),
|
|
'chr sbag_member'(M,Q),
|
|
M=suspension(_,mutable(active),_,_,_,_,_,N,O,P),
|
|
M\==F,
|
|
O=C,
|
|
N<H,
|
|
K=pragma(rule(R,_,_,_),_,_,_,C),
|
|
R\==[],
|
|
\+memberchk_eq(G,A),
|
|
!,
|
|
first_occ_in_rule(C,G,N,P),
|
|
multiple_occ_constraints_checked([G|A]).
|
|
multiple_occ_constraints_checked(_) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:prev_guard_list/7',C),
|
|
'chr sbag_member'(A,C),
|
|
A=suspension(_,mutable(active),_,_,_,_,_,B,_,_,_,_,_),
|
|
B=0,
|
|
!,
|
|
remove_constraint_internal(A,_,D),
|
|
( D==yes ->
|
|
'$delete_from_store_prev_guard_list/7'(A)
|
|
;
|
|
true
|
|
).
|
|
multiple_occ_constraints_checked(A) :-
|
|
insert_constraint_internal(_,_,B,true,multiple_occ_constraints_checked(A),[A]),
|
|
'$insert_in_store_multiple_occ_constraints_checked/1'(B).
|
|
type_definition(A,B) :-
|
|
( var(C) ->
|
|
insert_constraint_internal(E,D,C,chr_translate:type_definition(A,B),type_definition(A,B),[A,B])
|
|
;
|
|
activate_constraint(E,D,C,_)
|
|
),
|
|
( E==yes ->
|
|
'$insert_in_store_type_definition/2'(C),
|
|
'attach_type_definition/2'(D,C)
|
|
;
|
|
true
|
|
).
|
|
constraint_type(A,B) :-
|
|
insert_constraint_internal(_,_,C,true,constraint_type(A,B),[A,B]),
|
|
'$insert_in_store_constraint_type/2'(C).
|
|
get_type_definition(A,B) :-
|
|
nonvar(A),
|
|
'chr global_term_ref_1'(F),
|
|
get_attr(F,chr_translate,G),
|
|
G=H,
|
|
'chr sbag_member'(C,H),
|
|
C=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
nonvar(D),
|
|
functor(D,I,J),
|
|
functor(A,I,J),
|
|
!,
|
|
copy_term((D,E),(K,L)),
|
|
K=A,
|
|
B=L.
|
|
get_type_definition(_,_) :-
|
|
fail.
|
|
get_constraint_type(A,B) :-
|
|
'$via1_multi_hash_constraint_type/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
!,
|
|
B=D.
|
|
get_constraint_type(_,_) :-
|
|
fail.
|
|
add_type_information([],[],A) :-
|
|
!,
|
|
A=true.
|
|
add_type_information([B|C],[D|E],A) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:constraint_mode/2',I),
|
|
'chr sbag_member'(F,I),
|
|
F=suspension(_,mutable(active),_,_,_,_,G,H),
|
|
G=J/K,
|
|
functor(B,J,K),
|
|
!,
|
|
B=..[_|L],
|
|
D=..[_|M],
|
|
add_mode_info(H,L,N),
|
|
A=(N,O),
|
|
( get_constraint_type(J/K,P) ->
|
|
types2condition(P,L,M,H,Q),
|
|
list2conj(Q,R),
|
|
O=(R,S),
|
|
add_type_information(C,E,S)
|
|
;
|
|
add_type_information(C,E,O)
|
|
).
|
|
add_type_information([A|_],_,_) :-
|
|
!,
|
|
functor(A,B,C),
|
|
format('CHR compiler ERROR: mode information missing for ~w.
|
|
',[B/C]),
|
|
format(' `--> Most likely this is a bug in the compiler itself.
|
|
',[]),
|
|
format(' Please contact the maintainers.
|
|
',[]),
|
|
fail.
|
|
add_type_information(A,B,C) :-
|
|
insert_constraint_internal(_,_,D,true,add_type_information(A,B,C),[A,B,C]),
|
|
'$insert_in_store_add_type_information/3'(D).
|
|
stored(A,B,yes) :-
|
|
'$via1_multi_hash_stored_complete/3-1'(A,F),
|
|
'chr sbag_member'(C,F),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D,E),
|
|
B<D,
|
|
'$via1_multi_hash_occurrence/4-1'(A,K),
|
|
'chr sbag_member'(G,K),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,H,I,J),
|
|
H=B,
|
|
'$via1_multi_hash_passive/2-1'(I,N),
|
|
'chr sbag_member'(L,N),
|
|
L=suspension(_,mutable(active),_,_,_,_,_,M),
|
|
M=J,
|
|
!,
|
|
remove_constraint_internal(C,_,P),
|
|
( P==yes ->
|
|
'$delete_from_store_stored_complete/3'(C)
|
|
;
|
|
true
|
|
),
|
|
O is E-1,
|
|
stored(A,B,maybe),
|
|
stored_complete(A,D,O).
|
|
stored(A,B,yes) :-
|
|
'$via1_multi_hash_stored_complete/3-1'(A,F),
|
|
'chr sbag_member'(C,F),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D,E),
|
|
B<D,
|
|
'$via1_multi_hash_ai_not_observed/2-1'(A,I),
|
|
'chr sbag_member'(G,I),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,H),
|
|
H=B,
|
|
!,
|
|
remove_constraint_internal(C,_,K),
|
|
( K==yes ->
|
|
'$delete_from_store_stored_complete/3'(C)
|
|
;
|
|
true
|
|
),
|
|
J is E-1,
|
|
stored(A,B,maybe),
|
|
stored_complete(A,D,J).
|
|
stored(A,B,C) :-
|
|
insert_constraint_internal(_,_,D,true,stored(A,B,C),[A,B,C]),
|
|
'$insert_in_store_stored/3'(D).
|
|
stored_completing(A,B,C) :-
|
|
'$via1_multi_hash_stored/3-1'(A,G),
|
|
'chr sbag_member'(D,G),
|
|
D=suspension(_,mutable(active),_,_,_,_,_,E,F),
|
|
E==B,
|
|
F=yes,
|
|
!,
|
|
H is B+1,
|
|
I is C+1,
|
|
stored_completing(A,H,I).
|
|
stored_completing(A,B,C) :-
|
|
'$via1_multi_hash_stored/3-1'(A,G),
|
|
'chr sbag_member'(D,G),
|
|
D=suspension(_,mutable(active),_,_,_,_,_,E,F),
|
|
E==B,
|
|
F=maybe,
|
|
!,
|
|
H is B+1,
|
|
stored_completing(A,H,C).
|
|
stored_completing(A,B,C) :-
|
|
'$via1_multi_hash_stored/3-1'(A,F),
|
|
'chr sbag_member'(D,F),
|
|
D=suspension(_,mutable(active),_,_,_,_,_,E,_),
|
|
E==B,
|
|
!,
|
|
stored_complete(A,B,C).
|
|
stored_completing(A,B,C) :-
|
|
stored_complete(A,B,C).
|
|
stored_complete(A,B,C) :-
|
|
'stored_complete/3__0'(A,B,C,_).
|
|
'stored_complete/3__0'(A,B,C,_) :-
|
|
'$via1_multi_hash_stored/3-1'(A,G),
|
|
'chr sbag_member'(D,G),
|
|
D=suspension(_,mutable(active),_,_,_,_,_,E,F),
|
|
F=yes,
|
|
E<B,
|
|
'$via1_multi_hash_occurrence/4-1'(A,L),
|
|
'chr sbag_member'(H,L),
|
|
H=suspension(_,mutable(active),_,_,_,_,_,I,J,K),
|
|
I=E,
|
|
'$via1_multi_hash_passive/2-1'(J,O),
|
|
'chr sbag_member'(M,O),
|
|
M=suspension(_,mutable(active),_,_,_,_,_,N),
|
|
N=K,
|
|
!,
|
|
remove_constraint_internal(D,_,Q),
|
|
( Q==yes ->
|
|
'$delete_from_store_stored/3'(D)
|
|
;
|
|
true
|
|
),
|
|
P is C-1,
|
|
stored(A,E,maybe),
|
|
stored_complete(A,B,P).
|
|
'stored_complete/3__0'(A,B,C,_) :-
|
|
'$via1_multi_hash_stored/3-1'(A,G),
|
|
'chr sbag_member'(D,G),
|
|
D=suspension(_,mutable(active),_,_,_,_,_,E,F),
|
|
F=yes,
|
|
E<B,
|
|
'$via1_multi_hash_ai_not_observed/2-1'(A,J),
|
|
'chr sbag_member'(H,J),
|
|
H=suspension(_,mutable(active),_,_,_,_,_,I),
|
|
I=E,
|
|
!,
|
|
remove_constraint_internal(D,_,L),
|
|
( L==yes ->
|
|
'$delete_from_store_stored/3'(D)
|
|
;
|
|
true
|
|
),
|
|
K is C-1,
|
|
stored(A,E,maybe),
|
|
stored_complete(A,B,K).
|
|
'stored_complete/3__0'(A,B,0,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:occurrence/4',D),
|
|
!,
|
|
allocate_constraint(true,C,stored_complete(A,B,0),[A,B,0]),
|
|
'stored_complete/3__0__0'(D,A,B,0,C).
|
|
'stored_complete/3__0__0'([],A,B,C,D) :-
|
|
'stored_complete/3__1'(A,B,C,D).
|
|
'stored_complete/3__0__0'([G|I],A,B,C,D) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,_,_,E,F),
|
|
'$via1_multi_hash_max_occurrence/2-1'(A,H) ->
|
|
'stored_complete/3__0__1'(H,E,F,G,I,A,B,C,D)
|
|
;
|
|
'stored_complete/3__0__0'(I,A,B,C,D)
|
|
).
|
|
'stored_complete/3__0__1'([],_,_,_,E,A,B,C,D) :-
|
|
'stored_complete/3__0__0'(E,A,B,C,D).
|
|
'stored_complete/3__0__1'([K|M],F,G,A,H,B,C,D,E) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,I,J),
|
|
I==B,
|
|
'$via1_multi_hash_occurrence/4-1'(B,L) ->
|
|
'stored_complete/3__0__2'(L,J,K,M,F,G,A,H,B,C,D,E)
|
|
;
|
|
'stored_complete/3__0__1'(M,F,G,A,H,B,C,D,E)
|
|
).
|
|
'stored_complete/3__0__2'([],_,_,I,E,F,G,H,A,B,C,D) :-
|
|
'stored_complete/3__0__1'(I,E,F,G,H,A,B,C,D).
|
|
'stored_complete/3__0__2'([N|O],J,A,K,G,H,B,I,C,D,E,F) :-
|
|
( N=suspension(_,mutable(active),_,_,_,_,L,_,M,_),
|
|
N\==B,
|
|
L==C,
|
|
M==G,
|
|
R=t(90,B,N,F,A),
|
|
'chr novel_production'(B,R),
|
|
'chr novel_production'(N,R),
|
|
'chr novel_production'(F,R),
|
|
'chr novel_production'(A,R),
|
|
D=<J ->
|
|
'chr extend_history'(F,R),
|
|
activate_constraint(P,_,F,Q),
|
|
( P==yes ->
|
|
'$insert_in_store_stored_complete/3'(F)
|
|
;
|
|
true
|
|
),
|
|
passive(G,H),
|
|
( F=suspension(_,mutable(active),_,mutable(Q),_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'stored_complete/3__0__2'(O,J,A,K,G,H,B,I,C,D,E,F)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'stored_complete/3__0__2'(O,J,A,K,G,H,B,I,C,D,E,F)
|
|
).
|
|
'stored_complete/3__0'(A,B,C,D) :-
|
|
allocate_constraint(true,D,stored_complete(A,B,C),[A,B,C]),
|
|
'stored_complete/3__1'(A,B,C,D).
|
|
'stored_complete/3__1'(A,B,C,D) :-
|
|
'$via1_multi_hash_occurrence/4-1'(A,E),
|
|
!,
|
|
'stored_complete/3__1__0'(E,A,B,C,D).
|
|
'stored_complete/3__1__0'([],A,B,C,D) :-
|
|
'stored_complete/3__2'(A,B,C,D).
|
|
'stored_complete/3__1__0'([I|J],A,B,C,D) :-
|
|
( I=suspension(_,mutable(active),_,_,_,_,E,F,G,H),
|
|
E==A,
|
|
M=t(99,D,I),
|
|
'chr novel_production'(D,M),
|
|
'chr novel_production'(I,M),
|
|
F>B ->
|
|
'chr extend_history'(D,M),
|
|
activate_constraint(K,_,D,L),
|
|
( K==yes ->
|
|
'$insert_in_store_stored_complete/3'(D)
|
|
;
|
|
true
|
|
),
|
|
passive(G,H),
|
|
( D=suspension(_,mutable(active),_,mutable(L),_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'stored_complete/3__1__0'(J,A,B,C,D)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'stored_complete/3__1__0'(J,A,B,C,D)
|
|
).
|
|
'stored_complete/3__1'(A,B,C,D) :-
|
|
'stored_complete/3__2'(A,B,C,D).
|
|
'stored_complete/3__2'(_,_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_stored_complete/3'(A)
|
|
;
|
|
true
|
|
).
|
|
is_stored(A) :-
|
|
'$via1_multi_hash_max_occurrence/2-1'(A,D),
|
|
'chr sbag_member'(B,D),
|
|
B=suspension(_,mutable(active),_,_,_,_,_,C),
|
|
'$via1_multi_hash_stored_complete/3-1'(A,H),
|
|
'chr sbag_member'(E,H),
|
|
E=suspension(_,mutable(active),_,_,_,_,_,F,G),
|
|
G=0,
|
|
F=<C,
|
|
!,
|
|
fail.
|
|
is_stored(_).
|
|
is_finally_stored(A) :-
|
|
'$via1_multi_hash_max_occurrence/2-1'(A,D),
|
|
'chr sbag_member'(B,D),
|
|
B=suspension(_,mutable(active),_,_,_,_,_,C),
|
|
'$via1_multi_hash_stored_complete/3-1'(A,G),
|
|
'chr sbag_member'(E,G),
|
|
E=suspension(_,mutable(active),_,_,_,_,_,F,_),
|
|
F=<C,
|
|
!,
|
|
fail.
|
|
is_finally_stored(_).
|
|
check_all_passive(A,[B|C]) :-
|
|
'$via1_multi_hash_passive/2-1'(A,F),
|
|
'chr sbag_member'(D,F),
|
|
D=suspension(_,mutable(active),_,_,_,_,_,E),
|
|
E=B,
|
|
!,
|
|
check_all_passive(A,C).
|
|
check_all_passive(A,[]) :-
|
|
'$via1_multi_hash_rule/2-1'(A,D),
|
|
'chr sbag_member'(B,D),
|
|
B=suspension(_,mutable(active),_,_,_,_,_,C),
|
|
!,
|
|
format('CHR compiler WARNING: all heads passive in ~@.
|
|
',[format_rule(C)]),
|
|
format(' `--> Rule never fires. Check your program, this might be a bug!
|
|
',[]).
|
|
check_all_passive(A,B) :-
|
|
insert_constraint_internal(_,_,C,true,check_all_passive(A,B),[A,B]),
|
|
'$insert_in_store_check_all_passive/2'(C).
|
|
constraints_code1([],A,B) :-
|
|
!,
|
|
A=B.
|
|
constraints_code1([C|D],A,B) :-
|
|
!,
|
|
constraint_code(C,A,E),
|
|
constraints_code1(D,E,B).
|
|
constraints_code1(A,B,C) :-
|
|
insert_constraint_internal(_,_,D,true,constraints_code1(A,B,C),[A,B,C]),
|
|
'$insert_in_store_constraints_code1/3'(D).
|
|
constraint_code(A,B,C) :-
|
|
(
|
|
(
|
|
chr_pp_flag(debugable,on)
|
|
;
|
|
is_stored(A),
|
|
(
|
|
has_active_occurrence(A)
|
|
;
|
|
chr_pp_flag(late_allocation,off)
|
|
),
|
|
(
|
|
may_trigger(A)
|
|
;
|
|
get_allocation_occurrence(A,D),
|
|
get_max_occurrence(A,E),
|
|
E>=D
|
|
)
|
|
) ->
|
|
constraint_prelude(A,F),
|
|
B=[F|G]
|
|
;
|
|
B=G
|
|
),
|
|
H=[0],
|
|
occurrences_code(A,1,H,I,G,J),
|
|
gen_cond_attach_clause(A,I,J,C).
|
|
has_active_occurrence(A) :-
|
|
has_active_occurrence(A,1).
|
|
has_active_occurrence(A,B) :-
|
|
'$via1_multi_hash_max_occurrence/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
B>D,
|
|
!,
|
|
fail.
|
|
has_active_occurrence(A,B) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:passive/2',F),
|
|
'chr sbag_member'(C,F),
|
|
C=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
'$via1_multi_hash_occurrence/4-1'(A,K),
|
|
'chr sbag_member'(G,K),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,H,I,J),
|
|
H==B,
|
|
I=D,
|
|
J=E,
|
|
!,
|
|
L is B+1,
|
|
has_active_occurrence(A,L).
|
|
has_active_occurrence(_,_).
|
|
use_auxiliary_predicate(A) :-
|
|
'$via1_multi_hash_use_auxiliary_predicate/1-1'(A,C),
|
|
'chr sbag_member'(B,C),
|
|
B=suspension(_,mutable(active),_,_,_,_,_),
|
|
!.
|
|
use_auxiliary_predicate(A) :-
|
|
insert_constraint_internal(_,_,B,true,use_auxiliary_predicate(A),[A]),
|
|
'$insert_in_store_use_auxiliary_predicate/1'(B).
|
|
is_used_auxiliary_predicate(A) :-
|
|
'$via1_multi_hash_use_auxiliary_predicate/1-1'(A,C),
|
|
'chr sbag_member'(B,C),
|
|
B=suspension(_,mutable(active),_,_,_,_,_),
|
|
!.
|
|
is_used_auxiliary_predicate(_) :-
|
|
fail.
|
|
occurrences_code(A,B,C,D,E,F) :-
|
|
'$via1_multi_hash_max_occurrence/2-1'(A,I),
|
|
'chr sbag_member'(G,I),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,H),
|
|
B>H,
|
|
!,
|
|
D=C,
|
|
E=F.
|
|
occurrences_code(A,B,C,D,E,F) :-
|
|
occurrence_code(A,B,C,G,E,H),
|
|
I is B+1,
|
|
occurrences_code(A,I,G,D,H,F).
|
|
occurrence_code(A,B,C,D,E,F) :-
|
|
'$via1_multi_hash_occurrence/4-1'(A,K),
|
|
'chr sbag_member'(G,K),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,H,I,J),
|
|
H=B,
|
|
'$via1_multi_hash_passive/2-1'(I,N),
|
|
'chr sbag_member'(L,N),
|
|
L=suspension(_,mutable(active),_,_,_,_,_,M),
|
|
M=J,
|
|
!,
|
|
D=C,
|
|
E=F.
|
|
occurrence_code(A,B,C,D,E,F) :-
|
|
'$via1_multi_hash_occurrence/4-1'(A,K),
|
|
'chr sbag_member'(G,K),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,H,I,J),
|
|
H=B,
|
|
'$via1_multi_hash_rule/2-1'(I,N),
|
|
'chr sbag_member'(L,N),
|
|
L=suspension(_,mutable(active),_,_,_,_,_,M),
|
|
!,
|
|
M=pragma(rule(O,P,_,_),ids(Q,R),_,_,_),
|
|
( select2(J,S,Q,O,T,U) ->
|
|
D=C,
|
|
head1_code(S,U,T,M,A,B,C,E,F)
|
|
;
|
|
( select2(J,V,R,P,W,X) ->
|
|
head2_code(V,X,W,M,A,B,C,E,Y),
|
|
inc_id(C,D),
|
|
( unconditional_occurrence(A,B) ->
|
|
Y=F
|
|
;
|
|
gen_alloc_inc_clause(A,B,C,Y,F)
|
|
)
|
|
)
|
|
).
|
|
occurrence_code(A,B,_,_,_,_) :-
|
|
format('occurrence_code/6: missing information to compile ~w:~w
|
|
',[A,B]),
|
|
fail.
|
|
functional_dependency(A,B,C,D) :-
|
|
B>1,
|
|
'$via1_multi_hash_allocation_occurrence/2-1'(A,G),
|
|
'chr sbag_member'(E,G),
|
|
E=suspension(_,mutable(active),_,_,_,_,_,F),
|
|
'$via1_multi_hash_occurrence/4-1'(A,K),
|
|
'chr sbag_member'(H,K),
|
|
H=suspension(_,mutable(active),_,_,_,_,_,I,J,_),
|
|
J=B,
|
|
F>I,
|
|
!,
|
|
functional_dependency(A,1,C,D).
|
|
functional_dependency(A,B,C,D) :-
|
|
insert_constraint_internal(_,_,E,true,functional_dependency(A,B,C,D),[A,B,C,D]),
|
|
'$insert_in_store_functional_dependency/4'(E).
|
|
get_functional_dependency(A,B,C,D) :-
|
|
'$via1_multi_hash_functional_dependency/4-1'(A,I),
|
|
'chr sbag_member'(E,I),
|
|
E=suspension(_,mutable(active),_,_,_,_,_,F,G,H),
|
|
B>=F,
|
|
!,
|
|
C=G,
|
|
D=H.
|
|
get_functional_dependency(_,_,_,_) :-
|
|
fail.
|
|
initial_call_pattern(A) :-
|
|
'initial_call_pattern/1__0'(A,_).
|
|
'initial_call_pattern/1__0'(A,_) :-
|
|
'$via1_multi_hash_initial_call_pattern/1-1'(A,C),
|
|
'chr sbag_member'(B,C),
|
|
B=suspension(_,mutable(active),_,_,_,_,_),
|
|
!.
|
|
'initial_call_pattern/1__0'(A,B) :-
|
|
allocate_constraint(true,B,initial_call_pattern(A),[A]),
|
|
activate_constraint(C,_,B,D),
|
|
( C==yes ->
|
|
'$insert_in_store_initial_call_pattern/1'(B)
|
|
;
|
|
true
|
|
),
|
|
call_pattern(A),
|
|
( B=suspension(_,mutable(active),_,mutable(D),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'initial_call_pattern/1__1'(A,B)
|
|
;
|
|
true
|
|
).
|
|
'initial_call_pattern/1__1'(A,B) :-
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(A,C),
|
|
!,
|
|
'initial_call_pattern/1__1__0'(C,A,B).
|
|
'initial_call_pattern/1__1__0'([],A,B) :-
|
|
'initial_call_pattern/1__2'(A,B).
|
|
'initial_call_pattern/1__1__0'([E|G],A,B) :-
|
|
( E=suspension(_,mutable(active),_,_,_,_,C,D),
|
|
C==A,
|
|
nb_getval('$chr_store_global_ground_chr_translate:abstract_constraints/1',F) ->
|
|
'initial_call_pattern/1__1__1'(F,D,E,G,A,B)
|
|
;
|
|
'initial_call_pattern/1__1__0'(G,A,B)
|
|
).
|
|
'initial_call_pattern/1__1__1'([],_,_,C,A,B) :-
|
|
'initial_call_pattern/1__1__0'(C,A,B).
|
|
'initial_call_pattern/1__1__1'([G|H],D,A,E,B,C) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,F),
|
|
K=t(130,C,A,G),
|
|
'chr novel_production'(C,K),
|
|
'chr novel_production'(A,K),
|
|
'chr novel_production'(G,K) ->
|
|
'chr extend_history'(C,K),
|
|
activate_constraint(I,_,C,J),
|
|
( I==yes ->
|
|
'$insert_in_store_initial_call_pattern/1'(C)
|
|
;
|
|
true
|
|
),
|
|
ai_observation_schedule_new_calls(F,D),
|
|
( C=suspension(_,mutable(active),_,mutable(J),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'initial_call_pattern/1__1__1'(H,D,A,E,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'initial_call_pattern/1__1__1'(H,D,A,E,B,C)
|
|
).
|
|
'initial_call_pattern/1__1'(A,B) :-
|
|
'initial_call_pattern/1__2'(A,B).
|
|
'initial_call_pattern/1__2'(_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_initial_call_pattern/1'(A)
|
|
;
|
|
true
|
|
).
|
|
call_pattern(A) :-
|
|
'call_pattern/1__0'(A,_).
|
|
'call_pattern/1__0'(A,_) :-
|
|
'$via1_multi_hash_call_pattern/1-1'(A,C),
|
|
'chr sbag_member'(B,C),
|
|
B=suspension(_,mutable(active),_,_,_,_,_),
|
|
!.
|
|
'call_pattern/1__0'(A,B) :-
|
|
A=odom(C,D),
|
|
C=[],
|
|
allocate_constraint(true,B,call_pattern(A),[A]),
|
|
!,
|
|
activate_constraint(E,_,B,F),
|
|
( E==yes ->
|
|
'$insert_in_store_call_pattern/1'(B)
|
|
;
|
|
true
|
|
),
|
|
final_answer_pattern(odom([],D),odom([],D)),
|
|
( B=suspension(_,mutable(active),_,mutable(F),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'call_pattern/1__1'(A,B)
|
|
;
|
|
true
|
|
).
|
|
'call_pattern/1__0'(A,B) :-
|
|
allocate_constraint(true,B,call_pattern(A),[A]),
|
|
'call_pattern/1__1'(A,B).
|
|
'call_pattern/1__1'(A,B) :-
|
|
A=odom(C,D),
|
|
C=[E|F],
|
|
!,
|
|
activate_constraint(H,_,B,I),
|
|
( H==yes ->
|
|
'$insert_in_store_call_pattern/1'(B)
|
|
;
|
|
true
|
|
),
|
|
G=odom(E,D),
|
|
depends_on_goal(odom([E|F],D),G),
|
|
call_pattern(G),
|
|
( B=suspension(_,mutable(active),_,mutable(I),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'call_pattern/1__2'(A,B)
|
|
;
|
|
true
|
|
).
|
|
'call_pattern/1__1'(A,B) :-
|
|
'call_pattern/1__2'(A,B).
|
|
'call_pattern/1__2'(A,B) :-
|
|
A=odom(C,D),
|
|
C=builtin,
|
|
!,
|
|
activate_constraint(F,_,B,G),
|
|
( F==yes ->
|
|
'$insert_in_store_call_pattern/1'(B)
|
|
;
|
|
true
|
|
),
|
|
ord_empty(E),
|
|
final_answer_pattern(odom(builtin,D),odom([],E)),
|
|
( B=suspension(_,mutable(active),_,mutable(G),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'call_pattern/1__3'(A,B)
|
|
;
|
|
true
|
|
).
|
|
'call_pattern/1__2'(A,B) :-
|
|
'call_pattern/1__3'(A,B).
|
|
'call_pattern/1__3'(A,B) :-
|
|
A=odom(C,D),
|
|
C=occ(E,F),
|
|
'$via1_multi_hash_max_occurrence/2-1'(E,G),
|
|
!,
|
|
'call_pattern/1__3__0'(G,A,B,E,F,D).
|
|
'call_pattern/1__3__0'([],A,B,_,_,_) :-
|
|
'call_pattern/1__4'(A,B).
|
|
'call_pattern/1__3__0'([H|I],A,B,D,E,C) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,F,G),
|
|
F==D,
|
|
L=t(138,B,H),
|
|
'chr novel_production'(B,L),
|
|
'chr novel_production'(H,L),
|
|
E>G ->
|
|
'chr extend_history'(B,L),
|
|
activate_constraint(J,_,B,K),
|
|
( J==yes ->
|
|
'$insert_in_store_call_pattern/1'(B)
|
|
;
|
|
true
|
|
),
|
|
final_answer_pattern(odom(occ(D,E),C),odom([],C)),
|
|
( B=suspension(_,mutable(active),_,mutable(K),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'call_pattern/1__3__0'(I,A,B,D,E,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'call_pattern/1__3__0'(I,A,B,D,E,C)
|
|
).
|
|
'call_pattern/1__3'(A,B) :-
|
|
'call_pattern/1__4'(A,B).
|
|
'call_pattern/1__4'(A,B) :-
|
|
A=odom(C,D),
|
|
nb_getval('$chr_store_global_ground_chr_translate:abstract_constraints/1',E),
|
|
!,
|
|
'call_pattern/1__4__0'(E,A,B,C,D).
|
|
'call_pattern/1__4__0'([],A,B,_,_) :-
|
|
'call_pattern/1__5'(A,B).
|
|
'call_pattern/1__4__0'([F|G],A,B,C,D) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,E),
|
|
K=t(139,B,F),
|
|
'chr novel_production'(B,K),
|
|
'chr novel_production'(F,K),
|
|
memberchk_eq(C,E) ->
|
|
'chr extend_history'(B,K),
|
|
activate_constraint(I,_,B,J),
|
|
( I==yes ->
|
|
'$insert_in_store_call_pattern/1'(B)
|
|
;
|
|
true
|
|
),
|
|
H=odom(occ(C,1),D),
|
|
call_pattern(H),
|
|
depends_on(odom(C,D),H),
|
|
( B=suspension(_,mutable(active),_,mutable(J),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'call_pattern/1__4__0'(G,A,B,C,D)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'call_pattern/1__4__0'(G,A,B,C,D)
|
|
).
|
|
'call_pattern/1__4'(A,B) :-
|
|
'call_pattern/1__5'(A,B).
|
|
'call_pattern/1__5'(A,B) :-
|
|
A=odom(C,D),
|
|
C=occ(E,F),
|
|
nb_getval('$chr_store_global_ground_chr_translate:abstract_constraints/1',G),
|
|
!,
|
|
'call_pattern/1__5__0'(G,A,B,E,F,D).
|
|
'call_pattern/1__5__0'([],A,B,_,_,_) :-
|
|
'call_pattern/1__6'(A,B).
|
|
'call_pattern/1__5__0'([G|I],A,B,D,E,C) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,F),
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule/2',H) ->
|
|
'call_pattern/1__5__1'(H,F,G,I,A,B,D,E,C)
|
|
;
|
|
'call_pattern/1__5__0'(I,A,B,D,E,C)
|
|
).
|
|
'call_pattern/1__5__1'([],_,_,F,A,B,D,E,C) :-
|
|
'call_pattern/1__5__0'(F,A,B,D,E,C).
|
|
'call_pattern/1__5__1'([K|M],G,A,H,B,C,E,F,D) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,I,J),
|
|
'$via1_multi_hash_occurrence/4-1'(E,L) ->
|
|
'call_pattern/1__5__2'(L,I,J,K,M,G,A,H,B,C,E,F,D)
|
|
;
|
|
'call_pattern/1__5__1'(M,G,A,H,B,C,E,F,D)
|
|
).
|
|
'call_pattern/1__5__2'([],_,_,_,I,F,G,H,A,B,D,E,C) :-
|
|
'call_pattern/1__5__1'(I,F,G,H,A,B,D,E,C).
|
|
'call_pattern/1__5__2'([Q|R],J,K,A,L,H,B,I,C,D,F,G,E) :-
|
|
( Q=suspension(_,mutable(active),_,_,_,_,M,N,O,P),
|
|
M==F,
|
|
N==G,
|
|
O==J,
|
|
G1=t(140,D,B,Q,A),
|
|
'chr novel_production'(D,G1),
|
|
'chr novel_production'(B,G1),
|
|
'chr novel_production'(Q,G1),
|
|
'chr novel_production'(A,G1),
|
|
K=pragma(rule(S,T,_,U),ids(V,_),_,_,_),
|
|
memberchk_eq(P,V) ->
|
|
'chr extend_history'(D,G1),
|
|
activate_constraint(E1,_,D,F1),
|
|
( E1==yes ->
|
|
'$insert_in_store_call_pattern/1'(D)
|
|
;
|
|
true
|
|
),
|
|
select2(P,_,V,S,_,W),
|
|
ai_observation_abstract_constraints(W,H,X),
|
|
ai_observation_observe_list(odom([],E),X,odom([],Y)),
|
|
ai_observation_abstract_constraints(T,H,Z),
|
|
ai_observation_observe_list(odom([],Y),Z,odom([],A1)),
|
|
ai_observation_abstract_goal(U,H,B1),
|
|
call_pattern(odom(B1,A1)),
|
|
C1 is G+1,
|
|
D1=odom(occ(F,C1),E),
|
|
call_pattern(D1),
|
|
depends_on_as(odom(occ(F,G),E),odom(B1,A1),D1),
|
|
( D=suspension(_,mutable(active),_,mutable(F1),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'call_pattern/1__5__2'(R,J,K,A,L,H,B,I,C,D,F,G,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'call_pattern/1__5__2'(R,J,K,A,L,H,B,I,C,D,F,G,E)
|
|
).
|
|
'call_pattern/1__5'(A,B) :-
|
|
'call_pattern/1__6'(A,B).
|
|
'call_pattern/1__6'(A,B) :-
|
|
A=odom(C,D),
|
|
C=occ(E,F),
|
|
nb_getval('$chr_store_global_ground_chr_translate:abstract_constraints/1',G),
|
|
!,
|
|
'call_pattern/1__6__0'(G,A,B,E,F,D).
|
|
'call_pattern/1__6__0'([],A,B,_,_,_) :-
|
|
'call_pattern/1__7'(A,B).
|
|
'call_pattern/1__6__0'([G|I],A,B,D,E,C) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,F),
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule/2',H) ->
|
|
'call_pattern/1__6__1'(H,F,G,I,A,B,D,E,C)
|
|
;
|
|
'call_pattern/1__6__0'(I,A,B,D,E,C)
|
|
).
|
|
'call_pattern/1__6__1'([],_,_,F,A,B,D,E,C) :-
|
|
'call_pattern/1__6__0'(F,A,B,D,E,C).
|
|
'call_pattern/1__6__1'([K|M],G,A,H,B,C,E,F,D) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,I,J),
|
|
'$via1_multi_hash_occurrence/4-1'(E,L) ->
|
|
'call_pattern/1__6__2'(L,I,J,K,M,G,A,H,B,C,E,F,D)
|
|
;
|
|
'call_pattern/1__6__1'(M,G,A,H,B,C,E,F,D)
|
|
).
|
|
'call_pattern/1__6__2'([],_,_,_,I,F,G,H,A,B,D,E,C) :-
|
|
'call_pattern/1__6__1'(I,F,G,H,A,B,D,E,C).
|
|
'call_pattern/1__6__2'([Q|R],J,K,A,L,H,B,I,C,D,F,G,E) :-
|
|
( Q=suspension(_,mutable(active),_,_,_,_,M,N,O,P),
|
|
M==F,
|
|
N==G,
|
|
O==J,
|
|
I1=t(142,D,B,Q,A),
|
|
'chr novel_production'(D,I1),
|
|
'chr novel_production'(B,I1),
|
|
'chr novel_production'(Q,I1),
|
|
'chr novel_production'(A,I1),
|
|
K=pragma(rule(S,T,_,U),ids(_,V),_,_,_),
|
|
memberchk_eq(P,V) ->
|
|
'chr extend_history'(D,I1),
|
|
activate_constraint(G1,_,D,H1),
|
|
( G1==yes ->
|
|
'$insert_in_store_call_pattern/1'(D)
|
|
;
|
|
true
|
|
),
|
|
select2(P,_,V,T,_,W),
|
|
ai_observation_abstract_constraints(W,H,X),
|
|
ai_observation_observe_list(odom([],E),X,odom([],Y)),
|
|
ai_observation_abstract_constraints(S,H,Z),
|
|
ai_observation_observe_list(odom([],Y),Z,odom([],A1)),
|
|
ord_add_element(A1,F,B1),
|
|
ai_observation_abstract_goal(U,H,C1),
|
|
call_pattern(odom(C1,B1)),
|
|
( ord_memberchk(F,A1) ->
|
|
D1=no
|
|
;
|
|
D1=yes
|
|
),
|
|
E1 is G+1,
|
|
F1=odom(occ(F,E1),E),
|
|
call_pattern(F1),
|
|
depends_on_ap(odom(occ(F,G),E),odom(C1,B1),F1,D1),
|
|
( D=suspension(_,mutable(active),_,mutable(H1),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'call_pattern/1__6__2'(R,J,K,A,L,H,B,I,C,D,F,G,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'call_pattern/1__6__2'(R,J,K,A,L,H,B,I,C,D,F,G,E)
|
|
).
|
|
'call_pattern/1__6'(A,B) :-
|
|
'call_pattern/1__7'(A,B).
|
|
'call_pattern/1__7'(_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_call_pattern/1'(A)
|
|
;
|
|
true
|
|
).
|
|
final_answer_pattern(A,B) :-
|
|
'final_answer_pattern/2__0'(A,B,_).
|
|
'final_answer_pattern/2__0'(A,B,_) :-
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
ai_observation_leq(B,D),
|
|
!.
|
|
'final_answer_pattern/2__0'(A,B,C) :-
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(A,D),
|
|
!,
|
|
'final_answer_pattern/2__0__0'(D,A,B,C).
|
|
'final_answer_pattern/2__0__0'([],A,B,C) :-
|
|
'final_answer_pattern/2__1'(A,B,C).
|
|
'final_answer_pattern/2__0__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==A,
|
|
ai_observation_leq(E,B) ->
|
|
remove_constraint_internal(F,_,H),
|
|
( H==yes ->
|
|
'$delete_from_store_final_answer_pattern/2'(F)
|
|
;
|
|
true
|
|
),
|
|
'final_answer_pattern/2__0__0'(G,A,B,C)
|
|
;
|
|
'final_answer_pattern/2__0__0'(G,A,B,C)
|
|
).
|
|
'final_answer_pattern/2__0'(A,B,C) :-
|
|
'final_answer_pattern/2__1'(A,B,C).
|
|
'final_answer_pattern/2__1'(A,B,C) :-
|
|
'$via1_multi_hash_initial_call_pattern/1-1'(A,D),
|
|
!,
|
|
allocate_constraint(true,C,final_answer_pattern(A,B),[A,B]),
|
|
'final_answer_pattern/2__1__0'(D,A,B,C).
|
|
'final_answer_pattern/2__1__0'([],A,B,C) :-
|
|
'final_answer_pattern/2__2'(A,B,C).
|
|
'final_answer_pattern/2__1__0'([E|G],A,B,C) :-
|
|
( E=suspension(_,mutable(active),_,_,_,_,D),
|
|
D==A,
|
|
nb_getval('$chr_store_global_ground_chr_translate:abstract_constraints/1',F) ->
|
|
'final_answer_pattern/2__1__1'(F,E,G,A,B,C)
|
|
;
|
|
'final_answer_pattern/2__1__0'(G,A,B,C)
|
|
).
|
|
'final_answer_pattern/2__1__1'([],_,D,A,B,C) :-
|
|
'final_answer_pattern/2__1__0'(D,A,B,C).
|
|
'final_answer_pattern/2__1__1'([G|H],A,E,B,C,D) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,F),
|
|
K=t(130,A,D,G),
|
|
'chr novel_production'(A,K),
|
|
'chr novel_production'(D,K),
|
|
'chr novel_production'(G,K) ->
|
|
'chr extend_history'(D,K),
|
|
activate_constraint(I,_,D,J),
|
|
( I==yes ->
|
|
'$insert_in_store_final_answer_pattern/2'(D)
|
|
;
|
|
true
|
|
),
|
|
ai_observation_schedule_new_calls(F,C),
|
|
( D=suspension(_,mutable(active),_,mutable(J),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'final_answer_pattern/2__1__1'(H,A,E,B,C,D)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'final_answer_pattern/2__1__1'(H,A,E,B,C,D)
|
|
).
|
|
'final_answer_pattern/2__1'(A,B,C) :-
|
|
allocate_constraint(true,C,final_answer_pattern(A,B),[A,B]),
|
|
'final_answer_pattern/2__2'(A,B,C).
|
|
'final_answer_pattern/2__2'(A,B,C) :-
|
|
'$via1_multi_hash_depends_on/2-2'(A,D),
|
|
!,
|
|
'final_answer_pattern/2__2__0'(D,A,B,C).
|
|
'final_answer_pattern/2__2__0'([],A,B,C) :-
|
|
'final_answer_pattern/2__3'(A,B,C).
|
|
'final_answer_pattern/2__2__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
E==A,
|
|
J=t(132,F,C),
|
|
'chr novel_production'(F,J),
|
|
'chr novel_production'(C,J) ->
|
|
'chr extend_history'(C,J),
|
|
activate_constraint(H,_,C,I),
|
|
( H==yes ->
|
|
'$insert_in_store_final_answer_pattern/2'(C)
|
|
;
|
|
true
|
|
),
|
|
final_answer_pattern(D,B),
|
|
( C=suspension(_,mutable(active),_,mutable(I),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'final_answer_pattern/2__2__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'final_answer_pattern/2__2__0'(G,A,B,C)
|
|
).
|
|
'final_answer_pattern/2__2'(A,B,C) :-
|
|
'final_answer_pattern/2__3'(A,B,C).
|
|
'final_answer_pattern/2__3'(A,B,C) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:depends_on/2',D),
|
|
!,
|
|
'final_answer_pattern/2__3__0'(D,A,B,C).
|
|
'final_answer_pattern/2__3__0'([],A,B,C) :-
|
|
'final_answer_pattern/2__4'(A,B,C).
|
|
'final_answer_pattern/2__3__0'([E|F],A,B,C) :-
|
|
( E=suspension(_,mutable(active),_,_,_,_,D,_),
|
|
'$via1_multi_hash_depends_on_goal/2-1'(D,I),
|
|
'chr sbag_member'(G,I),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,H),
|
|
H==A ->
|
|
remove_constraint_internal(E,_,J),
|
|
( J==yes ->
|
|
'$delete_from_store_depends_on/2'(E)
|
|
;
|
|
true
|
|
),
|
|
'final_answer_pattern/2__3__0'(F,A,B,C)
|
|
;
|
|
'final_answer_pattern/2__3__0'(F,A,B,C)
|
|
).
|
|
'final_answer_pattern/2__3'(A,B,C) :-
|
|
'final_answer_pattern/2__4'(A,B,C).
|
|
'final_answer_pattern/2__4'(A,B,C) :-
|
|
'$via1_multi_hash_depends_on_goal/2-2'(A,D),
|
|
!,
|
|
'final_answer_pattern/2__4__0'(D,A,B,C).
|
|
'final_answer_pattern/2__4__0'([],A,B,C) :-
|
|
'final_answer_pattern/2__5'(A,B,C).
|
|
'final_answer_pattern/2__4__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
E==A,
|
|
M=t(136,F,C),
|
|
'chr novel_production'(F,M),
|
|
'chr novel_production'(C,M) ->
|
|
'chr extend_history'(C,M),
|
|
activate_constraint(K,_,C,L),
|
|
( K==yes ->
|
|
'$insert_in_store_final_answer_pattern/2'(C)
|
|
;
|
|
true
|
|
),
|
|
D=odom([_|H],_),
|
|
B=odom([],I),
|
|
J=odom(H,I),
|
|
call_pattern(J),
|
|
depends_on(D,J),
|
|
( C=suspension(_,mutable(active),_,mutable(L),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'final_answer_pattern/2__4__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'final_answer_pattern/2__4__0'(G,A,B,C)
|
|
).
|
|
'final_answer_pattern/2__4'(A,B,C) :-
|
|
'final_answer_pattern/2__5'(A,B,C).
|
|
'final_answer_pattern/2__5'(A,B,C) :-
|
|
'$via1_multi_hash_depends_on_as/3-2'(A,D),
|
|
!,
|
|
'final_answer_pattern/2__5__0'(D,A,B,C).
|
|
'final_answer_pattern/2__5__0'([],A,B,C) :-
|
|
'final_answer_pattern/2__6'(A,B,C).
|
|
'final_answer_pattern/2__5__0'([G|I],A,B,C) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,D,E,F),
|
|
E==A,
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(F,H) ->
|
|
'final_answer_pattern/2__5__1'(H,D,F,G,I,A,B,C)
|
|
;
|
|
'final_answer_pattern/2__5__0'(I,A,B,C)
|
|
).
|
|
'final_answer_pattern/2__5__1'([],_,_,_,D,A,B,C) :-
|
|
'final_answer_pattern/2__5__0'(D,A,B,C).
|
|
'final_answer_pattern/2__5__1'([J|K],E,F,A,G,B,C,D) :-
|
|
( J=suspension(_,mutable(active),_,_,_,_,H,I),
|
|
H==F,
|
|
O=t(141,A,D,J),
|
|
'chr novel_production'(A,O),
|
|
'chr novel_production'(D,O),
|
|
'chr novel_production'(J,O) ->
|
|
'chr extend_history'(D,O),
|
|
activate_constraint(M,_,D,N),
|
|
( M==yes ->
|
|
'$insert_in_store_final_answer_pattern/2'(D)
|
|
;
|
|
true
|
|
),
|
|
ai_observation_lub(C,I,L),
|
|
final_answer_pattern(E,L),
|
|
( D=suspension(_,mutable(active),_,mutable(N),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'final_answer_pattern/2__5__1'(K,E,F,A,G,B,C,D)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'final_answer_pattern/2__5__1'(K,E,F,A,G,B,C,D)
|
|
).
|
|
'final_answer_pattern/2__5'(A,B,C) :-
|
|
'final_answer_pattern/2__6'(A,B,C).
|
|
'final_answer_pattern/2__6'(A,B,C) :-
|
|
'$via1_multi_hash_depends_on_as/3-3'(A,D),
|
|
!,
|
|
'final_answer_pattern/2__6__0'(D,A,B,C).
|
|
'final_answer_pattern/2__6__0'([],A,B,C) :-
|
|
'final_answer_pattern/2__7'(A,B,C).
|
|
'final_answer_pattern/2__6__0'([G|I],A,B,C) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,D,E,F),
|
|
F==A,
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(E,H) ->
|
|
'final_answer_pattern/2__6__1'(H,D,E,G,I,A,B,C)
|
|
;
|
|
'final_answer_pattern/2__6__0'(I,A,B,C)
|
|
).
|
|
'final_answer_pattern/2__6__1'([],_,_,_,D,A,B,C) :-
|
|
'final_answer_pattern/2__6__0'(D,A,B,C).
|
|
'final_answer_pattern/2__6__1'([J|K],E,F,A,G,B,C,D) :-
|
|
( J=suspension(_,mutable(active),_,_,_,_,H,I),
|
|
H==F,
|
|
O=t(141,A,J,D),
|
|
'chr novel_production'(A,O),
|
|
'chr novel_production'(J,O),
|
|
'chr novel_production'(D,O) ->
|
|
'chr extend_history'(D,O),
|
|
activate_constraint(M,_,D,N),
|
|
( M==yes ->
|
|
'$insert_in_store_final_answer_pattern/2'(D)
|
|
;
|
|
true
|
|
),
|
|
ai_observation_lub(I,C,L),
|
|
final_answer_pattern(E,L),
|
|
( D=suspension(_,mutable(active),_,mutable(N),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'final_answer_pattern/2__6__1'(K,E,F,A,G,B,C,D)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'final_answer_pattern/2__6__1'(K,E,F,A,G,B,C,D)
|
|
).
|
|
'final_answer_pattern/2__6'(A,B,C) :-
|
|
'final_answer_pattern/2__7'(A,B,C).
|
|
'final_answer_pattern/2__7'(A,B,C) :-
|
|
'$via1_multi_hash_depends_on_ap/4-3'(A,D),
|
|
!,
|
|
'final_answer_pattern/2__7__0'(D,A,B,C).
|
|
'final_answer_pattern/2__7__0'([],A,B,C) :-
|
|
'final_answer_pattern/2__8'(A,B,C).
|
|
'final_answer_pattern/2__7__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,_,E,_),
|
|
E==A,
|
|
J=t(143,F,C),
|
|
'chr novel_production'(F,J),
|
|
'chr novel_production'(C,J) ->
|
|
'chr extend_history'(C,J),
|
|
activate_constraint(H,_,C,I),
|
|
( H==yes ->
|
|
'$insert_in_store_final_answer_pattern/2'(C)
|
|
;
|
|
true
|
|
),
|
|
final_answer_pattern(D,B),
|
|
( C=suspension(_,mutable(active),_,mutable(I),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'final_answer_pattern/2__7__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'final_answer_pattern/2__7__0'(G,A,B,C)
|
|
).
|
|
'final_answer_pattern/2__7'(A,B,C) :-
|
|
'final_answer_pattern/2__8'(A,B,C).
|
|
'final_answer_pattern/2__8'(A,B,C) :-
|
|
'$via1_multi_hash_depends_on_ap/4-2'(A,D),
|
|
!,
|
|
'final_answer_pattern/2__8__0'(D,A,B,C).
|
|
'final_answer_pattern/2__8__0'([],A,B,C) :-
|
|
'final_answer_pattern/2__9'(A,B,C).
|
|
'final_answer_pattern/2__8__0'([H|J],A,B,C) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,D,E,F,G),
|
|
E==A,
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(F,I) ->
|
|
'final_answer_pattern/2__8__1'(I,D,F,G,H,J,A,B,C)
|
|
;
|
|
'final_answer_pattern/2__8__0'(J,A,B,C)
|
|
).
|
|
'final_answer_pattern/2__8__1'([],_,_,_,_,D,A,B,C) :-
|
|
'final_answer_pattern/2__8__0'(D,A,B,C).
|
|
'final_answer_pattern/2__8__1'([K|L],E,F,G,A,H,B,C,D) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,I,J),
|
|
I==F,
|
|
U=t(144,A,D,K),
|
|
'chr novel_production'(A,U),
|
|
'chr novel_production'(D,U),
|
|
'chr novel_production'(K,U) ->
|
|
'chr extend_history'(D,U),
|
|
activate_constraint(S,_,D,T),
|
|
( S==yes ->
|
|
'$insert_in_store_final_answer_pattern/2'(D)
|
|
;
|
|
true
|
|
),
|
|
E=odom(occ(M,N),_),
|
|
( ai_observation_is_observed(C,M) ->
|
|
ai_observed(M,N)
|
|
;
|
|
ai_not_observed(M,N)
|
|
),
|
|
( G==yes ->
|
|
C=odom([],O),
|
|
ord_del_element(O,M,P),
|
|
Q=odom([],P)
|
|
;
|
|
Q=C
|
|
),
|
|
ai_observation_lub(Q,J,R),
|
|
final_answer_pattern(E,R),
|
|
( D=suspension(_,mutable(active),_,mutable(T),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'final_answer_pattern/2__8__1'(L,E,F,G,A,H,B,C,D)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'final_answer_pattern/2__8__1'(L,E,F,G,A,H,B,C,D)
|
|
).
|
|
'final_answer_pattern/2__8'(A,B,C) :-
|
|
'final_answer_pattern/2__9'(A,B,C).
|
|
'final_answer_pattern/2__9'(A,B,C) :-
|
|
'$via1_multi_hash_depends_on_ap/4-3'(A,D),
|
|
!,
|
|
'final_answer_pattern/2__9__0'(D,A,B,C).
|
|
'final_answer_pattern/2__9__0'([],A,B,C) :-
|
|
'final_answer_pattern/2__10'(A,B,C).
|
|
'final_answer_pattern/2__9__0'([H|J],A,B,C) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,D,E,F,G),
|
|
F==A,
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(E,I) ->
|
|
'final_answer_pattern/2__9__1'(I,D,E,G,H,J,A,B,C)
|
|
;
|
|
'final_answer_pattern/2__9__0'(J,A,B,C)
|
|
).
|
|
'final_answer_pattern/2__9__1'([],_,_,_,_,D,A,B,C) :-
|
|
'final_answer_pattern/2__9__0'(D,A,B,C).
|
|
'final_answer_pattern/2__9__1'([K|L],E,F,G,A,H,B,C,D) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,I,J),
|
|
I==F,
|
|
U=t(144,A,K,D),
|
|
'chr novel_production'(A,U),
|
|
'chr novel_production'(K,U),
|
|
'chr novel_production'(D,U) ->
|
|
'chr extend_history'(D,U),
|
|
activate_constraint(S,_,D,T),
|
|
( S==yes ->
|
|
'$insert_in_store_final_answer_pattern/2'(D)
|
|
;
|
|
true
|
|
),
|
|
E=odom(occ(M,N),_),
|
|
( ai_observation_is_observed(J,M) ->
|
|
ai_observed(M,N)
|
|
;
|
|
ai_not_observed(M,N)
|
|
),
|
|
( G==yes ->
|
|
J=odom([],O),
|
|
ord_del_element(O,M,P),
|
|
Q=odom([],P)
|
|
;
|
|
Q=J
|
|
),
|
|
ai_observation_lub(Q,C,R),
|
|
final_answer_pattern(E,R),
|
|
( D=suspension(_,mutable(active),_,mutable(T),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'final_answer_pattern/2__9__1'(L,E,F,G,A,H,B,C,D)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'final_answer_pattern/2__9__1'(L,E,F,G,A,H,B,C,D)
|
|
).
|
|
'final_answer_pattern/2__9'(A,B,C) :-
|
|
'final_answer_pattern/2__10'(A,B,C).
|
|
'final_answer_pattern/2__10'(_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_final_answer_pattern/2'(A)
|
|
;
|
|
true
|
|
).
|
|
abstract_constraints(A) :-
|
|
'abstract_constraints/1__0'(A,_).
|
|
'abstract_constraints/1__0'(A,B) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:initial_call_pattern/1',C),
|
|
!,
|
|
allocate_constraint(true,B,abstract_constraints(A),[A]),
|
|
'abstract_constraints/1__0__0'(C,A,B).
|
|
'abstract_constraints/1__0__0'([],A,B) :-
|
|
'abstract_constraints/1__1'(A,B).
|
|
'abstract_constraints/1__0__0'([D|F],A,B) :-
|
|
( D=suspension(_,mutable(active),_,_,_,_,C),
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(C,E) ->
|
|
'abstract_constraints/1__0__1'(E,C,D,F,A,B)
|
|
;
|
|
'abstract_constraints/1__0__0'(F,A,B)
|
|
).
|
|
'abstract_constraints/1__0__1'([],_,_,C,A,B) :-
|
|
'abstract_constraints/1__0__0'(C,A,B).
|
|
'abstract_constraints/1__0__1'([H|I],D,A,E,B,C) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,F,G),
|
|
F==D,
|
|
L=t(130,A,H,C),
|
|
'chr novel_production'(A,L),
|
|
'chr novel_production'(H,L),
|
|
'chr novel_production'(C,L) ->
|
|
'chr extend_history'(C,L),
|
|
activate_constraint(J,_,C,K),
|
|
( J==yes ->
|
|
'$insert_in_store_abstract_constraints/1'(C)
|
|
;
|
|
true
|
|
),
|
|
ai_observation_schedule_new_calls(B,G),
|
|
( C=suspension(_,mutable(active),_,mutable(K),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'abstract_constraints/1__0__1'(I,D,A,E,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'abstract_constraints/1__0__1'(I,D,A,E,B,C)
|
|
).
|
|
'abstract_constraints/1__0'(A,B) :-
|
|
allocate_constraint(true,B,abstract_constraints(A),[A]),
|
|
'abstract_constraints/1__1'(A,B).
|
|
'abstract_constraints/1__1'(A,B) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:call_pattern/1',C),
|
|
!,
|
|
'abstract_constraints/1__1__0'(C,A,B).
|
|
'abstract_constraints/1__1__0'([],A,B) :-
|
|
'abstract_constraints/1__2'(A,B).
|
|
'abstract_constraints/1__1__0'([D|E],A,B) :-
|
|
( D=suspension(_,mutable(active),_,_,_,_,C),
|
|
C=odom(F,G),
|
|
K=t(139,D,B),
|
|
'chr novel_production'(D,K),
|
|
'chr novel_production'(B,K),
|
|
memberchk_eq(F,A) ->
|
|
'chr extend_history'(B,K),
|
|
activate_constraint(I,_,B,J),
|
|
( I==yes ->
|
|
'$insert_in_store_abstract_constraints/1'(B)
|
|
;
|
|
true
|
|
),
|
|
H=odom(occ(F,1),G),
|
|
call_pattern(H),
|
|
depends_on(odom(F,G),H),
|
|
( B=suspension(_,mutable(active),_,mutable(J),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'abstract_constraints/1__1__0'(E,A,B)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'abstract_constraints/1__1__0'(E,A,B)
|
|
).
|
|
'abstract_constraints/1__1'(A,B) :-
|
|
'abstract_constraints/1__2'(A,B).
|
|
'abstract_constraints/1__2'(A,B) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:call_pattern/1',C),
|
|
!,
|
|
'abstract_constraints/1__2__0'(C,A,B).
|
|
'abstract_constraints/1__2__0'([],A,B) :-
|
|
'abstract_constraints/1__3'(A,B).
|
|
'abstract_constraints/1__2__0'([D|J],A,B) :-
|
|
( D=suspension(_,mutable(active),_,_,_,_,C),
|
|
C=odom(E,F),
|
|
E=occ(G,H),
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule/2',I) ->
|
|
'abstract_constraints/1__2__1'(I,G,H,F,D,J,A,B)
|
|
;
|
|
'abstract_constraints/1__2__0'(J,A,B)
|
|
).
|
|
'abstract_constraints/1__2__1'([],_,_,_,_,C,A,B) :-
|
|
'abstract_constraints/1__2__0'(C,A,B).
|
|
'abstract_constraints/1__2__1'([J|L],E,F,D,A,G,B,C) :-
|
|
( J=suspension(_,mutable(active),_,_,_,_,H,I),
|
|
'$via1_multi_hash_occurrence/4-1'(E,K) ->
|
|
'abstract_constraints/1__2__2'(K,H,I,J,L,E,F,D,A,G,B,C)
|
|
;
|
|
'abstract_constraints/1__2__1'(L,E,F,D,A,G,B,C)
|
|
).
|
|
'abstract_constraints/1__2__2'([],_,_,_,H,E,F,D,C,G,A,B) :-
|
|
'abstract_constraints/1__2__1'(H,E,F,D,C,G,A,B).
|
|
'abstract_constraints/1__2__2'([P|Q],I,J,A,K,F,G,E,B,H,C,D) :-
|
|
( P=suspension(_,mutable(active),_,_,_,_,L,M,N,O),
|
|
L==F,
|
|
M==G,
|
|
N==I,
|
|
F1=t(140,B,D,P,A),
|
|
'chr novel_production'(B,F1),
|
|
'chr novel_production'(D,F1),
|
|
'chr novel_production'(P,F1),
|
|
'chr novel_production'(A,F1),
|
|
J=pragma(rule(R,S,_,T),ids(U,_),_,_,_),
|
|
memberchk_eq(O,U) ->
|
|
'chr extend_history'(D,F1),
|
|
activate_constraint(D1,_,D,E1),
|
|
( D1==yes ->
|
|
'$insert_in_store_abstract_constraints/1'(D)
|
|
;
|
|
true
|
|
),
|
|
select2(O,_,U,R,_,V),
|
|
ai_observation_abstract_constraints(V,C,W),
|
|
ai_observation_observe_list(odom([],E),W,odom([],X)),
|
|
ai_observation_abstract_constraints(S,C,Y),
|
|
ai_observation_observe_list(odom([],X),Y,odom([],Z)),
|
|
ai_observation_abstract_goal(T,C,A1),
|
|
call_pattern(odom(A1,Z)),
|
|
B1 is G+1,
|
|
C1=odom(occ(F,B1),E),
|
|
call_pattern(C1),
|
|
depends_on_as(odom(occ(F,G),E),odom(A1,Z),C1),
|
|
( D=suspension(_,mutable(active),_,mutable(E1),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'abstract_constraints/1__2__2'(Q,I,J,A,K,F,G,E,B,H,C,D)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'abstract_constraints/1__2__2'(Q,I,J,A,K,F,G,E,B,H,C,D)
|
|
).
|
|
'abstract_constraints/1__2'(A,B) :-
|
|
'abstract_constraints/1__3'(A,B).
|
|
'abstract_constraints/1__3'(A,B) :-
|
|
nb_getval('$chr_store_global_ground_chr_translate:call_pattern/1',C),
|
|
!,
|
|
'abstract_constraints/1__3__0'(C,A,B).
|
|
'abstract_constraints/1__3__0'([],A,B) :-
|
|
'abstract_constraints/1__4'(A,B).
|
|
'abstract_constraints/1__3__0'([D|J],A,B) :-
|
|
( D=suspension(_,mutable(active),_,_,_,_,C),
|
|
C=odom(E,F),
|
|
E=occ(G,H),
|
|
nb_getval('$chr_store_global_ground_chr_translate:rule/2',I) ->
|
|
'abstract_constraints/1__3__1'(I,G,H,F,D,J,A,B)
|
|
;
|
|
'abstract_constraints/1__3__0'(J,A,B)
|
|
).
|
|
'abstract_constraints/1__3__1'([],_,_,_,_,C,A,B) :-
|
|
'abstract_constraints/1__3__0'(C,A,B).
|
|
'abstract_constraints/1__3__1'([J|L],E,F,D,A,G,B,C) :-
|
|
( J=suspension(_,mutable(active),_,_,_,_,H,I),
|
|
'$via1_multi_hash_occurrence/4-1'(E,K) ->
|
|
'abstract_constraints/1__3__2'(K,H,I,J,L,E,F,D,A,G,B,C)
|
|
;
|
|
'abstract_constraints/1__3__1'(L,E,F,D,A,G,B,C)
|
|
).
|
|
'abstract_constraints/1__3__2'([],_,_,_,H,E,F,D,C,G,A,B) :-
|
|
'abstract_constraints/1__3__1'(H,E,F,D,C,G,A,B).
|
|
'abstract_constraints/1__3__2'([P|Q],I,J,A,K,F,G,E,B,H,C,D) :-
|
|
( P=suspension(_,mutable(active),_,_,_,_,L,M,N,O),
|
|
L==F,
|
|
M==G,
|
|
N==I,
|
|
H1=t(142,B,D,P,A),
|
|
'chr novel_production'(B,H1),
|
|
'chr novel_production'(D,H1),
|
|
'chr novel_production'(P,H1),
|
|
'chr novel_production'(A,H1),
|
|
J=pragma(rule(R,S,_,T),ids(_,U),_,_,_),
|
|
memberchk_eq(O,U) ->
|
|
'chr extend_history'(D,H1),
|
|
activate_constraint(F1,_,D,G1),
|
|
( F1==yes ->
|
|
'$insert_in_store_abstract_constraints/1'(D)
|
|
;
|
|
true
|
|
),
|
|
select2(O,_,U,S,_,V),
|
|
ai_observation_abstract_constraints(V,C,W),
|
|
ai_observation_observe_list(odom([],E),W,odom([],X)),
|
|
ai_observation_abstract_constraints(R,C,Y),
|
|
ai_observation_observe_list(odom([],X),Y,odom([],Z)),
|
|
ord_add_element(Z,F,A1),
|
|
ai_observation_abstract_goal(T,C,B1),
|
|
call_pattern(odom(B1,A1)),
|
|
( ord_memberchk(F,Z) ->
|
|
C1=no
|
|
;
|
|
C1=yes
|
|
),
|
|
D1 is G+1,
|
|
E1=odom(occ(F,D1),E),
|
|
call_pattern(E1),
|
|
depends_on_ap(odom(occ(F,G),E),odom(B1,A1),E1,C1),
|
|
( D=suspension(_,mutable(active),_,mutable(G1),_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'abstract_constraints/1__3__2'(Q,I,J,A,K,F,G,E,B,H,C,D)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'abstract_constraints/1__3__2'(Q,I,J,A,K,F,G,E,B,H,C,D)
|
|
).
|
|
'abstract_constraints/1__3'(A,B) :-
|
|
'abstract_constraints/1__4'(A,B).
|
|
'abstract_constraints/1__4'(_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_abstract_constraints/1'(A)
|
|
;
|
|
true
|
|
).
|
|
depends_on(A,B) :-
|
|
'depends_on/2__0'(A,B,_).
|
|
'depends_on/2__0'(A,B,C) :-
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(B,D),
|
|
!,
|
|
allocate_constraint(true,C,depends_on(A,B),[A,B]),
|
|
'depends_on/2__0__0'(D,A,B,C).
|
|
'depends_on/2__0__0'([],A,B,C) :-
|
|
'depends_on/2__1'(A,B,C).
|
|
'depends_on/2__0__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==B,
|
|
J=t(132,C,F),
|
|
'chr novel_production'(C,J),
|
|
'chr novel_production'(F,J) ->
|
|
'chr extend_history'(C,J),
|
|
activate_constraint(H,_,C,I),
|
|
( H==yes ->
|
|
'$insert_in_store_depends_on/2'(C)
|
|
;
|
|
true
|
|
),
|
|
final_answer_pattern(A,E),
|
|
( C=suspension(_,mutable(active),_,mutable(I),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'depends_on/2__0__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'depends_on/2__0__0'(G,A,B,C)
|
|
).
|
|
'depends_on/2__0'(A,B,C) :-
|
|
allocate_constraint(true,C,depends_on(A,B),[A,B]),
|
|
'depends_on/2__1'(A,B,C).
|
|
'depends_on/2__1'(A,_,B) :-
|
|
'$via1_multi_hash_depends_on_goal/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(D,G),
|
|
'chr sbag_member'(F,G),
|
|
F=suspension(_,mutable(active),_,_,_,_,_,_),
|
|
!,
|
|
( var(B) ->
|
|
true
|
|
;
|
|
remove_constraint_internal(B,_,H),
|
|
( H==yes ->
|
|
'$delete_from_store_depends_on/2'(B)
|
|
;
|
|
true
|
|
)
|
|
).
|
|
'depends_on/2__1'(_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_depends_on/2'(A)
|
|
;
|
|
true
|
|
).
|
|
depends_on_ap(A,B,C,D) :-
|
|
'depends_on_ap/4__0'(A,B,C,D,_).
|
|
'depends_on_ap/4__0'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(C,F),
|
|
!,
|
|
allocate_constraint(true,E,depends_on_ap(A,B,C,D),[A,B,C,D]),
|
|
'depends_on_ap/4__0__0'(F,A,B,C,D,E).
|
|
'depends_on_ap/4__0__0'([],A,B,C,D,E) :-
|
|
'depends_on_ap/4__1'(A,B,C,D,E).
|
|
'depends_on_ap/4__0__0'([H|I],A,B,C,D,E) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,F,G),
|
|
F==C,
|
|
L=t(143,E,H),
|
|
'chr novel_production'(E,L),
|
|
'chr novel_production'(H,L) ->
|
|
'chr extend_history'(E,L),
|
|
activate_constraint(J,_,E,K),
|
|
( J==yes ->
|
|
'$insert_in_store_depends_on_ap/4'(E)
|
|
;
|
|
true
|
|
),
|
|
final_answer_pattern(A,G),
|
|
( E=suspension(_,mutable(active),_,mutable(K),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'depends_on_ap/4__0__0'(I,A,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'depends_on_ap/4__0__0'(I,A,B,C,D,E)
|
|
).
|
|
'depends_on_ap/4__0'(A,B,C,D,E) :-
|
|
allocate_constraint(true,E,depends_on_ap(A,B,C,D),[A,B,C,D]),
|
|
'depends_on_ap/4__1'(A,B,C,D,E).
|
|
'depends_on_ap/4__1'(A,B,C,D,E) :-
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(B,F),
|
|
!,
|
|
'depends_on_ap/4__1__0'(F,A,B,C,D,E).
|
|
'depends_on_ap/4__1__0'([],A,B,C,D,E) :-
|
|
'depends_on_ap/4__2'(A,B,C,D,E).
|
|
'depends_on_ap/4__1__0'([H|J],A,B,C,D,E) :-
|
|
( H=suspension(_,mutable(active),_,_,_,_,F,G),
|
|
F==B,
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(C,I) ->
|
|
'depends_on_ap/4__1__1'(I,G,H,J,A,B,C,D,E)
|
|
;
|
|
'depends_on_ap/4__1__0'(J,A,B,C,D,E)
|
|
).
|
|
'depends_on_ap/4__1__1'([],_,_,F,A,B,C,D,E) :-
|
|
'depends_on_ap/4__1__0'(F,A,B,C,D,E).
|
|
'depends_on_ap/4__1__1'([K|L],G,A,H,B,C,D,E,F) :-
|
|
( K=suspension(_,mutable(active),_,_,_,_,I,J),
|
|
K\==A,
|
|
I==D,
|
|
U=t(144,F,A,K),
|
|
'chr novel_production'(F,U),
|
|
'chr novel_production'(A,U),
|
|
'chr novel_production'(K,U) ->
|
|
'chr extend_history'(F,U),
|
|
activate_constraint(S,_,F,T),
|
|
( S==yes ->
|
|
'$insert_in_store_depends_on_ap/4'(F)
|
|
;
|
|
true
|
|
),
|
|
B=odom(occ(M,N),_),
|
|
( ai_observation_is_observed(G,M) ->
|
|
ai_observed(M,N)
|
|
;
|
|
ai_not_observed(M,N)
|
|
),
|
|
( E==yes ->
|
|
G=odom([],O),
|
|
ord_del_element(O,M,P),
|
|
Q=odom([],P)
|
|
;
|
|
Q=G
|
|
),
|
|
ai_observation_lub(Q,J,R),
|
|
final_answer_pattern(B,R),
|
|
( F=suspension(_,mutable(active),_,mutable(T),_,_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'depends_on_ap/4__1__1'(L,G,A,H,B,C,D,E,F)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'depends_on_ap/4__1__1'(L,G,A,H,B,C,D,E,F)
|
|
).
|
|
'depends_on_ap/4__1'(A,B,C,D,E) :-
|
|
'depends_on_ap/4__2'(A,B,C,D,E).
|
|
'depends_on_ap/4__2'(_,_,_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_depends_on_ap/4'(A)
|
|
;
|
|
true
|
|
).
|
|
depends_on_goal(A,B) :-
|
|
'depends_on_goal/2__0'(A,B,_).
|
|
'depends_on_goal/2__0'(A,B,C) :-
|
|
'$via1_multi_hash_depends_on/2-1'(A,D),
|
|
!,
|
|
'depends_on_goal/2__0__0'(D,A,B,C).
|
|
'depends_on_goal/2__0__0'([],A,B,C) :-
|
|
'depends_on_goal/2__1'(A,B,C).
|
|
'depends_on_goal/2__0__0'([E|F],A,B,C) :-
|
|
( E=suspension(_,mutable(active),_,_,_,_,D,_),
|
|
D==A,
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(B,H),
|
|
'chr sbag_member'(G,H),
|
|
G=suspension(_,mutable(active),_,_,_,_,_,_) ->
|
|
remove_constraint_internal(E,_,I),
|
|
( I==yes ->
|
|
'$delete_from_store_depends_on/2'(E)
|
|
;
|
|
true
|
|
),
|
|
'depends_on_goal/2__0__0'(F,A,B,C)
|
|
;
|
|
'depends_on_goal/2__0__0'(F,A,B,C)
|
|
).
|
|
'depends_on_goal/2__0'(A,B,C) :-
|
|
'depends_on_goal/2__1'(A,B,C).
|
|
'depends_on_goal/2__1'(A,B,C) :-
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(B,D),
|
|
!,
|
|
allocate_constraint(true,C,depends_on_goal(A,B),[A,B]),
|
|
'depends_on_goal/2__1__0'(D,A,B,C).
|
|
'depends_on_goal/2__1__0'([],A,B,C) :-
|
|
'depends_on_goal/2__2'(A,B,C).
|
|
'depends_on_goal/2__1__0'([F|G],A,B,C) :-
|
|
( F=suspension(_,mutable(active),_,_,_,_,D,E),
|
|
D==B,
|
|
M=t(136,C,F),
|
|
'chr novel_production'(C,M),
|
|
'chr novel_production'(F,M) ->
|
|
'chr extend_history'(C,M),
|
|
activate_constraint(K,_,C,L),
|
|
( K==yes ->
|
|
'$insert_in_store_depends_on_goal/2'(C)
|
|
;
|
|
true
|
|
),
|
|
A=odom([_|H],_),
|
|
E=odom([],I),
|
|
J=odom(H,I),
|
|
call_pattern(J),
|
|
depends_on(A,J),
|
|
( C=suspension(_,mutable(active),_,mutable(L),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'depends_on_goal/2__1__0'(G,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'depends_on_goal/2__1__0'(G,A,B,C)
|
|
).
|
|
'depends_on_goal/2__1'(A,B,C) :-
|
|
allocate_constraint(true,C,depends_on_goal(A,B),[A,B]),
|
|
'depends_on_goal/2__2'(A,B,C).
|
|
'depends_on_goal/2__2'(_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_depends_on_goal/2'(A)
|
|
;
|
|
true
|
|
).
|
|
ai_observed(A,B) :-
|
|
'$via1_multi_hash_ai_not_observed/2-1'(A,C),
|
|
!,
|
|
'ai_observed/2__0__0'(C,A,B).
|
|
'ai_observed/2__0__0'([],A,B) :-
|
|
'ai_observed/2__1'(A,B).
|
|
'ai_observed/2__0__0'([E|F],A,B) :-
|
|
( E=suspension(_,mutable(active),_,_,_,_,C,D),
|
|
C==A,
|
|
D==B ->
|
|
remove_constraint_internal(E,_,G),
|
|
( G==yes ->
|
|
'$delete_from_store_ai_not_observed/2'(E)
|
|
;
|
|
true
|
|
),
|
|
'ai_observed/2__0__0'(F,A,B)
|
|
;
|
|
'ai_observed/2__0__0'(F,A,B)
|
|
).
|
|
ai_observed(A,B) :-
|
|
'ai_observed/2__1'(A,B).
|
|
'ai_observed/2__1'(A,B) :-
|
|
'$via1_multi_hash_ai_observed/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
D=B,
|
|
!.
|
|
'ai_observed/2__1'(A,B) :-
|
|
insert_constraint_internal(_,_,C,true,ai_observed(A,B),[A,B]),
|
|
'$insert_in_store_ai_observed/2'(C).
|
|
ai_not_observed(A,B) :-
|
|
'ai_not_observed/2__0'(A,B,_).
|
|
'ai_not_observed/2__0'(A,B,C) :-
|
|
'$via1_multi_hash_stored/3-1'(A,D),
|
|
!,
|
|
allocate_constraint(true,C,ai_not_observed(A,B),[A,B]),
|
|
'ai_not_observed/2__0__0'(D,A,B,C).
|
|
'ai_not_observed/2__0__0'([],A,B,C) :-
|
|
'ai_not_observed/2__1'(A,B,C).
|
|
'ai_not_observed/2__0__0'([G|H],A,B,C) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,D,E,F),
|
|
D==A,
|
|
E==B,
|
|
F=yes,
|
|
'$via1_multi_hash_stored_complete/3-1'(A,L),
|
|
'chr sbag_member'(I,L),
|
|
I=suspension(_,mutable(active),_,_,_,_,_,J,K),
|
|
B<J ->
|
|
remove_constraint_internal(G,_,M),
|
|
( M==yes ->
|
|
'$delete_from_store_stored/3'(G)
|
|
;
|
|
true
|
|
),
|
|
remove_constraint_internal(I,_,N),
|
|
( N==yes ->
|
|
'$delete_from_store_stored_complete/3'(I)
|
|
;
|
|
true
|
|
),
|
|
activate_constraint(P,_,C,Q),
|
|
( P==yes ->
|
|
'$insert_in_store_ai_not_observed/2'(C)
|
|
;
|
|
true
|
|
),
|
|
O is K-1,
|
|
stored(A,B,maybe),
|
|
stored_complete(A,J,O),
|
|
( C=suspension(_,mutable(active),_,mutable(Q),_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'ai_not_observed/2__0__0'(H,A,B,C)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'ai_not_observed/2__0__0'(H,A,B,C)
|
|
).
|
|
'ai_not_observed/2__0'(A,B,C) :-
|
|
allocate_constraint(true,C,ai_not_observed(A,B),[A,B]),
|
|
'ai_not_observed/2__1'(A,B,C).
|
|
'ai_not_observed/2__1'(A,B,C) :-
|
|
'$via1_multi_hash_ai_observed/2-1'(A,F),
|
|
'chr sbag_member'(D,F),
|
|
D=suspension(_,mutable(active),_,_,_,_,_,E),
|
|
E=B,
|
|
!,
|
|
( var(C) ->
|
|
true
|
|
;
|
|
remove_constraint_internal(C,_,G),
|
|
( G==yes ->
|
|
'$delete_from_store_ai_not_observed/2'(C)
|
|
;
|
|
true
|
|
)
|
|
).
|
|
'ai_not_observed/2__1'(A,B,C) :-
|
|
'$via1_multi_hash_ai_not_observed/2-1'(A,F),
|
|
'chr sbag_member'(D,F),
|
|
D=suspension(_,mutable(active),_,_,_,_,_,E),
|
|
E=B,
|
|
!,
|
|
( var(C) ->
|
|
true
|
|
;
|
|
remove_constraint_internal(C,_,G),
|
|
( G==yes ->
|
|
'$delete_from_store_ai_not_observed/2'(C)
|
|
;
|
|
true
|
|
)
|
|
).
|
|
'ai_not_observed/2__1'(_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_ai_not_observed/2'(A)
|
|
;
|
|
true
|
|
).
|
|
ai_is_observed(A,B) :-
|
|
'$via1_multi_hash_ai_not_observed/2-1'(A,E),
|
|
'chr sbag_member'(C,E),
|
|
C=suspension(_,mutable(active),_,_,_,_,_,D),
|
|
D=B,
|
|
!,
|
|
fail.
|
|
ai_is_observed(_,_).
|
|
depends_on_as(A,B,C) :-
|
|
'depends_on_as/3__0'(A,B,C,_).
|
|
'depends_on_as/3__0'(A,B,C,D) :-
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(B,E),
|
|
!,
|
|
allocate_constraint(true,D,depends_on_as(A,B,C),[A,B,C]),
|
|
'depends_on_as/3__0__0'(E,A,B,C,D).
|
|
'depends_on_as/3__0__0'([],A,B,C,D) :-
|
|
'depends_on_as/3__1'(A,B,C,D).
|
|
'depends_on_as/3__0__0'([G|I],A,B,C,D) :-
|
|
( G=suspension(_,mutable(active),_,_,_,_,E,F),
|
|
E==B,
|
|
'$via1_multi_hash_final_answer_pattern/2-1'(C,H) ->
|
|
'depends_on_as/3__0__1'(H,F,G,I,A,B,C,D)
|
|
;
|
|
'depends_on_as/3__0__0'(I,A,B,C,D)
|
|
).
|
|
'depends_on_as/3__0__1'([],_,_,E,A,B,C,D) :-
|
|
'depends_on_as/3__0__0'(E,A,B,C,D).
|
|
'depends_on_as/3__0__1'([J|K],F,A,G,B,C,D,E) :-
|
|
( J=suspension(_,mutable(active),_,_,_,_,H,I),
|
|
J\==A,
|
|
H==D,
|
|
O=t(141,E,A,J),
|
|
'chr novel_production'(E,O),
|
|
'chr novel_production'(A,O),
|
|
'chr novel_production'(J,O) ->
|
|
'chr extend_history'(E,O),
|
|
activate_constraint(M,_,E,N),
|
|
( M==yes ->
|
|
'$insert_in_store_depends_on_as/3'(E)
|
|
;
|
|
true
|
|
),
|
|
ai_observation_lub(F,I,L),
|
|
final_answer_pattern(B,L),
|
|
( E=suspension(_,mutable(active),_,mutable(N),_,_,_,_,_) ->
|
|
'chr update_mutable'(inactive,mutable(active)),
|
|
'depends_on_as/3__0__1'(K,F,A,G,B,C,D,E)
|
|
;
|
|
true
|
|
)
|
|
;
|
|
'depends_on_as/3__0__1'(K,F,A,G,B,C,D,E)
|
|
).
|
|
'depends_on_as/3__0'(A,B,C,D) :-
|
|
allocate_constraint(true,D,depends_on_as(A,B,C),[A,B,C]),
|
|
'depends_on_as/3__1'(A,B,C,D).
|
|
'depends_on_as/3__1'(_,_,_,A) :-
|
|
activate_constraint(B,_,A,_),
|
|
( B==yes ->
|
|
'$insert_in_store_depends_on_as/3'(A)
|
|
;
|
|
true
|
|
).
|