View source with formatted comments or as raw
    1/*  Generated by CHR bootstrap compiler
    2    From: /tmp/src/swipl-9.1.11/packages/chr/chr_translate.chr
    3    Date: Tue Jul  4 12:28:26 2023
    4
    5    DO NOT EDIT.  EDIT THE CHR FILE INSTEAD
    6*/
    7
    8:- module(chr_translate,
    9          [ chr_translate/2,
   10            chr_translate_line_info/3
   11          ]).   12:- use_module(chr(chr_runtime)).   13:- style_check(- (discontiguous)).   14:- style_check(-singleton).   15:- style_check(-no_effect).   16:- use_module(library(lists)).   17:- use_module(library(sort)).   18:- use_module(library(ordsets)).   19:- use_module(library(aggregate)).   20:- use_module(library(apply_macros)).   21:- use_module(library(occurs)).   22:- use_module(library(assoc)).   23:- use_module(library(dialect/hprolog)).   24:- use_module(chr(pairlist)).   25:- use_module(chr(a_star)).   26:- use_module(chr(listmap)).   27:- use_module(chr(clean_code)).   28:- use_module(chr(builtins)).   29:- use_module(chr(find)).   30:- use_module(chr(binomialheap)).   31:- use_module(chr(guard_entailment)).   32:- use_module(chr(chr_compiler_options)).   33:- use_module(chr(chr_compiler_utility)).   34:- use_module(chr(chr_compiler_errors)).   35:- include(chr(chr_op)).
   36:- op(1150, fx, chr_type).   37:- op(1150, fx, chr_declaration).   38:- op(1130, xfx, --->).   39:- op(980, fx, +).   40:- op(980, fx, -).   41:- op(980, fx, ?).   42:- op(1150, fx, constraints).   43:- op(1150, fx, chr_constraint).   44format_storetype(multi_store(A)) :-
   45    !,
   46    maplist(format_storetype, A).
   47format_storetype(atomic_constants(A, B, _)) :-
   48    format('\t* a trie index on the argument(s) ~w for the ground terms ~w\n',
   49           [A, B]).
   50format_storetype(ground_constants(A, B, _)) :-
   51    format('\t* a trie index on the argument(s) ~w for the ground terms ~w\n',
   52           [A, B]).
   53format_storetype(A) :-
   54    format('\t* ~w\n', [A]).
   55get_constraint_arg_type(A, B, C) :-
   56    get_constraint_type(A, D),
   57    nth1(B, D, E),
   58    unalias_type(E, C).
   59partial_store(ground_constants(_, _, incomplete)).
   60partial_store(atomic_constants(_, _, incomplete)).
   61late_allocation_analysis(A) :-
   62    (   chr_pp_flag(late_allocation, on)
   63    ->  maplist(late_allocation, A)
   64    ;   true
   65    ).
   66late_allocation(A) :-
   67    late_allocation(A, 0).
   68late_allocation(A, B) :-
   69    allocation_occurrence(A, B),
   70    !.
   71late_allocation(A, B) :-
   72    C is B+1,
   73    late_allocation(A, C).
   74stored_in_guard_before_next_kept_occurrence(A, B) :-
   75    chr_pp_flag(store_in_guards, on),
   76    C is B+1,
   77    stored_in_guard_lookahead(A, C).
   78set_constraint_indices(A) :-
   79    set_constraint_indices(A, 1).
   80set_constraint_indices([], A) :-
   81    B is A-1,
   82    max_constraint_index(B).
   83set_constraint_indices([A|B], C) :-
   84    (   (   chr_pp_flag(debugable, on)
   85        ;   \+ only_ground_indexed_arguments(A),
   86            is_stored(A)
   87        ;   is_stored(A),
   88            get_store_type(A, default)
   89        ;   get_store_type(A, var_assoc_store(_, _))
   90        )
   91    ->  constraint_index(A, C),
   92        D is C+1,
   93        set_constraint_indices(B, D)
   94    ;   set_constraint_indices(B, C)
   95    ).
   96type_indexed_identifier_structure(A, B) :-
   97    type_indexed_identifier_name(A,
   98                                 type_indexed_identifier_struct,
   99                                 C),
  100    get_type_indexed_identifier_size(A, D),
  101    functor(B, C, D).
  102type_indexed_identifier_name(A, B, C) :-
  103    (   atom(A)
  104    ->  D=A
  105    ;   term_to_atom(A, D)
  106    ),
  107    atom_concat_list([B, '_', D], C).
  108chr_translate(A, B) :-
  109    chr_translate_line_info(A, bootstrap, B).
  110chr_translate_line_info(A, B, C) :-
  111    chr_banner,
  112    restart_after_flattening(A, D),
  113    init_chr_pp_flags,
  114    chr_source_file(B),
  115    partition_clauses(D, E, F, G),
  116    chr_compiler_options:sanity_check,
  117    dump_code(D),
  118    check_declared_constraints(E),
  119    generate_show_constraint(E, H, F, I),
  120    add_constraints(H),
  121    add_rules(I),
  122    generate_never_stored_rules(H, J),
  123    add_rules(J),
  124    append(I, J, K),
  125    chr_analysis(K, H, D),
  126    time('constraint code generation',
  127         chr_translate:constraints_code(H, L)),
  128    time('validate store assumptions',
  129         chr_translate:validate_store_type_assumptions(H)),
  130    phase_end(validate_store_type_assumptions),
  131    used_states_known,
  132    time('store code generation',
  133         chr_translate:store_management_preds(H, M)),
  134    insert_declarations(G, N),
  135    chr_module_declaration(O),
  136    append([M, L, O, [end_of_file]], P),
  137    clean_clauses(P, Q),
  138    append([N, Q], C),
  139    dump_code(C),
  140    !.
  141chr_analysis(A, B, C) :-
  142    maplist(pragma_rule_to_ast_rule, A, D),
  143    check_rules(A, D, B),
  144    time('type checking', chr_translate:static_type_check(A, D)),
  145    collect_constants(A, D, B, C),
  146    add_occurrences(A, D),
  147    time('functional dependency',
  148         chr_translate:functional_dependency_analysis(A)),
  149    time('set semantics', chr_translate:set_semantics_rules(A)),
  150    time('symmetry analysis', chr_translate:symmetry_analysis(A)),
  151    time('guard simplification', chr_translate:guard_simplification),
  152    time('late storage', chr_translate:storage_analysis(B)),
  153    time(observation, chr_translate:observation_analysis(B)),
  154    time('ai observation', chr_translate:ai_observation_analysis(B)),
  155    time('late allocation', chr_translate:late_allocation_analysis(B)),
  156    partial_wake_analysis,
  157    time('assume constraint stores',
  158         chr_translate:assume_constraint_stores(B)),
  159    time('default constraint indices',
  160         chr_translate:set_constraint_indices(B)),
  161    time('check storedness assertions',
  162         chr_translate:check_storedness_assertions(B)),
  163    time('continuation analysis', chr_translate:continuation_analysis(B)).
  164store_management_preds(A, B) :-
  165    generate_attach_detach_a_constraint_all(A, C),
  166    generate_attr_unify_hook(D),
  167    generate_attach_increment(E),
  168    generate_extra_clauses(A, F),
  169    generate_insert_delete_constraints(A, G),
  170    generate_attach_code(A, H),
  171    generate_counter_code(I),
  172    generate_dynamic_type_check_clauses(J),
  173    append([C, E, D, F, G, H, I, J],
  174           B).
  175insert_declarations(A, B) :-
  176    findall((:-use_module(chr(C))),
  177            ( auxiliary_module(C),
  178              is_used_auxiliary_module(C)
  179            ),
  180            D),
  181    append(A, [(:-use_module(chr(chr_runtime)))|D], B).
  182auxiliary_module(chr_hashtable_store).
  183auxiliary_module(chr_integertable_store).
  184auxiliary_module(chr_assoc_store).
  185generate_counter_code(A) :-
  186    (   chr_pp_flag(store_counter, on)
  187    ->  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))]
  188    ;   A=[]
  189    ).
  190chr_module_declaration([]) :-
  191    tmp_module,
  192    !.
  193chr_module_declaration(A) :-
  194    get_target_module(B),
  195    (   B\==chr_translate,
  196        chr_pp_flag(toplevel_show_store, on)
  197    ->  A=[(:-multifile chr:'$chr_module'/1), chr:'$chr_module'(B)]
  198    ;   A=[]
  199    ).
  200partition_clauses([], [], [], []).
  201partition_clauses([A|B], C, D, E) :-
  202    (   parse_rule(A, F)
  203    ->  C=G,
  204        D=[F|H],
  205        E=I
  206    ;   is_declaration(A, J)
  207    ->  append(J, G, C),
  208        D=H,
  209        E=I
  210    ;   is_module_declaration(A, K)
  211    ->  target_module(K),
  212        C=G,
  213        D=H,
  214        E=[A|I]
  215    ;   is_type_definition(A)
  216    ->  C=G,
  217        D=H,
  218        E=I
  219    ;   is_chr_declaration(A)
  220    ->  C=G,
  221        D=H,
  222        E=I
  223    ;   A=handler(_)
  224    ->  chr_warning(deprecated(A),
  225                    'Backward compatibility: ignoring handler/1 declaration.\n',
  226                    []),
  227        C=G,
  228        D=H,
  229        E=I
  230    ;   A=rules(_)
  231    ->  chr_warning(deprecated(A),
  232                    'Backward compatibility: ignoring rules/1 declaration.\n',
  233                    []),
  234        C=G,
  235        D=H,
  236        E=I
  237    ;   A=option(L, M)
  238    ->  chr_warning(deprecated(A),
  239                    'Instead use `:-chr_option(~w,~w).\'\n',
  240                    [L, M]),
  241        handle_option(L, M),
  242        C=G,
  243        D=H,
  244        E=I
  245    ;   A=(:-chr_option(L, M))
  246    ->  handle_option(L, M),
  247        C=G,
  248        D=H,
  249        E=I
  250    ;   A='$chr_compiled_with_version'(_)
  251    ->  C=G,
  252        D=H,
  253        E=['$chr_compiled_with_version'(3)|I]
  254    ;   C=G,
  255        D=H,
  256        E=[A|I]
  257    ),
  258    partition_clauses(B, G, H, I).
  259'$chr_compiled_with_version'(3).
  260is_declaration(A, B) :-
  261    (   A=(:-C),
  262        C=..[D, E],
  263        D==(chr_constraint)
  264    ->  conj2list(E, F)
  265    ;   (   A=(:-C)
  266        ->  C=..[constraints, E]
  267        ;   A=..[constraints, E]
  268        ),
  269        conj2list(E, F),
  270        chr_warning(deprecated(A),
  271                    'Instead use :- chr_constraint ~w.\n',
  272                    [E])
  273    ),
  274    extract_type_mode(F, B).
  275extract_type_mode([], []).
  276extract_type_mode([A/B|C], [A/B|D]) :-
  277    !,
  278    extract_type_mode(C, D).
  279extract_type_mode([A|B], [C|D]) :-
  280    (   A= #(E, F)
  281    ->  functor(E, G, H),
  282        extract_annotation(F, G/H)
  283    ;   A=E,
  284        functor(E, G, H)
  285    ),
  286    C=G/H,
  287    E=..[_|I],
  288    extract_types_and_modes(I, J, K),
  289    assert_constraint_type(C, J),
  290    constraint_mode(C, K),
  291    extract_type_mode(B, D).
  292extract_annotation(stored, A) :-
  293    stored_assertion(A).
  294extract_annotation(default(A), B) :-
  295    never_stored_default(B, A).
  296extract_types_and_modes([], [], []).
  297extract_types_and_modes([A|B], [C|D], [E|F]) :-
  298    extract_type_and_mode(A, C, E),
  299    extract_types_and_modes(B, D, F).
  300extract_type_and_mode(+A, A, +) :-
  301    !.
  302extract_type_and_mode(?A, A, ?) :-
  303    !.
  304extract_type_and_mode(-A, A, -) :-
  305    !.
  306extract_type_and_mode(+, any, +) :-
  307    !.
  308extract_type_and_mode(?, any, ?) :-
  309    !.
  310extract_type_and_mode(-, any, -) :-
  311    !.
  312extract_type_and_mode(A, _, _) :-
  313    chr_error(syntax(A),
  314              'Illegal mode/type declaration.\n\tCorrect syntax is +type, -type or ?type\n\tor +, - or ?.\n',
  315              []).
  316is_chr_declaration(A) :-
  317    A=(:-chr_declaration B),
  318    (   B=(C--->D)
  319    ->  background_info(C, D)
  320    ;   B=D
  321    ->  background_info([D])
  322    ).
  323is_type_definition(A) :-
  324    is_type_definition(A, B),
  325    assert_type_definition(B).
  326assert_type_definition(typedef(A, B)) :-
  327    type_definition(A, B).
  328assert_type_definition(alias(A, B)) :-
  329    type_alias(A, B).
  330is_type_definition(A, B) :-
  331    (   A=(:-C)
  332    ->  true
  333    ;   A=C
  334    ),
  335    C=..[chr_type, D],
  336    (   D=(E--->F)
  337    ->  tdisj2list(F, G),
  338        B=typedef(E, G)
  339    ;   D=(H==E)
  340    ->  B=alias(H, E)
  341    ;   B=typedef(D, []),
  342        chr_warning(syntax,
  343                    'Empty type definition `~w\'.\nAre you sure you want to declare a phantom type?\n',
  344                    [A])
  345    ).
  346tdisj2list(A, B) :-
  347    tdisj2list(A, B, []).
  348tdisj2list(A, B, C) :-
  349    A=(D;E),
  350    !,
  351    tdisj2list(D, B, F),
  352    tdisj2list(E, F, C).
  353tdisj2list(A, [A|B], B).
  354parse_rule(A, B) :-
  355    A= @(C, D),
  356    !,
  357    rule(D, yes(C), B).
  358parse_rule(A, B) :-
  359    rule(A, no, B).
  360rule(A, B, C) :-
  361    A=pragma(D, E),
  362    !,
  363    (   var(E)
  364    ->  F=[_]
  365    ;   conj2list(E, F)
  366    ),
  367    inc_rule_count(G),
  368    C=pragma(H, I, F, B, G),
  369    is_rule(D, H, I, C).
  370rule(A, B, C) :-
  371    inc_rule_count(D),
  372    C=pragma(E, F, [], B, D),
  373    is_rule(A, E, F, C).
  374is_rule(A, B, C, D) :-
  375    A= ==>(E, F),
  376    !,
  377    conj2list(E, G),
  378    get_ids(G, H, I, D),
  379    C=ids([], H),
  380    (   F=(J| K)
  381    ->  B=rule([], I, J, K)
  382    ;   B=rule([], I, true, F)
  383    ).
  384is_rule(A, B, C, D) :-
  385    A= <=>(E, F),
  386    !,
  387    (   F=(G| H)
  388    ->  I=G,
  389        J=H
  390    ;   I=true,
  391        J=F
  392    ),
  393    (   E= \(K, L)
  394    ->  conj2list(K, M),
  395        conj2list(L, N),
  396        get_ids(M, O, P, 0, Q, D),
  397        get_ids(N, R, S, Q, _, D),
  398        C=ids(R, O)
  399    ;   conj2list(E, N),
  400        P=[],
  401        get_ids(N, R, S, D),
  402        C=ids(R, [])
  403    ),
  404    B=rule(S, P, I, J).
  405get_ids(A, B, C, D) :-
  406    get_ids(A, B, C, 0, _, D).
  407get_ids([], [], [], A, A, _).
  408get_ids([A|B], [C|D], [E|F], C, G, H) :-
  409    (   A= #(E, I)
  410    ->  (   var(I)
  411        ->  I=C
  412        ;   check_direct_pragma(I, C, H)
  413        )
  414    ;   E=A
  415    ),
  416    J is C+1,
  417    get_ids(B, D, F, J, G, H).
  418check_direct_pragma(passive, A, B) :-
  419    !,
  420    B=pragma(_, _, _, _, C),
  421    passive(C, A).
  422check_direct_pragma(A, _, B) :-
  423    (   direct_pragma(C),
  424        atom_concat(A, _, C)
  425    ->  chr_warning(problem_pragma(A, B),
  426                    'completed `~w\' to `~w\'\n',
  427                    [A, C])
  428    ;   chr_warning(unsupported_pragma(A, B), '', [])
  429    ).
  430direct_pragma(passive).
  431is_module_declaration((:-module(A)), A).
  432is_module_declaration((:-module(A, _)), A).
  433add_constraints([]).
  434add_constraints([A|B]) :-
  435    max_occurrence(A, 0),
  436    A=_/C,
  437    length(D, C),
  438    set_elems(D, ?),
  439    constraint_mode(A, D),
  440    add_constraints(B).
  441add_rules([]).
  442add_rules([A|B]) :-
  443    A=pragma(_, _, _, _, C),
  444    rule(C, A),
  445    add_rules(B).
  446check_declared_constraints(A) :-
  447    tree_set_empty(B),
  448    check_declared_constraints(A, B).
  449check_declared_constraints([], _).
  450check_declared_constraints([A|B], C) :-
  451    (   tree_set_memberchk(A, C)
  452    ->  chr_error(syntax(A),
  453                  'Constraint multiply defined: ~w.\n\tRemove redundant declaration!\n',
  454                  [A])
  455    ;   true
  456    ),
  457    tree_set_add(C, A, D),
  458    check_declared_constraints(B, D).
  459check_rules(A, B, C) :-
  460    maplist(check_rule(C), A, B).
  461check_rule(A, B, C) :-
  462    B=pragma(_, _, D, _, _),
  463    check_ast_rule_indexing(C, B),
  464    check_ast_trivial_propagation_rule(C, B),
  465    check_ast_head_constraints(C, A, B),
  466    check_pragmas(D, B).
  467check_ast_trivial_propagation_rule(A, B) :-
  468    A=ast_rule(C, _, _, D, _),
  469    (   C=propagation(_),
  470        D==[]
  471    ->  chr_warning(weird_program,
  472                    'Ignoring propagation rule with empty body: ~@.\n\t\n',
  473                    [format_rule(B)]),
  474        set_rule_passive(B)
  475    ;   true
  476    ).
  477set_rule_passive(A) :-
  478    A=pragma(_, _, _, _, B),
  479    set_all_passive(B).
  480check_trivial_propagation_rule(A) :-
  481    A=pragma(B, _, _, _, C),
  482    (   B=rule([], _, _, true)
  483    ->  chr_warning(weird_program,
  484                    'Ignoring propagation rule with empty body: ~@.\n\t\n',
  485                    [format_rule(A)]),
  486        set_all_passive(C)
  487    ;   true
  488    ).
  489check_ast_head_constraints(ast_rule(A, _, _, _, _), B, C) :-
  490    check_ast_head_constraints_(A, B, C).
  491check_ast_head_constraints_(simplification(A), B, C) :-
  492    maplist(check_ast_head_constraint(B, C), A).
  493check_ast_head_constraints_(propagation(A), B, C) :-
  494    maplist(check_ast_head_constraint(B, C), A).
  495check_ast_head_constraints_(simpagation(A, B), C, D) :-
  496    maplist(check_ast_head_constraint(C, D), A),
  497    maplist(check_ast_head_constraint(C, D), B).
  498check_ast_head_constraint(A, B, chr_constraint(C, _, D)) :-
  499    (   memberchk(C, A)
  500    ->  true
  501    ;   chr_error(syntax(D),
  502                  'Undeclared constraint ~w in head of ~@.\n\tConstraint should be one of ~w.\n',
  503                  [_/_, format_rule(B), A])
  504    ).
  505check_head_constraints([], _, _).
  506check_head_constraints([A|B], C, D) :-
  507    functor(A, E, F),
  508    (   memberchk(E/F, C)
  509    ->  check_head_constraints(B, C, D)
  510    ;   chr_error(syntax(A),
  511                  'Undeclared constraint ~w in head of ~@.\n\tConstraint should be one of ~w.\n',
  512                  [E/F, format_rule(D), C])
  513    ).
  514check_pragmas([], _).
  515check_pragmas([A|B], C) :-
  516    check_pragma(A, C),
  517    check_pragmas(B, C).
  518check_pragma(A, B) :-
  519    var(A),
  520    !,
  521    chr_error(syntax(A),
  522              'Invalid pragma ~w in ~@.\n\tPragma should not be a variable!\n',
  523              [A, format_rule(B)]).
  524check_pragma(passive(A), B) :-
  525    !,
  526    B=pragma(_, ids(C, D), _, _, E),
  527    (   memberchk_eq(A, C)
  528    ->  true
  529    ;   memberchk_eq(A, D)
  530    ->  true
  531    ;   chr_error(syntax(A),
  532                  'Invalid identifier ~w in pragma passive in ~@.\n',
  533                  [A, format_rule(B)])
  534    ),
  535    passive(E, A).
  536check_pragma(mpassive(A), B) :-
  537    !,
  538    B=pragma(_, _, _, _, C),
  539    chr_warning(experimental,
  540                'Experimental pragma ~w. Use with care!\n',
  541                [mpassive(A)]),
  542    maplist(passive(C), A).
  543check_pragma(A, B) :-
  544    A=already_in_heads,
  545    !,
  546    chr_warning(unsupported_pragma(A, B),
  547                'Termination and correctness may be affected.\n',
  548                []).
  549check_pragma(A, B) :-
  550    A=already_in_head(_),
  551    !,
  552    chr_warning(unsupported_pragma(A, B),
  553                'Termination and correctness may be affected.\n',
  554                []).
  555check_pragma(A, B) :-
  556    A=no_history,
  557    !,
  558    chr_warning(experimental,
  559                'Experimental pragma no_history. Use with care!\n',
  560                []),
  561    B=pragma(_, _, _, _, C),
  562    no_history(C).
  563check_pragma(A, B) :-
  564    A=history(C, D),
  565    !,
  566    B=pragma(_, ids(E, F), _, _, G),
  567    chr_warning(experimental,
  568                'Experimental pragma ~w. Use with care!\n',
  569                [A]),
  570    (   E\==[]
  571    ->  chr_error(syntax(A),
  572                  'Pragma history only implemented for propagation rules.\n',
  573                  [])
  574    ;   \+ atom(C)
  575    ->  chr_error(syntax(A),
  576                  'Illegal argument for pragma history: ~w is not an atom (rule number ~w).\n',
  577                  [C, G])
  578    ;   \+ is_set(D)
  579    ->  chr_error(syntax(A),
  580                  'Illegal argument for pragma history: ~w is not a set (rule number ~w).\n',
  581                  [D, G])
  582    ;   check_history_pragma_ids(D, E, F)
  583    ->  history(G, C, D)
  584    ;   chr_error(syntax(A),
  585                  'Invalid identifier(s) in pragma ~w of rule number ~w.\n',
  586                  [A, G])
  587    ).
  588check_pragma(A, B) :-
  589    A=source_location(C),
  590    !,
  591    B=pragma(_, _, _, _, D),
  592    source_location(D, C).
  593check_history_pragma_ids([], _, _).
  594check_history_pragma_ids([A|B], C, D) :-
  595    (   memberchk_eq(A, D)
  596    ;   memberchk_eq(A, C)
  597    ),
  598    check_history_pragma_ids(B, C, D).
  599check_pragma(A, B) :-
  600    chr_error(syntax(A),
  601              'Unknown pragma ~w in ~@.\n',
  602              [A, format_rule(B)]).
  603test_named_history_id_pairs(_, [], _, []).
  604test_named_history_id_pairs(A, [B|C], D, [E|F]) :-
  605    test_named_history_id_pair(A, B, D, E),
  606    test_named_history_id_pairs(A, C, D, F).
  607format_rule(A) :-
  608    A=pragma(_, _, _, B, C),
  609    (   B=yes(D)
  610    ->  write('rule '),
  611        write(D)
  612    ;   write('rule number '),
  613        write(C)
  614    ),
  615    get_line_number(C, E),
  616    write(' at '),
  617    write(E).
  618check_ast_rule_indexing(A, B) :-
  619    A=ast_rule(C, D, _, _, _),
  620    tree_set_empty(E),
  621    ast_head_variables(C, E, F),
  622    ast_remove_anti_monotonic_guards(D, F, G),
  623    ast_term_list_variables(G, E, H),
  624    check_ast_head_indexing(C, H),
  625    (   chr_pp_flag(term_indexing, on)
  626    ->  B=pragma(I, _, _, _, _),
  627        I=rule(J, K, L, _),
  628        term_variables(J-K, M),
  629        remove_anti_monotonic_guards(L, M, N),
  630        term_variables(N, O),
  631        append(J, K, P),
  632        check_specs_indexing(P, O, _)
  633    ;   true
  634    ).
  635check_ast_head_indexing(simplification(A), B) :-
  636    check_ast_indexing(A, B).
  637check_ast_head_indexing(propagation(A), B) :-
  638    check_ast_indexing(A, B).
  639check_ast_head_indexing(simpagation(A, B), C) :-
  640    ast_constraint_list_variables(B, C, D),
  641    check_ast_indexing(A, D),
  642    ast_constraint_list_variables(A, C, E),
  643    check_ast_indexing(B, E).
  644check_rule_indexing(A) :-
  645    A=pragma(B, _, _, _, _),
  646    B=rule(C, D, E, _),
  647    term_variables(C-D, F),
  648    remove_anti_monotonic_guards(E, F, G),
  649    check_indexing(C, G-D),
  650    check_indexing(D, G-C),
  651    (   chr_pp_flag(term_indexing, on)
  652    ->  term_variables(G, H),
  653        append(C, D, I),
  654        check_specs_indexing(I, H, _)
  655    ;   true
  656    ).
  657remove_anti_monotonic_guards(A, B, C) :-
  658    conj2list(A, D),
  659    remove_anti_monotonic_guard_list(D, B, E),
  660    list2conj(E, C).
  661remove_anti_monotonic_guard_list([], _, []).
  662remove_anti_monotonic_guard_list([A|B], C, D) :-
  663    (   A=var(E),
  664        memberchk_eq(E, C)
  665    ->  D=F
  666    ;   D=[A|F]
  667    ),
  668    remove_anti_monotonic_guard_list(B, C, F).
  669ast_remove_anti_monotonic_guards([], _, []).
  670ast_remove_anti_monotonic_guards([A|B], C, D) :-
  671    (   A=compound(var, 1, [E], _),
  672        ast_var_memberchk(E, C)
  673    ->  D=F
  674    ;   D=[A|F]
  675    ),
  676    ast_remove_anti_monotonic_guards(B, C, F).
  677check_ast_indexing([], _).
  678check_ast_indexing([A|B], C) :-
  679    A=chr_constraint(D, E, _),
  680    ast_constraint_list_variables(B, C, F),
  681    check_ast_indexing(E, 1, D, F),
  682    ast_constraint_variables(A, C, G),
  683    check_ast_indexing(B, G).
  684check_ast_indexing([], _, _, _).
  685check_ast_indexing([A|B], C, D, E) :-
  686    (   is_indexed_argument(D, C)
  687    ->  true
  688    ;   ast_nonvar(A)
  689    ->  indexed_argument(D, C)
  690    ;   ast_term_list_variables(B, E, F),
  691        (   ast_var_memberchk(A, F)
  692        ->  indexed_argument(D, C)
  693        ;   true
  694        )
  695    ),
  696    G is C+1,
  697    ast_term_variables(A, E, H),
  698    check_ast_indexing(B, G, D, H).
  699check_indexing([], _).
  700check_indexing([A|B], C) :-
  701    functor(A, D, E),
  702    A=..[_|F],
  703    term_variables(B-C, G),
  704    check_indexing(F, 1, D/E, G),
  705    check_indexing(B, [A|C]).
  706check_indexing([], _, _, _).
  707check_indexing([A|B], C, D, E) :-
  708    (   is_indexed_argument(D, C)
  709    ->  true
  710    ;   nonvar(A)
  711    ->  indexed_argument(D, C)
  712    ;   term_variables(B, F),
  713        append(F, E, G),
  714        (   memberchk_eq(A, G)
  715        ->  indexed_argument(D, C)
  716        ;   true
  717        )
  718    ),
  719    H is C+1,
  720    term_variables(A, I),
  721    append(I, E, J),
  722    check_indexing(B, H, D, J).
  723check_specs_indexing([], _, []).
  724check_specs_indexing([A|B], C, D) :-
  725    D=[E|F],
  726    term_variables(B, G, C),
  727    check_spec_indexing(A, G, E),
  728    term_variables(A, H, C),
  729    check_specs_indexing(B, H, F).
  730check_spec_indexing(A, B, C) :-
  731    functor(A, D, E),
  732    C=spec(D, E, F),
  733    A=..[_|G],
  734    check_args_spec_indexing(G, 1, B, F),
  735    indexing_spec(D/E, [F]).
  736check_args_spec_indexing([], _, _, []).
  737check_args_spec_indexing([A|B], C, D, E) :-
  738    term_variables(B, F, D),
  739    (   check_arg_spec_indexing(A, C, F, G)
  740    ->  E=[G|H]
  741    ;   E=H
  742    ),
  743    I is C+1,
  744    term_variables(A, J, D),
  745    check_args_spec_indexing(B, I, J, H).
  746check_arg_spec_indexing(A, B, C, D) :-
  747    (   var(A)
  748    ->  memberchk_eq(A, C),
  749        D=specinfo(B, any, [])
  750    ;   functor(A, E, F),
  751        D=specinfo(B, E/F, [G]),
  752        A=..[_|H],
  753        check_args_spec_indexing(H, 1, C, G)
  754    ).
  755add_occurrences(A, B) :-
  756    maplist(add_rule_occurrences, A, B).
  757add_rule_occurrences(A, B) :-
  758    A=pragma(_, C, _, _, D),
  759    B=ast_rule(E, _, _, _, _),
  760    add_head_occurrences(E, C, D).
  761add_head_occurrences(simplification(A), ids(B, _), C) :-
  762    maplist(add_constraint_occurrence(C, simplification), A, B).
  763add_head_occurrences(propagation(A), ids(_, B), C) :-
  764    maplist(add_constraint_occurrence(C, propagation), A, B).
  765add_head_occurrences(simpagation(A, B), ids(C, D), E) :-
  766    maplist(add_constraint_occurrence(E, simplification), A, C),
  767    maplist(add_constraint_occurrence(E, propagation), B, D).
  768add_constraint_occurrence(A, B, C, D) :-
  769    C=chr_constraint(E, _, _),
  770    new_occurrence(E, A, D, B).
  771observation_analysis(A, B, C, D) :-
  772    (   all_spawned(A, C)
  773    ->  true
  774    ;   var(B)
  775    ->  spawns_all(A, C)
  776    ;   B=true
  777    ->  true
  778    ;   B=fail
  779    ->  true
  780    ;   B=!
  781    ->  true
  782    ;   B=(E, F)
  783    ->  observation_analysis(A, E, C, D),
  784        observation_analysis(A, F, C, D)
  785    ;   B=(E;F)
  786    ->  observation_analysis(A, E, C, D),
  787        observation_analysis(A, F, C, D)
  788    ;   B=(E->F)
  789    ->  observation_analysis(A, E, C, D),
  790        observation_analysis(A, F, C, D)
  791    ;   B=(\+G)
  792    ->  observation_analysis(A, G, C, D)
  793    ;   functor(B, H, I),
  794        memberchk(H/I, D)
  795    ->  spawns(A, C, H/I)
  796    ;   B=(_=_)
  797    ->  spawns_all_triggers(A, C)
  798    ;   B=(_ is _)
  799    ->  spawns_all_triggers(A, C)
  800    ;   builtin_binds_b(B, J)
  801    ->  (   J==[]
  802        ->  true
  803        ;   spawns_all_triggers(A, C)
  804        )
  805    ;   spawns_all(A, C)
  806    ).
  807is_observed(A, B) :-
  808    is_observed(A, B, _),
  809    ai_is_observed(A, B).
  810is_stored_in_guard(A, B) :-
  811    chr_pp_flag(store_in_guards, on),
  812    do_is_observed(A, B, guard).
  813generate_attach_detach_a_constraint_all([], []).
  814generate_attach_detach_a_constraint_all([A|B], C) :-
  815    (   (   chr_pp_flag(debugable, on)
  816        ;   is_stored(A),
  817            \+ only_ground_indexed_arguments(A),
  818            \+ get_store_type(A, var_assoc_store(_, _))
  819        )
  820    ->  generate_attach_a_constraint(A, D),
  821        generate_detach_a_constraint(A, E)
  822    ;   D=[],
  823        E=[]
  824    ),
  825    generate_attach_detach_a_constraint_all(B, F),
  826    append([D, E, F], C).
  827generate_attach_a_constraint(A, [B, C]) :-
  828    generate_attach_a_constraint_nil(A, B),
  829    generate_attach_a_constraint_cons(A, C).
  830attach_constraint_atom(A, B, C, D) :-
  831    make_name(attach_, A, E),
  832    D=..[E, B, C].
  833generate_attach_a_constraint_nil(A, B) :-
  834    B=(C:-true),
  835    attach_constraint_atom(A, [], _, C).
  836generate_attach_a_constraint_cons(A, B) :-
  837    B=(C:-D),
  838    attach_constraint_atom(A, [E|F], G, C),
  839    attach_constraint_atom(A, F, G, H),
  840    D=(I, J, H),
  841    get_max_constraint_index(K),
  842    (   K==1
  843    ->  generate_attach_body_1(A, E, G, I)
  844    ;   generate_attach_body_n(A, E, G, I)
  845    ),
  846    chr_pp_flag(solver_events, L),
  847    (   L\==none
  848    ->  _=[[E|_], G],
  849        get_target_module(M),
  850        use_auxiliary_predicate(run_suspensions),
  851        J=clp_events:subscribe(E, L, M, M:'$run_suspensions'([G]))
  852    ;   J=true
  853    ).
  854generate_attach_body_1(_, A, B, C) :-
  855    get_target_module(D),
  856    C=(get_attr(A, D, E)->put_attr(A, D, [B|E]);put_attr(A, D, [B])).
  857generate_attach_body_n(A/B, C, D, E) :-
  858    chr_pp_flag(experiment, off),
  859    !,
  860    get_constraint_index(A/B, F),
  861    get_max_constraint_index(G),
  862    get_target_module(H),
  863    add_attr(G, D, F, I, J, K),
  864    singleton_attr(G, D, F, L),
  865    E=(get_attr(C, H, I)->J, put_attr(C, H, K);put_attr(C, H, L)),
  866    !.
  867generate_attach_body_n(A/B, C, D, E) :-
  868    chr_pp_flag(experiment, on),
  869    !,
  870    get_constraint_index(A/B, F),
  871    or_pattern(F, G),
  872    H is F+1,
  873    get_max_constraint_index(I),
  874    get_target_module(J),
  875    singleton_attr(I, D, F, K),
  876    E=(get_attr(C, J, L)->arg(1, L, M), arg(H, L, N), O is M\/G, setarg(1, L, O), setarg(H, L, [D|N]);put_attr(C, J, K)),
  877    !.
  878generate_detach_a_constraint(A, [B, C]) :-
  879    generate_detach_a_constraint_nil(A, B),
  880    generate_detach_a_constraint_cons(A, C).
  881detach_constraint_atom(A, B, C, D) :-
  882    make_name(detach_, A, E),
  883    D=..[E, B, C].
  884generate_detach_a_constraint_nil(A, B) :-
  885    B=(C:-true),
  886    detach_constraint_atom(A, [], _, C).
  887generate_detach_a_constraint_cons(A, B) :-
  888    B=(C:-D),
  889    detach_constraint_atom(A, [E|F], G, C),
  890    detach_constraint_atom(A, F, G, H),
  891    D=(I, H),
  892    get_max_constraint_index(J),
  893    (   J==1
  894    ->  generate_detach_body_1(A, E, G, I)
  895    ;   generate_detach_body_n(A, E, G, I)
  896    ).
  897generate_detach_body_1(_, A, B, C) :-
  898    get_target_module(D),
  899    C=(get_attr(A, D, E)->'chr sbag_del_element'(E, B, F), (F==[]->del_attr(A, D);put_attr(A, D, F));true).
  900generate_detach_body_n(A/B, C, D, E) :-
  901    get_constraint_index(A/B, F),
  902    get_max_constraint_index(G),
  903    rem_attr(G, C, D, F, H, I),
  904    get_target_module(J),
  905    E=(get_attr(C, J, H)->I;true),
  906    !.
  907create_indexed_variables_body([], [], [], _, _, _, empty, 0).
  908create_indexed_variables_body([A|B], [C|D], [E|F], G, H, I, J, K) :-
  909    L is H+1,
  910    create_indexed_variables_body(B,
  911                                  D,
  912                                  F,
  913                                  M,
  914                                  L,
  915                                  I,
  916                                  N,
  917                                  O),
  918    (   C==(?),
  919        is_indexed_argument(I, H)
  920    ->  (   atomic_type(E)
  921        ->  J=((var(A)->G=[A|M];G=M), P),
  922            (   N==empty
  923            ->  P=true,
  924                M=[]
  925            ;   P=N
  926            )
  927        ;   N==empty
  928        ->  J=term_variables(A, G)
  929        ;   J=(term_variables(A, G, M), N)
  930        ),
  931        K=O
  932    ;   C==(-),
  933        is_indexed_argument(I, H)
  934    ->  (   N==empty
  935        ->  J=(G=[A])
  936        ;   J=(G=[A|M], N)
  937        ),
  938        K is O+1
  939    ;   G=M,
  940        J=N,
  941        K is O+1
  942    ).
  943spectermvars(A, B, C, D, E, F) :-
  944    spectermvars(B, 1, A, C, D, F, [], E).
  945spectermvars([], A, _, _, B, C, C, true) :-
  946    A>B,
  947    !.
  948spectermvars([A|B], C, D, E, F, G, H, I) :-
  949    I=(J, K),
  950    argspecs(D, C, L, M),
  951    merge_argspecs(L, N),
  952    arggoal(N, A, J, G, O),
  953    P is C+1,
  954    spectermvars(B,
  955                 P,
  956                 M,
  957                 E,
  958                 F,
  959                 O,
  960                 H,
  961                 K).
  962argspecs([], _, [], []).
  963argspecs([[]|A], B, C, D) :-
  964    argspecs(A, B, C, D).
  965argspecs([[specinfo(A, B, C)|D]|E], F, G, H) :-
  966    (   F==A
  967    ->  G=[specinfo(A, B, C)|I],
  968        (   D=[]
  969        ->  J=H
  970        ;   H=[D|J]
  971        )
  972    ;   G=I,
  973        H=[[specinfo(A, B, C)|D]|J]
  974    ),
  975    argspecs(E, F, I, J).
  976merge_argspecs(A, B) :-
  977    sort(A, C),
  978    merge_argspecs_(C, B).
  979merge_argspecs_([], []).
  980merge_argspecs_([A], B) :-
  981    !,
  982    B=[A].
  983merge_argspecs_([specinfo(A, B, C), specinfo(A, D, E)|F], G) :-
  984    (   (   B==any
  985        ;   D==any
  986        )
  987    ->  merge_argspecs_([specinfo(A, any, [])|F], G)
  988    ;   B==D
  989    ->  append(C, E, H),
  990        merge_argspecs_([specinfo(A, B, H)|F], G)
  991    ;   G=[specinfo(A, B, C)|I],
  992        merge_argspecs_([specinfo(A, D, E)|F], I)
  993    ).
  994arggoal(A, B, C, D, E) :-
  995    (   A==[]
  996    ->  D=E,
  997        C=true
  998    ;   A=[specinfo(_, any, _)]
  999    ->  C=term_variables(B, D, E)
 1000    ;   C=(var(B)->D=[B|E];F),
 1001        arggoal_cases(A, B, D, E, F)
 1002    ).
 1003arggoal_cases([], _, A, B, A=B).
 1004arggoal_cases([specinfo(_, A, B)|C], D, E, F, G) :-
 1005    (   B==[]
 1006    ->  G=H
 1007    ;   B==[[]]
 1008    ->  G=H
 1009    ;   A=I/J
 1010    ->  G=(K;H),
 1011        functor(L, I, J),
 1012        L=..[_|M],
 1013        K=(D=L->N),
 1014        spectermvars(M,
 1015                     1,
 1016                     B,
 1017                     I,
 1018                     J,
 1019                     E,
 1020                     F,
 1021                     N)
 1022    ),
 1023    arggoal_cases(C, D, E, F, H).
 1024generate_extra_clauses(A, B) :-
 1025    generate_activate_clauses(A, B, C),
 1026    generate_remove_clauses(A, C, D),
 1027    generate_allocate_clauses(A, D, E),
 1028    generate_insert_constraint_internal_clauses(A, E, F),
 1029    generate_novel_production(F, G),
 1030    generate_extend_history(G, H),
 1031    generate_run_suspensions_clauses(A, H, I),
 1032    generate_empty_named_history_initialisations(I, J),
 1033    J=[].
 1034generate_remove_clauses([], A, A).
 1035generate_remove_clauses([A|B], C, D) :-
 1036    generate_remove_clause(A, C, E),
 1037    generate_remove_clauses(B, E, D).
 1038remove_constraint_goal(A, B, C, D, E, F, G) :-
 1039    uses_state(A, removed),
 1040    (   chr_pp_flag(inline_insertremove, off)
 1041    ->  use_auxiliary_predicate(remove_constraint_internal, A),
 1042        G=(H, (I==yes->E;D)),
 1043        remove_constraint_atom(A, B, C, I, H)
 1044    ;   delay_phase_end(validate_store_type_assumptions,
 1045                        generate_remove_body(A,
 1046                                             B,
 1047                                             C,
 1048                                             D,
 1049                                             E,
 1050                                             F,
 1051                                             G))
 1052    ).
 1053remove_constraint_atom(A, B, C, D, E) :-
 1054    make_name('$remove_constraint_internal_', A, F),
 1055    (   chr_pp_flag(debugable, off),
 1056        (   only_ground_indexed_arguments(A)
 1057        ;   get_store_type(A, var_assoc_store(_, _))
 1058        )
 1059    ->  E=..[F, B, D]
 1060    ;   E=..[F, B, C, D]
 1061    ).
 1062generate_remove_clause(A, B, C) :-
 1063    (   is_used_auxiliary_predicate(remove_constraint_internal, A)
 1064    ->  B=[D|C],
 1065        D=(E:-F),
 1066        remove_constraint_atom(A, G, H, I, E),
 1067        generate_remove_body(A,
 1068                             G,
 1069                             H,
 1070                             I=no,
 1071                             I=yes,
 1072                             active,
 1073                             F)
 1074    ;   B=C
 1075    ).
 1076generate_remove_body(A, B, C, D, E, F, G) :-
 1077    (   chr_pp_flag(debugable, off),
 1078        (   only_ground_indexed_arguments(A)
 1079        ;   get_store_type(A, var_assoc_store(_, _))
 1080        )
 1081    ->  (   F==active
 1082        ->  get_update_suspension_field(A,
 1083                                        B,
 1084                                        state,
 1085                                        H,
 1086                                        removed,
 1087                                        I,
 1088                                        J,
 1089                                        K),
 1090            if_used_state(A, not_stored_yet, J, true, L),
 1091            if_used_state(A,
 1092                          not_stored_yet,
 1093                          (H==not_stored_yet->D;E),
 1094                          E,
 1095                          M)
 1096        ;   F==partner
 1097        ->  get_update_suspension_field(A,
 1098                                        B,
 1099                                        state,
 1100                                        H,
 1101                                        removed,
 1102                                        I,
 1103                                        _,
 1104                                        K),
 1105            L=true,
 1106            M=E
 1107        ),
 1108        G=(I, L, K, M)
 1109    ;   static_suspension_term(A, N),
 1110        get_static_suspension_term_field(arguments, A, N, O),
 1111        generate_indexed_variables_body(A, O, P, C),
 1112        (   chr_pp_flag(debugable, on)
 1113        ->  A=Q/_,
 1114            get_static_suspension_term_field(functor,
 1115                                             A,
 1116                                             N,
 1117                                             Q)
 1118        ;   true
 1119        ),
 1120        (   F==active
 1121        ->  get_update_static_suspension_field(A,
 1122                                               B,
 1123                                               N,
 1124                                               state,
 1125                                               H,
 1126                                               removed,
 1127                                               J,
 1128                                               K),
 1129            if_used_state(A, not_stored_yet, J, true, L),
 1130            if_used_state(A,
 1131                          not_stored_yet,
 1132                          (H==not_stored_yet->C=[], D;P, E),
 1133                          (P, E),
 1134                          M)
 1135        ;   F==partner
 1136        ->  get_update_static_suspension_field(A,
 1137                                               B,
 1138                                               N,
 1139                                               state,
 1140                                               H,
 1141                                               removed,
 1142                                               _,
 1143                                               K),
 1144            L=true,
 1145            M=(P, E)
 1146        ),
 1147        G=(B=N, L, K, M)
 1148    ).
 1149generate_activate_clauses([], A, A).
 1150generate_activate_clauses([A|B], C, D) :-
 1151    generate_activate_clause(A, C, E),
 1152    generate_activate_clauses(B, E, D).
 1153activate_constraint_goal(A, B, C, D, E, F) :-
 1154    (   chr_pp_flag(inline_insertremove, off)
 1155    ->  use_auxiliary_predicate(activate_constraint, A),
 1156        F=(G, (H==yes->B;true)),
 1157        activate_constraint_atom(A,
 1158                                 H,
 1159                                 C,
 1160                                 D,
 1161                                 E,
 1162                                 G)
 1163    ;   delay_phase_end(validate_store_type_assumptions,
 1164                        activate_constraint_body(A,
 1165                                                 B,
 1166                                                 true,
 1167                                                 C,
 1168                                                 D,
 1169                                                 E,
 1170                                                 F))
 1171    ).
 1172activate_constraint_atom(A, B, C, D, E, F) :-
 1173    make_name('$activate_constraint_', A, G),
 1174    (   chr_pp_flag(debugable, off),
 1175        only_ground_indexed_arguments(A)
 1176    ->  F=..[G, B, D]
 1177    ;   chr_pp_flag(debugable, off),
 1178        may_trigger(A),
 1179        get_store_type(A, var_assoc_store(_, _))
 1180    ->  F=..[G, B, D, E]
 1181    ;   chr_pp_flag(debugable, off),
 1182        may_trigger(A),
 1183        get_store_type(A, var_assoc_store(_, _))
 1184    ->  F=..[G, B, C, D, E]
 1185    ;   F=..[G, B, C, D]
 1186    ).
 1187generate_activate_clause(A, B, C) :-
 1188    (   is_used_auxiliary_predicate(activate_constraint, A)
 1189    ->  B=[D|C],
 1190        D=(E:-F),
 1191        activate_constraint_atom(A,
 1192                                 G,
 1193                                 H,
 1194                                 I,
 1195                                 J,
 1196                                 E),
 1197        activate_constraint_body(A,
 1198                                 G=yes,
 1199                                 G=no,
 1200                                 H,
 1201                                 I,
 1202                                 J,
 1203                                 F)
 1204    ;   B=C
 1205    ).
 1206activate_constraint_body(A, B, C, D, E, F, G) :-
 1207    (   chr_pp_flag(debugable, off),
 1208        may_trigger(A),
 1209        uses_field(A, generation)
 1210    ->  get_update_suspension_field(A,
 1211                                    E,
 1212                                    generation,
 1213                                    H,
 1214                                    F,
 1215                                    I,
 1216                                    J,
 1217                                    K),
 1218        L=(I, J, F is H+1, K)
 1219    ;   L=true
 1220    ),
 1221    get_update_suspension_field(A,
 1222                                E,
 1223                                state,
 1224                                M,
 1225                                active,
 1226                                N,
 1227                                O,
 1228                                P),
 1229    if_used_state(A, not_stored_yet, O, true, Q),
 1230    (   chr_pp_flag(debugable, off),
 1231        (   only_ground_indexed_arguments(A)
 1232        ;   get_store_type(A, var_assoc_store(_, _))
 1233        )
 1234    ->  if_used_state(A,
 1235                      not_stored_yet,
 1236                      (M==not_stored_yet->B;C),
 1237                      C,
 1238                      R)
 1239    ;   get_dynamic_suspension_term_field(arguments,
 1240                                          A,
 1241                                          E,
 1242                                          S,
 1243                                          T),
 1244        generate_indexed_variables_body(A, S, U, D),
 1245        chr_none_locked(D, V),
 1246        if_used_state(A,
 1247                      not_stored_yet,
 1248                      (M==not_stored_yet->T, U, V, B;C),
 1249                      C,
 1250                      R)
 1251    ),
 1252    G=(N, Q, P, L, R).
 1253generate_allocate_clauses([], A, A).
 1254generate_allocate_clauses([A|B], C, D) :-
 1255    generate_allocate_clause(A, C, E),
 1256    generate_allocate_clauses(B, E, D).
 1257allocate_constraint_goal(A, B, C, D) :-
 1258    uses_state(A, not_stored_yet),
 1259    (   chr_pp_flag(inline_insertremove, off)
 1260    ->  use_auxiliary_predicate(allocate_constraint, A),
 1261        allocate_constraint_atom(A, B, C, D)
 1262    ;   D=(B=E, F),
 1263        delay_phase_end(validate_store_type_assumptions,
 1264                        allocate_constraint_body(A,
 1265                                                 E,
 1266                                                 C,
 1267                                                 F))
 1268    ).
 1269allocate_constraint_atom(A, B, C, D) :-
 1270    make_name('$allocate_constraint_', A, E),
 1271    D=..[E, B|C].
 1272generate_allocate_clause(A, B, C) :-
 1273    (   is_used_auxiliary_predicate(allocate_constraint, A)
 1274    ->  B=[D|C],
 1275        D=(E:-F),
 1276        A=_/G,
 1277        length(H, G),
 1278        allocate_constraint_atom(A, I, H, E),
 1279        allocate_constraint_body(A, I, H, F)
 1280    ;   B=C
 1281    ).
 1282allocate_constraint_body(A, B, C, D) :-
 1283    static_suspension_term(A, E),
 1284    get_static_suspension_term_field(arguments, A, E, C),
 1285    (   chr_pp_flag(debugable, on)
 1286    ->  A=F/_,
 1287        get_static_suspension_term_field(functor, A, E, F)
 1288    ;   true
 1289    ),
 1290    (   chr_pp_flag(debugable, on)
 1291    ->  (   may_trigger(A)
 1292        ->  append(C, [B], G),
 1293            build_head(_, _, [0], G, H),
 1294            get_target_module(I),
 1295            J=I:H
 1296        ;   J=true
 1297        ),
 1298        K=(B=E),
 1299        create_static_suspension_field(A,
 1300                                       E,
 1301                                       continuation,
 1302                                       J,
 1303                                       L),
 1304        create_static_suspension_field(A, E, generation, 0, M)
 1305    ;   may_trigger(A),
 1306        uses_field(A, generation)
 1307    ->  create_static_suspension_field(A, E, generation, 0, M),
 1308        B=E,
 1309        K=true,
 1310        L=true
 1311    ;   M=true,
 1312        B=E,
 1313        K=true,
 1314        L=true
 1315    ),
 1316    (   uses_history(A)
 1317    ->  create_static_suspension_field(A, E, history, t, N)
 1318    ;   N=true
 1319    ),
 1320    create_static_suspension_field(A,
 1321                                   E,
 1322                                   state,
 1323                                   not_stored_yet,
 1324                                   O),
 1325    (   has_suspension_field(A, id)
 1326    ->  get_static_suspension_term_field(id, A, E, P),
 1327        gen_id(P, Q)
 1328    ;   Q=true
 1329    ),
 1330    D=(K, L, M, N, O, Q).
 1331gen_id(A, 'chr gen_id'(A)).
 1332generate_insert_constraint_internal_clauses([], A, A).
 1333generate_insert_constraint_internal_clauses([A|B], C, D) :-
 1334    generate_insert_constraint_internal_clause(A, C, E),
 1335    generate_insert_constraint_internal_clauses(B, E, D).
 1336insert_constraint_internal_constraint_goal(A, B, C, D, E, F) :-
 1337    (   chr_pp_flag(inline_insertremove, off)
 1338    ->  use_auxiliary_predicate(remove_constraint_internal, A),
 1339        insert_constraint_internal_constraint_atom(A,
 1340                                                   B,
 1341                                                   C,
 1342                                                   D,
 1343                                                   E,
 1344                                                   F)
 1345    ;   delay_phase_end(validate_store_type_assumptions,
 1346                        generate_insert_constraint_internal_body(A,
 1347                                                                 C,
 1348                                                                 D,
 1349                                                                 E,
 1350                                                                 B,
 1351                                                                 F))
 1352    ).
 1353insert_constraint_internal_constraint_atom(A, B, C, D, E, F) :-
 1354    insert_constraint_internal_constraint_name(A, G),
 1355    (   chr_pp_flag(debugable, on)
 1356    ->  F=..[G, B, C, D|E]
 1357    ;   (   only_ground_indexed_arguments(A)
 1358        ;   get_store_type(A, var_assoc_store(_, _))
 1359        )
 1360    ->  F=..[G, C|E]
 1361    ;   F=..[G, B, C|E]
 1362    ).
 1363insert_constraint_internal_constraint_name(A, B) :-
 1364    make_name('$insert_constraint_internal_', A, B).
 1365generate_insert_constraint_internal_clause(A, B, C) :-
 1366    (   is_used_auxiliary_predicate(insert_constraint_internal, A)
 1367    ->  B=[D|C],
 1368        D=(E:-F),
 1369        A=_/G,
 1370        length(H, G),
 1371        insert_constraint_internal_constraint_atom(A,
 1372                                                   I,
 1373                                                   J,
 1374                                                   K,
 1375                                                   H,
 1376                                                   E),
 1377        generate_insert_constraint_internal_body(A,
 1378                                                 J,
 1379                                                 K,
 1380                                                 H,
 1381                                                 I,
 1382                                                 F)
 1383    ;   B=C
 1384    ).
 1385generate_insert_constraint_internal_body(A, B, C, D, E, F) :-
 1386    static_suspension_term(A, G),
 1387    create_static_suspension_field(A, G, state, active, H),
 1388    (   chr_pp_flag(debugable, on)
 1389    ->  get_static_suspension_term_field(continuation, A, G, C),
 1390        create_static_suspension_field(A, G, generation, 0, I)
 1391    ;   may_trigger(A),
 1392        uses_field(A, generation)
 1393    ->  create_static_suspension_field(A, G, generation, 0, I)
 1394    ;   I=true
 1395    ),
 1396    (   chr_pp_flag(debugable, on)
 1397    ->  A=J/_,
 1398        get_static_suspension_term_field(functor, A, G, J)
 1399    ;   true
 1400    ),
 1401    (   uses_history(A)
 1402    ->  create_static_suspension_field(A, G, history, t, K)
 1403    ;   K=true
 1404    ),
 1405    get_static_suspension_term_field(arguments, A, G, D),
 1406    _=[_|_],
 1407    (   chr_pp_flag(debugable, off),
 1408        (   only_ground_indexed_arguments(A)
 1409        ;   get_store_type(A, var_assoc_store(_, _))
 1410        )
 1411    ->  suspension_term_base_fields(A, _),
 1412        (   has_suspension_field(A, id)
 1413        ->  get_static_suspension_term_field(id, A, G, L),
 1414            gen_id(L, M)
 1415        ;   M=true
 1416        ),
 1417        F=(B=G, H, I, K, M)
 1418    ;   (   has_suspension_field(A, id)
 1419        ->  get_static_suspension_term_field(id, A, G, L),
 1420            gen_id(L, M)
 1421        ;   M=true
 1422        ),
 1423        generate_indexed_variables_body(A, D, N, E),
 1424        chr_none_locked(E, O),
 1425        F=(B=G, N, O, H, I, K, M)
 1426    ).
 1427generate_novel_production(A, B) :-
 1428    (   is_used_auxiliary_predicate(novel_production)
 1429    ->  A=[C|B],
 1430        C=('$novel_production'(D, E):-arg(3, D, F), (hprolog:get_ds(E, F, _)->fail;true))
 1431    ;   A=B
 1432    ).
 1433generate_extend_history(A, B) :-
 1434    (   is_used_auxiliary_predicate(extend_history)
 1435    ->  A=[C|B],
 1436        C=('$extend_history'(D, E):-arg(3, D, F), hprolog:put_ds(E, F, x, G), setarg(3, D, G))
 1437    ;   A=B
 1438    ).
 1439generate_empty_named_history_initialisations(A, B) :-
 1440    empty_named_history_initialisations(A, B),
 1441    find_empty_named_histories.
 1442empty_named_history_global_variable(A, B) :-
 1443    atom_concat('chr empty named history ', A, B).
 1444empty_named_history_novel_production(A, nb_getval(B, 0)) :-
 1445    empty_named_history_global_variable(A, B).
 1446empty_named_history_extend_history(A, b_setval(B, 1)) :-
 1447    empty_named_history_global_variable(A, B).
 1448generate_run_suspensions_clauses([], A, A).
 1449generate_run_suspensions_clauses([A|B], C, D) :-
 1450    generate_run_suspensions_clause(A, C, E),
 1451    generate_run_suspensions_clauses(B, E, D).
 1452run_suspensions_goal(A, B, C) :-
 1453    make_name('$run_suspensions_', A, D),
 1454    C=..[D, B].
 1455generate_run_suspensions_clause(A, B, C) :-
 1456    (   is_used_auxiliary_predicate(run_suspensions, A)
 1457    ->  B=[D, E|C],
 1458        run_suspensions_goal(A, [], D),
 1459        (   chr_pp_flag(debugable, on)
 1460        ->  run_suspensions_goal(A, [F|G], H),
 1461            get_update_suspension_field(A,
 1462                                        F,
 1463                                        state,
 1464                                        I,
 1465                                        triggered,
 1466                                        J,
 1467                                        K,
 1468                                        L),
 1469            get_update_suspension_field(A,
 1470                                        F,
 1471                                        state,
 1472                                        M,
 1473                                        active,
 1474                                        N,
 1475                                        O,
 1476                                        P),
 1477            get_update_suspension_field(A,
 1478                                        F,
 1479                                        generation,
 1480                                        Q,
 1481                                        R,
 1482                                        S,
 1483                                        T,
 1484                                        U),
 1485            get_dynamic_suspension_term_field(continuation,
 1486                                              A,
 1487                                              F,
 1488                                              V,
 1489                                              W),
 1490            run_suspensions_goal(A, G, X),
 1491            E=(H:-J, K, (I==active->L, S, T, R is Q+1, U, W, ('chr debugging'->('chr debug_event'(wake(F)), call(V);'chr debug_event'(fail(F)), !, fail), ('chr debug_event'(exit(F));'chr debug_event'(redo(F)), fail);call(V)), N, O, (M==triggered->P;true);true), X)
 1492        ;   run_suspensions_goal(A, [F|G], H),
 1493            static_suspension_term(A, Y),
 1494            get_static_suspension_term_field(arguments,
 1495                                             A,
 1496                                             Y,
 1497                                             Z),
 1498            append(Z, [F], A1),
 1499            make_suspension_continuation_goal(A, A1, V),
 1500            run_suspensions_goal(A, G, X),
 1501            (   uses_field(A, generation)
 1502            ->  get_update_static_suspension_field(A,
 1503                                                   F,
 1504                                                   Y,
 1505                                                   generation,
 1506                                                   Q,
 1507                                                   R,
 1508                                                   S,
 1509                                                   U),
 1510                B1=(S, R is Q+1, U)
 1511            ;   B1=true
 1512            ),
 1513            get_update_static_suspension_field(A,
 1514                                               F,
 1515                                               Y,
 1516                                               state,
 1517                                               I,
 1518                                               triggered,
 1519                                               J,
 1520                                               L),
 1521            get_update_static_suspension_field(A,
 1522                                               F,
 1523                                               Y,
 1524                                               state,
 1525                                               M,
 1526                                               active,
 1527                                               C1,
 1528                                               D1),
 1529            if_used_state(A,
 1530                          removed,
 1531                          (J, (I==active->E1;true)),
 1532                          E1,
 1533                          F1),
 1534            E1=(L, B1, V, C1, (M==triggered->D1;true)),
 1535            E=(H:-F=Y, F1, X)
 1536        )
 1537    ;   B=C
 1538    ).
 1539generate_attach_increment(A) :-
 1540    get_max_constraint_index(B),
 1541    (   is_used_auxiliary_predicate(attach_increment),
 1542        B>0
 1543    ->  A=[C, D],
 1544        generate_attach_increment_empty(C),
 1545        (   B==1
 1546        ->  generate_attach_increment_one(D)
 1547        ;   generate_attach_increment_many(B, D)
 1548        )
 1549    ;   A=[]
 1550    ).
 1551generate_attach_increment_empty((attach_increment([], _):-true)).
 1552generate_attach_increment_one(A) :-
 1553    B=attach_increment([C|D], E),
 1554    get_target_module(F),
 1555    chr_not_locked(C, G),
 1556    H=(G, (get_attr(C, F, I)->sort(I, J), 'chr merge_attributes'(E, J, K), put_attr(C, F, K);put_attr(C, F, E)), attach_increment(D, E)),
 1557    A=(B:-H).
 1558generate_attach_increment_many(A, B) :-
 1559    C=attach_increment([D|E], F),
 1560    merge_attributes(A, F, G, H, I),
 1561    get_target_module(J),
 1562    chr_not_locked(D, K),
 1563    L=(K, (get_attr(D, J, G)->H, put_attr(D, J, I);put_attr(D, J, F)), attach_increment(E, F)),
 1564    B=(C:-L).
 1565generate_attr_unify_hook(A) :-
 1566    get_max_constraint_index(B),
 1567    (   B==0
 1568    ->  A=[]
 1569    ;   A=[C|D],
 1570        C=attribute_goals(_, E, E),
 1571        (   B==1
 1572        ->  generate_attr_unify_hook_one(D)
 1573        ;   generate_attr_unify_hook_many(B, D)
 1574        )
 1575    ).
 1576generate_attr_unify_hook_one([A]) :-
 1577    B=attr_unify_hook(C, D),
 1578    get_target_module(E),
 1579    get_indexed_constraint(1, F),
 1580    (   get_store_type(F, G),
 1581        (   G=default
 1582        ;   G=multi_store(H),
 1583            memberchk(default, H)
 1584        )
 1585    ->  make_run_suspensions(I, J, K),
 1586        make_run_suspensions(J, J, L),
 1587        (   atomic_types_suspended_constraint(F)
 1588        ->  M=true,
 1589            J=C,
 1590            N=true,
 1591            O=P,
 1592            Q=(append(C, P, R), sort(R, I)),
 1593            S=true
 1594        ;   M=sort(C, J),
 1595            N=sort(P, O),
 1596            Q='chr merge_attributes'(J, O, I),
 1597            use_auxiliary_predicate(attach_increment),
 1598            S=(compound(D)->term_variables(D, T), attach_increment(T, J);true)
 1599        ),
 1600        U=(M, (var(D)->(get_attr(D, E, P)->N, Q, put_attr(D, E, I), K;put_attr(D, E, J), L);S, L)),
 1601        A=(B:-U)
 1602    ;   get_store_type(F, var_assoc_store(_, _))
 1603    ->  make_run_suspensions(R, R, K),
 1604        Q=merge_into_assoc_store(C, P, R),
 1605        U=(get_attr(D, E, P)->Q, K;put_attr(D, E, C)),
 1606        A=(B:-U)
 1607    ).
 1608generate_attr_unify_hook_many(A, [B]) :-
 1609    chr_pp_flag(dynattr, off),
 1610    !,
 1611    C=attr_unify_hook(D, E),
 1612    get_target_module(F),
 1613    make_attr(A, G, H, D),
 1614    bagof(I,
 1615          J^K^(member(J, H), I=sort(J, K)),
 1616          L),
 1617    list2conj(L, M),
 1618    bagof(K, J^member(sort(J, K), L), N),
 1619    merge_attributes2(A, G, N, O, P, Q),
 1620    get_all_suspensions2(A, Q, R),
 1621    make_attr(A, G, N, S),
 1622    make_run_suspensions_loop(R, N, T),
 1623    make_run_suspensions_loop(N, N, U),
 1624    (   forall(( between(1, A, V),
 1625                 get_indexed_constraint(V, W)
 1626               ),
 1627               atomic_types_suspended_constraint(W))
 1628    ->  X=true
 1629    ;   use_auxiliary_predicate(attach_increment),
 1630        X=(compound(E)->term_variables(E, Y), attach_increment(Y, S);true)
 1631    ),
 1632    Z=(M, (var(E)->(get_attr(E, F, O)->P, put_attr(E, F, Q), T;put_attr(E, F, S), U);X, U)),
 1633    B=(C:-Z).
 1634generate_attr_unify_hook_many(A, B) :-
 1635    C=attr_unify_hook(D, E),
 1636    get_target_module(F),
 1637    normalize_attr(D, G, H),
 1638    normalize_attr(I, J, K),
 1639    merge_attributes(A, H, K, L, M),
 1640    make_run_suspensions(A),
 1641    (   forall(( between(1, A, N),
 1642                 get_indexed_constraint(N, O)
 1643               ),
 1644               atomic_types_suspended_constraint(O))
 1645    ->  P=true
 1646    ;   use_auxiliary_predicate(attach_increment),
 1647        P=(compound(E)->term_variables(E, Q), attach_increment(Q, H);true)
 1648    ),
 1649    R=(G, (var(E)->(get_attr(E, F, I)->J, L, put_attr(E, F, M), '$dispatch_run_suspensions'(M);put_attr(E, F, H), '$dispatch_run_suspensions'(H));P, '$dispatch_run_suspensions'(H))),
 1650    S=(C:-R),
 1651    B=[S, T, U|V],
 1652    T='$dispatch_run_suspensions'([]),
 1653    U=('$dispatch_run_suspensions'([W-X|Y]):-'$dispatch_run_suspensions'(W, X), '$dispatch_run_suspensions'(Y)),
 1654    run_suspensions_dispatchers(A, [], V).
 1655run_suspensions_dispatchers(A, B, C) :-
 1656    (   A>0
 1657    ->  get_indexed_constraint(A, D),
 1658        E=[('$dispatch_run_suspensions'(A, F):-G)|B],
 1659        (   may_trigger(D)
 1660        ->  run_suspensions_goal(D, F, G)
 1661        ;   G=true
 1662        ),
 1663        H is A-1,
 1664        run_suspensions_dispatchers(H, E, C)
 1665    ;   C=B
 1666    ).
 1667make_run_suspensions(A) :-
 1668    (   A>0
 1669    ->  (   get_indexed_constraint(A, B),
 1670            may_trigger(B)
 1671        ->  use_auxiliary_predicate(run_suspensions, B)
 1672        ;   true
 1673        ),
 1674        C is A-1,
 1675        make_run_suspensions(C)
 1676    ;   true
 1677    ).
 1678make_run_suspensions(A, B, C) :-
 1679    make_run_suspensions(1, A, B, C).
 1680make_run_suspensions(A, B, C, D) :-
 1681    (   get_indexed_constraint(A, E),
 1682        may_trigger(E)
 1683    ->  use_auxiliary_predicate(run_suspensions, E),
 1684        (   wakes_partially(E)
 1685        ->  run_suspensions_goal(E, C, D)
 1686        ;   run_suspensions_goal(E, B, D)
 1687        )
 1688    ;   D=true
 1689    ).
 1690make_run_suspensions_loop(A, B, C) :-
 1691    make_run_suspensions_loop(A, B, 1, C).
 1692make_run_suspensions_loop([], [], _, true).
 1693make_run_suspensions_loop([A|B], [C|D], E, (F, G)) :-
 1694    make_run_suspensions(E, A, C, F),
 1695    H is E+1,
 1696    make_run_suspensions_loop(B, D, H, G).
 1697generate_insert_delete_constraints([], []).
 1698generate_insert_delete_constraints([A|B], C) :-
 1699    (   is_stored(A)
 1700    ->  generate_insert_delete_constraint(A, C, D)
 1701    ;   C=D
 1702    ),
 1703    generate_insert_delete_constraints(B, D).
 1704generate_insert_delete_constraint(A, B, C) :-
 1705    insert_constraint_clause(A, B, D),
 1706    delete_constraint_clause(A, D, C).
 1707insert_constraint_goal(A, B, C, D) :-
 1708    (   chr_pp_flag(inline_insertremove, off)
 1709    ->  use_auxiliary_predicate(insert_in_store, A),
 1710        insert_constraint_atom(A, B, D)
 1711    ;   delay_phase_end(validate_store_type_assumptions,
 1712                        (insert_constraint_body(A, B, E, D), insert_constraint_direct_used_vars(E, C)))
 1713    ).
 1714insert_constraint_direct_used_vars([], _).
 1715insert_constraint_direct_used_vars([A-B|C], D) :-
 1716    nth1(A, D, B),
 1717    insert_constraint_direct_used_vars(C, D).
 1718insert_constraint_atom(A, B, C) :-
 1719    make_name('$insert_in_store_', A, D),
 1720    C=..[D, B].
 1721insert_constraint_clause(A, B, C) :-
 1722    (   is_used_auxiliary_predicate(insert_in_store, A)
 1723    ->  B=[D|C],
 1724        D=(E:-F, G, H),
 1725        insert_constraint_atom(A, I, E),
 1726        insert_constraint_body(A, I, J, H),
 1727        insert_constraint_used_vars(J, A, I, G),
 1728        (   chr_pp_flag(store_counter, on)
 1729        ->  F='$insert_counter_inc'
 1730        ;   F=true
 1731        )
 1732    ;   B=C
 1733    ).
 1734insert_constraint_used_vars([], _, _, true).
 1735insert_constraint_used_vars([A-B|C], D, E, (F, G)) :-
 1736    get_dynamic_suspension_term_field(argument(A),
 1737                                      D,
 1738                                      E,
 1739                                      B,
 1740                                      F),
 1741    insert_constraint_used_vars(C, D, E, G).
 1742insert_constraint_body(A, B, C, D) :-
 1743    get_store_type(A, E),
 1744    insert_constraint_body(E, A, B, C, D).
 1745insert_constraint_body(default, A, B, [], C) :-
 1746    global_list_store_name(A, D),
 1747    make_get_store_goal(D, E, F),
 1748    make_update_store_goal(D, G, H),
 1749    (   chr_pp_flag(debugable, on)
 1750    ->  G=[B|E],
 1751        C=(F, H)
 1752    ;   set_dynamic_suspension_term_field(global_list_prev,
 1753                                          A,
 1754                                          I,
 1755                                          G,
 1756                                          J),
 1757        C=(F, G=[B|E], H, (E=[I|_]->J;true))
 1758    ).
 1759insert_constraint_body(multi_inthash(A), B, C, [], D) :-
 1760    generate_multi_inthash_insert_constraint_bodies(A,
 1761                                                    B,
 1762                                                    C,
 1763                                                    D).
 1764insert_constraint_body(multi_hash(A), B, C, D, E) :-
 1765    generate_multi_hash_insert_constraint_bodies(A,
 1766                                                 B,
 1767                                                 C,
 1768                                                 E,
 1769                                                 D),
 1770    sort_out_used_vars(D, _).
 1771insert_constraint_body(atomic_constants(A, _, _), B, C, D, E) :-
 1772    multi_hash_key_direct(B, A, C, F, D),
 1773    constants_store_index_name(B, A, G),
 1774    H=..[G, F, I],
 1775    E=(H->nb_getval(I, J), b_setval(I, [C|J]);true).
 1776insert_constraint_body(ground_constants(A, _, _), B, C, D, E) :-
 1777    multi_hash_key_direct(B, A, C, F, D),
 1778    constants_store_index_name(B, A, G),
 1779    H=..[G, F, I],
 1780    E=(H->nb_getval(I, J), b_setval(I, [C|J]);true).
 1781insert_constraint_body(global_ground, A, B, [], C) :-
 1782    global_ground_store_name(A, D),
 1783    make_get_store_goal(D, E, F),
 1784    make_update_store_goal(D, G, H),
 1785    (   chr_pp_flag(debugable, on)
 1786    ->  G=[B|E],
 1787        C=(F, H)
 1788    ;   set_dynamic_suspension_term_field(global_list_prev,
 1789                                          A,
 1790                                          I,
 1791                                          G,
 1792                                          J),
 1793        C=(F, G=[B|E], H, (E=[I|_]->J;true))
 1794    ).
 1795insert_constraint_body(var_assoc_store(A, B), _, C, [A-D, B-E], F) :-
 1796    get_target_module(G),
 1797    F=(get_attr(D, G, H)->insert_assoc_store(H, E, C);new_assoc_store(H), put_attr(D, G, H), insert_assoc_store(H, E, C)).
 1798insert_constraint_body(global_singleton, A, B, [], C) :-
 1799    global_singleton_store_name(A, D),
 1800    make_update_store_goal(D, B, E),
 1801    C=E.
 1802insert_constraint_body(multi_store(A), B, C, D, E) :-
 1803    maplist(insert_constraint_body1(B, C), A, F, G),
 1804    list2conj(G, E),
 1805    sort_out_used_vars(F, D).
 1806insert_constraint_body1(A, B, C, D, E) :-
 1807    insert_constraint_body(C, A, B, D, E).
 1808insert_constraint_body(identifier_store(A), B, C, D, E) :-
 1809    D=[A-F],
 1810    get_identifier_size(G),
 1811    functor(H, struct, G),
 1812    get_identifier_index(B, A, I),
 1813    arg(I, H, J),
 1814    E=(F=H, setarg(I, F, [C|J])).
 1815insert_constraint_body(type_indexed_identifier_store(A, B), C, D, E, F) :-
 1816    E=[A-G],
 1817    type_indexed_identifier_structure(B, H),
 1818    get_type_indexed_identifier_index(B, C, A, I),
 1819    arg(I, H, J),
 1820    F=(G=H, setarg(I, G, [D|J])).
 1821sort_out_used_vars(A, B) :-
 1822    flatten(A, C),
 1823    sort(C, D),
 1824    sort_out_used_vars1(D, B).
 1825sort_out_used_vars1([], []).
 1826sort_out_used_vars1([A-B], C) :-
 1827    !,
 1828    C=[A-B].
 1829sort_out_used_vars1([A-B, C-D|E], F) :-
 1830    (   A==C
 1831    ->  B=D,
 1832        sort_out_used_vars1([A-B|E], F)
 1833    ;   F=[A-B|G],
 1834        sort_out_used_vars1([C-D|E], G)
 1835    ).
 1836generate_multi_inthash_insert_constraint_bodies([], _, _, true).
 1837generate_multi_inthash_insert_constraint_bodies([A|B], C, D, (E, F)) :-
 1838    multi_hash_store_name(C, A, G),
 1839    multi_hash_key(C, A, D, H, I),
 1840    E=(H, nb_getval(G, J), insert_iht(J, I, D)),
 1841    generate_multi_inthash_insert_constraint_bodies(B,
 1842                                                    C,
 1843                                                    D,
 1844                                                    F).
 1845generate_multi_hash_insert_constraint_bodies([], _, _, true, []).
 1846generate_multi_hash_insert_constraint_bodies([A|B], C, D, (E, F), [G|H]) :-
 1847    multi_hash_store_name(C, A, I),
 1848    multi_hash_key_direct(C, A, D, J, G),
 1849    make_get_store_goal(I, K, L),
 1850    (   chr_pp_flag(ht_removal, on)
 1851    ->  ht_prev_field(A, M),
 1852        set_dynamic_suspension_term_field(M,
 1853                                          C,
 1854                                          N,
 1855                                          O,
 1856                                          P),
 1857        E=(L, insert_ht(K, J, D, O), (O=[_, N|_]->P;true))
 1858    ;   E=(L, insert_ht(K, J, D))
 1859    ),
 1860    generate_multi_hash_insert_constraint_bodies(B,
 1861                                                 C,
 1862                                                 D,
 1863                                                 F,
 1864                                                 H).
 1865delete_constraint_clause(A, B, C) :-
 1866    (   is_used_auxiliary_predicate(delete_from_store, A)
 1867    ->  B=[D|C],
 1868        D=(E:-F),
 1869        delete_constraint_atom(A, G, E),
 1870        A=H/I,
 1871        functor(E, H, I),
 1872        delete_constraint_body(A, E, G, [], F)
 1873    ;   B=C
 1874    ).
 1875delete_constraint_goal(A, B, C, D) :-
 1876    functor(A, E, F),
 1877    G=E/F,
 1878    (   chr_pp_flag(inline_insertremove, off)
 1879    ->  use_auxiliary_predicate(delete_from_store, G),
 1880        delete_constraint_atom(G, B, D)
 1881    ;   delay_phase_end(validate_store_type_assumptions,
 1882                        delete_constraint_body(G,
 1883                                               A,
 1884                                               B,
 1885                                               C,
 1886                                               D))
 1887    ).
 1888delete_constraint_atom(A, B, C) :-
 1889    make_name('$delete_from_store_', A, D),
 1890    C=..[D, B].
 1891delete_constraint_body(A, B, C, D, E) :-
 1892    E=(F, G),
 1893    (   chr_pp_flag(store_counter, on)
 1894    ->  F='$delete_counter_inc'
 1895    ;   F=true
 1896    ),
 1897    get_store_type(A, H),
 1898    delete_constraint_body(H, A, B, C, D, G).
 1899delete_constraint_body(default, A, _, B, _, C) :-
 1900    (   chr_pp_flag(debugable, on)
 1901    ->  global_list_store_name(A, D),
 1902        make_get_store_goal(D, E, F),
 1903        make_update_store_goal(D, G, H),
 1904        C=(F, 'chr sbag_del_element'(E, B, G), H)
 1905    ;   get_dynamic_suspension_term_field(global_list_prev,
 1906                                          A,
 1907                                          B,
 1908                                          I,
 1909                                          J),
 1910        global_list_store_name(A, D),
 1911        make_get_store_goal(D, E, F),
 1912        make_update_store_goal(D, K, H),
 1913        set_dynamic_suspension_term_field(global_list_prev,
 1914                                          A,
 1915                                          L,
 1916                                          _,
 1917                                          M),
 1918        set_dynamic_suspension_term_field(global_list_prev,
 1919                                          A,
 1920                                          L,
 1921                                          I,
 1922                                          N),
 1923        C=(J, (var(I)->F, E=[_|K], H, (K=[L|_]->M;true);I=[_, _|K], setarg(2, I, K), (K=[L|_]->N;true)))
 1924    ).
 1925delete_constraint_body(multi_inthash(A), B, _, C, _, D) :-
 1926    generate_multi_inthash_delete_constraint_bodies(A,
 1927                                                    B,
 1928                                                    C,
 1929                                                    D).
 1930delete_constraint_body(multi_hash(A), B, C, D, E, F) :-
 1931    generate_multi_hash_delete_constraint_bodies(A,
 1932                                                 B,
 1933                                                 C,
 1934                                                 D,
 1935                                                 E,
 1936                                                 F).
 1937delete_constraint_body(atomic_constants(A, _, _), B, C, D, E, F) :-
 1938    multi_hash_key(B, C, A, D, E, G, H),
 1939    constants_store_index_name(B, A, I),
 1940    J=..[I, H, K],
 1941    F=(G, (J->nb_getval(K, L), 'chr sbag_del_element'(L, D, M), b_setval(K, M);true)).
 1942delete_constraint_body(ground_constants(A, _, _), B, C, D, E, F) :-
 1943    multi_hash_key(B, C, A, D, E, G, H),
 1944    constants_store_index_name(B, A, I),
 1945    J=..[I, H, K],
 1946    F=(G, (J->nb_getval(K, L), 'chr sbag_del_element'(L, D, M), b_setval(K, M);true)).
 1947delete_constraint_body(global_ground, A, _, B, _, C) :-
 1948    (   chr_pp_flag(debugable, on)
 1949    ->  global_ground_store_name(A, D),
 1950        make_get_store_goal(D, E, F),
 1951        make_update_store_goal(D, G, H),
 1952        C=(F, 'chr sbag_del_element'(E, B, G), H)
 1953    ;   get_dynamic_suspension_term_field(global_list_prev,
 1954                                          A,
 1955                                          B,
 1956                                          I,
 1957                                          J),
 1958        global_ground_store_name(A, D),
 1959        make_get_store_goal(D, E, F),
 1960        make_update_store_goal(D, K, H),
 1961        set_dynamic_suspension_term_field(global_list_prev,
 1962                                          A,
 1963                                          L,
 1964                                          _,
 1965                                          M),
 1966        set_dynamic_suspension_term_field(global_list_prev,
 1967                                          A,
 1968                                          L,
 1969                                          I,
 1970                                          N),
 1971        C=(J, (var(I)->F, E=[_|K], H, (K=[L|_]->M;true);I=[_, _|K], setarg(2, I, K), (K=[L|_]->N;true)))
 1972    ).
 1973delete_constraint_body(var_assoc_store(A, B), C, _, D, _, E) :-
 1974    get_target_module(F),
 1975    get_dynamic_suspension_term_field(argument(A),
 1976                                      C,
 1977                                      D,
 1978                                      G,
 1979                                      H),
 1980    get_dynamic_suspension_term_field(argument(B),
 1981                                      C,
 1982                                      D,
 1983                                      I,
 1984                                      J),
 1985    E=(H, get_attr(G, F, K), J, delete_assoc_store(K, I, D)).
 1986delete_constraint_body(global_singleton, A, _, _, _, B) :-
 1987    global_singleton_store_name(A, C),
 1988    make_update_store_goal(C, [], D),
 1989    B=D.
 1990delete_constraint_body(multi_store(A), B, C, D, E, F) :-
 1991    maplist(delete_constraint_body1(B, C, D, E),
 1992            A,
 1993            G),
 1994    list2conj(G, F).
 1995delete_constraint_body1(A, B, C, D, E, F) :-
 1996    delete_constraint_body(E, A, B, C, D, F).
 1997delete_constraint_body(identifier_store(A), B, C, D, E, F) :-
 1998    get_suspension_argument_possibly_in_scope(C,
 1999                                              E,
 2000                                              D,
 2001                                              A,
 2002                                              G,
 2003                                              H),
 2004    get_identifier_size(I),
 2005    functor(J, struct, I),
 2006    get_identifier_index(B, A, K),
 2007    arg(K, J, L),
 2008    F=(H, G=J, 'chr sbag_del_element'(L, D, M), setarg(K, G, M)).
 2009delete_constraint_body(type_indexed_identifier_store(A, B), C, D, E, F, G) :-
 2010    get_suspension_argument_possibly_in_scope(D,
 2011                                              F,
 2012                                              E,
 2013                                              A,
 2014                                              H,
 2015                                              I),
 2016    type_indexed_identifier_structure(B, J),
 2017    get_type_indexed_identifier_index(B, C, A, K),
 2018    arg(K, J, L),
 2019    G=(I, H=J, 'chr sbag_del_element'(L, E, M), setarg(K, H, M)).
 2020generate_multi_inthash_delete_constraint_bodies([], _, _, true).
 2021generate_multi_inthash_delete_constraint_bodies([A|B], C, D, (E, F)) :-
 2022    multi_hash_store_name(C, A, G),
 2023    multi_hash_key(C, A, D, H, I),
 2024    E=(H, nb_getval(G, J), delete_iht(J, I, D)),
 2025    generate_multi_inthash_delete_constraint_bodies(B,
 2026                                                    C,
 2027                                                    D,
 2028                                                    F).
 2029generate_multi_hash_delete_constraint_bodies([], _, _, _, _, true).
 2030generate_multi_hash_delete_constraint_bodies([A|B], C, D, E, F, (G, H)) :-
 2031    multi_hash_store_name(C, A, I),
 2032    multi_hash_key(C, D, A, E, F, J, K),
 2033    make_get_store_goal(I, L, M),
 2034    (   chr_pp_flag(ht_removal, on)
 2035    ->  ht_prev_field(A, N),
 2036        get_dynamic_suspension_term_field(N,
 2037                                          C,
 2038                                          E,
 2039                                          O,
 2040                                          P),
 2041        set_dynamic_suspension_term_field(N,
 2042                                          C,
 2043                                          Q,
 2044                                          _,
 2045                                          R),
 2046        set_dynamic_suspension_term_field(N,
 2047                                          C,
 2048                                          Q,
 2049                                          O,
 2050                                          S),
 2051        G=(P, (var(O)->M, J, delete_first_ht(L, K, T), (T=[Q|_]->R;true);O=[_, _|T], setarg(2, O, T), (T=[Q|_]->S;true)))
 2052    ;   G=(J, M, delete_ht(L, K, E))
 2053    ),
 2054    generate_multi_hash_delete_constraint_bodies(B,
 2055                                                 _,
 2056                                                 D,
 2057                                                 E,
 2058                                                 F,
 2059                                                 H).
 2060generate_attach_code(A, B) :-
 2061    enumerate_stores_code(A, C),
 2062    append(C, D, B),
 2063    generate_attach_code(A, D, E),
 2064    module_initializers(F),
 2065    prolog_global_variables_code(G),
 2066    E=[('$chr_initialization':-F), (:-initialization'$chr_initialization')|G].
 2067generate_attach_code([], A, A).
 2068generate_attach_code([A|B], C, D) :-
 2069    get_store_type(A, E),
 2070    generate_attach_code(E, A, C, F),
 2071    generate_attach_code(B, F, D).
 2072generate_attach_code(default, A, B, C) :-
 2073    global_list_store_initialisation(A, B, C).
 2074generate_attach_code(multi_inthash(A), B, C, D) :-
 2075    multi_inthash_store_initialisations(A, B, C, E),
 2076    multi_inthash_via_lookups(A, B, E, D).
 2077generate_attach_code(multi_hash(A), B, C, D) :-
 2078    multi_hash_store_initialisations(A, B, C, E),
 2079    multi_hash_lookups(A, B, E, D).
 2080generate_attach_code(atomic_constants(A, B, _), C, D, E) :-
 2081    constants_initializers(C, A, B),
 2082    atomic_constants_code(C, A, B, D, E).
 2083generate_attach_code(ground_constants(A, B, _), C, D, E) :-
 2084    constants_initializers(C, A, B),
 2085    ground_constants_code(C, A, B, D, E).
 2086generate_attach_code(global_ground, A, B, C) :-
 2087    global_ground_store_initialisation(A, B, C).
 2088generate_attach_code(var_assoc_store(_, _), _, A, A) :-
 2089    use_auxiliary_module(chr_assoc_store).
 2090generate_attach_code(global_singleton, A, B, C) :-
 2091    global_singleton_store_initialisation(A, B, C).
 2092generate_attach_code(multi_store(A), B, C, D) :-
 2093    multi_store_generate_attach_code(A, B, C, D).
 2094generate_attach_code(identifier_store(A), B, C, D) :-
 2095    get_identifier_index(B, A, E),
 2096    (   E==2
 2097    ->  get_identifier_size(F),
 2098        functor(G, struct, F),
 2099        G=..[_, H|I],
 2100        set_elems(I, []),
 2101        J=new_identifier(H, G),
 2102        functor(K, struct, F),
 2103        arg(1, K, L),
 2104        M=(user:portray(K):-write('<id:'), print(L), write(>)),
 2105        functor(N, struct, F),
 2106        arg(1, N, O),
 2107        P=identifier_label(N, O),
 2108        C=[J, M, P|D]
 2109    ;   C=D
 2110    ).
 2111generate_attach_code(type_indexed_identifier_store(A, B), C, D, E) :-
 2112    get_type_indexed_identifier_index(B, C, A, F),
 2113    (   F==2
 2114    ->  identifier_store_initialization(B, D, G),
 2115        get_type_indexed_identifier_size(B, _),
 2116        type_indexed_identifier_structure(B, H),
 2117        H=..[_, I|J],
 2118        set_elems(J, []),
 2119        type_indexed_identifier_name(B, new_identifier, K),
 2120        L=..[K, I, H],
 2121        M=..[K, N, O],
 2122        type_indexed_identifier_structure(B, P),
 2123        P=..[_, N|Q],
 2124        set_elems(Q, []),
 2125        R=(O=P),
 2126        S=user:goal_expansion(M, R),
 2127        type_indexed_identifier_structure(B, T),
 2128        arg(1, T, U),
 2129        V=(user:portray(T):-write('<id:'), print(U), write(>)),
 2130        type_indexed_identifier_structure(B, W),
 2131        arg(1, W, X),
 2132        type_indexed_identifier_name(B, identifier_label, Y),
 2133        Z=..[Y, W, X],
 2134        A1=..[Y, B1, C1],
 2135        type_indexed_identifier_structure(B, D1),
 2136        arg(1, D1, C1),
 2137        E1=(B1=D1),
 2138        F1=(user:goal_expansion(A1, E1):-writeln(expanding)),
 2139        identifier_store_name(B, G1),
 2140        lookup_identifier_atom(B, H1, I1, J1),
 2141        type_indexed_identifier_name(B, new_identifier, K1),
 2142        L1=..[K1, H1, I1],
 2143        M1=(J1:-nb_getval(G1, N1), (lookup_ht(N1, H1, [I1])->true;L1, insert_ht(N1, H1, I1))),
 2144        lookup_only_identifier_atom(B, O1, P1, Q1),
 2145        R1=(Q1:-nb_getval(G1, S1), lookup_ht(S1, O1, [P1])),
 2146        G=[(:-multifile goal_expansion/2), (:-dynamic goal_expansion/2), L, S, V, Z, F1, M1, R1|E]
 2147    ;   D=E
 2148    ).
 2149constants_initializers(A, B, C) :-
 2150    maplist(constant_initializer(A, B), C).
 2151constant_initializer(A, B, C) :-
 2152    constants_store_name(A, B, C, D),
 2153    prolog_global_variable(D),
 2154    module_initializer(nb_setval(D, [])).
 2155lookup_identifier_atom(A, B, C, D) :-
 2156    atom_concat(lookup_identifier_, A, E),
 2157    D=..[E, B, C].
 2158lookup_only_identifier_atom(A, B, C, D) :-
 2159    atom_concat(lookup_only_identifier_, A, E),
 2160    D=..[E, B, C].
 2161identifier_label_atom(A, B, C, D) :-
 2162    type_indexed_identifier_name(A, identifier_label, E),
 2163    D=..[E, B, C].
 2164multi_store_generate_attach_code([], _, A, A).
 2165multi_store_generate_attach_code([A|B], C, D, E) :-
 2166    generate_attach_code(A, C, D, F),
 2167    multi_store_generate_attach_code(B, C, F, E).
 2168multi_inthash_store_initialisations([], _, A, A).
 2169multi_inthash_store_initialisations([A|B], C, D, E) :-
 2170    use_auxiliary_module(chr_integertable_store),
 2171    multi_hash_store_name(C, A, F),
 2172    module_initializer((new_iht(G), nb_setval(F, G))),
 2173    H=D,
 2174    multi_inthash_store_initialisations(B, C, H, E).
 2175multi_hash_store_initialisations([], _, A, A).
 2176multi_hash_store_initialisations([A|B], C, D, E) :-
 2177    use_auxiliary_module(chr_hashtable_store),
 2178    multi_hash_store_name(C, A, F),
 2179    prolog_global_variable(F),
 2180    make_init_store_goal(F, G, H),
 2181    module_initializer((new_ht(G), H)),
 2182    I=D,
 2183    multi_hash_store_initialisations(B, C, I, E).
 2184global_list_store_initialisation(A, B, C) :-
 2185    (   is_stored(A)
 2186    ->  global_list_store_name(A, D),
 2187        prolog_global_variable(D),
 2188        make_init_store_goal(D, [], E),
 2189        module_initializer(E)
 2190    ;   true
 2191    ),
 2192    B=C.
 2193global_ground_store_initialisation(A, B, C) :-
 2194    global_ground_store_name(A, D),
 2195    prolog_global_variable(D),
 2196    make_init_store_goal(D, [], E),
 2197    module_initializer(E),
 2198    B=C.
 2199global_singleton_store_initialisation(A, B, C) :-
 2200    global_singleton_store_name(A, D),
 2201    prolog_global_variable(D),
 2202    make_init_store_goal(D, [], E),
 2203    module_initializer(E),
 2204    B=C.
 2205identifier_store_initialization(A, B, C) :-
 2206    use_auxiliary_module(chr_hashtable_store),
 2207    identifier_store_name(A, D),
 2208    prolog_global_variable(D),
 2209    make_init_store_goal(D, E, F),
 2210    module_initializer((new_ht(E), F)),
 2211    B=C.
 2212multi_inthash_via_lookups([], _, A, A).
 2213multi_inthash_via_lookups([A|B], C, D, E) :-
 2214    multi_hash_lookup_head(C, A, F, G, H),
 2215    multi_hash_lookup_body(C, inthash, A, F, G, I),
 2216    D=[(H:-I)|J],
 2217    multi_inthash_via_lookups(B, C, J, E).
 2218multi_hash_lookups([], _, A, A).
 2219multi_hash_lookups([A|B], C, D, E) :-
 2220    multi_hash_lookup_head(C, A, F, G, H),
 2221    multi_hash_lookup_body(C, hash, A, F, G, I),
 2222    D=[(H:-I)|J],
 2223    multi_hash_lookups(B, C, J, E).
 2224multi_hash_lookup_head(A, B, C, D, E) :-
 2225    multi_hash_lookup_name(A, B, F),
 2226    E=..[F, C, D].
 2227multi_hash_lookup_body(A, B, C, D, E, F) :-
 2228    get_store_type(A, multi_store(G)),
 2229    (   memberchk(atomic_constants(C, H, _), G)
 2230    ->  (   ground(D)
 2231        ->  constants_store_name(A, C, D, I),
 2232            F=nb_getval(I, E)
 2233        ;   constants_store_index_name(A, C, J),
 2234            K=..[J, D, I],
 2235            F=(K, nb_getval(I, E))
 2236        )
 2237    ;   memberchk(ground_constants(C, H, _), G)
 2238    ->  (   ground(D)
 2239        ->  constants_store_name(A, C, D, I),
 2240            F=nb_getval(I, E)
 2241        ;   constants_store_index_name(A, C, J),
 2242            K=..[J, D, I],
 2243            F=(K, nb_getval(I, E))
 2244        )
 2245    ;   memberchk(multi_hash([C]), G)
 2246    ->  multi_hash_store_name(A, C, I),
 2247        make_get_store_goal(I, L, M),
 2248        (   B==hash,
 2249            specialized_hash_term_call(A,
 2250                                       C,
 2251                                       D,
 2252                                       N,
 2253                                       O)
 2254        ->  F=(M, O, lookup_ht1(L, N, D, E))
 2255        ;   lookup_hash_call(B, L, D, E, K),
 2256            F=(M, K)
 2257        )
 2258    ;   B==inthash
 2259    ->  multi_hash_store_name(A, C, I),
 2260        make_get_store_goal(I, L, M),
 2261        lookup_hash_call(B, L, D, E, K),
 2262        F=(M, K)
 2263    ).
 2264lookup_hash_call(hash, A, B, C, lookup_ht(A, B, C)).
 2265lookup_hash_call(inthash, A, B, C, lookup_iht(A, B, C)).
 2266specialized_hash_term_call(_, _, A, B, C) :-
 2267    (   ground(A)
 2268    ->  term_hash(A, B),
 2269        C=true
 2270    ).
 2271multi_hash_lookup_goal(A, B, C, D, E, F) :-
 2272    (   atomic(D)
 2273    ->  actual_atomic_multi_hash_keys(A, C, [D])
 2274    ;   ground(D)
 2275    ->  actual_ground_multi_hash_keys(A, C, [D])
 2276    ;   C=[G],
 2277        get_constraint_arg_type(A, G, H),
 2278        is_chr_constants_type(H, _, _)
 2279    ->  true
 2280    ;   actual_non_ground_multi_hash_key(A, C)
 2281    ),
 2282    delay_phase_end(validate_store_type_assumptions,
 2283                    multi_hash_lookup_body(A,
 2284                                           B,
 2285                                           C,
 2286                                           D,
 2287                                           E,
 2288                                           F)).
 2289multi_hash_lookup_name(A/B, C, D) :-
 2290    atom_concat_list(C, E),
 2291    atom_concat_list(['$via1_multi_hash_', A, '___', B, -, E],
 2292                     D).
 2293multi_hash_store_name(A/B, C, D) :-
 2294    get_target_module(E),
 2295    atom_concat_list(C, F),
 2296    atom_concat_list([ '$chr_store_multi_hash_',
 2297                       E,
 2298                       '____',
 2299                       A,
 2300                       '___',
 2301                       B,
 2302                       -,
 2303                       F
 2304                     ],
 2305                     D).
 2306multi_hash_key(A, B, C, D, E) :-
 2307    (   B=[F]
 2308    ->  get_dynamic_suspension_term_field(argument(F),
 2309                                          A,
 2310                                          C,
 2311                                          E,
 2312                                          D)
 2313    ;   maplist(get_dynamic_suspension_term_field1(A, C),
 2314                B,
 2315                G,
 2316                H),
 2317        E=..[k|G],
 2318        list2conj(H, D)
 2319    ).
 2320get_dynamic_suspension_term_field1(A, B, C, D, E) :-
 2321    get_dynamic_suspension_term_field(argument(C),
 2322                                      A,
 2323                                      B,
 2324                                      D,
 2325                                      E).
 2326multi_hash_key(_, A, B, C, D, E, F) :-
 2327    (   B=[G]
 2328    ->  get_suspension_argument_possibly_in_scope(A,
 2329                                                  D,
 2330                                                  C,
 2331                                                  G,
 2332                                                  F,
 2333                                                  E)
 2334    ;   maplist(get_suspension_argument_possibly_in_scope(A,
 2335                                                          D,
 2336                                                          C),
 2337                B,
 2338                H,
 2339                I),
 2340        F=..[k|H],
 2341        list2conj(I, E)
 2342    ).
 2343get_suspension_argument_possibly_in_scope(A, B, C, D, E, F) :-
 2344    arg(D, A, G),
 2345    (   ground(G),
 2346        G='$chr_identifier_match'(H, I)
 2347    ->  functor(A, J, K),
 2348        lookup_identifier_atom(I, H, E, F)
 2349    ;   term_variables(G, L),
 2350        copy_term_nat(G-L, E-M),
 2351        translate(L, B, M)
 2352    ->  F=true
 2353    ;   functor(A, J, K),
 2354        N=J/K,
 2355        get_dynamic_suspension_term_field(argument(D),
 2356                                          N,
 2357                                          C,
 2358                                          E,
 2359                                          F)
 2360    ).
 2361multi_hash_key_direct(_, A, _, B, C) :-
 2362    (   A=[D]
 2363    ->  C=[D-B]
 2364    ;   pairup(A, E, C),
 2365        B=..[k|E]
 2366    ).
 2367args(A, B, C) :-
 2368    maplist(arg1(B), A, C).
 2369split_args(A, B, C, D) :-
 2370    split_args(A, B, 1, C, D).
 2371split_args([], A, _, [], A).
 2372split_args([A|B], [C|D], E, F, G) :-
 2373    H is E+1,
 2374    (   A==E
 2375    ->  F=[C|I],
 2376        split_args(B, D, H, I, G)
 2377    ;   G=[C|I],
 2378        split_args([A|B], D, H, F, I)
 2379    ).
 2380atomic_constants_code(A, B, C, D, E) :-
 2381    constants_store_index_name(A, B, F),
 2382    maplist(atomic_constant_code(A, B, F), C, G),
 2383    append(G, E, D).
 2384atomic_constant_code(A, B, C, D, E) :-
 2385    constants_store_name(A, B, D, F),
 2386    E=..[C, D, F].
 2387ground_constants_code(A, B, C, D, E) :-
 2388    constants_store_index_name(A, B, F),
 2389    maplist(constants_store_name(A, B), C, G),
 2390    length(C, H),
 2391    replicate(H, [], I),
 2392    trie_index([C|I], G, F, D, E).
 2393constants_store_name(A/B, C, D, E) :-
 2394    get_target_module(F),
 2395    term_to_atom(D, G),
 2396    term_to_atom(C, H),
 2397    atom_concat_list([ '$chr_store_constants_',
 2398                       F,
 2399                       '____',
 2400                       A,
 2401                       '___',
 2402                       B,
 2403                       '___',
 2404                       H,
 2405                       '___',
 2406                       G
 2407                     ],
 2408                     E).
 2409constants_store_index_name(A/B, C, D) :-
 2410    get_target_module(E),
 2411    term_to_atom(C, F),
 2412    atom_concat_list([ '$chr_store_constants_',
 2413                       E,
 2414                       '____',
 2415                       A,
 2416                       '___',
 2417                       B,
 2418                       '___',
 2419                       F
 2420                     ],
 2421                     D).
 2422trie_index([A|B], C, D, E, F) :-
 2423    trie_step(A, D, D, B, C, E, F).
 2424trie_step([], _, _, [], [], A, A) :-
 2425    !.
 2426trie_step(A, B, C, D, E, F, G) :-
 2427    D=[H|_],
 2428    length(H, I),
 2429    aggregate_all(set(J/K),
 2430                  ( member(L, A),
 2431                    functor(L, J, K)
 2432                  ),
 2433                  M),
 2434    N is I+1,
 2435    trie_step_cases(M,
 2436                    N,
 2437                    A,
 2438                    D,
 2439                    E,
 2440                    B,
 2441                    C,
 2442                    F,
 2443                    G).
 2444trie_step_cases([], _, _, _, _, _, _, A, A).
 2445trie_step_cases([A|B], C, D, E, F, G, H, I, J) :-
 2446    trie_step_case(A,
 2447                   C,
 2448                   D,
 2449                   E,
 2450                   F,
 2451                   G,
 2452                   H,
 2453                   I,
 2454                   K),
 2455    trie_step_cases(B,
 2456                    C,
 2457                    D,
 2458                    E,
 2459                    F,
 2460                    G,
 2461                    H,
 2462                    K,
 2463                    J).
 2464trie_step_case(A/B, C, D, E, F, G, H, [I|J], K) :-
 2465    I=(L:-M),
 2466    N is C+1,
 2467    functor(L, G, N),
 2468    arg(1, L, O),
 2469    L=..[_, _|P],
 2470    once(append(Q, [R], P)),
 2471    functor(O, A, B),
 2472    O=..[_|S],
 2473    append(S, P, T),
 2474    (   T==[R]
 2475    ->  J=K,
 2476        M=true,
 2477        rec_cases(D,
 2478                  _,
 2479                  F,
 2480                  A/B,
 2481                  _,
 2482                  _,
 2483                  U),
 2484        U=[R]
 2485    ;   rec_cases(D,
 2486                  E,
 2487                  F,
 2488                  A/B,
 2489                  V,
 2490                  W,
 2491                  U),
 2492        (   W=[X]
 2493        ->  J=K,
 2494            M=true,
 2495            append([V, X, U], T)
 2496        ;   pairup(V, W, Y),
 2497            common_pattern(Y, Z, A1, B1),
 2498            append(S, Q, [C1|D1]),
 2499            C1-D1=Z,
 2500            fresh_symbol(H, E1),
 2501            append(A1, [R], F1),
 2502            M=..[E1|F1],
 2503            maplist(head_tail, B1, G1, H1),
 2504            trie_step(G1,
 2505                      E1,
 2506                      H,
 2507                      H1,
 2508                      U,
 2509                      J,
 2510                      K)
 2511        )
 2512    ).
 2513head_tail([A|B], A, B).
 2514rec_cases([], [], [], _, [], [], []).
 2515rec_cases([A|B], [C|D], [E|F], G/H, I, J, K) :-
 2516    (   functor(A, G, H),
 2517        A=..[_|L],
 2518        append(L, C, [M|N])
 2519    ->  I=[M|O],
 2520        J=[N|P],
 2521        K=[E|Q],
 2522        rec_cases(B,
 2523                  D,
 2524                  F,
 2525                  G/H,
 2526                  O,
 2527                  P,
 2528                  Q)
 2529    ;   rec_cases(B,
 2530                  D,
 2531                  F,
 2532                  G/H,
 2533                  I,
 2534                  J,
 2535                  K)
 2536    ).
 2537common_pattern(A, B, C, D) :-
 2538    fold1(chr_translate:gct, A, B),
 2539    term_variables(B, C),
 2540    findall(C, member(B, A), D).
 2541gct(A, B, C) :-
 2542    gct_(A, B, C, [], _).
 2543gct_(A, B, C, D, E) :-
 2544    (   nonvar(A),
 2545        nonvar(B),
 2546        functor(A, F, G),
 2547        functor(B, H, I),
 2548        F==H,
 2549        G==I
 2550    ->  functor(C, F, G),
 2551        A=..[_|J],
 2552        B=..[_|K],
 2553        C=..[_|L],
 2554        maplist_dcg(chr_translate:gct_,
 2555                    J,
 2556                    K,
 2557                    L,
 2558                    D,
 2559                    E)
 2560    ;   lookup_eq(D, A+B, C)
 2561    ->  E=D
 2562    ;   E=[A+B-C|D]
 2563    ).
 2564global_list_store_name(A/B, C) :-
 2565    get_target_module(D),
 2566    atom_concat_list([ '$chr_store_global_list_',
 2567                       D,
 2568                       '____',
 2569                       A,
 2570                       '___',
 2571                       B
 2572                     ],
 2573                     C).
 2574global_ground_store_name(A/B, C) :-
 2575    get_target_module(D),
 2576    atom_concat_list([ '$chr_store_global_ground_',
 2577                       D,
 2578                       '____',
 2579                       A,
 2580                       '___',
 2581                       B
 2582                     ],
 2583                     C).
 2584global_singleton_store_name(A/B, C) :-
 2585    get_target_module(D),
 2586    atom_concat_list([ '$chr_store_global_singleton_',
 2587                       D,
 2588                       '____',
 2589                       A,
 2590                       '___',
 2591                       B
 2592                     ],
 2593                     C).
 2594identifier_store_name(A, B) :-
 2595    get_target_module(C),
 2596    atom_concat_list(['$chr_identifier_lookup_', C, '____', A], B).
 2597:- if(current_predicate(user:exception/3)). 2598prolog_global_variables_code([]) :-
 2599    tmp_module,
 2600    !.
 2601prolog_global_variables_code(A) :-
 2602    prolog_global_variables(B),
 2603    (   B==[]
 2604    ->  A=[]
 2605    ;   maplist(wrap_in_functor('$chr_prolog_global_variable'), B, C),
 2606        A=[(:-dynamic user:exception/3), (:-multifile user:exception/3), (user:exception(undefined_global_variable, D, retry):-'$chr_prolog_global_variable'(D), '$chr_initialization')|C]
 2607    ).
 2608tmp_module :-
 2609    prolog_load_context(module, A),
 2610    module_property(A, class(temporary)).
 2611:- else. 2612prolog_global_variables_code([]).
 2613:- endif. 2614sbag_member_call(A, B, member(A, B)).
 2615update_mutable_call(A, B, 'chr update_mutable'(A, B)).
 2616create_mutable_call(A, B, true) :-
 2617    B=mutable(A).
 2618get_suspension_field(A, B, C, D, E) :-
 2619    get_dynamic_suspension_term_field(C, A, B, D, E).
 2620update_suspension_field(A, B, C, D, E) :-
 2621    set_dynamic_suspension_term_field(C, A, B, D, E).
 2622get_update_suspension_field(A, B, C, D, E, true, F, G) :-
 2623    get_dynamic_suspension_term_field(C, A, B, D, F),
 2624    set_dynamic_suspension_term_field(C, A, B, E, G).
 2625create_static_suspension_field(A, B, C, D, true) :-
 2626    get_static_suspension_term_field(C, A, B, D).
 2627get_static_suspension_field(A, B, C, D, true) :-
 2628    get_static_suspension_term_field(C, A, B, D).
 2629get_update_static_suspension_field(A, B, C, D, E, F, true, G) :-
 2630    get_static_suspension_term_field(D, A, C, E),
 2631    set_dynamic_suspension_term_field(D, A, B, F, G).
 2632enumerate_stores_code(A, [B|C]) :-
 2633    D='$enumerate_constraints'(E),
 2634    B=(D:-F),
 2635    enumerate_store_bodies(A, E, C),
 2636    (   C=[]
 2637    ->  F=fail
 2638    ;   F=(nonvar(E)->functor(E, G, _), '$enumerate_constraints'(G, E);'$enumerate_constraints'(_, E))
 2639    ).
 2640enumerate_store_bodies([], _, []).
 2641enumerate_store_bodies([A|B], C, D) :-
 2642    (   is_stored(A)
 2643    ->  get_store_type(A, E),
 2644        (   enumerate_store_body(E, A, F, G)
 2645        ->  true
 2646        ;   chr_error(internal,
 2647                      'Could not generate enumeration code for constraint ~w.\n',
 2648                      [A])
 2649        ),
 2650        get_dynamic_suspension_term_field(arguments,
 2651                                          A,
 2652                                          F,
 2653                                          H,
 2654                                          I),
 2655        A=J/_,
 2656        K=..[J|H],
 2657        L='$enumerate_constraints'(J, C),
 2658        M=(G, I, C=K),
 2659        D=[(L:-M)|N]
 2660    ;   D=N
 2661    ),
 2662    enumerate_store_bodies(B, C, N).
 2663enumerate_store_body(default, A, B, C) :-
 2664    global_list_store_name(A, D),
 2665    sbag_member_call(B, E, F),
 2666    make_get_store_goal_no_error(D, E, G),
 2667    C=(G, F).
 2668enumerate_store_body(multi_inthash([A|_]), B, C, D) :-
 2669    multi_inthash_enumerate_store_body(A, B, C, D).
 2670enumerate_store_body(multi_hash([A|_]), B, C, D) :-
 2671    multi_hash_enumerate_store_body(A, B, C, D).
 2672enumerate_store_body(atomic_constants(A, B, C), D, E, F) :-
 2673    C==complete,
 2674    maplist(enumerate_constant_store_body(D, A, G),
 2675            B,
 2676            H),
 2677    list2disj(H, I),
 2678    F=(I, member(E, G)).
 2679enumerate_constant_store_body(A, B, C, D, nb_getval(E, C)) :-
 2680    constants_store_name(A, B, D, E).
 2681enumerate_store_body(ground_constants(A, B, C), D, E, F) :-
 2682    enumerate_store_body(atomic_constants(A, B, C),
 2683                         D,
 2684                         E,
 2685                         F).
 2686enumerate_store_body(global_ground, A, B, C) :-
 2687    global_ground_store_name(A, D),
 2688    sbag_member_call(B, E, F),
 2689    make_get_store_goal(D, E, G),
 2690    C=(G, F).
 2691enumerate_store_body(var_assoc_store(_, _), _, _, A) :-
 2692    A=fail.
 2693enumerate_store_body(global_singleton, A, B, C) :-
 2694    global_singleton_store_name(A, D),
 2695    make_get_store_goal(D, B, E),
 2696    C=(E, B\==[]).
 2697enumerate_store_body(multi_store(A), B, C, D) :-
 2698    (   memberchk(global_ground, A)
 2699    ->  enumerate_store_body(global_ground, B, C, D)
 2700    ;   once(( member(E, A),
 2701               enumerate_store_body(E, B, C, D)
 2702             ))
 2703    ).
 2704enumerate_store_body(identifier_store(_), _, _, A) :-
 2705    A=fail.
 2706enumerate_store_body(type_indexed_identifier_store(_, _), _, _, A) :-
 2707    A=fail.
 2708multi_inthash_enumerate_store_body(A, B, C, D) :-
 2709    multi_hash_store_name(B, A, E),
 2710    D=(nb_getval(E, F), value_iht(F, C)).
 2711multi_hash_enumerate_store_body(A, B, C, D) :-
 2712    multi_hash_store_name(B, A, E),
 2713    make_get_store_goal(E, F, G),
 2714    D=(G, value_ht(F, C)).
 2715guard_simplification :-
 2716    (   chr_pp_flag(guard_simplification, on)
 2717    ->  precompute_head_matchings,
 2718        simplify_guards(1)
 2719    ;   true
 2720    ).
 2721next_prev_rule(A, B, C) :-
 2722    (   find_min_q(A, _-D)
 2723    ->  D=(-B),
 2724        normalize_heap(A, D, C)
 2725    ;   B=0,
 2726        C=A
 2727    ).
 2728normalize_heap(A, B, C) :-
 2729    (   find_min_q(A, _-B)
 2730    ->  delete_min_q(A, D, tuple(E, F, _)-_),
 2731        (   F>1
 2732        ->  G is F-1,
 2733            get_occurrence(E, G, H, _),
 2734            insert_q(D,
 2735                     tuple(E, G, H)-(-H),
 2736                     I)
 2737        ;   I=D
 2738        ),
 2739        normalize_heap(I, B, C)
 2740    ;   C=A
 2741    ).
 2742head_types_modes_condition([], _, true).
 2743head_types_modes_condition([A|B], C, (D, E)) :-
 2744    types_modes_condition(C, A, D),
 2745    head_types_modes_condition(B, C, E).
 2746add_background_info(A, B) :-
 2747    get_bg_info(C),
 2748    add_background_info2(A, D),
 2749    append(C, D, B).
 2750add_background_info2(A, []) :-
 2751    var(A),
 2752    !.
 2753add_background_info2([], []) :-
 2754    !.
 2755add_background_info2([A|B], C) :-
 2756    !,
 2757    add_background_info2(A, D),
 2758    add_background_info2(B, E),
 2759    append(D, E, C).
 2760add_background_info2(A, B) :-
 2761    (   functor(A, _, C),
 2762        C>0
 2763    ->  A=..[_|D],
 2764        add_background_info2(D, E)
 2765    ;   E=[]
 2766    ),
 2767    get_bg_info(A, F),
 2768    append(F, E, B).
 2769normalize_conj_list(A, B) :-
 2770    list2conj(A, C),
 2771    conj2list(C, B).
 2772compute_derived_info([], _, _, _, _, _, _, _, [], []).
 2773compute_derived_info([A|B], C, D, E, F, G, H, I, [J|K], [L|M]) :-
 2774    copy_term(C-F, N),
 2775    variable_replacement(C-F, N, O),
 2776    append(A, O, P),
 2777    list2conj(C, Q),
 2778    negate_b(Q, R),
 2779    make_head_matchings_explicit_not_negated2(E, D, S),
 2780    list2conj(S, T),
 2781    term_variables(P, U),
 2782    term_variables(C-F-S, V),
 2783    new_vars(V, U, W),
 2784    append(P, W, X),
 2785    (   F==true
 2786    ->  Y=R
 2787    ;   negate_b(F, Z),
 2788        Y=(R;T, Z)
 2789    ),
 2790    copy_with_variable_replacement(Y, J, X),
 2791    copy_with_variable_replacement(F, A1, X),
 2792    copy_with_variable_replacement(C, B1, X),
 2793    list2conj(B1, C1),
 2794    apply_guard_wrt_term(H, A1, D1),
 2795    apply_guard_wrt_term(D1, C1, L),
 2796    compute_derived_info(B,
 2797                         C,
 2798                         D,
 2799                         E,
 2800                         F,
 2801                         G,
 2802                         H,
 2803                         I,
 2804                         K,
 2805                         M).
 2806simplify_guard(A, B, C, D, E) :-
 2807    conj2list(A, F),
 2808    guard_entailment:simplify_guards(C, B, F, G, E),
 2809    list2conj(G, D).
 2810new_vars([], _, []).
 2811new_vars([A|B], C, D) :-
 2812    (   memberchk_eq(A, C)
 2813    ->  new_vars(B, C, D)
 2814    ;   D=[A-E, E-A|F],
 2815        new_vars(B, C, F)
 2816    ).
 2817head_subset(A, B, C) :-
 2818    head_subset(A, B, C, [], _).
 2819head_subset([], A, B, B, A).
 2820head_subset([A|B], C, D, E, F) :-
 2821    head_member(C, A, G, E, H),
 2822    head_subset(B, H, D, G, F).
 2823head_member([A|B], C, D, E, F) :-
 2824    (   variable_replacement(C, A, E, D),
 2825        F=B
 2826    ;   F=[A|G],
 2827        head_member(B, C, D, E, G)
 2828    ).
 2829make_head_matchings_explicit(A, B, C) :-
 2830    make_head_matchings_explicit_memo_lookup(A, D, E),
 2831    copy_term_nat(D-E, B-C).
 2832make_head_matchings_explicit_(A, B, C) :-
 2833    extract_arguments(A, D),
 2834    make_matchings_explicit(D, E, [], [], _, C),
 2835    substitute_arguments(A, E, B).
 2836make_head_matchings_explicit_not_negated(A, B, C) :-
 2837    extract_arguments(A, D),
 2838    make_matchings_explicit_not_negated(D, E, C),
 2839    substitute_arguments(A, E, B).
 2840make_head_matchings_explicit_not_negated2(A, B, C) :-
 2841    extract_arguments(A, D),
 2842    extract_arguments(B, E),
 2843    make_matchings_explicit_not_negated(D, E, C).
 2844extract_arguments([], []).
 2845extract_arguments([A|B], C) :-
 2846    A=..[_|D],
 2847    append(D, E, C),
 2848    extract_arguments(B, E).
 2849substitute_arguments([], [], []).
 2850substitute_arguments([A|B], C, [D|E]) :-
 2851    functor(A, F, G),
 2852    split_at(G, C, H, I),
 2853    D=..[F|H],
 2854    substitute_arguments(B, I, E).
 2855make_matchings_explicit([], [], _, A, A, []).
 2856make_matchings_explicit([A|B], [C|D], E, F, G, H) :-
 2857    (   var(A)
 2858    ->  (   memberchk_eq(A, E)
 2859        ->  list2disj(F, I),
 2860            H=[(I;C==A)|J],
 2861            K=E
 2862        ;   H=J,
 2863            C=A,
 2864            K=[A|E]
 2865        ),
 2866        L=F
 2867    ;   functor(A, M, N),
 2868        A=..[M|O],
 2869        make_matchings_explicit(O,
 2870                                P,
 2871                                E,
 2872                                F,
 2873                                Q,
 2874                                R),
 2875        S=..[M|P],
 2876        (   R==[]
 2877        ->  H=[functor(C, M, N)|J]
 2878        ;   list2conj(R, T),
 2879            list2disj(F, I),
 2880            U=(C\=S;I;T),
 2881            H=[functor(C, M, N), U|J]
 2882        ),
 2883        L=[C\=S|Q],
 2884        term_variables(B, V),
 2885        append(V, E, K)
 2886    ),
 2887    make_matchings_explicit(B, D, K, L, G, J).
 2888make_matchings_explicit_not_negated([], [], []).
 2889make_matchings_explicit_not_negated([A|B], [C|D], E) :-
 2890    E=[C=A|F],
 2891    make_matchings_explicit_not_negated(B, D, F).
 2892apply_guard_wrt_term([], _, []).
 2893apply_guard_wrt_term([A|B], C, [D|E]) :-
 2894    (   var(A)
 2895    ->  apply_guard_wrt_variable(C, A, D)
 2896    ;   A=..[F|G],
 2897        apply_guard_wrt_term(G, C, H),
 2898        D=..[F|H]
 2899    ),
 2900    apply_guard_wrt_term(B, C, E).
 2901apply_guard_wrt_variable((A, B), C, D) :-
 2902    !,
 2903    apply_guard_wrt_variable(A, C, E),
 2904    apply_guard_wrt_variable(B, E, D).
 2905apply_guard_wrt_variable(A, B, C) :-
 2906    (   A=(D=E),
 2907        B==D
 2908    ->  C=E
 2909    ;   A=functor(F, G, H),
 2910        B==F,
 2911        ground(G),
 2912        ground(H)
 2913    ->  functor(C, G, H)
 2914    ;   C=B
 2915    ).
 2916replace_some_heads(A, B, _, [], A, B, _, _, []) :-
 2917    !.
 2918replace_some_heads([], [A|B], [C|D], [E|F], [], [G|H], I, J, K) :-
 2919    !,
 2920    (   C==E
 2921    ->  G=E,
 2922        replace_some_heads([],
 2923                           B,
 2924                           D,
 2925                           F,
 2926                           [],
 2927                           H,
 2928                           I,
 2929                           J,
 2930                           K)
 2931    ;   E=functor(L, M, N),
 2932        C==L
 2933    ->  length(O, N),
 2934        (   var(A)
 2935        ->  P=[],
 2936            G=..[M|O]
 2937        ;   A=..[M|Q],
 2938            use_same_args(Q, O, R, I, J, P),
 2939            G=..[M|R]
 2940        ),
 2941        replace_some_heads([],
 2942                           B,
 2943                           D,
 2944                           F,
 2945                           [],
 2946                           H,
 2947                           I,
 2948                           J,
 2949                           S),
 2950        append(P, S, K)
 2951    ;   G=A,
 2952        replace_some_heads([],
 2953                           B,
 2954                           D,
 2955                           [E|F],
 2956                           [],
 2957                           H,
 2958                           I,
 2959                           J,
 2960                           K)
 2961    ).
 2962replace_some_heads([A|B], C, [D|E], [F|G], [H|I], J, K, L, M) :-
 2963    !,
 2964    (   D==F
 2965    ->  H=F,
 2966        replace_some_heads(B,
 2967                           C,
 2968                           E,
 2969                           G,
 2970                           I,
 2971                           J,
 2972                           K,
 2973                           L,
 2974                           M)
 2975    ;   F=functor(N, O, P),
 2976        D==N
 2977    ->  length(Q, P),
 2978        (   var(A)
 2979        ->  R=[],
 2980            H=..[O|Q]
 2981        ;   A=..[O|S],
 2982            use_same_args(S,
 2983                          Q,
 2984                          T,
 2985                          K,
 2986                          L,
 2987                          R),
 2988            H=..[O|T]
 2989        ),
 2990        replace_some_heads(B,
 2991                           C,
 2992                           E,
 2993                           G,
 2994                           I,
 2995                           J,
 2996                           K,
 2997                           L,
 2998                           U),
 2999        append(R, U, M)
 3000    ;   H=A,
 3001        replace_some_heads(B,
 3002                           C,
 3003                           E,
 3004                           [F|G],
 3005                           I,
 3006                           J,
 3007                           K,
 3008                           L,
 3009                           M)
 3010    ).
 3011use_same_args([], [], [], _, _, []).
 3012use_same_args([A|B], [_|C], [D|E], F, G, H) :-
 3013    var(A),
 3014    !,
 3015    D=A,
 3016    use_same_args(B, C, E, F, G, H).
 3017use_same_args([A|B], [C|D], [E|F], G, H, I) :-
 3018    nonvar(A),
 3019    !,
 3020    (   common_variables(A, H)
 3021    ->  I=[C=A|J]
 3022    ;   I=J
 3023    ),
 3024    E=C,
 3025    use_same_args(B, D, F, G, H, J).
 3026simplify_heads([], _, _, _, [], []).
 3027simplify_heads([A|B], C, D, E, F, G) :-
 3028    A=(H=I),
 3029    (   (   nonvar(I)
 3030        ;   common_variables(I, B-C)
 3031        ),
 3032        guard_entailment:entails_guard(C, H=I)
 3033    ->  (   common_variables(I, D-B-C)
 3034        ->  G=J,
 3035            F=K
 3036        ;   (   common_variables(I, E)
 3037            ->  G=[H=I|J]
 3038            ;   G=J
 3039            ),
 3040            F=[H|K]
 3041        )
 3042    ;   nonvar(I),
 3043        functor(I, L, M),
 3044        guard_entailment:entails_guard([functor(H, L, M)|C], H=I)
 3045    ->  G=J,
 3046        (   common_variables(I, D-B-C)
 3047        ->  F=K
 3048        ;   F=[functor(H, L, M)|K]
 3049        )
 3050    ;   F=K,
 3051        G=J
 3052    ),
 3053    simplify_heads(B, [A|C], D, E, K, J).
 3054common_variables(A, B) :-
 3055    term_variables(A, C),
 3056    term_variables(B, D),
 3057    intersect_eq(C, D, E),
 3058    E\==[].
 3059add_failing_occ(A, B, C, D, E, F, _, G, H) :-
 3060    A=pragma(rule(_, _, I, _), ids(J, K), _, _, _),
 3061    append(K, J, L),
 3062    missing_partner_cond(B,
 3063                         C,
 3064                         L,
 3065                         D,
 3066                         M,
 3067                         N,
 3068                         G),
 3069    copy_term((N, B, C), (O, P, Q)),
 3070    variable_replacement((N, B, C),
 3071                         (O, P, Q),
 3072                         H),
 3073    copy_with_variable_replacement(I, R, H),
 3074    extract_explicit_matchings(R, S),
 3075    negate_b(S, T),
 3076    copy_with_variable_replacement(M, U, H),
 3077    (   subsumes_term(F, O),
 3078        F=O
 3079    ->  E=[(T;U)]
 3080    ;   E=[chr_pp_void_info]
 3081    ).
 3082missing_partner_cond([], [], [], _, fail, _, _).
 3083missing_partner_cond([A|B], [_|C], [D|E], D, F, A, G) :-
 3084    !,
 3085    missing_partner_cond(B,
 3086                         C,
 3087                         E,
 3088                         D,
 3089                         F,
 3090                         A,
 3091                         G).
 3092missing_partner_cond([A|B], [_|C], [_|D], E, F, G, H/I) :-
 3093    F=(chr_pp_not_in_store(A);J),
 3094    missing_partner_cond(B,
 3095                         C,
 3096                         D,
 3097                         E,
 3098                         J,
 3099                         G,
 3100                         H/I).
 3101extract_explicit_matchings((A, B), C) :-
 3102    !,
 3103    (   extract_explicit_matchings(A)
 3104    ->  extract_explicit_matchings(B, C)
 3105    ;   C=(A, D),
 3106        extract_explicit_matchings(B, D)
 3107    ).
 3108extract_explicit_matchings(A, B) :-
 3109    !,
 3110    (   extract_explicit_matchings(A)
 3111    ->  B=true
 3112    ;   B=A
 3113    ).
 3114extract_explicit_matchings(A=B) :-
 3115    var(A),
 3116    var(B),
 3117    !,
 3118    A=B.
 3119extract_explicit_matchings(A==B) :-
 3120    var(A),
 3121    var(B),
 3122    !,
 3123    A=B.
 3124assert_constraint_type(A, B) :-
 3125    (   ground(B)
 3126    ->  constraint_type(A, B)
 3127    ;   chr_error(type_error,
 3128                  'Declared argument types "~w" for constraint "~w" must be ground!\n',
 3129                  [B, A])
 3130    ).
 3131get_type_definition_det(A, B) :-
 3132    (   get_type_definition(A, B)
 3133    ->  true
 3134    ;   chr_error(type,
 3135                  'Could not find type definition for type `~w\'.\n',
 3136                  [A])
 3137    ).
 3138get_constraint_type_det(A, B) :-
 3139    (   get_constraint_type(A, B)
 3140    ->  true
 3141    ;   A=_/C,
 3142        replicate(C, any, B)
 3143    ).
 3144modes_condition([], [], true).
 3145modes_condition([A|B], [C|D], E) :-
 3146    (   A==(+)
 3147    ->  E=(ground(C), F)
 3148    ;   A==(-)
 3149    ->  E=(var(C), F)
 3150    ;   E=F
 3151    ),
 3152    modes_condition(B, D, F).
 3153types_condition([], [], [], [], true).
 3154types_condition([A|B], [C|D], [E|F], [G|H], (I, J)) :-
 3155    (   G==(-)
 3156    ->  K=[true]
 3157    ;   get_type_definition_det(A, L),
 3158        type_condition(L, C, E, G, M),
 3159        (   G==(+)
 3160        ->  K=M
 3161        ;   K=[\+ground(C)|M]
 3162        )
 3163    ),
 3164    list2disj(K, I),
 3165    types_condition(B, D, F, H, J).
 3166type_condition([], _, _, _, []).
 3167type_condition([A|B], C, D, E, [F|G]) :-
 3168    (   var(A)
 3169    ->  chr_error(type, 'Unexpected variable type in type definition!\n', [])
 3170    ;   atomic_builtin_type(A, C, F)
 3171    ->  true
 3172    ;   compound_builtin_type(A, C, F, _)
 3173    ->  true
 3174    ;   type_def_case_condition(A, C, D, E, F)
 3175    ),
 3176    type_condition(B, C, D, E, G).
 3177ast_atomic_builtin_type(A, B, C) :-
 3178    ast_term_to_term(B, D),
 3179    atomic_builtin_type(A, D, C).
 3180ast_compound_builtin_type(A, B, C) :-
 3181    ast_term_to_term(B, D),
 3182    compound_builtin_type(A, D, _, C).
 3183atomic_builtin_type(any, _, true).
 3184atomic_builtin_type(dense_int, A, (integer(A), A>=0)).
 3185atomic_builtin_type(int, A, integer(A)).
 3186atomic_builtin_type(number, A, number(A)).
 3187atomic_builtin_type(float, A, float(A)).
 3188atomic_builtin_type(natural, A, (integer(A), A>=0)).
 3189atomic_builtin_type(chr_identifier, _, true).
 3190compound_builtin_type(chr_constants(_), _, true, true).
 3191compound_builtin_type(chr_constants(_, _), _, true, true).
 3192compound_builtin_type(chr_identifier(_), _, true, true).
 3193compound_builtin_type(chr_enum(A), B, (ground(B), memberchk(B, A)), once((member(C, A), unifiable(B, C, _)))).
 3194compound_builtin_type(chr_enum(_, _), _, true, true).
 3195is_chr_constants_type(chr_constants(A), A, no).
 3196is_chr_constants_type(chr_constants(A, B), A, yes(B)).
 3197is_chr_enum_type(chr_enum(A), A, no).
 3198is_chr_enum_type(chr_enum(A, B), A, yes(B)).
 3199type_def_case_condition(A, B, C, D, E) :-
 3200    (   nonvar(A)
 3201    ->  functor(A, F, G),
 3202        (   G==0
 3203        ->  E=(B=A)
 3204        ;   var(C)
 3205        ->  E=functor(B, F, G)
 3206        ;   functor(C, F, G)
 3207        ->  E=(functor(B, F, G), B=H, I),
 3208            A=..[_|J],
 3209            C=..[_|K],
 3210            functor(H, F, G),
 3211            H=..[_|L],
 3212            replicate(G, D, M),
 3213            types_condition(J, L, K, M, I)
 3214        ;   E=functor(B, F, G)
 3215        )
 3216    ;   chr_error(internal, 'Illegal type definition (must be nonvar).\n', [])
 3217    ).
 3218static_type_check_rule(A, B) :-
 3219    B=ast_rule(C, _, _, D, _),
 3220    (   catch(( ast_static_type_check_head(C),
 3221                ast_static_type_check_body(D)
 3222              ),
 3223              type_error(E),
 3224              (   E=invalid_functor(F, G, H)
 3225              ->  chr_error(type_error,
 3226                            'Invalid functor in ~@ of ~@:\n\t\tfound `~w\',\n\t\texpected type `~w\'!\n',
 3227                            [ chr_translate:format_src(F),
 3228                              format_rule(A),
 3229                              G,
 3230                              H
 3231                            ])
 3232              ;   E=type_clash(I, J, K, L, M)
 3233              ->  chr_error(type_error,
 3234                            'Type clash for variable ~w in ~@:\n\t\texpected type ~w in ~@\n\t\texpected type ~w in ~@\n',
 3235                            [ I,
 3236                              format_rule(A),
 3237                              L,
 3238                              chr_translate:format_src(J),
 3239                              M,
 3240                              chr_translate:format_src(K)
 3241                            ])
 3242              )),
 3243        fail
 3244    ;   true
 3245    ).
 3246ast_static_type_check_head(simplification(A)) :-
 3247    maplist(ast_static_type_check_head_constraint, A).
 3248ast_static_type_check_head(propagation(A)) :-
 3249    maplist(ast_static_type_check_head_constraint, A).
 3250ast_static_type_check_head(simpagation(A, B)) :-
 3251    maplist(ast_static_type_check_head_constraint, A),
 3252    maplist(ast_static_type_check_head_constraint, B).
 3253ast_static_type_check_head_constraint(A) :-
 3254    A=chr_constraint(B, C, _),
 3255    get_constraint_type_det(B, D),
 3256    maplist(ast_static_type_check_term(head(_)), C, D).
 3257ast_static_type_check_body([]).
 3258ast_static_type_check_body([A|B]) :-
 3259    ast_symbol(A, C),
 3260    get_constraint_type_det(C, D),
 3261    ast_args(A, E),
 3262    maplist(ast_static_type_check_term(body(A)), E, D),
 3263    ast_static_type_check_body(B).
 3264format_src(head(A)) :-
 3265    format('head ~w', [A]).
 3266format_src(body(A)) :-
 3267    format('body goal ~w', [A]).
 3268generate_dynamic_type_check_clauses(A) :-
 3269    (   chr_pp_flag(debugable, on)
 3270    ->  dynamic_type_check,
 3271        get_dynamic_type_check_clauses(B),
 3272        append(B,
 3273               [ ('$dynamic_type_check'(C, D):-throw(error(type_error(C, D), context(_, 'CHR Runtime Type Error'))))
 3274               ],
 3275               A)
 3276    ;   A=[]
 3277    ).
 3278dynamic_type_check_clause(A, B, C) :-
 3279    copy_term(A-B, D-E),
 3280    functor(E, F, G),
 3281    functor(H, F, G),
 3282    E=..[_|I],
 3283    H=..[_|J],
 3284    maplist(dynamic_type_check_call, I, J, K),
 3285    list2conj(K, L),
 3286    C=('$dynamic_type_check'(D, H):-L).
 3287dynamic_type_check_alias_clause(A, B, C) :-
 3288    C=('$dynamic_type_check'(A, D):-'$dynamic_type_check'(B, D)).
 3289dynamic_type_check_call(A, B, C) :-
 3290    (   A==any
 3291    ->  C=true
 3292    ;   C=when(nonvar(B), once('$dynamic_type_check'(A, B)))
 3293    ).
 3294atomic_types_suspended_constraint(A) :-
 3295    A=_/B,
 3296    get_constraint_type(A, C),
 3297    get_constraint_mode(A, D),
 3298    numlist(1, B, E),
 3299    maplist(atomic_types_suspended_constraint(A),
 3300            C,
 3301            D,
 3302            E).
 3303atomic_types_suspended_constraint(A, B, C, D) :-
 3304    (   is_indexed_argument(A, D)
 3305    ->  (   C==(?)
 3306        ->  atomic_type(B)
 3307        ;   true
 3308        )
 3309    ;   true
 3310    ).
 3311storage_analysis(A) :-
 3312    (   chr_pp_flag(storage_analysis, on)
 3313    ->  check_constraint_storages(A)
 3314    ;   true
 3315    ).
 3316check_constraint_storages(A) :-
 3317    maplist(check_constraint_storage, A).
 3318check_constraint_storage(A) :-
 3319    get_max_occurrence(A, B),
 3320    check_occurrences_storage(A, 1, B).
 3321check_occurrences_storage(A, B, C) :-
 3322    (   B>C
 3323    ->  stored_completing(A, 1, 0)
 3324    ;   check_occurrence_storage(A, B),
 3325        D is B+1,
 3326        check_occurrences_storage(A, D, C)
 3327    ).
 3328check_occurrence_storage(A, B) :-
 3329    get_occurrence(A, B, C, D, E),
 3330    (   is_passive(C, D)
 3331    ->  stored(A, B, maybe)
 3332    ;   get_rule(C, F),
 3333        F=pragma(rule(G, H, I, J), ids(K, L), _, _, _),
 3334        (   E==simplification,
 3335            select2(D, M, K, G, _, _)
 3336        ->  check_storage_head1(M, B, G, H, I)
 3337        ;   E==propagation,
 3338            select2(D, N, L, H, _, _)
 3339        ->  check_storage_head2(N, B, G, J)
 3340        )
 3341    ).
 3342check_storage_head1(A, B, C, D, E) :-
 3343    functor(A, F, G),
 3344    H=F/G,
 3345    (   C==[A],
 3346        D==[],
 3347        guard_entailment:entails_guard([chr_pp_headvariables(A)], E),
 3348        A=..[_|I],
 3349        no_matching(I, [])
 3350    ->  stored(H, B, no)
 3351    ;   stored(H, B, maybe)
 3352    ).
 3353no_matching([], _).
 3354no_matching([A|B], C) :-
 3355    var(A),
 3356    \+ memberchk_eq(A, C),
 3357    no_matching(B, [A|C]).
 3358check_storage_head2(A, B, C, D) :-
 3359    functor(A, E, F),
 3360    G=E/F,
 3361    (   C\==[],
 3362        D==true
 3363    ->  stored(G, B, maybe)
 3364    ;   stored(G, B, yes)
 3365    ).
 3366constraints_code(A, B) :-
 3367    (   chr_pp_flag(reduced_indexing, on),
 3368        forall(C,
 3369               A,
 3370               chr_translate:only_ground_indexed_arguments(C))
 3371    ->  none_suspended_on_variables
 3372    ;   true
 3373    ),
 3374    constraints_code1(A, B, []).
 3375constraint_prelude(A/B, C) :-
 3376    vars_susp(B, D, E, F),
 3377    G=..[A|D],
 3378    make_suspension_continuation_goal(A/B, F, H),
 3379    build_head(A, B, [0], F, I),
 3380    (   chr_pp_flag(debugable, on)
 3381    ->  insert_constraint_goal(A/B, E, D, J),
 3382        attach_constraint_atom(A/B, K, E, L),
 3383        delay_phase_end(validate_store_type_assumptions,
 3384                        chr_translate:update_suspension_field(A/B, E, state, inactive, M)),
 3385        insert_constraint_internal_constraint_goal(A/B,
 3386                                                   K,
 3387                                                   E,
 3388                                                   H,
 3389                                                   D,
 3390                                                   N),
 3391        (   get_constraint_type(A/B, O)
 3392        ->  maplist(dynamic_type_check_call, O, D, P),
 3393            list2conj(P, Q)
 3394        ;   Q=true
 3395        ),
 3396        C=(G:-Q, N, J, L, M, 'chr debug_event'(insert(#(G, E))), ('chr debugging'->('chr debug_event'(call(E)), I;'chr debug_event'(fail(E)), !, fail), ('chr debug_event'(exit(E));'chr debug_event'(redo(E)), fail);I))
 3397    ;   get_allocation_occurrence(A/B, 0)
 3398    ->  gen_insert_constraint_internal_goal(A/B,
 3399                                            R,
 3400                                            F,
 3401                                            D,
 3402                                            E),
 3403        delay_phase_end(validate_store_type_assumptions,
 3404                        chr_translate:update_suspension_field(A/B, E, state, inactive, M)),
 3405        C=(G:-R, M, I)
 3406    ;   C=(G:-I)
 3407    ).
 3408make_suspension_continuation_goal(A/B, C, D) :-
 3409    (   may_trigger(A/B)
 3410    ->  build_head(A, B, [0], C, E),
 3411        (   chr_pp_flag(debugable, off)
 3412        ->  D=E
 3413        ;   get_target_module(F),
 3414            D=F:E
 3415        )
 3416    ;   D=true
 3417    ).
 3418gen_cond_attach_clause(A/B, C, D, E) :-
 3419    (   is_finally_stored(A/B)
 3420    ->  get_allocation_occurrence(A/B, F),
 3421        get_max_occurrence(A/B, G),
 3422        (   chr_pp_flag(debugable, off),
 3423            G<F
 3424        ->  (   only_ground_indexed_arguments(A/B)
 3425            ->  gen_insert_constraint_internal_goal(A/B,
 3426                                                    H,
 3427                                                    I,
 3428                                                    J,
 3429                                                    K)
 3430            ;   gen_cond_attach_goal(A/B,
 3431                                     H,
 3432                                     I,
 3433                                     J,
 3434                                     K)
 3435            )
 3436        ;   vars_susp(B, J, K, I),
 3437            gen_uncond_attach_goal(A/B,
 3438                                   K,
 3439                                   J,
 3440                                   H,
 3441                                   _)
 3442        ),
 3443        build_head(A, B, C, I, L),
 3444        M=(L:-H),
 3445        add_dummy_location(M, N),
 3446        D=[N|E]
 3447    ;   D=E
 3448    ).
 3449gen_cond_attach_goal(A/B, C, D, E, F) :-
 3450    vars_susp(B, E, F, D),
 3451    make_suspension_continuation_goal(A/B, D, G),
 3452    (   get_store_type(A/B, var_assoc_store(_, _))
 3453    ->  H=true
 3454    ;   attach_constraint_atom(A/B, I, F, H)
 3455    ),
 3456    _=..[A|E],
 3457    insert_constraint_goal(A/B, F, E, J),
 3458    insert_constraint_internal_constraint_goal(A/B,
 3459                                               I,
 3460                                               F,
 3461                                               G,
 3462                                               E,
 3463                                               K),
 3464    (   may_trigger(A/B)
 3465    ->  activate_constraint_goal(A/B,
 3466                                 (J, H),
 3467                                 I,
 3468                                 F,
 3469                                 _,
 3470                                 L),
 3471        C=(var(F)->K, J, H;L)
 3472    ;   C=(K, J, H)
 3473    ).
 3474gen_insert_constraint_internal_goal(A/B, C, D, E, F) :-
 3475    vars_susp(B, E, F, D),
 3476    make_suspension_continuation_goal(A/B, D, G),
 3477    (   \+ only_ground_indexed_arguments(A/B),
 3478        \+ get_store_type(A/B, var_assoc_store(_, _))
 3479    ->  attach_constraint_atom(A/B, H, F, I)
 3480    ;   I=true
 3481    ),
 3482    _=..[A|E],
 3483    insert_constraint_goal(A/B, F, E, J),
 3484    insert_constraint_internal_constraint_goal(A/B,
 3485                                               H,
 3486                                               F,
 3487                                               G,
 3488                                               E,
 3489                                               K),
 3490    (   only_ground_indexed_arguments(A/B),
 3491        chr_pp_flag(debugable, off)
 3492    ->  C=(K, J)
 3493    ;   C=(K, J, I)
 3494    ).
 3495gen_uncond_attach_goal(A, B, C, D, E) :-
 3496    (   \+ only_ground_indexed_arguments(A),
 3497        \+ get_store_type(A, var_assoc_store(_, _))
 3498    ->  attach_constraint_atom(A, F, B, G)
 3499    ;   G=true
 3500    ),
 3501    insert_constraint_goal(A, B, C, H),
 3502    (   chr_pp_flag(late_allocation, on)
 3503    ->  activate_constraint_goal(A,
 3504                                 (H, G),
 3505                                 F,
 3506                                 B,
 3507                                 E,
 3508                                 D)
 3509    ;   activate_constraint_goal(A, true, F, B, E, D)
 3510    ).
 3511head1_code(A, B, C, D, E, F, G, H, I, J) :-
 3512    E=pragma(K, _, _, _, L),
 3513    K=rule(_, M, _, _),
 3514    (   M==[]
 3515    ->  reorder_heads(L, A, C, D, N, O),
 3516        simplification_code(A,
 3517                            B,
 3518                            N,
 3519                            O,
 3520                            E,
 3521                            F,
 3522                            G,
 3523                            H,
 3524                            I,
 3525                            J)
 3526    ;   simpagation_head1_code(A,
 3527                               B,
 3528                               C,
 3529                               D,
 3530                               E,
 3531                               F,
 3532                               G,
 3533                               H,
 3534                               I,
 3535                               J)
 3536    ).
 3537head2_code(A, B, C, D, E, F, G, H, I, J) :-
 3538    E=pragma(K, _, _, _, L),
 3539    K=rule(M, _, _, _),
 3540    (   M==[]
 3541    ->  reorder_heads(L, A, C, D, N, O),
 3542        propagation_code(A,
 3543                         B,
 3544                         N,
 3545                         O,
 3546                         K,
 3547                         L,
 3548                         F,
 3549                         G,
 3550                         H,
 3551                         I,
 3552                         J)
 3553    ;   simpagation_head2_code(A,
 3554                               B,
 3555                               C,
 3556                               D,
 3557                               E,
 3558                               F,
 3559                               G,
 3560                               H,
 3561                               I,
 3562                               J)
 3563    ).
 3564gen_alloc_inc_clause(A/B, C, D, E, F) :-
 3565    vars_susp(B, G, H, I),
 3566    build_head(A, B, D, I, J),
 3567    inc_id(D, K),
 3568    build_head(A, B, K, I, L),
 3569    gen_occ_allocation(A/B, C, G, H, M),
 3570    N=(J:-M, L),
 3571    add_dummy_location(N, O),
 3572    E=[O|F].
 3573gen_occ_allocation(A, B, C, D, E) :-
 3574    get_allocation_occurrence(A, F),
 3575    get_occurrence_code_id(A, F, G),
 3576    get_occurrence_code_id(A, B, H),
 3577    (   chr_pp_flag(debugable, off),
 3578        H==G
 3579    ->  allocate_constraint_goal(A, D, C, I),
 3580        (   may_trigger(A)
 3581        ->  E=(var(D)->I;true)
 3582        ;   E=I
 3583        )
 3584    ;   E=true
 3585    ).
 3586gen_occ_allocation_in_guard(A, B, C, D, E) :-
 3587    get_allocation_occurrence(A, F),
 3588    (   chr_pp_flag(debugable, off),
 3589        B<F
 3590    ->  allocate_constraint_goal(A, D, C, G),
 3591        (   may_trigger(A)
 3592        ->  E=(var(D)->G;true)
 3593        ;   E=G
 3594        )
 3595    ;   E=true
 3596    ).
 3597guard_via_reschedule_new(A, B, C, D, E, F) :-
 3598    (   chr_pp_flag(guard_via_reschedule, on)
 3599    ->  guard_via_reschedule_main_new(A,
 3600                                      B,
 3601                                      C,
 3602                                      D,
 3603                                      E,
 3604                                      G),
 3605        list2conj(G, F)
 3606    ;   length(A, H),
 3607        length(E, H),
 3608        length(B, I),
 3609        length(D, I),
 3610        append(E, D, J),
 3611        list2conj(J, F)
 3612    ).
 3613guard_via_reschedule_main_new(A, B, C, D, E, F) :-
 3614    initialize_unit_dictionary(C, G),
 3615    maplist(wrap_in_functor(lookup), A, H),
 3616    maplist(wrap_in_functor(guard), B, I),
 3617    build_units(H, I, G, J),
 3618    dependency_reorder(J, K),
 3619    wrappedunits2lists(K, L, E, F),
 3620    sort(L, M),
 3621    snd_of_pairs(M, D).
 3622wrappedunits2lists([], [], [], []).
 3623wrappedunits2lists([unit(A, B, _, _)|C], D, E, F) :-
 3624    F=[G|H],
 3625    (   B=lookup(I)
 3626    ->  E=[G|J],
 3627        D=K
 3628    ;   B=guard(I)
 3629    ->  D=[A-G|K],
 3630        E=J
 3631    ),
 3632    wrappedunits2lists(C, K, J, H).
 3633guard_splitting(A, B) :-
 3634    A=rule(C, D, E, _),
 3635    append(C, D, F),
 3636    conj2list(E, G),
 3637    term_variables(F, H),
 3638    split_off_simple_guard_new(G, H, I, J),
 3639    append(I, [K], B),
 3640    term_variables(J, L),
 3641    ground_vars(F, M),
 3642    list_difference_eq(H, M, N),
 3643    intersect_eq(N, L, O),
 3644    maplist(chr_lock, O, P),
 3645    maplist(chr_unlock, O, Q),
 3646    list2conj(P, R),
 3647    list2conj(Q, S),
 3648    list2conj(J, T),
 3649    K=(R, T, S).
 3650guard_body_copies3(A, B, C, D, E) :-
 3651    A=rule(_, _, _, F),
 3652    my_term_copy(B, C, G, D),
 3653    my_term_copy(F, G, E).
 3654split_off_simple_guard_new([], _, [], []).
 3655split_off_simple_guard_new([A|B], C, D, E) :-
 3656    (   simple_guard_new(A, C)
 3657    ->  D=[A|F],
 3658        split_off_simple_guard_new(B, C, F, E)
 3659    ;   D=[],
 3660        E=[A|B]
 3661    ).
 3662simple_guard_new(A, B) :-
 3663    builtin_binds_b(A, C),
 3664    not(( member(D, C),
 3665          memberchk_eq(D, B)
 3666        )).
 3667dependency_reorder(A, B) :-
 3668    dependency_reorder(A, [], B).
 3669dependency_reorder([], A, B) :-
 3670    reverse(A, B).
 3671dependency_reorder([A|B], C, D) :-
 3672    A=unit(_, _, E, F),
 3673    (   E==fixed
 3674    ->  G=[A|C]
 3675    ;   dependency_insert(C, A, F, G)
 3676    ),
 3677    dependency_reorder(B, G, D).
 3678dependency_insert([], A, _, [A]).
 3679dependency_insert([A|B], C, D, E) :-
 3680    A=unit(F, _, _, _),
 3681    (   memberchk(F, D)
 3682    ->  E=[C, A|B]
 3683    ;   E=[A|G],
 3684        dependency_insert(B, C, D, G)
 3685    ).
 3686build_units(A, B, C, D) :-
 3687    build_retrieval_units(A, 1, E, C, F, D, G),
 3688    build_guard_units(B, E, F, G).
 3689build_retrieval_units([], A, A, B, B, C, C).
 3690build_retrieval_units([A|B], C, D, E, F, G, H) :-
 3691    term_variables(A, I),
 3692    update_unit_dictionary(I, C, E, J, [], K),
 3693    G=[unit(C, A, fixed, K)|L],
 3694    M is C+1,
 3695    build_retrieval_units(B,
 3696                          M,
 3697                          D,
 3698                          J,
 3699                          F,
 3700                          L,
 3701                          H).
 3702initialize_unit_dictionary(A, B) :-
 3703    term_variables(A, C),
 3704    pair_all_with(C, 0, B).
 3705update_unit_dictionary([], _, A, A, B, B).
 3706update_unit_dictionary([A|B], C, D, E, F, G) :-
 3707    (   lookup_eq(D, A, H)
 3708    ->  (   (   H==C
 3709            ;   memberchk(H, F)
 3710            )
 3711        ->  I=F
 3712        ;   I=[H|F]
 3713        ),
 3714        J=D
 3715    ;   J=[A-C|D],
 3716        I=F
 3717    ),
 3718    update_unit_dictionary(B, C, J, E, I, G).
 3719build_guard_units(A, B, C, D) :-
 3720    (   A=[E]
 3721    ->  D=[unit(B, E, fixed, [])]
 3722    ;   A=[E|F]
 3723    ->  term_variables(E, G),
 3724        update_unit_dictionary2(G, B, C, H, [], I),
 3725        D=[unit(B, E, movable, I)|J],
 3726        K is B+1,
 3727        build_guard_units(F, K, H, J)
 3728    ).
 3729update_unit_dictionary2([], _, A, A, B, B).
 3730update_unit_dictionary2([A|B], C, D, E, F, G) :-
 3731    (   lookup_eq(D, A, H)
 3732    ->  (   (   H==C
 3733            ;   memberchk(H, F)
 3734            )
 3735        ->  I=F
 3736        ;   I=[H|F]
 3737        ),
 3738        J=[A-C|D]
 3739    ;   J=[A-C|D],
 3740        I=F
 3741    ),
 3742    update_unit_dictionary2(B, C, J, E, I, G).
 3743functional_dependency_analysis(A) :-
 3744    (   fail,
 3745        chr_pp_flag(functional_dependency_analysis, on)
 3746    ->  functional_dependency_analysis_main(A)
 3747    ;   true
 3748    ).
 3749functional_dependency_analysis_main([]).
 3750functional_dependency_analysis_main([A|B]) :-
 3751    (   discover_unique_pattern(A, C, D, E, F)
 3752    ->  functional_dependency(C, D, E, F)
 3753    ;   true
 3754    ),
 3755    functional_dependency_analysis_main(B).
 3756discover_unique_pattern(A, B/C, D, E, F) :-
 3757    A=pragma(G, _, _, _, D),
 3758    G=rule(H, I, J, _),
 3759    (   H=[K],
 3760        I=[L]
 3761    ->  true
 3762    ;   H=[K, L],
 3763        I==[]
 3764    ->  true
 3765    ),
 3766    check_unique_constraints(K, L, J, D, M),
 3767    term_variables(K, N),
 3768    \+ ( member(O, N),
 3769         lookup_eq(M, O, P),
 3770         memberchk_eq(P, N)
 3771       ),
 3772    select_pragma_unique_variables(N, M, Q),
 3773    copy_term_nat(K-Q, E-F),
 3774    functor(K, B, C).
 3775select_pragma_unique_variables([], _, []).
 3776select_pragma_unique_variables([A|B], C, D) :-
 3777    (   lookup_eq(C, A, _)
 3778    ->  D=E
 3779    ;   D=[A|E]
 3780    ),
 3781    select_pragma_unique_variables(B, C, E).
 3782set_semantics_rules(A) :-
 3783    (   fail,
 3784        chr_pp_flag(set_semantics_rule, on)
 3785    ->  set_semantics_rules_main(A)
 3786    ;   true
 3787    ).
 3788set_semantics_rules_main([]).
 3789set_semantics_rules_main([A|B]) :-
 3790    set_semantics_rule_main(A),
 3791    set_semantics_rules_main(B).
 3792set_semantics_rule_main(A) :-
 3793    A=pragma(B, C, _, _, D),
 3794    (   B=rule([E], [F], true, _),
 3795        C=ids([G], [H]),
 3796        \+ is_passive(D, G),
 3797        functor(E, I, J),
 3798        get_functional_dependency(I/J, D, K, L),
 3799        copy_term_nat(K-L, E-M),
 3800        copy_term_nat(K-L, F-N),
 3801        M==N
 3802    ->  passive(D, H)
 3803    ;   true
 3804    ).
 3805check_unique_constraints(A, B, C, D, E) :-
 3806    \+ any_passive_head(D),
 3807    variable_replacement(A-B, B-A, E),
 3808    copy_with_variable_replacement(C, F, E),
 3809    negate_b(C, G),
 3810    once(entails_b(G, F)).
 3811symmetry_analysis(A) :-
 3812    (   chr_pp_flag(check_unnecessary_active, off)
 3813    ->  true
 3814    ;   symmetry_analysis_main(A)
 3815    ).
 3816symmetry_analysis_main([]).
 3817symmetry_analysis_main([A|B]) :-
 3818    A=pragma(C, ids(D, E), _, _, F),
 3819    C=rule(G, H, _, _),
 3820    (   (   \+ chr_pp_flag(check_unnecessary_active, simplification)
 3821        ;   H==[]
 3822        ),
 3823        G\==[]
 3824    ->  symmetry_analysis_heads_simplification(G,
 3825                                               D,
 3826                                               [],
 3827                                               [],
 3828                                               C,
 3829                                               F),
 3830        symmetry_analysis_heads_propagation(H,
 3831                                            E,
 3832                                            [],
 3833                                            [],
 3834                                            C,
 3835                                            F)
 3836    ;   true
 3837    ),
 3838    symmetry_analysis_main(B).
 3839symmetry_analysis_heads_simplification([], [], _, _, _, _).
 3840symmetry_analysis_heads_simplification([A|B], [C|D], E, F, G, H) :-
 3841    (   \+ is_passive(H, C),
 3842        member2(E, F, I-J),
 3843        \+ is_passive(H, J),
 3844        variable_replacement(I, A, K),
 3845        copy_with_variable_replacement(G, L, K),
 3846        identical_guarded_rules(G, L)
 3847    ->  passive(H, C)
 3848    ;   true
 3849    ),
 3850    symmetry_analysis_heads_simplification(B,
 3851                                           D,
 3852                                           [A|E],
 3853                                           [C|F],
 3854                                           G,
 3855                                           H).
 3856symmetry_analysis_heads_propagation([], [], _, _, _, _).
 3857symmetry_analysis_heads_propagation([A|B], [C|D], E, F, G, H) :-
 3858    (   \+ is_passive(H, C),
 3859        member2(E, F, I-J),
 3860        \+ is_passive(H, J),
 3861        variable_replacement(I, A, K),
 3862        copy_with_variable_replacement(G, L, K),
 3863        identical_rules(G, L)
 3864    ->  passive(H, C)
 3865    ;   true
 3866    ),
 3867    symmetry_analysis_heads_propagation(B,
 3868                                        D,
 3869                                        [A|E],
 3870                                        [C|F],
 3871                                        G,
 3872                                        H).
 3873simplification_code(A, B, C, D, E, F, G, H, I, J) :-
 3874    E=pragma(K, _, _, _, L),
 3875    head_info1(A, F, _, M, N, O),
 3876    build_head(F, H, N, P),
 3877    get_constraint_mode(F, Q),
 3878    head_arg_matches(O, Q, [], R, S, [], T),
 3879    guard_splitting(K, U),
 3880    (   is_stored_in_guard(F, L)
 3881    ->  V=[_|U]
 3882    ;   V=U
 3883    ),
 3884    guard_via_reschedule_new(C,
 3885                             V,
 3886                             A,
 3887                             W,
 3888                             X,
 3889                             Y),
 3890    rest_heads_retrieval_and_matching(C,
 3891                                      D,
 3892                                      A,
 3893                                      X,
 3894                                      Z,
 3895                                      S,
 3896                                      A1,
 3897                                      [],
 3898                                      [],
 3899                                      [],
 3900                                      T,
 3901                                      _),
 3902    guard_body_copies3(K, V, A1, W, B1),
 3903    (   is_stored_in_guard(F, L)
 3904    ->  gen_occ_allocation_in_guard(F,
 3905                                    G,
 3906                                    C1,
 3907                                    M,
 3908                                    D1),
 3909        gen_uncond_attach_goal(F, M, C1, E1, _),
 3910        W=[F1|_],
 3911        F1=(D1, E1)
 3912    ;   true
 3913    ),
 3914    partner_constraint_detachments(Z, C, A1, G1),
 3915    active_constraint_detachment(H, M, A, A1, H1),
 3916    (   chr_pp_flag(debugable, on)
 3917    ->  K=rule(_, _, I1, J1),
 3918        my_term_copy(I1-J1, A1, K1-L1),
 3919        sort_by_key([M|Z], [B|D], M1),
 3920        N1='chr debug_event'(try(M1, [], K1, L1)),
 3921        O1='chr debug_event'(apply(M1, [], K1, L1)),
 3922        instrument_goal(P1, N1, O1, Q1)
 3923    ;   Q1=P1
 3924    ),
 3925    actual_cut(F, G, P1),
 3926    R1=(P:-R, Y, Q1, G1, H1, B1),
 3927    add_location(R1, L, S1),
 3928    I=[S1|J].
 3929actual_cut(A, B, C) :-
 3930    (   unconditional_occurrence(A, B),
 3931        chr_pp_flag(late_allocation, on)
 3932    ->  C=true
 3933    ;   C=!
 3934    ).
 3935add_location(A, B, C) :-
 3936    (   chr_pp_flag(line_numbers, on)
 3937    ->  get_line_number(B, D:E),
 3938        C='$source_location'(D, E):A
 3939    ;   C=A
 3940    ).
 3941add_dummy_location(A, B) :-
 3942    (   chr_pp_flag(line_numbers, on)
 3943    ->  get_chr_source_file(C),
 3944        B='$source_location'(C, 1):A
 3945    ;   B=A
 3946    ).
 3947head_arg_matches(A, B, C, D, E) :-
 3948    head_arg_matches(A, B, C, D, E, [], _).
 3949head_arg_matches(A, B, C, D, E, F, G) :-
 3950    head_arg_matches_(A, B, C, F, H, E, G),
 3951    list2conj(H, D).
 3952head_arg_matches_([], [], A, B, [], A, B).
 3953head_arg_matches_([silent(A-_)|B], [C|D], E, F, G, H, I) :-
 3954    !,
 3955    (   C==(+)
 3956    ->  term_variables(A, J, F),
 3957        head_arg_matches_(B,
 3958                          D,
 3959                          E,
 3960                          J,
 3961                          G,
 3962                          H,
 3963                          I)
 3964    ;   head_arg_matches_(B,
 3965                          D,
 3966                          E,
 3967                          F,
 3968                          G,
 3969                          H,
 3970                          I)
 3971    ).
 3972head_arg_matches_([A-B|C], [D|E], F, G, H, I, J) :-
 3973    (   var(A)
 3974    ->  (   lookup_eq(F, A, K)
 3975        ->  (   D=(+)
 3976            ->  (   memberchk_eq(A, G)
 3977                ->  H=[B=K|L],
 3978                    M=G
 3979                ;   H=[B==K|L],
 3980                    M=[A|G]
 3981                )
 3982            ;   H=[B==K|L],
 3983                M=G
 3984            ),
 3985            N=F
 3986        ;   N=[A-B|F],
 3987            H=L,
 3988            (   D=(+)
 3989            ->  M=[A|G]
 3990            ;   M=G
 3991            )
 3992        ),
 3993        O=C,
 3994        P=E
 3995    ;   ground(A),
 3996        A='$chr_identifier_match'(Q, R)
 3997    ->  identifier_label_atom(R, B, Q, S),
 3998        H=[S|L],
 3999        F=N,
 4000        M=G,
 4001        O=C,
 4002        P=E
 4003    ;   atomic(A)
 4004    ->  (   D=(+)
 4005        ->  H=[B=A|L]
 4006        ;   H=[B==A|L]
 4007        ),
 4008        F=N,
 4009        M=G,
 4010        O=C,
 4011        P=E
 4012    ;   D==(+),
 4013        is_ground(G, A)
 4014    ->  copy_with_variable_replacement(A, T, F),
 4015        H=[B=T|L],
 4016        F=N,
 4017        M=G,
 4018        O=C,
 4019        P=E
 4020    ;   D==(?),
 4021        is_ground(G, A)
 4022    ->  copy_with_variable_replacement(A, T, F),
 4023        H=[B==T|L],
 4024        F=N,
 4025        M=G,
 4026        O=C,
 4027        P=E
 4028    ;   A=..[_|U],
 4029        functor(A, V, W),
 4030        functor(X, V, W),
 4031        X=..[_|Y],
 4032        (   D=(+)
 4033        ->  H=[B=X|L]
 4034        ;   H=[nonvar(B), B=X|L]
 4035        ),
 4036        pairup(U, Y, Z),
 4037        append(Z, C, O),
 4038        replicate(W, D, A1),
 4039        append(A1, E, P),
 4040        N=F,
 4041        M=G
 4042    ),
 4043    head_arg_matches_(O,
 4044                      P,
 4045                      N,
 4046                      M,
 4047                      L,
 4048                      I,
 4049                      J).
 4050add_heads_types([], A, A).
 4051add_heads_types([A|B], C, D) :-
 4052    add_head_types(A, C, E),
 4053    add_heads_types(B, E, D).
 4054add_head_types(A, B, C) :-
 4055    functor(A, D, E),
 4056    get_constraint_type_det(D/E, F),
 4057    A=..[_|G],
 4058    add_args_types(G, F, B, C).
 4059add_args_types([], [], A, A).
 4060add_args_types([A|B], [C|D], E, F) :-
 4061    add_arg_types(A, C, E, G),
 4062    add_args_types(B, D, G, F).
 4063add_arg_types(A, B, C, D) :-
 4064    (   B==any
 4065    ->  D=C
 4066    ;   var(A)
 4067    ->  (   lookup_eq(C, A, _)
 4068        ->  D=C
 4069        ;   D=[A-B|C]
 4070        )
 4071    ;   D=C
 4072    ).
 4073add_heads_ground_variables([], A, A).
 4074add_heads_ground_variables([A|B], C, D) :-
 4075    add_head_ground_variables(A, C, E),
 4076    add_heads_ground_variables(B, E, D).
 4077add_head_ground_variables(A, B, C) :-
 4078    functor(A, D, E),
 4079    get_constraint_mode(D/E, F),
 4080    A=..[_|G],
 4081    add_arg_ground_variables(G, F, B, C).
 4082add_arg_ground_variables([], [], A, A).
 4083add_arg_ground_variables([A|B], [C|D], E, F) :-
 4084    (   C==(+)
 4085    ->  term_variables(A, G),
 4086        add_var_ground_variables(G, E, H)
 4087    ;   E=H
 4088    ),
 4089    add_arg_ground_variables(B, D, H, F).
 4090add_var_ground_variables([], A, A).
 4091add_var_ground_variables([A|B], C, D) :-
 4092    (   memberchk_eq(A, C)
 4093    ->  E=C
 4094    ;   E=[A|C]
 4095    ),
 4096    add_var_ground_variables(B, E, D).
 4097is_ground(A, B) :-
 4098    (   ground(B)
 4099    ->  true
 4100    ;   compound(B)
 4101    ->  B=..[_|C],
 4102        maplist(is_ground(A), C)
 4103    ;   memberchk_eq(B, A)
 4104    ).
 4105check_ground(A, B, C) :-
 4106    term_variables(B, D),
 4107    check_ground_variables(D, A, C).
 4108check_ground_variables([], _, true).
 4109check_ground_variables([A|B], C, D) :-
 4110    (   memberchk_eq(A, C)
 4111    ->  check_ground_variables(B, C, D)
 4112    ;   D=(ground(A), E),
 4113        check_ground_variables(B, C, E)
 4114    ).
 4115rest_heads_retrieval_and_matching(A, B, C, D, E, F, G, H, I, J) :-
 4116    rest_heads_retrieval_and_matching(A,
 4117                                      B,
 4118                                      C,
 4119                                      D,
 4120                                      E,
 4121                                      F,
 4122                                      G,
 4123                                      H,
 4124                                      I,
 4125                                      J,
 4126                                      [],
 4127                                      _).
 4128rest_heads_retrieval_and_matching(A, B, C, D, E, F, G, H, I, J, K, L) :-
 4129    (   A=[_|_]
 4130    ->  rest_heads_retrieval_and_matching_n(A,
 4131                                            B,
 4132                                            H,
 4133                                            I,
 4134                                            C,
 4135                                            D,
 4136                                            E,
 4137                                            F,
 4138                                            G,
 4139                                            J,
 4140                                            K,
 4141                                            L)
 4142    ;   D=[],
 4143        E=[],
 4144        F=G,
 4145        K=L
 4146    ).
 4147rest_heads_retrieval_and_matching_n([], _, _, _, _, [], [], A, A, _, B, B).
 4148rest_heads_retrieval_and_matching_n([A|B], [_|C], D, E, F, [G|H], [I|J], K, L, _, M, N) :-
 4149    functor(A, O, P),
 4150    head_info(A, P, Q, _, _, R),
 4151    get_store_type(O/P, S),
 4152    (   S==default
 4153    ->  passive_head_via(A, [F|D], K, T, U),
 4154        delay_phase_end(validate_store_type_assumptions,
 4155                        (static_suspension_term(O/P, V), get_static_suspension_term_field(arguments, O/P, V, Q), get_static_suspension_field(O/P, V, state, active, W))),
 4156        get_constraint_mode(O/P, X),
 4157        head_arg_matches(R,
 4158                         X,
 4159                         K,
 4160                         Y,
 4161                         Z,
 4162                         M,
 4163                         A1),
 4164        B1=R,
 4165        sbag_member_call(I, U, C1),
 4166        D1=(T, C1, I=V, W),
 4167        inline_matching_goal(Y, E1)
 4168    ;   delay_phase_end(validate_store_type_assumptions,
 4169                        (static_suspension_term(O/P, V), get_static_suspension_term_field(arguments, O/P, V, Q))),
 4170        existential_lookup(S,
 4171                           A,
 4172                           [F|D],
 4173                           K,
 4174                           M,
 4175                           V,
 4176                           D1,
 4177                           I,
 4178                           R,
 4179                           B1),
 4180        get_constraint_mode(O/P, X),
 4181        F1=X,
 4182        head_arg_matches(B1,
 4183                         F1,
 4184                         K,
 4185                         Y,
 4186                         Z,
 4187                         M,
 4188                         A1),
 4189        filter_append(B1, Z, G1),
 4190        translate(A1, G1, H1),
 4191        translate(A1, Z, I1),
 4192        inline_matching_goal(Y, E1, H1, I1)
 4193    ),
 4194    different_from_other_susps(A, I, D, E, J1),
 4195    G=(D1, J1, E1),
 4196    rest_heads_retrieval_and_matching_n(B,
 4197                                        C,
 4198                                        [A|D],
 4199                                        [I|E],
 4200                                        F,
 4201                                        H,
 4202                                        J,
 4203                                        Z,
 4204                                        L,
 4205                                        _,
 4206                                        A1,
 4207                                        N).
 4208inline_matching_goal(A, B) :-
 4209    inline_matching_goal(A, B, [], []).
 4210inline_matching_goal(A==B, true, C, D) :-
 4211    memberchk_eq(A, C),
 4212    memberchk_eq(B, D),
 4213    A=B,
 4214    !.
 4215inline_matching_goal((A, B), (C, D), E, F) :-
 4216    !,
 4217    inline_matching_goal(A, C, E, F),
 4218    inline_matching_goal(B, D, E, F).
 4219inline_matching_goal(A, A, _, _).
 4220filter_mode([], _, _, []).
 4221filter_mode([A-B|C], [_-D|E], [F|G], H) :-
 4222    (   B==D
 4223    ->  H=[F|I],
 4224        filter_mode(C, E, G, I)
 4225    ;   filter_mode([A-B|C], E, G, H)
 4226    ).
 4227filter_append([], A, A).
 4228filter_append([A|B], C, D) :-
 4229    (   A=silent(_)
 4230    ->  filter_append(B, C, D)
 4231    ;   D=[A|E],
 4232        filter_append(B, C, E)
 4233    ).
 4234check_unique_keys([], _).
 4235check_unique_keys([A|B], C) :-
 4236    lookup_eq(C, A, _),
 4237    check_unique_keys(B, C).
 4238different_from_other_susps(A, B, C, D, E) :-
 4239    different_from_other_susps_(C, D, A, B, F),
 4240    list2conj(F, E).
 4241different_from_other_susps_(_, [], _, _, []) :-
 4242    !.
 4243different_from_other_susps_([A|B], [C|D], E, F, G) :-
 4244    (   functor(E, H, I),
 4245        functor(A, H, I),
 4246        copy_term_nat(A-E, J-K),
 4247        \+ \+ J=K
 4248    ->  G=[F\==C|L]
 4249    ;   G=L
 4250    ),
 4251    different_from_other_susps_(B, D, E, F, L).
 4252passive_head_via(A, B, C, D, E) :-
 4253    functor(A, F, G),
 4254    get_constraint_index(F/G, _),
 4255    common_variables(A, B, H),
 4256    ground_vars([A], I),
 4257    list_difference_eq(H, I, J),
 4258    global_list_store_name(F/G, K),
 4259    L=nb_getval(K, E),
 4260    get_constraint_mode(F/G, M),
 4261    (   N==[]
 4262    ->  D=L
 4263    ;   member(O, J),
 4264        nth1(P, M, -),
 4265        arg(P, A, Q),
 4266        Q==O
 4267    ->  translate([O], C, [R]),
 4268        gen_get_mod_constraints(F/G, R, S, E),
 4269        D=S
 4270    ;   translate(J, C, N),
 4271        add_heads_types(B, [], T),
 4272        my_term_copy(T, C, U),
 4273        gen_get_mod_constraints(F/G,
 4274                                N,
 4275                                U,
 4276                                V,
 4277                                S,
 4278                                E),
 4279        D=(V->S;L)
 4280    ).
 4281common_variables(A, B, C) :-
 4282    term_variables(A, D),
 4283    term_variables(B, E),
 4284    intersect_eq(D, E, C).
 4285gen_get_mod_constraints(A, B, C, D, E, F) :-
 4286    via_goal(B, C, D, G),
 4287    get_target_module(H),
 4288    E=(get_attr(G, H, I), J),
 4289    get_max_constraint_index(K),
 4290    (   K==1
 4291    ->  J=true,
 4292        F=I
 4293    ;   get_constraint_index(A, L),
 4294        get_suspensions(K, L, I, J, F)
 4295    ).
 4296via_goal(A, B, C, D) :-
 4297    (   A=[]
 4298    ->  C=fail
 4299    ;   A=[E]
 4300    ->  lookup_type(B, E, F),
 4301        (   atomic_type(F)
 4302        ->  C=var(E),
 4303            E=D
 4304        ;   C='chr newvia_1'(E, D)
 4305        )
 4306    ;   A=[E, G]
 4307    ->  C='chr newvia_2'(E, G, D)
 4308    ;   C='chr newvia'(A, D)
 4309    ).
 4310lookup_type(A, B, C) :-
 4311    (   lookup_eq(A, B, C)
 4312    ->  true
 4313    ;   C=any
 4314    ).
 4315gen_get_mod_constraints(A, B, C, D) :-
 4316    get_target_module(E),
 4317    C=(get_attr(B, E, F), G),
 4318    get_max_constraint_index(H),
 4319    (   H==1
 4320    ->  G=true,
 4321        D=F
 4322    ;   get_constraint_index(A, I),
 4323        get_suspensions(H, I, F, G, D)
 4324    ).
 4325guard_body_copies(A, B, C, D) :-
 4326    guard_body_copies2(A, B, E, D),
 4327    list2conj(E, C).
 4328guard_body_copies2(A, B, C, D) :-
 4329    A=rule(_, E, F, G),
 4330    conj2list(F, H),
 4331    split_off_simple_guard(H, B, I, J),
 4332    my_term_copy(I-J, B, K, L-M),
 4333    append(L, [N], C),
 4334    term_variables(J, O),
 4335    term_variables(M, P),
 4336    ground_vars(E, Q),
 4337    list_difference_eq(O, Q, R),
 4338    (   chr_pp_flag(guard_locks, off)
 4339    ->  S=[],
 4340        T=[]
 4341    ;   bagof(U-V,
 4342              W^X^(lists:member(W, R), pairlist:lookup_eq(B, W, X), memberchk_eq(X, P), chr_lock(X, U), chr_unlock(X, V)),
 4343              Y)
 4344    ->  once(pairup(S, T, Y))
 4345    ;   S=[],
 4346        T=[]
 4347    ),
 4348    list2conj(S, Z),
 4349    list2conj(T, A1),
 4350    list2conj(M, B1),
 4351    N=(Z, B1, A1),
 4352    my_term_copy(G, K, D).
 4353split_off_simple_guard([], _, [], []).
 4354split_off_simple_guard([A|B], C, D, E) :-
 4355    (   simple_guard(A, C)
 4356    ->  D=[A|F],
 4357        split_off_simple_guard(B, C, F, E)
 4358    ;   D=[],
 4359        E=[A|B]
 4360    ).
 4361simple_guard(A, B) :-
 4362    binds_b(A, C),
 4363    \+ ( member(D, C),
 4364         lookup_eq(B, D, _)
 4365       ).
 4366active_constraint_detachment(A, B, C, D, E) :-
 4367    functor(C, F, G),
 4368    H=F/G,
 4369    (   is_stored(H)
 4370    ->  (   (   A==[0],
 4371                chr_pp_flag(store_in_guards, off)
 4372            ;   get_allocation_occurrence(H, I),
 4373                get_max_occurrence(H, J),
 4374                J<I
 4375            ),
 4376            only_ground_indexed_arguments(H),
 4377            chr_pp_flag(late_allocation, on)
 4378        ->  E=true
 4379        ;   gen_uncond_susp_detachment(C,
 4380                                       B,
 4381                                       active,
 4382                                       D,
 4383                                       K),
 4384            (   chr_pp_flag(late_allocation, on)
 4385            ->  E=(var(B)->true;K)
 4386            ;   E=K
 4387            )
 4388        )
 4389    ;   E=true
 4390    ).
 4391partner_constraint_detachments([], [], _, true).
 4392partner_constraint_detachments([A|B], [C|D], E, (F, G)) :-
 4393    gen_uncond_susp_detachment(C, A, partner, E, F),
 4394    partner_constraint_detachments(B, D, E, G).
 4395gen_uncond_susp_detachment(A, B, C, D, E) :-
 4396    functor(A, F, G),
 4397    H=F/G,
 4398    (   is_stored(H)
 4399    ->  E=(I, J),
 4400        (   chr_pp_flag(debugable, on)
 4401        ->  I='chr debug_event'(remove(B))
 4402        ;   I=true
 4403        ),
 4404        remove_constraint_goal(H,
 4405                               B,
 4406                               K,
 4407                               true,
 4408                               (L, M),
 4409                               C,
 4410                               J),
 4411        delete_constraint_goal(A, B, D, L),
 4412        (   \+ only_ground_indexed_arguments(H),
 4413            \+ get_store_type(H, var_assoc_store(_, _))
 4414        ->  detach_constraint_atom(H, K, B, M)
 4415        ;   M=true
 4416        )
 4417    ;   E=true
 4418    ).
 4419simpagation_head1_code(A, B, C, D, E, F/G, _, H, I, J) :-
 4420    E=pragma(K, ids(_, L), _, _, M),
 4421    K=rule(_, N, O, P),
 4422    head_info(A, G, Q, R, S, T),
 4423    get_constraint_mode(F/G, U),
 4424    head_arg_matches(T, U, [], V, W, [], X),
 4425    build_head(F, G, H, S, Y),
 4426    append(C, N, Z),
 4427    append(D, L, A1),
 4428    reorder_heads(M, A, Z, A1, B1, C1),
 4429    guard_splitting(K, D1),
 4430    (   is_stored_in_guard(F/G, M)
 4431    ->  E1=[_|D1]
 4432    ;   E1=D1
 4433    ),
 4434    guard_via_reschedule_new(B1,
 4435                             E1,
 4436                             A,
 4437                             F1,
 4438                             G1,
 4439                             H1),
 4440    rest_heads_retrieval_and_matching(B1,
 4441                                      C1,
 4442                                      A,
 4443                                      G1,
 4444                                      I1,
 4445                                      W,
 4446                                      J1,
 4447                                      [],
 4448                                      [],
 4449                                      [],
 4450                                      X,
 4451                                      _),
 4452    split_by_ids(C1,
 4453                 I1,
 4454                 D,
 4455                 K1,
 4456                 L1,
 4457                 M1,
 4458                 N1),
 4459    guard_body_copies3(K, E1, J1, F1, O1),
 4460    (   is_stored_in_guard(F/G, M)
 4461    ->  gen_uncond_attach_goal(F/G,
 4462                               R,
 4463                               Q,
 4464                               P1,
 4465                               _),
 4466        F1=[Q1|_],
 4467        Q1=P1
 4468    ;   true
 4469    ),
 4470    sort_by_key(K1, L1, R1),
 4471    partner_constraint_detachments(R1, C, J1, S1),
 4472    active_constraint_detachment(H, R, A, J1, T1),
 4473    (   chr_pp_flag(debugable, on)
 4474    ->  my_term_copy(O-P, J1, U1-V1),
 4475        sort_by_key([R|K1], [B|L1], W1),
 4476        sort_by_key(M1, N1, X1),
 4477        Y1='chr debug_event'(try(W1, X1, U1, V1)),
 4478        Z1='chr debug_event'(apply(W1, X1, U1, V1)),
 4479        instrument_goal(!, Y1, Z1, A2)
 4480    ;   A2=!
 4481    ),
 4482    B2=(Y:-V, H1, A2, S1, T1, O1),
 4483    add_location(B2, M, C2),
 4484    I=[C2|J].
 4485split_by_ids([], [], _, [], []).
 4486split_by_ids([A|B], [C|D], E, F, G) :-
 4487    (   memberchk_eq(A, E)
 4488    ->  F=[C|H],
 4489        G=I
 4490    ;   F=H,
 4491        G=[C|I]
 4492    ),
 4493    split_by_ids(B, D, E, H, I).
 4494split_by_ids([], [], _, [], [], [], []).
 4495split_by_ids([A|B], [C|D], E, F, G, H, I) :-
 4496    (   memberchk_eq(A, E)
 4497    ->  F=[C|J],
 4498        G=[A|K],
 4499        H=L,
 4500        I=M
 4501    ;   F=J,
 4502        G=K,
 4503        H=[C|L],
 4504        I=[A|M]
 4505    ),
 4506    split_by_ids(B, D, E, J, K, L, M).
 4507simpagation_head2_code(A, B, C, D, E, F, G, H, I, J) :-
 4508    E=pragma(K, ids(L, M), _, _, N),
 4509    K=rule(O, _, P, Q),
 4510    append(O, C, R),
 4511    append(L, D, S),
 4512    reorder_heads(N,
 4513                  A,
 4514                  R,
 4515                  S,
 4516                  [T|U],
 4517                  [V|W]),
 4518    simpagation_head2_prelude(A,
 4519                              T,
 4520                              [U, P, Q],
 4521                              F,
 4522                              G,
 4523                              H,
 4524                              I,
 4525                              X),
 4526    extend_id(H, Y),
 4527    (   memberchk_eq(V, M)
 4528    ->  simpagation_universal_searches(U,
 4529                                       W,
 4530                                       M,
 4531                                       [T, A],
 4532                                       K,
 4533                                       F,
 4534                                       G,
 4535                                       Z,
 4536                                       A1,
 4537                                       B1,
 4538                                       Y,
 4539                                       C1,
 4540                                       X,
 4541                                       D1)
 4542    ;   X=D1,
 4543        Y=C1,
 4544        Z=U,
 4545        A1=[T, A],
 4546        B1=W
 4547    ),
 4548    universal_search_iterator_end(A1,
 4549                                  Z,
 4550                                  K,
 4551                                  F,
 4552                                  G,
 4553                                  C1,
 4554                                  D1,
 4555                                  E1),
 4556    simpagation_head2_worker(A1,
 4557                             Z,
 4558                             B1,
 4559                             B,
 4560                             E,
 4561                             F,
 4562                             G,
 4563                             C1,
 4564                             E1,
 4565                             J).
 4566simpagation_universal_searches([], [], _, A, _, _, _, [], A, [], B, B, C, C).
 4567simpagation_universal_searches(A, [B|C], D, E, F, G, H, I, J, K, L, M, N, O) :-
 4568    A=[P|Q],
 4569    inc_id(L, R),
 4570    universal_search_iterator_end(E,
 4571                                  A,
 4572                                  F,
 4573                                  G,
 4574                                  H,
 4575                                  L,
 4576                                  N,
 4577                                  S),
 4578    universal_search_iterator(A,
 4579                              E,
 4580                              F,
 4581                              G,
 4582                              H,
 4583                              L,
 4584                              S,
 4585                              T),
 4586    (   memberchk_eq(B, D)
 4587    ->  simpagation_universal_searches(Q,
 4588                                       C,
 4589                                       D,
 4590                                       [P|E],
 4591                                       F,
 4592                                       G,
 4593                                       H,
 4594                                       I,
 4595                                       J,
 4596                                       K,
 4597                                       R,
 4598                                       M,
 4599                                       T,
 4600                                       O)
 4601    ;   M=R,
 4602        T=O,
 4603        I=Q,
 4604        J=[P|E],
 4605        C=K
 4606    ).
 4607simpagation_head2_prelude(A, B, C, D/E, F, G, H, I) :-
 4608    head_info(A, E, J, K, L, M),
 4609    build_head(D, E, G, L, N),
 4610    get_constraint_mode(D/E, O),
 4611    head_arg_matches(M, O, [], P, Q, [], R),
 4612    lookup_passive_head(B, [A], Q, R, S, T),
 4613    gen_occ_allocation(D/E, F, J, K, U),
 4614    extend_id(G, V),
 4615    extra_active_delegate_variables(A,
 4616                                    [B|C],
 4617                                    Q,
 4618                                    W),
 4619    append([T|L], W, X),
 4620    build_head(D, E, [F|V], X, Y),
 4621    Z=(N:-P, S, !, U, Y),
 4622    add_dummy_location(Z, A1),
 4623    H=[A1|I].
 4624extra_active_delegate_variables(A, B, C, D) :-
 4625    A=..[_|E],
 4626    delegate_variables(A, B, C, E, D).
 4627passive_delegate_variables(A, B, C, D, E) :-
 4628    term_variables(B, F),
 4629    delegate_variables(A, C, D, F, E).
 4630delegate_variables(A, B, C, D, E) :-
 4631    term_variables(A, F),
 4632    term_variables(B, G),
 4633    intersect_eq(F, G, H),
 4634    list_difference_eq(H, D, I),
 4635    translate(I, C, E).
 4636simpagation_head2_worker([A|B], C, D, _, E, F/G, H, I, J, K) :-
 4637    E=pragma(L, ids(M, _), N, _, O),
 4638    L=rule(_, _, P, Q),
 4639    get_prop_inner_loop_vars(B,
 4640                             [A, C, P, Q],
 4641                             R,
 4642                             S,
 4643                             T,
 4644                             U,
 4645                             V),
 4646    gen_var(W),
 4647    gen_var(X),
 4648    functor(A, Y, Z),
 4649    gen_vars(Z, A1),
 4650    head_info(A, Z, A1, W, _, B1),
 4651    get_constraint_mode(Y/Z, C1),
 4652    head_arg_matches(B1, C1, S, D1, E1, [], _),
 4653    delay_phase_end(validate_store_type_assumptions,
 4654                    (static_suspension_term(Y/Z, F1), get_static_suspension_field(Y/Z, F1, state, active, G1), get_static_suspension_term_field(arguments, Y/Z, F1, A1))),
 4655    different_from_other_susps(A, W, B, V, H1),
 4656    I1=(W=F1, G1, H1, D1),
 4657    J1=[[W|X]|R],
 4658    build_head(F, G, [H|I], J1, K1),
 4659    guard_splitting(L, L1),
 4660    (   is_stored_in_guard(F/G, O)
 4661    ->  M1=[_|L1]
 4662    ;   M1=L1
 4663    ),
 4664    guard_via_reschedule_new(C,
 4665                             M1,
 4666                             [A|B],
 4667                             N1,
 4668                             O1,
 4669                             P1),
 4670    rest_heads_retrieval_and_matching(C,
 4671                                      D,
 4672                                      [A|B],
 4673                                      O1,
 4674                                      Q1,
 4675                                      E1,
 4676                                      R1,
 4677                                      [A|B],
 4678                                      [W|V],
 4679                                      []),
 4680    split_by_ids(D, Q1, M, S1, T1),
 4681    split_by_ids(D, C, M, U1, _),
 4682    partner_constraint_detachments([W|S1],
 4683                                   [A|U1],
 4684                                   R1,
 4685                                   V1),
 4686    W1=[X|R],
 4687    build_head(F, G, [H|I], W1, X1),
 4688    Y1=[[]|R],
 4689    build_head(F, G, [H|I], Y1, Z1),
 4690    guard_body_copies3(L, M1, R1, N1, A2),
 4691    (   is_stored_in_guard(F/G, O)
 4692    ->  N1=[B2|_]
 4693    ;   true
 4694    ),
 4695    (   is_observed(F/G, H)
 4696    ->  gen_uncond_attach_goal(F/G,
 4697                               T,
 4698                               U,
 4699                               C2,
 4700                               D2),
 4701        gen_state_cond_call(T,
 4702                            F/G,
 4703                            X1,
 4704                            D2,
 4705                            E2),
 4706        gen_state_cond_call(T,
 4707                            F/G,
 4708                            Z1,
 4709                            D2,
 4710                            F2)
 4711    ;   C2=true,
 4712        E2=X1,
 4713        F2=Z1
 4714    ),
 4715    (   chr_pp_flag(debugable, on)
 4716    ->  my_term_copy(P-Q, S, G2-H2),
 4717        I2='chr debug_event'(try([W|S1], [T|T1], G2, H2)),
 4718        J2='chr debug_event'(apply([W|S1], [T|T1], G2, H2))
 4719    ;   I2=true,
 4720        J2=true
 4721    ),
 4722    (   is_stored_in_guard(F/G, O)
 4723    ->  B2=C2,
 4724        K2=true
 4725    ;   B2=true,
 4726        K2=C2
 4727    ),
 4728    (   member(unique(_, L2), N),
 4729        check_unique_keys(L2, S)
 4730    ->  M2=(K1:-I1->(P1, I2->J2, V1, K2, A2, F2;Z1);X1)
 4731    ;   M2=(K1:-I1, P1, I2->J2, V1, K2, A2, E2;X1)
 4732    ),
 4733    add_location(M2, O, N2),
 4734    J=[N2|K].
 4735gen_state_cond_call(A, B, C, D, E) :-
 4736    (   may_trigger(B)
 4737    ->  does_use_field(B, generation),
 4738        delay_phase_end(validate_store_type_assumptions,
 4739                        (static_suspension_term(B, F), get_update_static_suspension_field(B, A, F, state, active, inactive, G, H), get_static_suspension_field(B, F, generation, D, I), get_static_suspension_term_field(arguments, B, F, J)))
 4740    ;   delay_phase_end(validate_store_type_assumptions,
 4741                        (static_suspension_term(B, F), get_update_static_suspension_field(B, A, F, state, active, inactive, G, H), get_static_suspension_term_field(arguments, B, F, J))),
 4742        I=true
 4743    ),
 4744    E=(A=F, G, I->H, C;true).
 4745propagation_code(A, B, C, D, E, F, G, H, I, J, K) :-
 4746    (   C==[]
 4747    ->  propagation_single_headed(A,
 4748                                  B,
 4749                                  E,
 4750                                  F,
 4751                                  G,
 4752                                  H,
 4753                                  I,
 4754                                  J,
 4755                                  K)
 4756    ;   propagation_multi_headed(A,
 4757                                 C,
 4758                                 D,
 4759                                 E,
 4760                                 F,
 4761                                 G,
 4762                                 H,
 4763                                 I,
 4764                                 J,
 4765                                 K)
 4766    ).
 4767propagation_single_headed(A, _, B, C, D/E, F, G, H, I) :-
 4768    head_info(A, E, J, K, L, M),
 4769    build_head(D, E, G, L, N),
 4770    inc_id(G, O),
 4771    build_head(D, E, O, L, P),
 4772    get_constraint_mode(D/E, Q),
 4773    head_arg_matches(M, Q, [], R, S, [], _),
 4774    guard_body_copies(B, S, T, U),
 4775    V=P,
 4776    actual_cut(D/E, F, W),
 4777    B=rule(_, _, X, Y),
 4778    (   chr_pp_flag(debugable, on)
 4779    ->  my_term_copy(X-Y, S, Z-A1),
 4780        B1='chr debug_event'(try([], [K], Z, A1)),
 4781        C1='chr debug_event'(apply([], [K], Z, A1)),
 4782        instrument_goal(W, B1, C1, D1)
 4783    ;   D1=W
 4784    ),
 4785    (   may_trigger(D/E),
 4786        \+ has_no_history(C)
 4787    ->  use_auxiliary_predicate(novel_production),
 4788        use_auxiliary_predicate(extend_history),
 4789        does_use_history(D/E, F),
 4790        gen_occ_allocation(D/E, F, J, K, E1),
 4791        (   named_history(C, F1, G1)
 4792        ->  (   G1==[]
 4793            ->  empty_named_history_novel_production(F1, H1),
 4794                empty_named_history_extend_history(F1, I1)
 4795            ;   J1=F1
 4796            )
 4797        ;   J1=C
 4798        ),
 4799        (   var(H1)
 4800        ->  H1='$novel_production'(K, J1),
 4801            I1='$extend_history'(K, J1)
 4802        ;   true
 4803        ),
 4804        (   is_observed(D/E, F)
 4805        ->  gen_uncond_attach_goal(D/E,
 4806                                   K,
 4807                                   J,
 4808                                   K1,
 4809                                   L1),
 4810            gen_state_cond_call(K,
 4811                                D/E,
 4812                                V,
 4813                                L1,
 4814                                M1)
 4815        ;   K1=true,
 4816            M1=V
 4817        )
 4818    ;   E1=true,
 4819        H1=true,
 4820        I1=true,
 4821        (   is_observed(D/E, F)
 4822        ->  get_allocation_occurrence(D/E, N1),
 4823            (   F==N1
 4824            ->  gen_insert_constraint_internal_goal(D/E,
 4825                                                    K1,
 4826                                                    L,
 4827                                                    J,
 4828                                                    K),
 4829                L1=0
 4830            ;   K1=(O1, P1),
 4831                gen_occ_allocation(D/E,
 4832                                   F,
 4833                                   J,
 4834                                   K,
 4835                                   O1),
 4836                gen_uncond_attach_goal(D/E,
 4837                                       K,
 4838                                       J,
 4839                                       P1,
 4840                                       L1)
 4841            ),
 4842            gen_state_cond_call(K,
 4843                                D/E,
 4844                                V,
 4845                                L1,
 4846                                M1)
 4847        ;   gen_occ_allocation(D/E,
 4848                               F,
 4849                               J,
 4850                               K,
 4851                               K1),
 4852            M1=V
 4853        )
 4854    ),
 4855    (   is_stored_in_guard(D/E, C)
 4856    ->  Q1=K1,
 4857        R1=true
 4858    ;   Q1=true,
 4859        R1=K1
 4860    ),
 4861    S1=(N:-R, E1, H1, Q1, T, D1, I1, R1, U, M1),
 4862    add_location(S1, C, T1),
 4863    H=[T1|I].
 4864propagation_multi_headed(A, B, C, D, E, F, G, H, I, J) :-
 4865    B=[K|L],
 4866    propagation_prelude(A,
 4867                        B,
 4868                        D,
 4869                        F,
 4870                        G,
 4871                        H,
 4872                        I,
 4873                        M),
 4874    extend_id(H, N),
 4875    propagation_nested_code(L,
 4876                            [K, A],
 4877                            C,
 4878                            D,
 4879                            E,
 4880                            F,
 4881                            G,
 4882                            N,
 4883                            M,
 4884                            J).
 4885propagation_prelude(A, [B|C], D, E/F, G, H, I, J) :-
 4886    head_info(A, F, K, L, M, N),
 4887    build_head(E, F, H, M, O),
 4888    get_constraint_mode(E/F, P),
 4889    head_arg_matches(N, P, [], Q, R, [], S),
 4890    D=rule(_, _, T, U),
 4891    extra_active_delegate_variables(A,
 4892                                    [B, C, T, U],
 4893                                    R,
 4894                                    V),
 4895    lookup_passive_head(B, [A], R, S, W, X),
 4896    gen_occ_allocation(E/F, G, K, L, Y),
 4897    extend_id(H, Z),
 4898    append([X|M], V, A1),
 4899    build_head(E, F, [G|Z], A1, B1),
 4900    C1=B1,
 4901    D1=(O:-Q, W, !, Y, C1),
 4902    add_dummy_location(D1, E1),
 4903    I=[E1|J].
 4904propagation_nested_code([], [A|B], C, D, E, F, G, H, I, J) :-
 4905    universal_search_iterator_end([A|B],
 4906                                  [],
 4907                                  D,
 4908                                  F,
 4909                                  G,
 4910                                  H,
 4911                                  I,
 4912                                  K),
 4913    propagation_body(A,
 4914                     B,
 4915                     C,
 4916                     D,
 4917                     E,
 4918                     F,
 4919                     G,
 4920                     H,
 4921                     K,
 4922                     J).
 4923propagation_nested_code([A|B], C, D, E, F, G, H, I, J, K) :-
 4924    universal_search_iterator_end(C,
 4925                                  [A|B],
 4926                                  E,
 4927                                  G,
 4928                                  H,
 4929                                  I,
 4930                                  J,
 4931                                  L),
 4932    universal_search_iterator([A|B],
 4933                              C,
 4934                              E,
 4935                              G,
 4936                              H,
 4937                              I,
 4938                              L,
 4939                              M),
 4940    inc_id(I, N),
 4941    propagation_nested_code(B,
 4942                            [A|C],
 4943                            D,
 4944                            E,
 4945                            F,
 4946                            G,
 4947                            H,
 4948                            N,
 4949                            M,
 4950                            K).
 4951check_fd_lookup_condition(A, B, _, _) :-
 4952    get_store_type(A/B, global_singleton),
 4953    !.
 4954check_fd_lookup_condition(A, B, C, D) :-
 4955    \+ may_trigger(A/B),
 4956    get_functional_dependency(A/B, 1, E, F),
 4957    copy_term(E-F, C-G),
 4958    term_variables(D, H),
 4959    intersect_eq(G, H, G),
 4960    !.
 4961propagation_body(A, B, C, D, E, F/G, H, I, J, K) :-
 4962    D=rule(_, L, M, N),
 4963    gen_var_susp_list_for_b(B,
 4964                            [A, M, N],
 4965                            O,
 4966                            P,
 4967                            Q,
 4968                            R,
 4969                            S),
 4970    flatten(P, T),
 4971    init(R, U),
 4972    last(R, V),
 4973    gen_var(W),
 4974    gen_var(X),
 4975    functor(A, Y, Z),
 4976    gen_vars(Z, A1),
 4977    delay_phase_end(validate_store_type_assumptions,
 4978                    (static_suspension_term(Y/Z, B1), get_static_suspension_field(Y/Z, B1, state, active, C1), get_static_suspension_term_field(arguments, Y/Z, B1, A1))),
 4979    D1=(W=B1, C1),
 4980    E1=[[W|X]|T],
 4981    build_head(F, G, [H|I], E1, F1),
 4982    (   check_fd_lookup_condition(Y, Z, A, B)
 4983    ->  universal_search_iterator_failure_vars(B,
 4984                                               I,
 4985                                               P,
 4986                                               Q,
 4987                                               S,
 4988                                               G1,
 4989                                               H1),
 4990        I1=G1
 4991    ;   I1=[X|T],
 4992        H1=I
 4993    ),
 4994    (   H1=[_]
 4995    ->  J1=H1
 4996    ;   J1=[H|H1]
 4997    ),
 4998    build_head(F, G, J1, I1, K1),
 4999    L1=K1,
 5000    A=..[_|M1],
 5001    pairup(M1, A1, N1),
 5002    get_constraint_mode(Y/Z, O1),
 5003    head_arg_matches(N1, O1, O, P1, Q1),
 5004    different_from_other_susps(A, W, B, U, R1),
 5005    guard_body_copies(D, Q1, S1, T1),
 5006    get_occurrence(F/G, H, _, U1),
 5007    (   is_observed(F/G, H)
 5008    ->  init(Q, V1),
 5009        gen_uncond_attach_goal(F/G,
 5010                               V,
 5011                               V1,
 5012                               W1,
 5013                               X1),
 5014        gen_state_cond_call(V,
 5015                            F/G,
 5016                            L1,
 5017                            X1,
 5018                            Y1)
 5019    ;   W1=true,
 5020        Y1=L1
 5021    ),
 5022    (   (   is_least_occurrence(E)
 5023        ;   has_no_history(E)
 5024        )
 5025    ->  Z1=true,
 5026        A2=true
 5027    ;   \+ may_trigger(F/G),
 5028        maplist(is_passive(E), C)
 5029    ->  Z1=true,
 5030        A2=true
 5031    ;   get_occurrence(F/G, H, _, U1),
 5032        use_auxiliary_predicate(novel_production),
 5033        use_auxiliary_predicate(extend_history),
 5034        does_use_history(F/G, H),
 5035        (   named_history(E, B2, C2)
 5036        ->  (   C2==[]
 5037            ->  empty_named_history_novel_production(B2, Z1),
 5038                empty_named_history_extend_history(B2, A2)
 5039            ;   reverse([W|U], D2),
 5040                named_history_susps(C2,
 5041                                    [U1|C],
 5042                                    [V|D2],
 5043                                    E2),
 5044                E2=[F2|_],
 5045                (   length(C2, 1)
 5046                ->  A2='$extend_history'(F2, B2),
 5047                    Z1='$novel_production'(F2, B2)
 5048                ;   findall(G2,
 5049                            ( member(H2, C2),
 5050                              get_occurrence_from_id(G2,
 5051                                                     _,
 5052                                                     E,
 5053                                                     H2)
 5054                            ),
 5055                            I2),
 5056                    J2=..[t, B2|E2]
 5057                )
 5058            )
 5059        ;   F2=V,
 5060            maplist(extract_symbol, L, I2),
 5061            sort([U1|C], C2),
 5062            history_susps(C,
 5063                          [W|U],
 5064                          V,
 5065                          U1,
 5066                          E2),
 5067            J2=..[t, E|E2]
 5068        ),
 5069        (   var(Z1)
 5070        ->  novel_production_calls(I2,
 5071                                   C2,
 5072                                   E2,
 5073                                   E,
 5074                                   K2,
 5075                                   L2),
 5076            A2='$extend_history'(F2, K2),
 5077            Z1=(K2=J2, L2)
 5078        ;   true
 5079        )
 5080    ),
 5081    (   chr_pp_flag(debugable, on)
 5082    ->  D=rule(_, _, M, N),
 5083        my_term_copy(M-N, Q1, M2-N2),
 5084        get_occurrence(F/G, H, _, U1),
 5085        sort_by_key([V, W|U], [U1|C], O2),
 5086        P2='chr debug_event'(try([], O2, M2, N2)),
 5087        Q2='chr debug_event'(apply([], O2, M2, N2))
 5088    ;   P2=true,
 5089        Q2=true
 5090    ),
 5091    (   is_stored_in_guard(F/G, E)
 5092    ->  R2=W1,
 5093        S2=true
 5094    ;   R2=true,
 5095        S2=W1
 5096    ),
 5097    T2=(F1:-D1, R1, P1, Z1, R2, S1, P2->Q2, A2, S2, T1, Y1;L1),
 5098    add_location(T2, E, U2),
 5099    J=[U2|K].
 5100extract_symbol(A, B/C) :-
 5101    functor(A, B, C).
 5102novel_production_calls([], [], [], _, _, true).
 5103novel_production_calls([A|B], [C|D], [E|F], G, H, (I, J)) :-
 5104    get_occurrence_from_id(A, K, G, C),
 5105    delay_phase_end(validate_store_type_assumptions,
 5106                    novel_production_call(A,
 5107                                          K,
 5108                                          '$novel_production'(E, H),
 5109                                          I)),
 5110    novel_production_calls(B, D, F, G, H, J).
 5111history_susps(A, B, C, D, E) :-
 5112    reverse(B, F),
 5113    sort_by_key([C|F], [D|A], E).
 5114named_history_susps([], _, _, []).
 5115named_history_susps([A|B], C, D, [E|F]) :-
 5116    select2(A, E, C, D, G, H),
 5117    !,
 5118    named_history_susps(B, G, H, F).
 5119gen_var_susp_list_for([A], B, C, D, E, F) :-
 5120    !,
 5121    functor(A, G, H),
 5122    head_info(A, H, _, F, E, I),
 5123    get_constraint_mode(G/H, J),
 5124    head_arg_matches(I, J, [], _, C),
 5125    extra_active_delegate_variables(A, B, C, K),
 5126    append(E, K, D).
 5127gen_var_susp_list_for([A|B], C, D, E, F, G) :-
 5128    gen_var_susp_list_for(B,
 5129                          [A|C],
 5130                          H,
 5131                          F,
 5132                          _,
 5133                          _),
 5134    functor(A, I, J),
 5135    gen_var(G),
 5136    head_info(A, J, _, K, _, L),
 5137    get_constraint_mode(I/J, M),
 5138    head_arg_matches(L, M, H, _, D),
 5139    passive_delegate_variables(A, B, C, D, N),
 5140    append(N, [K, G|F], E).
 5141gen_var_susp_list_for_b([A], B, C, [D], E, [F], []) :-
 5142    !,
 5143    functor(A, G, H),
 5144    head_info(A, H, _, F, E, I),
 5145    get_constraint_mode(G/H, J),
 5146    head_arg_matches(I, J, [], _, C),
 5147    extra_active_delegate_variables(A, B, C, K),
 5148    append(E, K, D).
 5149gen_var_susp_list_for_b([A|B], C, D, [E|F], G, [H|I], [J|K]) :-
 5150    gen_var_susp_list_for_b(B,
 5151                            [A|C],
 5152                            L,
 5153                            F,
 5154                            G,
 5155                            I,
 5156                            K),
 5157    functor(A, M, N),
 5158    gen_var(J),
 5159    head_info(A, N, _, H, _, O),
 5160    get_constraint_mode(M/N, P),
 5161    head_arg_matches(O, P, L, _, D),
 5162    passive_delegate_variables(A, B, C, D, Q),
 5163    append(Q, [H, J], E).
 5164get_prop_inner_loop_vars([A], B, C, D, E, F, []) :-
 5165    !,
 5166    functor(A, G, H),
 5167    head_info(A, H, F, E, I, J),
 5168    get_constraint_mode(G/H, K),
 5169    head_arg_matches(J, K, [], _, D),
 5170    extra_active_delegate_variables(A, B, D, L),
 5171    append(I, L, C).
 5172get_prop_inner_loop_vars([A|B], C, D, E, F, G, [H|I]) :-
 5173    get_prop_inner_loop_vars(B,
 5174                             [A|C],
 5175                             J,
 5176                             K,
 5177                             F,
 5178                             G,
 5179                             I),
 5180    functor(A, L, M),
 5181    gen_var(N),
 5182    head_info(A, M, _, H, _, O),
 5183    get_constraint_mode(L/M, P),
 5184    head_arg_matches(O, P, K, _, E),
 5185    passive_delegate_variables(A, B, C, E, Q),
 5186    append(Q, [H, N|J], D).
 5187reorder_heads(A, B, C, D, E, F) :-
 5188    (   chr_pp_flag(reorder_heads, on),
 5189        length(C, G),
 5190        G=<6
 5191    ->  reorder_heads_main(A, B, C, D, E, F)
 5192    ;   E=C,
 5193        F=D
 5194    ).
 5195reorder_heads_main(A, B, C, D, E, F) :-
 5196    term_variables(B, G),
 5197    H=entry([], [], G, C, D, A),
 5198    copy_term_nat(H, I),
 5199    a_star(I,
 5200           J^(chr_translate:final_data(J)),
 5201           K^L^M^(chr_translate:expand_data(K, L, M)),
 5202           N),
 5203    I=H,
 5204    N=entry(O, P, _, _, _, _),
 5205    reverse(O, E),
 5206    reverse(P, F).
 5207final_data(A) :-
 5208    A=entry(_, _, _, _, [], _).
 5209expand_data(A, B, C) :-
 5210    A=entry(D, E, F, G, H, I),
 5211    select2(J, K, G, H, L, M),
 5212    term_variables([J|F], N),
 5213    B=entry([J|D], [K|E], N, L, M, I),
 5214    order_score(J, K, F, L, I, C).
 5215order_score(A, B, C, D, E, F) :-
 5216    functor(A, G, H),
 5217    get_store_type(G/H, I),
 5218    order_score(I, A, B, C, D, E, 99999, F).
 5219order_score(default, A, _, B, C, _, D, E) :-
 5220    term_variables(A, F),
 5221    term_variables(C, G),
 5222    ground_vars([A], H),
 5223    list_difference_eq(F, H, I),
 5224    order_score_vars(I, B, G, J),
 5225    E is min(D, J).
 5226order_score(multi_inthash(A), B, _, C, _, _, D, E) :-
 5227    (   D=<100
 5228    ->  E=D
 5229    ;   order_score_indexes(A, B, C, E)
 5230    ).
 5231order_score(multi_hash(A), B, _, C, _, _, D, E) :-
 5232    (   D=<100
 5233    ->  E=D
 5234    ;   order_score_indexes(A, B, C, E)
 5235    ).
 5236order_score(global_ground, A, _, B, C, _, D, E) :-
 5237    term_variables(A, F),
 5238    term_variables(C, G),
 5239    order_score_vars(F, B, G, H),
 5240    I is H*200,
 5241    E is min(D, I).
 5242order_score(var_assoc_store(_, _), _, _, _, _, _, _, 1).
 5243order_score(global_singleton, _, _, _, _, _, _, A) :-
 5244    A=1.
 5245order_score(multi_store(A), B, C, D, E, F, G, H) :-
 5246    multi_order_score(A,
 5247                      B,
 5248                      C,
 5249                      D,
 5250                      E,
 5251                      F,
 5252                      G,
 5253                      H).
 5254multi_order_score([], _, _, _, _, _, A, A).
 5255multi_order_score([A|B], C, D, E, F, G, H, I) :-
 5256    (   order_score(A,
 5257                    C,
 5258                    D,
 5259                    E,
 5260                    F,
 5261                    G,
 5262                    H,
 5263                    J)
 5264    ->  true
 5265    ;   J=H
 5266    ),
 5267    multi_order_score(B,
 5268                      C,
 5269                      D,
 5270                      E,
 5271                      F,
 5272                      G,
 5273                      J,
 5274                      I).
 5275order_score(identifier_store(A), B, _, C, _, _, D, E) :-
 5276    arg(A, B, F),
 5277    memberchk_eq(F, C),
 5278    E is min(D, 10).
 5279order_score(type_indexed_identifier_store(A, _), B, _, C, _, _, D, E) :-
 5280    arg(A, B, F),
 5281    memberchk_eq(F, C),
 5282    E is min(D, 10).
 5283order_score_indexes(A, B, C, D) :-
 5284    copy_term_nat(B+C, E+F),
 5285    numbervars(F, 0, _),
 5286    order_score_indexes(A, E, D).
 5287order_score_indexes([A|B], C, D) :-
 5288    args(A, C, E),
 5289    (   maplist(ground, E)
 5290    ->  D=100
 5291    ;   order_score_indexes(B, C, D)
 5292    ).
 5293memberchk_eq_flip(A, B) :-
 5294    memberchk_eq(B, A).
 5295order_score_vars(A, B, C, D) :-
 5296    order_score_count_vars(A, B, C, E-F-G),
 5297    (   E-F-G==0-0-0
 5298    ->  D=0
 5299    ;   E>0
 5300    ->  D is max(10-E, 0)
 5301    ;   F>0
 5302    ->  D is max(10-F, 1)*100
 5303    ;   D is max(10-G, 1)*1000
 5304    ).
 5305order_score_count_vars([], _, _, 0-0-0).
 5306order_score_count_vars([A|B], C, D, E-F-G) :-
 5307    order_score_count_vars(B, C, D, H-I-J),
 5308    (   memberchk_eq(A, C)
 5309    ->  E is H+1,
 5310        F=I,
 5311        G=J
 5312    ;   memberchk_eq(A, D)
 5313    ->  F is I+1,
 5314        E=H,
 5315        G=J
 5316    ;   G is J+1,
 5317        E=H,
 5318        F=I
 5319    ).
 5320create_get_mutable_ref(A, B, C) :-
 5321    C=(B=mutable(A)).
 5322create_get_mutable(A, B, C) :-
 5323    B=mutable(A),
 5324    C=true.
 5325gen_var(_).
 5326gen_vars(A, B) :-
 5327    length(B, A).
 5328ast_head_info1(A, B, C, D, E) :-
 5329    A=chr_constraint(_/F, G, _),
 5330    vars_susp(F, B, C, D),
 5331    pairup(G, B, E).
 5332head_info1(A, _/B, C, D, E, F) :-
 5333    vars_susp(B, C, D, E),
 5334    A=..[_|G],
 5335    pairup(G, C, F).
 5336head_info(A, B, C, D, E, F) :-
 5337    vars_susp(B, C, D, E),
 5338    A=..[_|G],
 5339    pairup(G, C, F).
 5340inc_id([A|B], [C|B]) :-
 5341    C is A+1.
 5342dec_id([A|B], [C|B]) :-
 5343    C is A-1.
 5344extend_id(A, [0|A]).
 5345next_id([_, A|B], [C|B]) :-
 5346    C is A+1.
 5347build_head(A/B, C, D, E) :-
 5348    build_head(A, B, C, D, E).
 5349build_head(A, B, C, D, E) :-
 5350    buildName(A, B, C, F),
 5351    (   (   chr_pp_flag(debugable, on)
 5352        ;   is_stored(A/B),
 5353            (   has_active_occurrence(A/B)
 5354            ;   chr_pp_flag(late_allocation, off)
 5355            ),
 5356            (   may_trigger(A/B)
 5357            ;   get_allocation_occurrence(A/B, G),
 5358                get_max_occurrence(A/B, H),
 5359                H>=G
 5360            )
 5361        )
 5362    ->  E=..[F|D]
 5363    ;   init(D, I),
 5364        E=..[F|I]
 5365    ).
 5366buildName(A, B, C, D) :-
 5367    (   (   chr_pp_flag(debugable, on)
 5368        ;   once((   is_stored(A/B),
 5369                     (   has_active_occurrence(A/B)
 5370                     ;   chr_pp_flag(late_allocation, off)
 5371                     ),
 5372                     (   may_trigger(A/B)
 5373                     ;   get_allocation_occurrence(A/B, E),
 5374                         get_max_occurrence(A/B, F),
 5375                         F>=E
 5376                     )
 5377                 ;   C\=[0]
 5378                 ))
 5379        )
 5380    ->  atom_concat(A, '___', G),
 5381        atomic_concat(G, B, H),
 5382        buildName_(C, H, D)
 5383    ;   D=A
 5384    ).
 5385buildName_([], A, A).
 5386buildName_([A|B], C, D) :-
 5387    buildName_(B, C, E),
 5388    atom_concat(E, '__', F),
 5389    atomic_concat(F, A, D).
 5390vars_susp(A, B, C, D) :-
 5391    length(B, A),
 5392    append(B, [C], D).
 5393or_pattern(A, B) :-
 5394    C is A-1,
 5395    B is 1<<C.
 5396and_pattern(A, B) :-
 5397    C is A-1,
 5398    D is 1<<C,
 5399    B is -1*(D+1).
 5400make_name(A, B/C, D) :-
 5401    atom_concat_list([A, B, '___', C], D).
 5402make_attr(A, B, C, D) :-
 5403    length(C, A),
 5404    D=..[v, B|C].
 5405get_all_suspensions2(A, B, C) :-
 5406    chr_pp_flag(dynattr, off),
 5407    !,
 5408    make_attr(A, _, C, B).
 5409get_all_suspensions2(A, B, C, D) :-
 5410    length(D, A),
 5411    C='chr all_suspensions'(D, 1, B).
 5412normalize_attr(A, B, C) :-
 5413    B='chr normalize_attr'(A, C).
 5414get_suspensions(A, B, C, C=D, E) :-
 5415    chr_pp_flag(dynattr, off),
 5416    !,
 5417    make_attr(A, _, F, D),
 5418    nth1(B, F, E).
 5419get_suspensions(_, A, B, C, D) :-
 5420    C=(memberchk(A-D, B)->true;D=[]).
 5421singleton_attr(A, B, C, D) :-
 5422    chr_pp_flag(dynattr, off),
 5423    !,
 5424    or_pattern(C, E),
 5425    make_attr(A, E, F, D),
 5426    nth1(C, F, [B], G),
 5427    set_elems(G, []).
 5428singleton_attr(_, A, B, C) :-
 5429    C=[B-[A]].
 5430add_attr(A, B, C, D, E, F) :-
 5431    chr_pp_flag(dynattr, off),
 5432    !,
 5433    make_attr(A, G, H, I),
 5434    or_pattern(C, J),
 5435    nth1(C, H, K),
 5436    substitute_eq(K, H, [B|K], L),
 5437    make_attr(A, G, L, M),
 5438    substitute_eq(K, H, [B], N),
 5439    make_attr(A, O, N, P),
 5440    E=(D=I, (G/\J=:=J->F=M;O is G\/J, F=P)),
 5441    !.
 5442add_attr(_, A, B, C, D, E) :-
 5443    D=('chr select'(C, B-F, G)->E=[B-[A|F]|G];E=[B-[A]|C]).
 5444rem_attr(A, B, C, D, E, F) :-
 5445    chr_pp_flag(dynattr, off),
 5446    chr_pp_flag(experiment, off),
 5447    !,
 5448    or_pattern(D, G),
 5449    and_pattern(D, H),
 5450    make_attr(A, I, J, K),
 5451    nth1(D, J, L),
 5452    substitute_eq(L, J, [], M),
 5453    make_attr(A, N, M, O),
 5454    substitute_eq(L, J, P, Q),
 5455    make_attr(A, I, Q, R),
 5456    get_target_module(S),
 5457    F=(E=K, (I/\G=:=G->'chr sbag_del_element'(L, C, P), (P==[]->N is I/\H, (N==0->del_attr(B, S);put_attr(B, S, O));put_attr(B, S, R));true)),
 5458    !.
 5459rem_attr(_, A, B, C, D, E) :-
 5460    chr_pp_flag(dynattr, off),
 5461    chr_pp_flag(experiment, on),
 5462    !,
 5463    or_pattern(C, F),
 5464    and_pattern(C, G),
 5465    H is C+1,
 5466    get_target_module(I),
 5467    E=(arg(1, D, J), (J/\F=:=F->arg(H, D, K), 'chr sbag_del_element'(K, B, L), (L==[]->M is J/\G, (M==0->del_attr(A, I);setarg(1, D, M), setarg(H, D, L));setarg(H, D, L));true)),
 5468    !.
 5469rem_attr(_, A, B, C, D, E) :-
 5470    get_target_module(F),
 5471    E=('chr select'(D, C-G, H)->'chr sbag_del_element'(G, B, I), (I==[]->(H==[]->del_attr(A, F);put_attr(A, F, H));put_attr(A, F, [C-I|H]));true).
 5472merge_attributes(A, B, C, D, E) :-
 5473    chr_pp_flag(dynattr, off),
 5474    !,
 5475    make_attr(A, F, G, H),
 5476    merge_attributes2(A, F, G, C, I, E),
 5477    D=(B=H, I).
 5478merge_attributes(_, A, B, C, D) :-
 5479    C=(sort(A, E), sort(B, F), 'chr new_merge_attributes'(E, F, D)).
 5480merge_attributes2(A, B, C, D, E, F) :-
 5481    make_attr(A, G, H, I),
 5482    bagof(J,
 5483          K^L^M^N^(member2(C, H, K-L), J=(sort(L, M), 'chr merge_attributes'(K, M, N))),
 5484          O),
 5485    list2conj(O, P),
 5486    bagof(Q,
 5487          R^S^T^member((R, 'chr merge_attributes'(S, T, Q)), O),
 5488          U),
 5489    make_attr(A, V, U, F),
 5490    E=(D=I, P, V is B\/G).
 5491lookup_passive_head(A, B, C, D, E) :-
 5492    functor(A, F, G),
 5493    get_store_type(F/G, H),
 5494    lookup_passive_head(H, A, B, C, [], D, E).
 5495lookup_passive_head(A, B, C, D, E, F) :-
 5496    functor(A, G, H),
 5497    get_store_type(G/H, I),
 5498    lookup_passive_head(I,
 5499                        A,
 5500                        B,
 5501                        C,
 5502                        D,
 5503                        E,
 5504                        F).
 5505lookup_passive_head(default, A, B, C, _, D, E) :-
 5506    functor(A, F, G),
 5507    passive_head_via(A, B, C, D, E),
 5508    update_store_type(F/G, default).
 5509lookup_passive_head(multi_inthash(A), B, _, C, D, E, F) :-
 5510    hash_lookup_passive_head(inthash,
 5511                             A,
 5512                             B,
 5513                             C,
 5514                             D,
 5515                             E,
 5516                             F,
 5517                             _).
 5518lookup_passive_head(multi_hash(A), B, _, C, D, E, F) :-
 5519    hash_lookup_passive_head(hash,
 5520                             A,
 5521                             B,
 5522                             C,
 5523                             D,
 5524                             E,
 5525                             F,
 5526                             _).
 5527lookup_passive_head(global_ground, A, _, _, _, B, C) :-
 5528    functor(A, D, E),
 5529    global_ground_store_name(D/E, F),
 5530    make_get_store_goal(F, C, B),
 5531    update_store_type(D/E, global_ground).
 5532lookup_passive_head(var_assoc_store(A, B), C, _, D, _, E, F) :-
 5533    arg(A, C, G),
 5534    arg(B, C, H),
 5535    translate([G, H], D, [I, J]),
 5536    get_target_module(K),
 5537    E=(get_attr(I, K, L), lookup_assoc_store(L, J, F)).
 5538lookup_passive_head(global_singleton, A, _, _, _, B, C) :-
 5539    functor(A, D, E),
 5540    global_singleton_store_name(D/E, F),
 5541    make_get_store_goal(F, G, H),
 5542    B=(H, G\==[], C=[G]),
 5543    update_store_type(D/E, global_singleton).
 5544lookup_passive_head(multi_store(A), B, C, D, E, F, G) :-
 5545    once(( member(H, A),
 5546           lookup_passive_head(H,
 5547                               B,
 5548                               C,
 5549                               D,
 5550                               E,
 5551                               F,
 5552                               G)
 5553         )).
 5554lookup_passive_head(identifier_store(A), B, _, C, _, D, E) :-
 5555    functor(B, F, G),
 5556    arg(A, B, H),
 5557    translate([H], C, [I]),
 5558    delay_phase_end(validate_store_type_assumptions,
 5559                    identifier_lookup(F/G,
 5560                                      A,
 5561                                      E,
 5562                                      I,
 5563                                      D)),
 5564    update_store_type(F/G, identifier_store(A)),
 5565    get_identifier_index(F/G, A, _).
 5566lookup_passive_head(type_indexed_identifier_store(A, B), C, _, D, _, E, F) :-
 5567    functor(C, G, H),
 5568    arg(A, C, I),
 5569    (   var(I)
 5570    ->  translate([I], D, [J]),
 5571        E=K
 5572    ;   ground(I),
 5573        I='$chr_identifier_match'(L, _)
 5574    ->  lookup_only_identifier_atom(B, L, J, M),
 5575        E=(M, K)
 5576    ),
 5577    delay_phase_end(validate_store_type_assumptions,
 5578                    type_indexed_identifier_lookup(G/H,
 5579                                                   A,
 5580                                                   B,
 5581                                                   F,
 5582                                                   J,
 5583                                                   K)),
 5584    update_store_type(G/H,
 5585                      type_indexed_identifier_store(A, B)),
 5586    get_type_indexed_identifier_index(B,
 5587                                      G/H,
 5588                                      A,
 5589                                      _).
 5590identifier_lookup(A, B, C, D, E) :-
 5591    get_identifier_size(F),
 5592    functor(G, struct, F),
 5593    get_identifier_index(A, B, H),
 5594    arg(H, G, C),
 5595    E=(D=G).
 5596type_indexed_identifier_lookup(A, B, C, D, E, F) :-
 5597    type_indexed_identifier_structure(C, G),
 5598    get_type_indexed_identifier_index(C, A, B, H),
 5599    arg(H, G, D),
 5600    F=(E=G).
 5601hash_lookup_passive_head(A, B, C, D, E, F, G, H) :-
 5602    pick_hash_index(B, C, D, H, I, J),
 5603    (   J=[K]
 5604    ->  true
 5605    ;   K=..[k|J]
 5606    ),
 5607    functor(C, L, M),
 5608    multi_hash_lookup_goal(L/M,
 5609                           A,
 5610                           H,
 5611                           K,
 5612                           G,
 5613                           N),
 5614    check_ground(E, I, O),
 5615    my_term_copy(O, D, P),
 5616    F=(P, N),
 5617    (   A==inthash
 5618    ->  update_store_type(L/M, multi_inthash([H]))
 5619    ;   update_store_type(L/M, multi_hash([H]))
 5620    ).
 5621pick_hash_index(A, B, C, D, E, F) :-
 5622    member(D, A),
 5623    args(D, B, E),
 5624    key_in_scope(E, C, F),
 5625    !.
 5626key_in_scope([], _, []).
 5627key_in_scope([A|B], C, [D|E]) :-
 5628    term_variables(A, F),
 5629    translate(F, C, G),
 5630    copy_term(A/F, D/G),
 5631    key_in_scope(B, C, E).
 5632existential_lookup(var_assoc_store(A, B), C, D, E, F, G, H, I, J, J) :-
 5633    !,
 5634    lookup_passive_head(var_assoc_store(A, B),
 5635                        C,
 5636                        D,
 5637                        E,
 5638                        F,
 5639                        K,
 5640                        L),
 5641    sbag_member_call(I, L, M),
 5642    functor(C, N, O),
 5643    delay_phase_end(validate_store_type_assumptions,
 5644                    (static_suspension_term(N/O, G), get_static_suspension_field(N/O, G, state, active, P))),
 5645    H=(K, M, I=G, P).
 5646existential_lookup(global_singleton, A, _, _, _, B, C, D, E, E) :-
 5647    !,
 5648    functor(A, F, G),
 5649    global_singleton_store_name(F/G, H),
 5650    make_get_store_goal(H, D, I),
 5651    C=(I, D\==[], D=B),
 5652    update_store_type(F/G, global_singleton).
 5653existential_lookup(multi_store(A), B, C, D, E, F, G, H, I, J) :-
 5654    !,
 5655    once(( member(K, A),
 5656           existential_lookup(K,
 5657                              B,
 5658                              C,
 5659                              D,
 5660                              E,
 5661                              F,
 5662                              G,
 5663                              H,
 5664                              I,
 5665                              J)
 5666         )).
 5667existential_lookup(multi_inthash(A), B, _, C, D, E, F, G, H, I) :-
 5668    !,
 5669    existential_hash_lookup(inthash,
 5670                            A,
 5671                            B,
 5672                            C,
 5673                            D,
 5674                            E,
 5675                            F,
 5676                            G,
 5677                            H,
 5678                            I).
 5679existential_lookup(multi_hash(A), B, _, C, D, E, F, G, H, I) :-
 5680    !,
 5681    existential_hash_lookup(hash,
 5682                            A,
 5683                            B,
 5684                            C,
 5685                            D,
 5686                            E,
 5687                            F,
 5688                            G,
 5689                            H,
 5690                            I).
 5691existential_lookup(identifier_store(A), B, C, D, E, F, G, H, I, J) :-
 5692    !,
 5693    lookup_passive_head(identifier_store(A),
 5694                        B,
 5695                        C,
 5696                        D,
 5697                        E,
 5698                        K,
 5699                        L),
 5700    hash_index_filter(I, [A], J),
 5701    functor(B, M, N),
 5702    (   check_fd_lookup_condition(M, N, B, _)
 5703    ->  O=(L=[H])
 5704    ;   sbag_member_call(H, L, O)
 5705    ),
 5706    delay_phase_end(validate_store_type_assumptions,
 5707                    (static_suspension_term(M/N, F), get_static_suspension_field(M/N, F, state, active, P))),
 5708    G=(K, O, H=F, P).
 5709existential_lookup(type_indexed_identifier_store(A, B), C, D, E, F, G, H, I, J, K) :-
 5710    !,
 5711    lookup_passive_head(type_indexed_identifier_store(A, B),
 5712                        C,
 5713                        D,
 5714                        E,
 5715                        F,
 5716                        L,
 5717                        M),
 5718    hash_index_filter(J, [A], K),
 5719    functor(C, N, O),
 5720    (   check_fd_lookup_condition(N, O, C, _)
 5721    ->  P=(M=[I])
 5722    ;   sbag_member_call(I, M, P)
 5723    ),
 5724    delay_phase_end(validate_store_type_assumptions,
 5725                    (static_suspension_term(N/O, G), get_static_suspension_field(N/O, G, state, active, Q))),
 5726    H=(L, P, I=G, Q).
 5727existential_lookup(A, B, C, D, E, F, G, H, I, I) :-
 5728    lookup_passive_head(A,
 5729                        B,
 5730                        C,
 5731                        D,
 5732                        E,
 5733                        J,
 5734                        K),
 5735    sbag_member_call(H, K, L),
 5736    functor(B, M, N),
 5737    delay_phase_end(validate_store_type_assumptions,
 5738                    (static_suspension_term(M/N, F), get_static_suspension_field(M/N, F, state, active, O))),
 5739    G=(J, L, H=F, O).
 5740existential_hash_lookup(A, B, C, D, E, F, G, H, I, J) :-
 5741    hash_lookup_passive_head(A,
 5742                             B,
 5743                             C,
 5744                             D,
 5745                             E,
 5746                             K,
 5747                             L,
 5748                             M),
 5749    hash_index_filter(I, M, J),
 5750    functor(C, N, O),
 5751    (   check_fd_lookup_condition(N, O, C, _)
 5752    ->  P=(L=[H])
 5753    ;   sbag_member_call(H, L, P)
 5754    ),
 5755    delay_phase_end(validate_store_type_assumptions,
 5756                    (static_suspension_term(N/O, F), get_static_suspension_field(N/O, F, state, active, Q))),
 5757    G=(K, P, H=F, Q).
 5758hash_index_filter(A, B, C) :-
 5759    hash_index_filter(A, B, 1, C).
 5760hash_index_filter([], _, _, []).
 5761hash_index_filter([A|B], C, D, E) :-
 5762    (   C=[F|G]
 5763    ->  H is D+1,
 5764        (   F>D
 5765        ->  E=[A|I],
 5766            hash_index_filter(B, [F|G], H, I)
 5767        ;   F==D
 5768        ->  E=[silent(A)|I],
 5769            hash_index_filter(B, G, H, I)
 5770        )
 5771    ;   E=[A|B]
 5772    ).
 5773assume_constraint_stores([]).
 5774assume_constraint_stores([A|B]) :-
 5775    (   chr_pp_flag(debugable, off),
 5776        (   only_ground_indexed_arguments(A)
 5777        ;   chr_pp_flag(mixed_stores, on)
 5778        ),
 5779        is_stored(A),
 5780        get_store_type(A, default)
 5781    ->  get_indexed_arguments(A, C),
 5782        get_constraint_mode(A, D),
 5783        aggregate_all(bag(E)-count,
 5784                      ( member(E, C),
 5785                        nth1(E, D, +)
 5786                      ),
 5787                      F-G),
 5788        (   G>10
 5789        ->  findall([E], member(E, F), H)
 5790        ;   findall(E,
 5791                    ( sublist(E, F),
 5792                      E\==[]
 5793                    ),
 5794                    I),
 5795            predsort(longer_list, I, H)
 5796        ),
 5797        (   get_functional_dependency(A, 1, J, K),
 5798            all_distinct_var_args(J),
 5799            K==[]
 5800        ->  assumed_store_type(A, global_singleton)
 5801        ;   (   only_ground_indexed_arguments(A)
 5802            ;   G>0
 5803            )
 5804        ->  get_constraint_type_det(A, L),
 5805            partition_indexes(H,
 5806                              L,
 5807                              M,
 5808                              N,
 5809                              O,
 5810                              P),
 5811            (   N=[]
 5812            ->  Q=R
 5813            ;   Q=[multi_inthash(N)|R]
 5814            ),
 5815            (   M=[]
 5816            ->  R=S
 5817            ;   R=[multi_hash(M)|S]
 5818            ),
 5819            (   O=[]
 5820            ->  S=T
 5821            ;   maplist(wrap_in_functor(identifier_store), O, U),
 5822                append(U, T, S)
 5823            ),
 5824            append(P, V, T),
 5825            (   only_ground_indexed_arguments(A)
 5826            ->  V=[global_ground]
 5827            ;   V=[default]
 5828            ),
 5829            assumed_store_type(A, multi_store(Q))
 5830        ;   true
 5831        )
 5832    ;   true
 5833    ),
 5834    assume_constraint_stores(B).
 5835partition_indexes([], _, [], [], [], []).
 5836partition_indexes([A|B], C, D, E, F, G) :-
 5837    (   A=[H],
 5838        nth1(H, C, I),
 5839        unalias_type(I, J),
 5840        J==chr_identifier
 5841    ->  F=[H|K],
 5842        E=L,
 5843        D=M,
 5844        G=N
 5845    ;   A=[H],
 5846        nth1(H, C, I),
 5847        unalias_type(I, J),
 5848        nonvar(J),
 5849        J=chr_identifier(O)
 5850    ->  G=[type_indexed_identifier_store(H, O)|N],
 5851        F=K,
 5852        E=L,
 5853        D=M
 5854    ;   A=[H],
 5855        nth1(H, C, I),
 5856        unalias_type(I, J),
 5857        J==dense_int
 5858    ->  E=[A|L],
 5859        D=M,
 5860        F=K,
 5861        G=N
 5862    ;   member(H, A),
 5863        nth1(H, C, I),
 5864        unalias_type(I, J),
 5865        nonvar(J),
 5866        J=chr_identifier(_)
 5867    ->  E=L,
 5868        D=M,
 5869        F=K,
 5870        G=N
 5871    ;   E=L,
 5872        D=[A|M],
 5873        F=K,
 5874        G=N
 5875    ),
 5876    partition_indexes(B, C, M, L, K, N).
 5877longer_list(A, B, C) :-
 5878    length(B, D),
 5879    length(C, E),
 5880    compare(F, E, D),
 5881    (   F==(=)
 5882    ->  compare(A, B, C)
 5883    ;   A=F
 5884    ).
 5885all_distinct_var_args(A) :-
 5886    copy_term_nat(A, B),
 5887    functor(A, C, D),
 5888    functor(E, C, D),
 5889    E=@=B.
 5890get_indexed_arguments(A, B) :-
 5891    A=_/C,
 5892    get_indexed_arguments(1, C, A, B).
 5893get_indexed_arguments(A, B, C, D) :-
 5894    (   A>B
 5895    ->  D=[]
 5896    ;   (   is_indexed_argument(C, A)
 5897        ->  D=[A|E]
 5898        ;   D=E
 5899        ),
 5900        F is A+1,
 5901        get_indexed_arguments(F, B, C, E)
 5902    ).
 5903validate_store_type_assumptions([]).
 5904validate_store_type_assumptions([A|B]) :-
 5905    validate_store_type_assumption(A),
 5906    validate_store_type_assumptions(B).
 5907universal_search_iterator_end([A|B], C, D, E/F, G, H, I, J) :-
 5908    D=rule(_, _, K, L),
 5909    gen_var_susp_list_for_b(B,
 5910                            [A, C, K, L],
 5911                            _,
 5912                            M,
 5913                            N,
 5914                            _,
 5915                            O),
 5916    universal_search_iterator_failure_vars(B,
 5917                                           H,
 5918                                           M,
 5919                                           N,
 5920                                           O,
 5921                                           P,
 5922                                           Q),
 5923    flatten(M, R),
 5924    S=[[]|R],
 5925    build_head(E, F, [G|H], S, T),
 5926    (   Q=[_]
 5927    ->  get_success_continuation_code_id(E/F, G, U),
 5928        V=[U]
 5929    ;   V=[G|Q]
 5930    ),
 5931    build_head(E, F, V, P, W),
 5932    X=(T:-W),
 5933    add_dummy_location(X, Y),
 5934    I=[Y|J].
 5935universal_search_iterator_failure_vars(A, B, C, D, E, F, G) :-
 5936    (   B=[0|_]
 5937    ->  next_id(B, G),
 5938        F=D
 5939    ;   C=[_|H],
 5940        dec_id(B, I),
 5941        (   A=[J|K],
 5942            functor(J, L, M),
 5943            check_fd_lookup_condition(L, M, J, K)
 5944        ->  E=[_|N],
 5945            universal_search_iterator_failure_vars(K,
 5946                                                   I,
 5947                                                   H,
 5948                                                   D,
 5949                                                   N,
 5950                                                   F,
 5951                                                   G)
 5952        ;   G=I,
 5953            flatten(H, O),
 5954            E=[P|_],
 5955            F=[P|O]
 5956        )
 5957    ).
 5958universal_search_iterator([A|B], [C|D], E, F/G, H, I, J, K) :-
 5959    E=rule(_, _, L, M),
 5960    gen_var_susp_list_for_b(D,
 5961                            [C, A, B, L, M],
 5962                            N,
 5963                            O,
 5964                            P,
 5965                            Q,
 5966                            R),
 5967    init(Q, S),
 5968    flatten(O, T),
 5969    gen_var(U),
 5970    functor(C, V, W),
 5971    gen_vars(W, X),
 5972    head_info(C, W, X, Y, _, Z),
 5973    get_constraint_mode(V/W, A1),
 5974    head_arg_matches(Z, A1, N, B1, C1),
 5975    delay_phase_end(validate_store_type_assumptions,
 5976                    (static_suspension_term(V/W, D1), get_static_suspension_field(V/W, D1, state, active, E1), get_static_suspension_term_field(arguments, V/W, D1, X))),
 5977    different_from_other_susps(C, Y, D, S, F1),
 5978    G1=(Y=D1, E1, F1, B1),
 5979    add_heads_ground_variables([C|D], [], H1),
 5980    lookup_passive_head(A,
 5981                        [C|D],
 5982                        C1,
 5983                        H1,
 5984                        I1,
 5985                        J1),
 5986    inc_id(I, K1),
 5987    L1=[[Y|U]|T],
 5988    build_head(F, G, [H|I], L1, M1),
 5989    passive_delegate_variables(C,
 5990                               D,
 5991                               [A, B, L, M],
 5992                               C1,
 5993                               N1),
 5994    append([J1|N1], [Y, U|T], O1),
 5995    build_head(F, G, [H|K1], O1, P1),
 5996    (   check_fd_lookup_condition(V, W, C, D)
 5997    ->  universal_search_iterator_failure_vars(D,
 5998                                               I,
 5999                                               O,
 6000                                               P,
 6001                                               R,
 6002                                               Q1,
 6003                                               R1),
 6004        S1=Q1
 6005    ;   S1=[U|T],
 6006        R1=I
 6007    ),
 6008    (   R1=[_]
 6009    ->  T1=R1
 6010    ;   T1=[H|R1]
 6011    ),
 6012    build_head(F, G, T1, S1, U1),
 6013    V1=(M1:-G1, I1->P1;U1),
 6014    add_dummy_location(V1, W1),
 6015    J=[W1|K].
 6016ai_observation_analysis(A) :-
 6017    (   chr_pp_flag(ai_observation_analysis, on),
 6018        get_target_module(_),
 6019        '$chr_compiled_with_version'(3)
 6020    ->  list_to_ord_set(A, B),
 6021        abstract_constraints(B),
 6022        ai_observation_schedule_initial_calls(B, B),
 6023        ai_observation_gather_results
 6024    ;   true
 6025    ).
 6026ai_observation_schedule_initial_calls([], _).
 6027ai_observation_schedule_initial_calls([A|B], C) :-
 6028    ai_observation_schedule_initial_call(A, C),
 6029    ai_observation_schedule_initial_calls(B, C).
 6030ai_observation_schedule_initial_call(A, _) :-
 6031    ai_observation_top(A, B),
 6032    initial_call_pattern(B).
 6033ai_observation_schedule_new_calls([], _).
 6034ai_observation_schedule_new_calls([A|B], C) :-
 6035    C=odom(_, D),
 6036    initial_call_pattern(odom(A, D)),
 6037    ai_observation_schedule_new_calls(B, C).
 6038ai_observation_lub(odom(A, B), odom(A, C), odom(A, D)) :-
 6039    ord_intersection(B, C, D).
 6040ai_observation_bot(A, B, odom(A, B)).
 6041ai_observation_top(A, odom(A, B)) :-
 6042    ord_empty(B).
 6043ai_observation_leq(odom(A, B), odom(A, C)) :-
 6044    ord_subset(C, B).
 6045ai_observation_observe_set(A, B, C) :-
 6046    ord_subtract(A, B, C).
 6047ai_observation_abstract_constraint(A, B, C) :-
 6048    functor(A, D, E),
 6049    C=D/E,
 6050    memberchk(C, B).
 6051ai_observation_abstract_constraints(A, B, C) :-
 6052    findall(D,
 6053            ( member(E, A),
 6054              ai_observation_abstract_constraint(E, B, D)
 6055            ),
 6056            C).
 6057ai_observation_abstract_goal_(A, B, C, D, E, F) :-
 6058    term_variables((A, B, C), G),
 6059    append(A, B, H),
 6060    ground_vars(H, I),
 6061    list_difference_eq(G, I, J),
 6062    ai_observation_abstract_goal(D, E, F, [], J),
 6063    !.
 6064ground_vars([], []).
 6065ground_vars([A|B], C) :-
 6066    functor(A, D, E),
 6067    get_constraint_mode(D/E, F),
 6068    head_info(A, E, _, _, _, G),
 6069    head_arg_matches(G, F, [], _, _, [], H),
 6070    ground_vars(B, I),
 6071    append(H, I, C).
 6072ai_observation_abstract_goal((A, B), C, D, E, F) :-
 6073    !,
 6074    ai_observation_abstract_goal(A, C, D, G, F),
 6075    ai_observation_abstract_goal(B, C, G, E, F).
 6076ai_observation_abstract_goal((A;B), C, [(D;E)|F], F, G) :-
 6077    !,
 6078    ai_observation_abstract_goal(A, C, D, [], G),
 6079    ai_observation_abstract_goal(B, C, E, [], G).
 6080ai_observation_abstract_goal((A->B), C, D, E, F) :-
 6081    !,
 6082    ai_observation_abstract_goal(A, C, D, G, F),
 6083    ai_observation_abstract_goal(B, C, G, E, F).
 6084ai_observation_abstract_goal(A, B, [C|D], D, _) :-
 6085    ai_observation_abstract_constraint(A, B, C),
 6086    !.
 6087ai_observation_abstract_goal(true, _, A, A, _) :-
 6088    !.
 6089ai_observation_abstract_goal(writeln(_), _, A, A, _) :-
 6090    !.
 6091ai_observation_abstract_goal(A, _, B, B, C) :-
 6092    builtin_binds_b(A, D),
 6093    intersect_eq(D, C, []),
 6094    !.
 6095ai_observation_abstract_goal(_, _, [A|B], B, _) :-
 6096    A=builtin.
 6097ai_observation_is_observed(odom(_, A), B) :-
 6098    \+ ord_memberchk(B, A).
 6099unconditional_occurrence(A, B) :-
 6100    get_occurrence(A, B, C, _),
 6101    get_rule(C, D),
 6102    D=pragma(E, _, _, _, _),
 6103    copy_term_nat(E, F),
 6104    F=rule(G, H, I, _),
 6105    guard_entailment:entails_guard([chr_pp_headvariables(G, H)], I),
 6106    once((   G=[J],
 6107             H==[]
 6108         ;   H=[J],
 6109             G==[],
 6110             \+ may_trigger(A)
 6111         )),
 6112    all_distinct_var_args(J).
 6113partial_wake_args([], _, _, _).
 6114partial_wake_args([A|B], [C|D], E, F) :-
 6115    (   C\==(+)
 6116    ->  (   nonvar(A)
 6117        ->  no_partial_wake(F)
 6118        ;   memberchk_eq(A, E)
 6119        ->  no_partial_wake(F)
 6120        ;   true
 6121        )
 6122    ;   true
 6123    ),
 6124    partial_wake_args(B, D, E, F).
 6125generate_show_constraint(A, B, C, D) :-
 6126    (   chr_pp_flag(show, on)
 6127    ->  B=['$show'/0|A],
 6128        generate_show_rules(A, D, [E|C]),
 6129        inc_rule_count(F),
 6130        E=pragma(rule(['$show'], [], true, true), ids([0], []), [], no, F)
 6131    ;   B=A,
 6132        D=C
 6133    ).
 6134generate_show_rules([], A, A).
 6135generate_show_rules([A/B|C], [D|E], F) :-
 6136    functor(G, A, B),
 6137    inc_rule_count(H),
 6138    D=pragma(rule([], ['$show', G], true, writeln(G)), ids([], [0, 1]), [passive(1)], no, H),
 6139    generate_show_rules(C, E, F).
 6140static_suspension_term(A/B, C) :-
 6141    suspension_term_base(A/B, D),
 6142    E is D+B,
 6143    functor(C, suspension, E).
 6144has_suspension_field(A, B) :-
 6145    suspension_term_base_fields(A, C),
 6146    memberchk(B, C).
 6147suspension_term_base(A, B) :-
 6148    suspension_term_base_fields(A, C),
 6149    length(C, B).
 6150suspension_term_base_fields(A, B) :-
 6151    (   chr_pp_flag(debugable, on)
 6152    ->  B=[id, state, history, generation, continuation, functor]
 6153    ;   (   uses_history(A)
 6154        ->  B=[id, state, history|C]
 6155        ;   only_ground_indexed_arguments(A),
 6156            get_functional_dependency(A, 1, _, _)
 6157        ->  B=[state|C]
 6158        ;   B=[id, state|C]
 6159        ),
 6160        (   only_ground_indexed_arguments(A)
 6161        ->  get_store_type(A, D),
 6162            basic_store_types(D, E),
 6163            (   memberchk(global_ground, E)
 6164            ->  C=[global_list_prev|F]
 6165            ;   C=F
 6166            ),
 6167            (   chr_pp_flag(ht_removal, on)
 6168            ->  ht_prev_fields(E, F)
 6169            ;   F=[]
 6170            )
 6171        ;   may_trigger(A)
 6172        ->  (   uses_field(A, generation)
 6173            ->  C=[generation, global_list_prev|F]
 6174            ;   C=[global_list_prev|F]
 6175            ),
 6176            (   chr_pp_flag(mixed_stores, on),
 6177                chr_pp_flag(ht_removal, on)
 6178            ->  get_store_type(A, D),
 6179                basic_store_types(D, E),
 6180                ht_prev_fields(E, F)
 6181            ;   F=[]
 6182            )
 6183        ;   C=[global_list_prev|F],
 6184            (   chr_pp_flag(mixed_stores, on),
 6185                chr_pp_flag(ht_removal, on)
 6186            ->  get_store_type(A, D),
 6187                basic_store_types(D, E),
 6188                ht_prev_fields(E, F)
 6189            ;   F=[]
 6190            )
 6191        )
 6192    ).
 6193ht_prev_fields(A, B) :-
 6194    ht_prev_fields_int(A, C),
 6195    append(C, B).
 6196ht_prev_fields_int([], []).
 6197ht_prev_fields_int([A|B], C) :-
 6198    (   A=multi_hash(D)
 6199    ->  maplist(ht_prev_field, D, E),
 6200        C=[E|F]
 6201    ;   C=F
 6202    ),
 6203    ht_prev_fields_int(B, F).
 6204ht_prev_field(A, B) :-
 6205    atomic_list_concat(['multi_hash_prev-'|A], B).
 6206get_static_suspension_term_field(A, B, C, D) :-
 6207    suspension_term_base_fields(B, E),
 6208    nth1(F, E, A),
 6209    !,
 6210    arg(F, C, D).
 6211get_static_suspension_term_field(arguments, A, B, C) :-
 6212    !,
 6213    suspension_term_base(A, D),
 6214    B=..[_|E],
 6215    drop(D, E, C).
 6216get_static_suspension_term_field(A, B, _, _) :-
 6217    chr_error(internal,
 6218              'Trying to obtain field ~w of ~w, wich does not have it!',
 6219              [A, B]).
 6220get_dynamic_suspension_term_field(A, B, C, D, E) :-
 6221    suspension_term_base_fields(B, F),
 6222    nth1(G, F, A),
 6223    !,
 6224    E=arg(G, C, D).
 6225get_dynamic_suspension_term_field(arguments, A, B, C, D) :-
 6226    !,
 6227    static_suspension_term(A, E),
 6228    get_static_suspension_term_field(arguments, A, E, C),
 6229    D=(B=E).
 6230get_dynamic_suspension_term_field(argument(A), B, C, D, E) :-
 6231    !,
 6232    suspension_term_base(B, F),
 6233    G is A+F,
 6234    E=arg(G, C, D).
 6235get_dynamic_suspension_term_field(A, B, _, _, _) :-
 6236    chr_error(internal,
 6237              'Dynamic goal to get ~w of ~w, which does not have this field!',
 6238              [A, B]).
 6239set_dynamic_suspension_term_field(A, B, C, D, E) :-
 6240    suspension_term_base_fields(B, F),
 6241    nth1(G, F, A),
 6242    !,
 6243    E=setarg(G, C, D).
 6244set_dynamic_suspension_term_field(A, B, _, _, _) :-
 6245    chr_error(internal,
 6246              'Dynamic goal to set ~w of ~w, which does not have this field!',
 6247              [A, B]).
 6248basic_store_types(multi_store(A), A) :-
 6249    !.
 6250basic_store_types(A, [A]).
 6251generate_never_stored_rules(A, B) :-
 6252    (   chr_pp_flag(declare_stored_constraints, on)
 6253    ->  never_stored_rules(A, B)
 6254    ;   B=[]
 6255    ).
 6256check_storedness_assertions(A) :-
 6257    (   chr_pp_flag(storage_analysis, on),
 6258        chr_pp_flag(declare_stored_constraints, on)
 6259    ->  forall(B, A, check_storedness_assertion(B))
 6260    ;   true
 6261    ).
 6262continuation_analysis(A) :-
 6263    maplist(analyse_continuations, A).
 6264analyse_continuations(A) :-
 6265    continuation_analysis(A, 1),
 6266    get_max_occurrence(A, B),
 6267    C is B+1,
 6268    bulk_propagation(A, 1, C),
 6269    set_occurrence_code_id(A, 1, 0).
 6270continuation_analysis(A, B) :-
 6271    get_max_occurrence(A, C),
 6272    (   B>C
 6273    ->  true
 6274    ;   B==C
 6275    ->  D is B+1,
 6276        continuation_occurrence(A, B, D)
 6277    ;   constraint_continuation(A, B, C, D),
 6278        continuation_occurrence(A, B, D),
 6279        E is B+1,
 6280        continuation_analysis(A, E)
 6281    ).
 6282constraint_continuation(A, B, C, D) :-
 6283    (   get_occurrence_head(A, B, E)
 6284    ->  F is B+1,
 6285        (   between(F, C, D),
 6286            get_occurrence_head(A, D, G),
 6287            unifiable(E, G, _)
 6288        ->  true
 6289        ;   D is C+1
 6290        )
 6291    ;   D=C
 6292    ).
 6293get_occurrence_head(A, B, C) :-
 6294    get_occurrence(A, B, D, E),
 6295    \+ is_passive(D, E),
 6296    get_rule(D, F),
 6297    F=pragma(rule(G, H, _, _), ids(I, J), _, _, _),
 6298    (   select2(E, C, I, G, _, _)
 6299    ->  true
 6300    ;   select2(E, C, J, H, _, _)
 6301    ).
 6302get_success_continuation_code_id(A, B, C) :-
 6303    get_success_continuation_occurrence(A, B, D),
 6304    get_occurrence_code_id(A, D, C).
 6305collect_constants(_, A, B, C) :-
 6306    (   not_restarted,
 6307        chr_pp_flag(experiment, on)
 6308    ->  (   chr_pp_flag(sss, on)
 6309        ->  D=[fep/4-[2, 3]-[[a, b]-fep1, [c, d]-fep2]-no],
 6310            copy_term_nat(C, E),
 6311            flatten_clauses(E, D, F),
 6312            install_new_declarations_and_restart(F)
 6313        ;   maplist(collect_rule_constants(B), A),
 6314            (   chr_pp_flag(verbose, on)
 6315            ->  print_chr_constants
 6316            ;   true
 6317            ),
 6318            (   chr_pp_flag(experiment, on)
 6319            ->  flattening_dictionary(B, D),
 6320                copy_term_nat(C, E),
 6321                flatten_clauses(E, D, F),
 6322                install_new_declarations_and_restart(F)
 6323            ;   true
 6324            )
 6325        )
 6326    ;   true
 6327    ).
 6328collect_rule_constants(A, B) :-
 6329    B=ast_rule(C, _, _, D, _),
 6330    collect_head_constants(C),
 6331    collect_body_constants(D, A).
 6332collect_head_constants(simplification(A)) :-
 6333    maplist(collect_constraint_constants, A).
 6334collect_head_constants(propagation(A)) :-
 6335    maplist(collect_constraint_constants, A).
 6336collect_head_constants(simpagation(A, B)) :-
 6337    maplist(collect_constraint_constants, A),
 6338    maplist(collect_constraint_constants, B).
 6339collect_body_constants(A, B) :-
 6340    maplist(collect_goal_constants(B), A).
 6341collect_goal_constants(A, B) :-
 6342    (   ast_nonvar(B)
 6343    ->  ast_symbol(B, C),
 6344        (   memberchk(C, A)
 6345        ->  ast_term_to_term(B, D),
 6346            ast_args(B, E),
 6347            collect_constraint_constants(chr_constraint(C,
 6348                                                        E,
 6349                                                        D))
 6350        ;   C==(:)/2,
 6351            ast_args(B, [F, G]),
 6352            F=atomic(H),
 6353            get_target_module(I),
 6354            H==I,
 6355            ast_nonvar(G),
 6356            ast_symbol(G, J),
 6357            memberchk(J, A)
 6358        ->  ast_term_to_term(G, K),
 6359            ast_args(G, L),
 6360            collect_constraint_constants(chr_constraint(J,
 6361                                                        L,
 6362                                                        K))
 6363        ;   true
 6364        )
 6365    ;   true
 6366    ).
 6367collect_constraint_constants(A) :-
 6368    A=chr_constraint(B, C, _),
 6369    get_constraint_type_det(B, D),
 6370    collect_all_arg_constants(C, D, []).
 6371collect_all_arg_constants([], [], A) :-
 6372    (   A\==[]
 6373    ->  add_chr_constants(A)
 6374    ;   true
 6375    ).
 6376collect_all_arg_constants([A|B], [C|D], E) :-
 6377    unalias_type(C, F),
 6378    (   is_chr_constants_type(F, G, _)
 6379    ->  (   ast_ground(A)
 6380        ->  ast_term_to_term(A, H),
 6381            collect_all_arg_constants(B,
 6382                                      D,
 6383                                      [G-H|E])
 6384        ;   true
 6385        )
 6386    ;   collect_all_arg_constants(B, D, E)
 6387    ).
 6388add_chr_constants(A) :-
 6389    keysort(A, B),
 6390    add_chr_constants_(B).
 6391flattening_dictionary([], []).
 6392flattening_dictionary([A|B], C) :-
 6393    (   flattening_dictionary_entry(A, D)
 6394    ->  C=[D|E]
 6395    ;   C=E
 6396    ),
 6397    flattening_dictionary(B, E).
 6398flattening_dictionary_entry(A, B) :-
 6399    get_constraint_type_det(A, C),
 6400    constant_positions(C, 1, D, E, F, G),
 6401    (   D\==[]
 6402    ->  pairup(E, H, I),
 6403        keysort(I, J),
 6404        B=A-D-K-F,
 6405        get_chr_constants(L),
 6406        findall(M,
 6407                ( member(J, L),
 6408                  flat_spec(A, D, H, M)
 6409                ),
 6410                K)
 6411    ;   G==yes
 6412    ->  enum_positions(C, 1, N, O, P),
 6413        B=A-N-K-P,
 6414        findall(M,
 6415                ( cartesian_product(Q, O),
 6416                  flat_spec(A, N, Q, M)
 6417                ),
 6418                K)
 6419    ).
 6420constant_positions([], _, [], [], no, no).
 6421constant_positions([A|B], C, D, E, F, G) :-
 6422    unalias_type(A, H),
 6423    (   is_chr_constants_type(H, I, J)
 6424    ->  compose_error_handlers(J, K, F),
 6425        D=[C|L],
 6426        E=[I|M],
 6427        G=N
 6428    ;   (   is_chr_enum_type(H, _, _)
 6429        ->  G=yes
 6430        ;   G=N
 6431        ),
 6432        L=D,
 6433        M=E,
 6434        K=F
 6435    ),
 6436    O is C+1,
 6437    constant_positions(B, O, L, M, K, N).
 6438compose_error_handlers(no, A, A).
 6439compose_error_handlers(yes(A), _, yes(A)).
 6440enum_positions([], _, [], [], no).
 6441enum_positions([A|B], C, D, E, F) :-
 6442    unalias_type(A, G),
 6443    (   is_chr_enum_type(G, H, I)
 6444    ->  compose_error_handlers(I, J, F),
 6445        D=[C|K],
 6446        E=[H|L]
 6447    ;   D=K,
 6448        E=L,
 6449        F=J
 6450    ),
 6451    M is C+1,
 6452    enum_positions(B, M, K, L, J).
 6453cartesian_product([], []).
 6454cartesian_product([A|B], [C|D]) :-
 6455    member(A, C),
 6456    cartesian_product(B, D).
 6457flat_spec(A/B, C, D, E) :-
 6458    E=D-F,
 6459    term_to_atom(D, G),
 6460    term_to_atom(C, H),
 6461    atom_concat_list(['$flat_', A, /, B, '___', H, '___', G],
 6462                     F).
 6463restart_after_flattening(A, A) :-
 6464    nb_setval('$chr_restart_after_flattening', started).
 6465restart_after_flattening(_, A) :-
 6466    nb_getval('$chr_restart_after_flattening', restart(A)),
 6467    nb_setval('$chr_restart_after_flattening', restarted).
 6468not_restarted :-
 6469    nb_getval('$chr_restart_after_flattening', started).
 6470install_new_declarations_and_restart(A) :-
 6471    nb_setval('$chr_restart_after_flattening', restart(A)),
 6472    fail.
 6473flatten_clauses(A, B, C) :-
 6474    flatten_readcontent(A,
 6475                        D,
 6476                        E,
 6477                        F,
 6478                        _,
 6479                        G,
 6480                        H),
 6481    flatten_clauses_(B, D, H, E, F, G, C).
 6482flatten_clauses_(A, B, C, D, E, F, G) :-
 6483    auxiliary_constraints_declarations(A, E, F, H),
 6484    dispatching_rules(A, I),
 6485    declarations(D, A, E, F, J),
 6486    flatten_rules(B, A, K),
 6487    append([C, H, I, J, K], G).
 6488declarations(A, B, C, D, E) :-
 6489    findall(F,
 6490            ( member(F, A),
 6491              \+ memberchk(F-_-_-_, B)
 6492            ),
 6493            G),
 6494    maplist(declaration(C, D), G, H),
 6495    flatten(H, E).
 6496declaration(A, B, C, [(:-chr_constraint C), (:-chr_option(mode, D)), (:-chr_option(type_declaration, E))]) :-
 6497    C=F/G,
 6498    functor(D, F, G),
 6499    (   memberchk(D, A)
 6500    ->  true
 6501    ;   replicate(G, ?, H),
 6502        D=..[_|H]
 6503    ),
 6504    functor(E, F, G),
 6505    (   memberchk(E, B)
 6506    ->  true
 6507    ;   replicate(G, any, I),
 6508        E=..[_|I]
 6509    ).
 6510flatten_readcontent([], [], [], [], [], [], []).
 6511flatten_readcontent([A|B], C, D, E, F, G, H) :-
 6512    (   A==end_of_file
 6513    ->  C=[],
 6514        D=[],
 6515        E=[],
 6516        G=[],
 6517        F=[],
 6518        H=[]
 6519    ;   crude_is_rule(A)
 6520    ->  C=[A|I],
 6521        flatten_readcontent(B,
 6522                            I,
 6523                            D,
 6524                            E,
 6525                            F,
 6526                            G,
 6527                            H)
 6528    ;   pure_is_declaration(A, J, K, L)
 6529    ->  append(J, M, D),
 6530        append(K, N, E),
 6531        append(L, O, G),
 6532        flatten_readcontent(B,
 6533                            C,
 6534                            M,
 6535                            N,
 6536                            F,
 6537                            O,
 6538                            H)
 6539    ;   is_mode_declaration(A, P)
 6540    ->  E=[P|N],
 6541        flatten_readcontent(B,
 6542                            C,
 6543                            D,
 6544                            N,
 6545                            F,
 6546                            G,
 6547                            H)
 6548    ;   is_type_declaration(A, Q)
 6549    ->  G=[Q|O],
 6550        flatten_readcontent(B,
 6551                            C,
 6552                            D,
 6553                            E,
 6554                            F,
 6555                            O,
 6556                            H)
 6557    ;   is_type_definition(A, R)
 6558    ->  H=[A|S],
 6559        F=[R|T],
 6560        flatten_readcontent(B,
 6561                            C,
 6562                            D,
 6563                            E,
 6564                            T,
 6565                            G,
 6566                            S)
 6567    ;   (   A=(:-op(U, V, W))
 6568        ->  op(U, V, W)
 6569        ;   true
 6570        ),
 6571        H=[A|S],
 6572        flatten_readcontent(B,
 6573                            C,
 6574                            D,
 6575                            E,
 6576                            F,
 6577                            G,
 6578                            S)
 6579    ).
 6580crude_is_rule(@(_, _)).
 6581crude_is_rule(pragma(_, _)).
 6582crude_is_rule(==>(_, _)).
 6583crude_is_rule(<=>(_, _)).
 6584pure_is_declaration(A, B, C, D) :-
 6585    A=(:-E),
 6586    E=..[F, G],
 6587    F==(chr_constraint),
 6588    conj2list(G, H),
 6589    pure_extract_type_mode(H, B, C, D).
 6590pure_extract_type_mode([], [], [], []).
 6591pure_extract_type_mode([A/B|C], [A/B|D], E, F) :-
 6592    !,
 6593    pure_extract_type_mode(C, D, E, F).
 6594pure_extract_type_mode([A|B], [C|D], [E|F], G) :-
 6595    functor(A, H, I),
 6596    C=H/I,
 6597    A=..[_|J],
 6598    extract_types_and_modes(J, K, L),
 6599    E=..[H|L],
 6600    (   forall(member(M, K), M==any)
 6601    ->  G=N
 6602    ;   G=[O|N],
 6603        O=..[H|K]
 6604    ),
 6605    pure_extract_type_mode(B, D, F, N).
 6606is_mode_declaration((:-chr_option(mode, A)), A).
 6607is_type_declaration((:-chr_option(type_declaration, A)), A).
 6608auxiliary_constraints_declarations(A, B, C, D) :-
 6609    findall(E,
 6610            auxiliary_constraints_declaration(A, B, C, E),
 6611            F),
 6612    flatten(F, D).
 6613auxiliary_constraints_declaration(A, B, C, [(:-chr_constraint D), (:-chr_option(mode, E)), (:-chr_option(type_declaration, F))]) :-
 6614    member(G/H-I-J-_, A),
 6615    arg_modes(G, H, B, K),
 6616    specialize_modes(K, I, L),
 6617    arg_types(G, H, C, M),
 6618    specialize_types(M, I, N),
 6619    length(I, O),
 6620    P is H-O,
 6621    member(_-Q, J),
 6622    D=Q/P,
 6623    E=..[Q|L],
 6624    F=..[Q|N].
 6625arg_modes(A, B, C, D) :-
 6626    functor(E, A, B),
 6627    (   memberchk(E, C)
 6628    ->  E=..[_|D]
 6629    ;   replicate(B, ?, D)
 6630    ).
 6631specialize_modes(A, B, C) :-
 6632    split_args(B, A, _, C).
 6633arg_types(A, B, C, D) :-
 6634    functor(E, A, B),
 6635    (   memberchk(E, C)
 6636    ->  E=..[_|D]
 6637    ;   replicate(B, any, D)
 6638    ).
 6639specialize_types(A, B, C) :-
 6640    split_args(B, A, _, C).
 6641dispatching_rules([], []).
 6642dispatching_rules([A-B-C-D|E], F) :-
 6643    constraint_dispatching_rule(C,
 6644                                A,
 6645                                B,
 6646                                D,
 6647                                F,
 6648                                G),
 6649    dispatching_rules(E, G).
 6650constraint_dispatching_rule(A, B/C, D, E, F, G) :-
 6651    (   increasing_numbers(D, 1)
 6652    ->  H=F,
 6653        I=B/C
 6654    ;   functor(J, B, C),
 6655        J=..[_|K],
 6656        split_args(D, K, L, M),
 6657        append(L, M, N),
 6658        atom_concat(B, '_$shuffled', O),
 6659        P=..[O|N],
 6660        [(J:-P)|H]=F,
 6661        I=O/C
 6662    ),
 6663    Q=swap(B, D),
 6664    dispatching_rule_term_cases(A,
 6665                                D,
 6666                                I,
 6667                                E,
 6668                                Q,
 6669                                H,
 6670                                G).
 6671increasing_numbers([], _).
 6672increasing_numbers([A|B], A) :-
 6673    C is A+1,
 6674    increasing_numbers(B, C).
 6675dispatching_rule_term_cases(A, B, C/D, E, F, G, H) :-
 6676    length(B, I),
 6677    once(pairup(J, K, A)),
 6678    maplist(head_tail, J, L, M),
 6679    N is D-I,
 6680    maplist(wrap_in_functor(dispatching_action), K, O),
 6681    dispatch_trie_index(L,
 6682                        M,
 6683                        N,
 6684                        E,
 6685                        F,
 6686                        O,
 6687                        C,
 6688                        G,
 6689                        H).
 6690dispatching_action(A, B, C) :-
 6691    C=..[A|B].
 6692dispatch_trie_index(A, B, C, D, E, F, G, H, I) :-
 6693    dispatch_trie_step(A,
 6694                       G,
 6695                       G,
 6696                       B,
 6697                       C,
 6698                       D,
 6699                       E,
 6700                       F,
 6701                       H,
 6702                       I).
 6703dispatch_trie_step([], _, _, _, [], _, _, [], A, A) :-
 6704    !.
 6705dispatch_trie_step(A, B, C, D, E, F, G, H, I, J) :-
 6706    D=[K|_],
 6707    length(K, L),
 6708    aggregate_all(set(M/N),
 6709                  ( member(O, A),
 6710                    functor(O, M, N)
 6711                  ),
 6712                  P),
 6713    Q is L+1,
 6714    dispatch_trie_step_cases(P,
 6715                             Q,
 6716                             A,
 6717                             D,
 6718                             E,
 6719                             F,
 6720                             G,
 6721                             H,
 6722                             B,
 6723                             C,
 6724                             I,
 6725                             J).
 6726dispatch_trie_step_cases([], A, _, _, B, C, D, _, E, _, F, G) :-
 6727    (   C=yes(H)
 6728    ->  F=[I|G],
 6729        I=(J:-K),
 6730        L is A+B,
 6731        functor(J, E, L),
 6732        reconstruct_original_term(D, J, M),
 6733        K=..[H, M]
 6734    ;   F=G
 6735    ).
 6736dispatch_trie_step_cases([A|B], C, D, E, F, G, H, I, J, K, L, M) :-
 6737    dispatch_trie_step_case(A,
 6738                            C,
 6739                            D,
 6740                            E,
 6741                            F,
 6742                            G,
 6743                            H,
 6744                            I,
 6745                            J,
 6746                            K,
 6747                            L,
 6748                            N),
 6749    dispatch_trie_step_cases(B,
 6750                             C,
 6751                             D,
 6752                             E,
 6753                             F,
 6754                             G,
 6755                             H,
 6756                             I,
 6757                             J,
 6758                             K,
 6759                             N,
 6760                             M).
 6761dispatch_trie_step_case(A/B, C, D, E, F, G, H, I, J, K, [L|M], N) :-
 6762    L=(O:-P, Q),
 6763    (   G=yes(_)
 6764    ->  P=!
 6765    ;   P=true
 6766    ),
 6767    R is C+F,
 6768    functor(O, J, R),
 6769    arg(1, O, S),
 6770    O=..[_, _|T],
 6771    length(U, F),
 6772    once(append(V, U, T)),
 6773    functor(S, A, B),
 6774    W=index_functor(A, B, H),
 6775    S=..[_|X],
 6776    append(X, T, Y),
 6777    (   Y==U
 6778    ->  M=N,
 6779        rec_cases(D,
 6780                  _,
 6781                  I,
 6782                  A/B,
 6783                  _,
 6784                  _,
 6785                  Z),
 6786        Z=[A1],
 6787        call(A1, U, Q)
 6788    ;   rec_cases(D,
 6789                  E,
 6790                  I,
 6791                  A/B,
 6792                  B1,
 6793                  C1,
 6794                  Z),
 6795        (   Z=[D1]
 6796        ->  C1=[E1],
 6797            append([B1, E1, U], Y),
 6798            M=N,
 6799            call(D1, U, Q)
 6800        ;   pairup(B1, C1, F1),
 6801            common_pattern(F1, G1, H1, I1),
 6802            append(X, V, [J1|K1]),
 6803            J1-K1=G1,
 6804            L1=gct([J1|K1], W),
 6805            fresh_symbol(K, M1),
 6806            append(H1, U, N1),
 6807            Q=..[M1|N1],
 6808            findall(O1-P1,
 6809                    member([O1|P1], I1),
 6810                    Q1),
 6811            once(pairup(R1, S1, Q1)),
 6812            dispatch_trie_step(R1,
 6813                               M1,
 6814                               K,
 6815                               S1,
 6816                               F,
 6817                               G,
 6818                               L1,
 6819                               Z,
 6820                               M,
 6821                               N)
 6822        )
 6823    ).
 6824split([A|B], C, D, E, F) :-
 6825    (   C==1
 6826    ->  D=[],
 6827        E=A,
 6828        F=B
 6829    ;   G is C-1,
 6830        D=[A|H],
 6831        split(B, G, H, E, F)
 6832    ).
 6833reconstruct_original_term(swap(A, B), C, D) :-
 6834    functor(C, _, E),
 6835    functor(D, A, E),
 6836    D=..[_|F],
 6837    split_args(B, F, G, H),
 6838    C=..[_|I],
 6839    append(G, H, I).
 6840reconstruct_original_term(index_functor(A, B, C), D, E) :-
 6841    D=..[F|G],
 6842    split_at(B, G, H, I),
 6843    J=..[A|H],
 6844    K=..[F, J|I],
 6845    reconstruct_original_term(C, K, E).
 6846reconstruct_original_term(gct(A, B), C, D) :-
 6847    copy_term_nat(A, E),
 6848    term_variables(E, F),
 6849    C=..[G|H],
 6850    append(F, I, H),
 6851    append(E, I, J),
 6852    K=..[G|J],
 6853    reconstruct_original_term(B, K, D).
 6854flatten_rules(A, B, C) :-
 6855    flatten_rules1(A, B, D),
 6856    flatten(D, C).
 6857flatten_rules1([], _, []).
 6858flatten_rules1([A|B], C, [D|E]) :-
 6859    findall(F, flatten_rule(A, C, F), D),
 6860    flatten_rules1(B, C, E).
 6861flatten_rule(@(A, B), C, @(A, D)) :-
 6862    !,
 6863    flatten_rule(B, C, D).
 6864flatten_rule(pragma(A, B), C, pragma(D, B)) :-
 6865    !,
 6866    flatten_rule(A, C, D).
 6867flatten_rule(==>(A, B), C, ==>(D, E)) :-
 6868    !,
 6869    flatten_heads(A, C, D),
 6870    flatten_body(B, C, E).
 6871flatten_rule(<=>(\(A, B), C), D, <=>(\(E, F), G)) :-
 6872    !,
 6873    flatten_heads((A, B), D, (E, F)),
 6874    flatten_body(C, D, G).
 6875flatten_rule(<=>(A, B), C, <=>(D, E)) :-
 6876    flatten_heads(A, C, D),
 6877    flatten_body(B, C, E).
 6878flatten_heads((A, B), C, (D, E)) :-
 6879    !,
 6880    flatten_heads(A, C, D),
 6881    flatten_heads(B, C, E).
 6882flatten_heads(#(A, B), C, #(D, B)) :-
 6883    !,
 6884    flatten_heads(A, C, D).
 6885flatten_heads(A, B, C) :-
 6886    (   functor(A, D, E),
 6887        memberchk(D/E-F-G-_, B)
 6888    ->  A=..[_|H],
 6889        split_args(F, H, I, J),
 6890        member(I-K, G),
 6891        C=..[K|J]
 6892    ;   C=A
 6893    ).
 6894flatten_body((A| B), C, (D| E)) :-
 6895    !,
 6896    conj2list(A, F),
 6897    maplist(flatten_goal(C), F, G),
 6898    list2conj(G, D),
 6899    conj2list(B, H),
 6900    maplist(flatten_goal(C), H, I),
 6901    list2conj(I, E).
 6902flatten_body(A, B, C) :-
 6903    conj2list(A, D),
 6904    maplist(flatten_goal(B), D, E),
 6905    list2conj(E, C).
 6906flatten_goal(_, A, B) :-
 6907    var(A),
 6908    !,
 6909    B=A.
 6910flatten_goal(A, B, C) :-
 6911    (   is_specializable_goal(B, A, D)
 6912    ->  specialize_goal(B, D, C)
 6913    ;   B=E:F,
 6914        get_target_module(G),
 6915        E==G,
 6916        nonvar(F),
 6917        is_specializable_goal(F, A, D)
 6918    ->  specialize_goal(F, D, H),
 6919        C=E:H
 6920    ;   partial_eval(B, C)
 6921    ->  true
 6922    ;   C=B
 6923    ).
 6924is_specializable_goal(A, B, C) :-
 6925    functor(A, D, E),
 6926    memberchk(D/E-C-_-_, B),
 6927    args(C, A, F),
 6928    ground(F).
 6929specialize_goal(A, B, C) :-
 6930    functor(A, D, E),
 6931    A=..[_|F],
 6932    split_args(B, F, G, H),
 6933    flat_spec(D/E, B, G, _-I),
 6934    C=..[I|H].
 6935partial_eval(append(A, B, C), D) :-
 6936    (   A==[]
 6937    ->  D=(C=B)
 6938    ;   B==[]
 6939    ->  D=(C=A)
 6940    ).
 6941partial_eval(flatten_path(A, B), C) :-
 6942    (   nonvar(A),
 6943        flatten(A, D),
 6944        D\==A
 6945    ->  C=flatten_path(D, B)
 6946    ).
 6947dump_code(A) :-
 6948    (   chr_pp_flag(dump, on)
 6949    ->  maplist(portray_clause, A)
 6950    ;   true
 6951    ).
 6952chr_banner :-
 6953    chr_info(banner,
 6954             '\tThe K.U.Leuven CHR System\n\t\tMain Developer:\tTom Schrijvers\n\t\tContributors:\tJon Sneyers, Bart Demoen, Jan Wielemaker\n\t\tCopyright:\tK.U.Leuven, Belgium\n\t\tURL:\t\thttp://www.cs.kuleuven.be/~~toms/CHR/\n',
 6955             []).
 6956chr_none_locked(A, B) :-
 6957    chr_pp_flag(guard_locks, C),
 6958    (   C==off
 6959    ->  B=true
 6960    ;   C==on
 6961    ->  B='chr none_locked'(A)
 6962    ;   C==error
 6963    ->  B='chr none_error_locked'(A)
 6964    ).
 6965chr_not_locked(A, B) :-
 6966    chr_pp_flag(guard_locks, C),
 6967    (   C==off
 6968    ->  B=true
 6969    ;   C==on
 6970    ->  B='chr not_locked'(A)
 6971    ;   C==error
 6972    ->  B='chr not_error_locked'(A)
 6973    ).
 6974chr_lock(A, B) :-
 6975    chr_pp_flag(guard_locks, C),
 6976    (   C==off
 6977    ->  B=true
 6978    ;   C==on
 6979    ->  B='chr lock'(A)
 6980    ;   C==error
 6981    ->  B='chr error_lock'(A)
 6982    ).
 6983chr_unlock(A, B) :-
 6984    chr_pp_flag(guard_locks, C),
 6985    (   C==off
 6986    ->  B=true
 6987    ;   C==on
 6988    ->  B='chr unlock'(A)
 6989    ;   C==error
 6990    ->  B='chr unerror_lock'(A)
 6991    ).
 6992term_to_ast_term(A, B, C, D) :-
 6993    (   atomic(A)
 6994    ->  B=atomic(A),
 6995        D=C
 6996    ;   compound(A)
 6997    ->  functor(A, E, F),
 6998        B=compound(E, F, G, A),
 6999        A=..[_|H],
 7000        maplist_dcg(chr_translate:term_to_ast_term,
 7001                    H,
 7002                    G,
 7003                    C,
 7004                    D)
 7005    ;   var(A)
 7006    ->  var_to_ast_term(A, C, B, D)
 7007    ).
 7008var_to_ast_term(A, B, C, D) :-
 7009    B=E-F,
 7010    (   lookup_eq(E, A, C)
 7011    ->  D=B
 7012    ;   C=var(F, A),
 7013        G is F+1,
 7014        H=[A-C|E],
 7015        D=H-G
 7016    ).
 7017chr_constraint_to_ast_constraint(A, B, C, D) :-
 7018    B=chr_constraint(E/F, G, A),
 7019    functor(A, E, F),
 7020    A=..[_|H],
 7021    maplist_dcg(chr_translate:term_to_ast_term,
 7022                H,
 7023                G,
 7024                C,
 7025                D).
 7026rule_to_ast_rule(A, B) :-
 7027    B=ast_rule(C, D, E, F, G),
 7028    A=rule(H, I, E, G),
 7029    J=[]-1,
 7030    (   H==[]
 7031    ->  C=propagation(K),
 7032        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7033                    I,
 7034                    K,
 7035                    J,
 7036                    L)
 7037    ;   I==[]
 7038    ->  C=simplification(K),
 7039        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7040                    H,
 7041                    K,
 7042                    J,
 7043                    L)
 7044    ;   C=simpagation(M, N),
 7045        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7046                    H,
 7047                    M,
 7048                    J,
 7049                    O),
 7050        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7051                    I,
 7052                    N,
 7053                    O,
 7054                    L)
 7055    ),
 7056    conj2list(E, P),
 7057    maplist_dcg(chr_translate:term_to_ast_term,
 7058                P,
 7059                D,
 7060                L,
 7061                Q),
 7062    conj2list(G, R),
 7063    maplist_dcg(chr_translate:term_to_ast_term,
 7064                R,
 7065                F,
 7066                Q,
 7067                _).
 7068pragma_rule_to_ast_rule(pragma(A, _, _, _, _), B) :-
 7069    rule_to_ast_rule(A, B).
 7070check_rule_to_ast_rule(A) :-
 7071    (   rule_to_ast_rule(A, B)
 7072    ->  writeln(B)
 7073    ;   writeln(failed(rule_to_ast_rule(A, B)))
 7074    ).
 7075ast_term_to_term(var(_, A), A).
 7076ast_term_to_term(atomic(A), A).
 7077ast_term_to_term(compound(_, _, _, A), A).
 7078ast_nonvar(atomic(_)).
 7079ast_nonvar(compound(_, _, _, _)).
 7080ast_ground(atomic(_)).
 7081ast_ground(compound(_, _, A, _)) :-
 7082    maplist(ast_ground, A).
 7083ast_is_ground(A, B) :-
 7084    ast_is_ground_(B, A).
 7085ast_is_ground_(var(A, _), B) :-
 7086    tree_set_memberchk(A, B).
 7087ast_is_ground_(atomic(_), _).
 7088ast_is_ground_(compound(_, _, A, _), B) :-
 7089    maplist(ast_is_ground(B), A).
 7090ast_functor(atomic(A), A, 0).
 7091ast_functor(compound(A, B, _, _), A, B).
 7092ast_symbol(atomic(A), A/0).
 7093ast_symbol(compound(A, B, _, _), A/B).
 7094ast_args(atomic(_), []).
 7095ast_args(compound(_, _, A, _), A).
 7096ast_term_variables(atomic(_), A, A).
 7097ast_term_variables(compound(_, _, A, _), B, C) :-
 7098    ast_term_list_variables(A, B, C).
 7099ast_term_variables(var(A, _), B, C) :-
 7100    tree_set_add(B, A, C).
 7101ast_term_list_variables(A, B, C) :-
 7102    fold(A, chr_translate:ast_term_variables, B, C).
 7103ast_constraint_variables(chr_constraint(_, A, _), B, C) :-
 7104    ast_term_list_variables(A, B, C).
 7105ast_constraint_list_variables(A, B, C) :-
 7106    fold(A, chr_translate:ast_constraint_variables, B, C).
 7107ast_head_variables(simplification(A), B, C) :-
 7108    ast_constraint_list_variables(A, B, C).
 7109ast_head_variables(propagation(A), B, C) :-
 7110    ast_constraint_list_variables(A, B, C).
 7111ast_head_variables(simpagation(A, B), C, D) :-
 7112    ast_constraint_list_variables(A, C, E),
 7113    ast_constraint_list_variables(B, E, D).
 7114ast_var_memberchk(var(A, _), B) :-
 7115    tree_set_memberchk(A, B).
 7116ast_instantiate(A, B, C) :-
 7117    ast_instantiate_(B, A, C).
 7118ast_instantiate_(var(A, _), B, C) :-
 7119    get_assoc(A, B, C).
 7120ast_instantiate_(atomic(A), _, A).
 7121ast_instantiate_(compound(A, B, C, _), D, E) :-
 7122    functor(E, A, B),
 7123    E=..[_|F],
 7124    maplist(ast_instantiate(D), C, F).
 7125ast_head_arg_matches_([], [], A, B, [], A, B).
 7126ast_head_arg_matches_([silent(A-_)|B], [C|D], E, F, G, H, I) :-
 7127    !,
 7128    (   C==(+)
 7129    ->  ast_term_variables(A, J, F),
 7130        ast_head_arg_matches_(B,
 7131                              D,
 7132                              E,
 7133                              J,
 7134                              G,
 7135                              H,
 7136                              I)
 7137    ;   ast_head_arg_matches_(B,
 7138                              D,
 7139                              E,
 7140                              F,
 7141                              G,
 7142                              H,
 7143                              I)
 7144    ).
 7145ast_head_arg_matches_([A-B|C], [D|E], F, G, H, I, J) :-
 7146    (   A=var(K, _)
 7147    ->  (   get_assoc(K, F, L)
 7148        ->  (   D=(+)
 7149            ->  (   tree_set_memberchk(K, G)
 7150                ->  H=[B=L|M],
 7151                    N=G
 7152                ;   H=[B==L|M],
 7153                    tree_set_add(G, K, N)
 7154                )
 7155            ;   H=[B==L|M],
 7156                N=G
 7157            ),
 7158            O=F
 7159        ;   put_assoc(K, F, B, O),
 7160            H=M,
 7161            (   D=(+)
 7162            ->  tree_set_add(G, K, N)
 7163            ;   N=G
 7164            )
 7165        ),
 7166        P=C,
 7167        Q=E
 7168    ;   ground(A),
 7169        A='$chr_identifier_match'(R, S)
 7170    ->  identifier_label_atom(S, B, R, T),
 7171        H=[T|M],
 7172        F=O,
 7173        N=G,
 7174        P=C,
 7175        Q=E
 7176    ;   A=atomic(U)
 7177    ->  (   D=(+)
 7178        ->  H=[B=U|M]
 7179        ;   H=[B==U|M]
 7180        ),
 7181        F=O,
 7182        N=G,
 7183        P=C,
 7184        Q=E
 7185    ;   D==(+),
 7186        ast_is_ground(G, A)
 7187    ->  ast_instantiate(F, A, V),
 7188        H=[B=V|M],
 7189        F=O,
 7190        N=G,
 7191        P=C,
 7192        Q=E
 7193    ;   D==(?),
 7194        ast_is_ground(G, A)
 7195    ->  ast_instantiate(F, A, V),
 7196        H=[B==V|M],
 7197        F=O,
 7198        N=G,
 7199        P=C,
 7200        Q=E
 7201    ;   A=compound(W, X, Y, _),
 7202        functor(Z, W, X),
 7203        Z=..[_|A1],
 7204        (   D=(+)
 7205        ->  H=[B=Z|M]
 7206        ;   H=[nonvar(B), B=Z|M]
 7207        ),
 7208        pairup(Y, A1, B1),
 7209        append(B1, C, P),
 7210        replicate(_, D, C1),
 7211        append(C1, E, Q),
 7212        O=F,
 7213        N=G
 7214    ),
 7215    ast_head_arg_matches_(P,
 7216                          Q,
 7217                          O,
 7218                          N,
 7219                          M,
 7220                          I,
 7221                          J).
 7222:- use_module(chr(chr_runtime)). 7223:- use_module(chr(chr_hashtable_store)). 7224attach_generate_empty_named_history_initialisation___1([], _).
 7225attach_generate_empty_named_history_initialisation___1([A|B], C) :-
 7226    (   get_attr(A, chr_translate, D)
 7227    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7228        (   E/\1=:=1
 7229        ->  P=v(E, [C|F], G, H, I, J, K, L, M, N, O)
 7230        ;   Q is E\/1,
 7231            P=v(Q, [C], G, H, I, J, K, L, M, N, O)
 7232        ),
 7233        put_attr(A, chr_translate, P)
 7234    ;   put_attr(A,
 7235                 chr_translate,
 7236                 v(1, [C], [], [], [], [], [], [], [], [], []))
 7237    ),
 7238    attach_generate_empty_named_history_initialisation___1(B, C).
 7239detach_generate_empty_named_history_initialisation___1([], _).
 7240detach_generate_empty_named_history_initialisation___1([A|B], C) :-
 7241    (   get_attr(A, chr_translate, D)
 7242    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7243        (   E/\1=:=1
 7244        ->  'chr sbag_del_element'(F, C, P),
 7245            (   P==[]
 7246            ->  Q is E/\ -2,
 7247                (   Q==0
 7248                ->  del_attr(A, chr_translate)
 7249                ;   put_attr(A,
 7250                             chr_translate,
 7251                             v(Q,
 7252                               [],
 7253                               G,
 7254                               H,
 7255                               I,
 7256                               J,
 7257                               K,
 7258                               L,
 7259                               M,
 7260                               N,
 7261                               O))
 7262                )
 7263            ;   put_attr(A,
 7264                         chr_translate,
 7265                         v(E,
 7266                           P,
 7267                           G,
 7268                           H,
 7269                           I,
 7270                           J,
 7271                           K,
 7272                           L,
 7273                           M,
 7274                           N,
 7275                           O))
 7276            )
 7277        ;   true
 7278        )
 7279    ;   true
 7280    ),
 7281    detach_generate_empty_named_history_initialisation___1(B, C).
 7282attach_symbol_count___2([], _).
 7283attach_symbol_count___2([A|B], C) :-
 7284    (   get_attr(A, chr_translate, D)
 7285    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7286        (   E/\2=:=2
 7287        ->  P=v(E, F, [C|G], H, I, J, K, L, M, N, O)
 7288        ;   Q is E\/2,
 7289            P=v(Q, F, [C], H, I, J, K, L, M, N, O)
 7290        ),
 7291        put_attr(A, chr_translate, P)
 7292    ;   put_attr(A,
 7293                 chr_translate,
 7294                 v(2, [], [C], [], [], [], [], [], [], [], []))
 7295    ),
 7296    attach_symbol_count___2(B, C).
 7297detach_symbol_count___2([], _).
 7298detach_symbol_count___2([A|B], C) :-
 7299    (   get_attr(A, chr_translate, D)
 7300    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7301        (   E/\2=:=2
 7302        ->  'chr sbag_del_element'(G, C, P),
 7303            (   P==[]
 7304            ->  Q is E/\ -3,
 7305                (   Q==0
 7306                ->  del_attr(A, chr_translate)
 7307                ;   put_attr(A,
 7308                             chr_translate,
 7309                             v(Q,
 7310                               F,
 7311                               [],
 7312                               H,
 7313                               I,
 7314                               J,
 7315                               K,
 7316                               L,
 7317                               M,
 7318                               N,
 7319                               O))
 7320                )
 7321            ;   put_attr(A,
 7322                         chr_translate,
 7323                         v(E,
 7324                           F,
 7325                           P,
 7326                           H,
 7327                           I,
 7328                           J,
 7329                           K,
 7330                           L,
 7331                           M,
 7332                           N,
 7333                           O))
 7334            )
 7335        ;   true
 7336        )
 7337    ;   true
 7338    ),
 7339    detach_symbol_count___2(B, C).
 7340attach_fresh_symbol___2([], _).
 7341attach_fresh_symbol___2([A|B], C) :-
 7342    (   get_attr(A, chr_translate, D)
 7343    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7344        (   E/\4=:=4
 7345        ->  P=v(E, F, G, [C|H], I, J, K, L, M, N, O)
 7346        ;   Q is E\/4,
 7347            P=v(Q, F, G, [C], I, J, K, L, M, N, O)
 7348        ),
 7349        put_attr(A, chr_translate, P)
 7350    ;   put_attr(A,
 7351                 chr_translate,
 7352                 v(4, [], [], [C], [], [], [], [], [], [], []))
 7353    ),
 7354    attach_fresh_symbol___2(B, C).
 7355detach_fresh_symbol___2([], _).
 7356detach_fresh_symbol___2([A|B], C) :-
 7357    (   get_attr(A, chr_translate, D)
 7358    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7359        (   E/\4=:=4
 7360        ->  'chr sbag_del_element'(H, C, P),
 7361            (   P==[]
 7362            ->  Q is E/\ -5,
 7363                (   Q==0
 7364                ->  del_attr(A, chr_translate)
 7365                ;   put_attr(A,
 7366                             chr_translate,
 7367                             v(Q,
 7368                               F,
 7369                               G,
 7370                               [],
 7371                               I,
 7372                               J,
 7373                               K,
 7374                               L,
 7375                               M,
 7376                               N,
 7377                               O))
 7378                )
 7379            ;   put_attr(A,
 7380                         chr_translate,
 7381                         v(E,
 7382                           F,
 7383                           G,
 7384                           P,
 7385                           I,
 7386                           J,
 7387                           K,
 7388                           L,
 7389                           M,
 7390                           N,
 7391                           O))
 7392            )
 7393        ;   true
 7394        )
 7395    ;   true
 7396    ),
 7397    detach_fresh_symbol___2(B, C).
 7398attach_background_info___2([], _).
 7399attach_background_info___2([A|B], C) :-
 7400    (   get_attr(A, chr_translate, D)
 7401    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7402        (   E/\8=:=8
 7403        ->  P=v(E, F, G, H, [C|I], J, K, L, M, N, O)
 7404        ;   Q is E\/8,
 7405            P=v(Q, F, G, H, [C], J, K, L, M, N, O)
 7406        ),
 7407        put_attr(A, chr_translate, P)
 7408    ;   put_attr(A,
 7409                 chr_translate,
 7410                 v(8, [], [], [], [C], [], [], [], [], [], []))
 7411    ),
 7412    attach_background_info___2(B, C).
 7413detach_background_info___2([], _).
 7414detach_background_info___2([A|B], C) :-
 7415    (   get_attr(A, chr_translate, D)
 7416    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7417        (   E/\8=:=8
 7418        ->  'chr sbag_del_element'(I, C, P),
 7419            (   P==[]
 7420            ->  Q is E/\ -9,
 7421                (   Q==0
 7422                ->  del_attr(A, chr_translate)
 7423                ;   put_attr(A,
 7424                             chr_translate,
 7425                             v(Q,
 7426                               F,
 7427                               G,
 7428                               H,
 7429                               [],
 7430                               J,
 7431                               K,
 7432                               L,
 7433                               M,
 7434                               N,
 7435                               O))
 7436                )
 7437            ;   put_attr(A,
 7438                         chr_translate,
 7439                         v(E,
 7440                           F,
 7441                           G,
 7442                           H,
 7443                           P,
 7444                           J,
 7445                           K,
 7446                           L,
 7447                           M,
 7448                           N,
 7449                           O))
 7450            )
 7451        ;   true
 7452        )
 7453    ;   true
 7454    ),
 7455    detach_background_info___2(B, C).
 7456attach_get_bg_info___2([], _).
 7457attach_get_bg_info___2([A|B], C) :-
 7458    (   get_attr(A, chr_translate, D)
 7459    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7460        (   E/\16=:=16
 7461        ->  P=v(E, F, G, H, I, [C|J], K, L, M, N, O)
 7462        ;   Q is E\/16,
 7463            P=v(Q, F, G, H, I, [C], K, L, M, N, O)
 7464        ),
 7465        put_attr(A, chr_translate, P)
 7466    ;   put_attr(A,
 7467                 chr_translate,
 7468                 v(16, [], [], [], [], [C], [], [], [], [], []))
 7469    ),
 7470    attach_get_bg_info___2(B, C).
 7471detach_get_bg_info___2([], _).
 7472detach_get_bg_info___2([A|B], C) :-
 7473    (   get_attr(A, chr_translate, D)
 7474    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7475        (   E/\16=:=16
 7476        ->  'chr sbag_del_element'(J, C, P),
 7477            (   P==[]
 7478            ->  Q is E/\ -17,
 7479                (   Q==0
 7480                ->  del_attr(A, chr_translate)
 7481                ;   put_attr(A,
 7482                             chr_translate,
 7483                             v(Q,
 7484                               F,
 7485                               G,
 7486                               H,
 7487                               I,
 7488                               [],
 7489                               K,
 7490                               L,
 7491                               M,
 7492                               N,
 7493                               O))
 7494                )
 7495            ;   put_attr(A,
 7496                         chr_translate,
 7497                         v(E,
 7498                           F,
 7499                           G,
 7500                           H,
 7501                           I,
 7502                           P,
 7503                           K,
 7504                           L,
 7505                           M,
 7506                           N,
 7507                           O))
 7508            )
 7509        ;   true
 7510        )
 7511    ;   true
 7512    ),
 7513    detach_get_bg_info___2(B, C).
 7514attach_type_definition___2([], _).
 7515attach_type_definition___2([A|B], C) :-
 7516    (   get_attr(A, chr_translate, D)
 7517    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7518        (   E/\32=:=32
 7519        ->  P=v(E, F, G, H, I, J, [C|K], L, M, N, O)
 7520        ;   Q is E\/32,
 7521            P=v(Q, F, G, H, I, J, [C], L, M, N, O)
 7522        ),
 7523        put_attr(A, chr_translate, P)
 7524    ;   put_attr(A,
 7525                 chr_translate,
 7526                 v(32, [], [], [], [], [], [C], [], [], [], []))
 7527    ),
 7528    attach_type_definition___2(B, C).
 7529detach_type_definition___2([], _).
 7530detach_type_definition___2([A|B], C) :-
 7531    (   get_attr(A, chr_translate, D)
 7532    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7533        (   E/\32=:=32
 7534        ->  'chr sbag_del_element'(K, C, P),
 7535            (   P==[]
 7536            ->  Q is E/\ -33,
 7537                (   Q==0
 7538                ->  del_attr(A, chr_translate)
 7539                ;   put_attr(A,
 7540                             chr_translate,
 7541                             v(Q,
 7542                               F,
 7543                               G,
 7544                               H,
 7545                               I,
 7546                               J,
 7547                               [],
 7548                               L,
 7549                               M,
 7550                               N,
 7551                               O))
 7552                )
 7553            ;   put_attr(A,
 7554                         chr_translate,
 7555                         v(E,
 7556                           F,
 7557                           G,
 7558                           H,
 7559                           I,
 7560                           J,
 7561                           P,
 7562                           L,
 7563                           M,
 7564                           N,
 7565                           O))
 7566            )
 7567        ;   true
 7568        )
 7569    ;   true
 7570    ),
 7571    detach_type_definition___2(B, C).
 7572attach_type_alias___2([], _).
 7573attach_type_alias___2([A|B], C) :-
 7574    (   get_attr(A, chr_translate, D)
 7575    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7576        (   E/\64=:=64
 7577        ->  P=v(E, F, G, H, I, J, K, [C|L], M, N, O)
 7578        ;   Q is E\/64,
 7579            P=v(Q, F, G, H, I, J, K, [C], M, N, O)
 7580        ),
 7581        put_attr(A, chr_translate, P)
 7582    ;   put_attr(A,
 7583                 chr_translate,
 7584                 v(64, [], [], [], [], [], [], [C], [], [], []))
 7585    ),
 7586    attach_type_alias___2(B, C).
 7587detach_type_alias___2([], _).
 7588detach_type_alias___2([A|B], C) :-
 7589    (   get_attr(A, chr_translate, D)
 7590    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7591        (   E/\64=:=64
 7592        ->  'chr sbag_del_element'(L, C, P),
 7593            (   P==[]
 7594            ->  Q is E/\ -65,
 7595                (   Q==0
 7596                ->  del_attr(A, chr_translate)
 7597                ;   put_attr(A,
 7598                             chr_translate,
 7599                             v(Q,
 7600                               F,
 7601                               G,
 7602                               H,
 7603                               I,
 7604                               J,
 7605                               K,
 7606                               [],
 7607                               M,
 7608                               N,
 7609                               O))
 7610                )
 7611            ;   put_attr(A,
 7612                         chr_translate,
 7613                         v(E,
 7614                           F,
 7615                           G,
 7616                           H,
 7617                           I,
 7618                           J,
 7619                           K,
 7620                           P,
 7621                           M,
 7622                           N,
 7623                           O))
 7624            )
 7625        ;   true
 7626        )
 7627    ;   true
 7628    ),
 7629    detach_type_alias___2(B, C).
 7630attach_unalias_type___2([], _).
 7631attach_unalias_type___2([A|B], C) :-
 7632    (   get_attr(A, chr_translate, D)
 7633    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7634        (   E/\128=:=128
 7635        ->  P=v(E, F, G, H, I, J, K, L, [C|M], N, O)
 7636        ;   Q is E\/128,
 7637            P=v(Q, F, G, H, I, J, K, L, [C], N, O)
 7638        ),
 7639        put_attr(A, chr_translate, P)
 7640    ;   put_attr(A,
 7641                 chr_translate,
 7642                 v(128, [], [], [], [], [], [], [], [C], [], []))
 7643    ),
 7644    attach_unalias_type___2(B, C).
 7645detach_unalias_type___2([], _).
 7646detach_unalias_type___2([A|B], C) :-
 7647    (   get_attr(A, chr_translate, D)
 7648    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7649        (   E/\128=:=128
 7650        ->  'chr sbag_del_element'(M, C, P),
 7651            (   P==[]
 7652            ->  Q is E/\ -129,
 7653                (   Q==0
 7654                ->  del_attr(A, chr_translate)
 7655                ;   put_attr(A,
 7656                             chr_translate,
 7657                             v(Q,
 7658                               F,
 7659                               G,
 7660                               H,
 7661                               I,
 7662                               J,
 7663                               K,
 7664                               L,
 7665                               [],
 7666                               N,
 7667                               O))
 7668                )
 7669            ;   put_attr(A,
 7670                         chr_translate,
 7671                         v(E,
 7672                           F,
 7673                           G,
 7674                           H,
 7675                           I,
 7676                           J,
 7677                           K,
 7678                           L,
 7679                           P,
 7680                           N,
 7681                           O))
 7682            )
 7683        ;   true
 7684        )
 7685    ;   true
 7686    ),
 7687    detach_unalias_type___2(B, C).
 7688attach_ast_static_type_check_var___4([], _).
 7689attach_ast_static_type_check_var___4([A|B], C) :-
 7690    (   get_attr(A, chr_translate, D)
 7691    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7692        (   E/\256=:=256
 7693        ->  P=v(E, F, G, H, I, J, K, L, M, [C|N], O)
 7694        ;   Q is E\/256,
 7695            P=v(Q, F, G, H, I, J, K, L, M, [C], O)
 7696        ),
 7697        put_attr(A, chr_translate, P)
 7698    ;   put_attr(A,
 7699                 chr_translate,
 7700                 v(256, [], [], [], [], [], [], [], [], [C], []))
 7701    ),
 7702    attach_ast_static_type_check_var___4(B, C).
 7703detach_ast_static_type_check_var___4([], _).
 7704detach_ast_static_type_check_var___4([A|B], C) :-
 7705    (   get_attr(A, chr_translate, D)
 7706    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7707        (   E/\256=:=256
 7708        ->  'chr sbag_del_element'(N, C, P),
 7709            (   P==[]
 7710            ->  Q is E/\ -257,
 7711                (   Q==0
 7712                ->  del_attr(A, chr_translate)
 7713                ;   put_attr(A,
 7714                             chr_translate,
 7715                             v(Q,
 7716                               F,
 7717                               G,
 7718                               H,
 7719                               I,
 7720                               J,
 7721                               K,
 7722                               L,
 7723                               M,
 7724                               [],
 7725                               O))
 7726                )
 7727            ;   put_attr(A,
 7728                         chr_translate,
 7729                         v(E,
 7730                           F,
 7731                           G,
 7732                           H,
 7733                           I,
 7734                           J,
 7735                           K,
 7736                           L,
 7737                           M,
 7738                           P,
 7739                           O))
 7740            )
 7741        ;   true
 7742        )
 7743    ;   true
 7744    ),
 7745    detach_ast_static_type_check_var___4(B, C).
 7746attach_atomic_type___1([], _).
 7747attach_atomic_type___1([A|B], C) :-
 7748    (   get_attr(A, chr_translate, D)
 7749    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7750        (   E/\512=:=512
 7751        ->  P=v(E, F, G, H, I, J, K, L, M, N, [C|O])
 7752        ;   Q is E\/512,
 7753            P=v(Q, F, G, H, I, J, K, L, M, N, [C])
 7754        ),
 7755        put_attr(A, chr_translate, P)
 7756    ;   put_attr(A,
 7757                 chr_translate,
 7758                 v(512, [], [], [], [], [], [], [], [], [], [C]))
 7759    ),
 7760    attach_atomic_type___1(B, C).
 7761detach_atomic_type___1([], _).
 7762detach_atomic_type___1([A|B], C) :-
 7763    (   get_attr(A, chr_translate, D)
 7764    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7765        (   E/\512=:=512
 7766        ->  'chr sbag_del_element'(O, C, P),
 7767            (   P==[]
 7768            ->  Q is E/\ -513,
 7769                (   Q==0
 7770                ->  del_attr(A, chr_translate)
 7771                ;   put_attr(A,
 7772                             chr_translate,
 7773                             v(Q,
 7774                               F,
 7775                               G,
 7776                               H,
 7777                               I,
 7778                               J,
 7779                               K,
 7780                               L,
 7781                               M,
 7782                               N,
 7783                               []))
 7784                )
 7785            ;   put_attr(A,
 7786                         chr_translate,
 7787                         v(E,
 7788                           F,
 7789                           G,
 7790                           H,
 7791                           I,
 7792                           J,
 7793                           K,
 7794                           L,
 7795                           M,
 7796                           N,
 7797                           P))
 7798            )
 7799        ;   true
 7800        )
 7801    ;   true
 7802    ),
 7803    detach_atomic_type___1(B, C).
 7804attach_increment([], _).
 7805attach_increment([A|B], C) :-
 7806    (   get_attr(A, chr_translate, D)
 7807    ->  C=v(E, F, G, H, I, J, K, L, M, N, O),
 7808        D=v(P, Q, R, S, T, U, V, W, X, Y, Z),
 7809        ( sort(Q, A1),
 7810          'chr merge_attributes'(F, A1, B1),
 7811          sort(R, C1),
 7812          'chr merge_attributes'(G, C1, D1),
 7813          sort(S, E1),
 7814          'chr merge_attributes'(H, E1, F1),
 7815          sort(T, G1),
 7816          'chr merge_attributes'(I, G1, H1),
 7817          sort(U, I1),
 7818          'chr merge_attributes'(J, I1, J1),
 7819          sort(V, K1),
 7820          'chr merge_attributes'(K, K1, L1),
 7821          sort(W, M1),
 7822          'chr merge_attributes'(L, M1, N1),
 7823          sort(X, O1),
 7824          'chr merge_attributes'(M, O1, P1),
 7825          sort(Y, Q1),
 7826          'chr merge_attributes'(N, Q1, R1),
 7827          sort(Z, S1),
 7828          'chr merge_attributes'(O, S1, T1)
 7829        ),
 7830        U1 is E\/P,
 7831        put_attr(A,
 7832                 chr_translate,
 7833                 v(U1,
 7834                   B1,
 7835                   D1,
 7836                   F1,
 7837                   H1,
 7838                   J1,
 7839                   L1,
 7840                   N1,
 7841                   P1,
 7842                   R1,
 7843                   T1))
 7844    ;   put_attr(A, chr_translate, C)
 7845    ),
 7846    attach_increment(B, C).
 7847attribute_goals(_, A, A).
 7848attr_unify_hook(v(A, B, C, D, E, F, G, H, I, J, K), L) :-
 7849    sort(B, M),
 7850    sort(C, N),
 7851    sort(D, O),
 7852    sort(E, P),
 7853    sort(F, Q),
 7854    sort(G, R),
 7855    sort(H, S),
 7856    sort(I, T),
 7857    sort(J, U),
 7858    sort(K, V),
 7859    (   var(L)
 7860    ->  (   get_attr(L, chr_translate, W)
 7861        ->  W=v(X, Y, Z, A1, B1, C1, D1, E1, F1, G1, H1),
 7862            ( sort(Y, I1),
 7863              'chr merge_attributes'(M, I1, J1),
 7864              sort(Z, K1),
 7865              'chr merge_attributes'(N, K1, L1),
 7866              sort(A1, M1),
 7867              'chr merge_attributes'(O, M1, N1),
 7868              sort(B1, O1),
 7869              'chr merge_attributes'(P, O1, P1),
 7870              sort(C1, Q1),
 7871              'chr merge_attributes'(Q, Q1, R1),
 7872              sort(D1, S1),
 7873              'chr merge_attributes'(R, S1, T1),
 7874              sort(E1, U1),
 7875              'chr merge_attributes'(S, U1, V1),
 7876              sort(F1, W1),
 7877              'chr merge_attributes'(T, W1, X1),
 7878              sort(G1, Y1),
 7879              'chr merge_attributes'(U, Y1, Z1),
 7880              sort(H1, A2),
 7881              'chr merge_attributes'(V, A2, B2)
 7882            ),
 7883            C2 is A\/X,
 7884            put_attr(L,
 7885                     chr_translate,
 7886                     v(C2,
 7887                       J1,
 7888                       L1,
 7889                       N1,
 7890                       P1,
 7891                       R1,
 7892                       T1,
 7893                       V1,
 7894                       X1,
 7895                       Z1,
 7896                       B2)),
 7897            '$run_suspensions_generate_empty_named_history_initialisation___1'(M),
 7898            '$run_suspensions_symbol_count___2'(N),
 7899            '$run_suspensions_fresh_symbol___2'(O),
 7900            '$run_suspensions_background_info___2'(P1),
 7901            '$run_suspensions_get_bg_info___2'(R1),
 7902            '$run_suspensions_type_definition___2'(T1),
 7903            '$run_suspensions_type_alias___2'(V1),
 7904            '$run_suspensions_unalias_type___2'(X1),
 7905            '$run_suspensions_ast_static_type_check_var___4'(Z1),
 7906            '$run_suspensions_atomic_type___1'(B2)
 7907        ;   put_attr(L,
 7908                     chr_translate,
 7909                     v(A,
 7910                       M,
 7911                       N,
 7912                       O,
 7913                       P,
 7914                       Q,
 7915                       R,
 7916                       S,
 7917                       T,
 7918                       U,
 7919                       V)),
 7920            '$run_suspensions_generate_empty_named_history_initialisation___1'(M),
 7921            '$run_suspensions_symbol_count___2'(N),
 7922            '$run_suspensions_fresh_symbol___2'(O),
 7923            '$run_suspensions_background_info___2'(P),
 7924            '$run_suspensions_get_bg_info___2'(Q),
 7925            '$run_suspensions_type_definition___2'(R),
 7926            '$run_suspensions_type_alias___2'(S),
 7927            '$run_suspensions_unalias_type___2'(T),
 7928            '$run_suspensions_ast_static_type_check_var___4'(U),
 7929            '$run_suspensions_atomic_type___1'(V)
 7930        )
 7931    ;   (   compound(L)
 7932        ->  term_variables(L, D2),
 7933            attach_increment(D2,
 7934                             v(A,
 7935                               M,
 7936                               N,
 7937                               O,
 7938                               P,
 7939                               Q,
 7940                               R,
 7941                               S,
 7942                               T,
 7943                               U,
 7944                               V))
 7945        ;   true
 7946        ),
 7947        '$run_suspensions_generate_empty_named_history_initialisation___1'(M),
 7948        '$run_suspensions_symbol_count___2'(N),
 7949        '$run_suspensions_fresh_symbol___2'(O),
 7950        '$run_suspensions_background_info___2'(P),
 7951        '$run_suspensions_get_bg_info___2'(Q),
 7952        '$run_suspensions_type_definition___2'(R),
 7953        '$run_suspensions_type_alias___2'(S),
 7954        '$run_suspensions_unalias_type___2'(T),
 7955        '$run_suspensions_ast_static_type_check_var___4'(U),
 7956        '$run_suspensions_atomic_type___1'(V)
 7957    ).
 7958'$novel_production'(A, B) :-
 7959    arg(3, A, C),
 7960    (   hprolog:get_ds(B, C, _)
 7961    ->  fail
 7962    ;   true
 7963    ).
 7964'$extend_history'(A, B) :-
 7965    arg(3, A, C),
 7966    hprolog:put_ds(B, C, x, D),
 7967    setarg(3, A, D).
 7968'$run_suspensions_generate_empty_named_history_initialisation___1'([]).
 7969'$run_suspensions_generate_empty_named_history_initialisation___1'([A|B]) :-
 7970    A=suspension(_, C, D, _, E),
 7971    (   C==active
 7972    ->  setarg(2, A, triggered),
 7973        F is D+1,
 7974        setarg(3, A, F),
 7975        generate_empty_named_history_initialisation___1__0(E, A),
 7976        (   C==triggered
 7977        ->  setarg(2, A, active)
 7978        ;   true
 7979        )
 7980    ;   true
 7981    ),
 7982    '$run_suspensions_generate_empty_named_history_initialisation___1'(B).
 7983'$run_suspensions_symbol_count___2'([]).
 7984'$run_suspensions_symbol_count___2'([A|B]) :-
 7985    A=suspension(_, C, _, D, E),
 7986    (   C==active
 7987    ->  setarg(2, A, triggered),
 7988        symbol_count___2__0(D, E, A),
 7989        (   C==triggered
 7990        ->  setarg(2, A, active)
 7991        ;   true
 7992        )
 7993    ;   true
 7994    ),
 7995    '$run_suspensions_symbol_count___2'(B).
 7996'$run_suspensions_fresh_symbol___2'([]).
 7997'$run_suspensions_fresh_symbol___2'([A|B]) :-
 7998    A=suspension(_, C, _, D, _, E, F),
 7999    (   C==active
 8000    ->  setarg(2, A, triggered),
 8001        G is D+1,
 8002        setarg(4, A, G),
 8003        fresh_symbol___2__0(E, F, A),
 8004        (   C==triggered
 8005        ->  setarg(2, A, active)
 8006        ;   true
 8007        )
 8008    ;   true
 8009    ),
 8010    '$run_suspensions_fresh_symbol___2'(B).
 8011'$run_suspensions_background_info___2'([]).
 8012'$run_suspensions_background_info___2'([A|B]) :-
 8013    A=suspension(_, C, _, D, _, E, F),
 8014    setarg(2, A, triggered),
 8015    G is D+1,
 8016    setarg(4, A, G),
 8017    background_info___2__0(E, F, A),
 8018    (   C==triggered
 8019    ->  setarg(2, A, active)
 8020    ;   true
 8021    ),
 8022    '$run_suspensions_background_info___2'(B).
 8023'$run_suspensions_get_bg_info___2'([]).
 8024'$run_suspensions_get_bg_info___2'([A|B]) :-
 8025    A=suspension(_, C, _, D, _, E, F),
 8026    (   C==active
 8027    ->  setarg(2, A, triggered),
 8028        G is D+1,
 8029        setarg(4, A, G),
 8030        get_bg_info___2__0(E, F, A),
 8031        (   C==triggered
 8032        ->  setarg(2, A, active)
 8033        ;   true
 8034        )
 8035    ;   true
 8036    ),
 8037    '$run_suspensions_get_bg_info___2'(B).
 8038'$run_suspensions_type_definition___2'([]).
 8039'$run_suspensions_type_definition___2'([A|B]) :-
 8040    A=suspension(_, C, _, D, _, E, F),
 8041    (   C==active
 8042    ->  setarg(2, A, triggered),
 8043        G is D+1,
 8044        setarg(4, A, G),
 8045        type_definition___2__0(E, F, A),
 8046        (   C==triggered
 8047        ->  setarg(2, A, active)
 8048        ;   true
 8049        )
 8050    ;   true
 8051    ),
 8052    '$run_suspensions_type_definition___2'(B).
 8053'$run_suspensions_type_alias___2'([]).
 8054'$run_suspensions_type_alias___2'([A|B]) :-
 8055    A=suspension(_, C, _, D, _, E, F),
 8056    (   C==active
 8057    ->  setarg(2, A, triggered),
 8058        G is D+1,
 8059        setarg(4, A, G),
 8060        type_alias___2__0(E, F, A),
 8061        (   C==triggered
 8062        ->  setarg(2, A, active)
 8063        ;   true
 8064        )
 8065    ;   true
 8066    ),
 8067    '$run_suspensions_type_alias___2'(B).
 8068'$run_suspensions_unalias_type___2'([]).
 8069'$run_suspensions_unalias_type___2'([A|B]) :-
 8070    A=suspension(_, C, _, D, E),
 8071    (   C==active
 8072    ->  setarg(2, A, triggered),
 8073        unalias_type___2__0(D, E, A),
 8074        (   C==triggered
 8075        ->  setarg(2, A, active)
 8076        ;   true
 8077        )
 8078    ;   true
 8079    ),
 8080    '$run_suspensions_unalias_type___2'(B).
 8081'$run_suspensions_ast_static_type_check_var___4'([]).
 8082'$run_suspensions_ast_static_type_check_var___4'([A|B]) :-
 8083    A=suspension(_, C, _, D, E, F, G),
 8084    (   C==active
 8085    ->  setarg(2, A, triggered),
 8086        ast_static_type_check_var___4__0(D,
 8087                                         E,
 8088                                         F,
 8089                                         G,
 8090                                         A),
 8091        (   C==triggered
 8092        ->  setarg(2, A, active)
 8093        ;   true
 8094        )
 8095    ;   true
 8096    ),
 8097    '$run_suspensions_ast_static_type_check_var___4'(B).
 8098'$run_suspensions_atomic_type___1'([]).
 8099'$run_suspensions_atomic_type___1'([A|B]) :-
 8100    A=suspension(_, C, _, D),
 8101    (   C==active
 8102    ->  setarg(2, A, triggered),
 8103        atomic_type___1__0(D, A),
 8104        (   C==triggered
 8105        ->  setarg(2, A, active)
 8106        ;   true
 8107        )
 8108    ;   true
 8109    ),
 8110    '$run_suspensions_atomic_type___1'(B).
 8111'$enumerate_constraints'(A) :-
 8112    (   nonvar(A)
 8113    ->  functor(A, B, _),
 8114        '$enumerate_constraints'(B, A)
 8115    ;   '$enumerate_constraints'(_, A)
 8116    ).
 8117'$enumerate_constraints'(chr_source_file, A) :-
 8118    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 8119              B),
 8120    member(C, B),
 8121    C=suspension(_, _, _, D),
 8122    A=chr_source_file(D).
 8123'$enumerate_constraints'(target_module, A) :-
 8124    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 8125              B),
 8126    member(C, B),
 8127    C=suspension(_, _, _, D),
 8128    A=target_module(D).
 8129'$enumerate_constraints'(source_location, A) :-
 8130    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 8131              B),
 8132    value_ht(B, C),
 8133    C=suspension(_, _, D, E),
 8134    A=source_location(D, E).
 8135'$enumerate_constraints'(indexed_argument, A) :-
 8136    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 8137              B),
 8138    value_ht(B, C),
 8139    C=suspension(_, _, D, E),
 8140    A=indexed_argument(D, E).
 8141'$enumerate_constraints'(constraint_mode, A) :-
 8142    nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 8143              B),
 8144    member(C, B),
 8145    C=suspension(_, _, _, _, D, E),
 8146    A=constraint_mode(D, E).
 8147'$enumerate_constraints'(none_suspended_on_variables, A) :-
 8148    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
 8149              B),
 8150    member(C, B),
 8151    C=suspension(_, _, _),
 8152    A=none_suspended_on_variables.
 8153'$enumerate_constraints'(store_type, A) :-
 8154    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', B),
 8155    value_ht(B, C),
 8156    C=suspension(_, _, D, E),
 8157    A=store_type(D, E).
 8158'$enumerate_constraints'(actual_store_types, A) :-
 8159    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
 8160              B),
 8161    value_ht(B, C),
 8162    C=suspension(_, _, D, E),
 8163    A=actual_store_types(D, E).
 8164'$enumerate_constraints'(assumed_store_type, A) :-
 8165    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
 8166              B),
 8167    value_ht(B, C),
 8168    C=suspension(_, _, D, E),
 8169    A=assumed_store_type(D, E).
 8170'$enumerate_constraints'(validate_store_type_assumption, A) :-
 8171    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
 8172              B),
 8173    value_ht(B, C),
 8174    C=suspension(_, _, D),
 8175    A=validate_store_type_assumption(D).
 8176'$enumerate_constraints'(rule_count, A) :-
 8177    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
 8178              B),
 8179    member(C, B),
 8180    C=suspension(_, _, _, D),
 8181    A=rule_count(D).
 8182'$enumerate_constraints'(passive, A) :-
 8183    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', B),
 8184    value_ht(B, C),
 8185    C=suspension(_, _, _, D, E),
 8186    A=passive(D, E).
 8187'$enumerate_constraints'(occurrence, A) :-
 8188    nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
 8189              B),
 8190    member(C, B),
 8191    C=suspension(_, _, _, _, D, E, F, G, H),
 8192    A=occurrence(D, E, F, G, H).
 8193'$enumerate_constraints'(max_occurrence, A) :-
 8194    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
 8195              B),
 8196    value_ht(B, C),
 8197    C=suspension(_, _, _, D, E),
 8198    A=max_occurrence(D, E).
 8199'$enumerate_constraints'(allocation_occurrence, A) :-
 8200    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
 8201              B),
 8202    value_ht(B, C),
 8203    C=suspension(_, _, _, D, E),
 8204    A=allocation_occurrence(D, E).
 8205'$enumerate_constraints'(rule, A) :-
 8206    nb_getval('$chr_store_global_ground_chr_translate____rule___2', B),
 8207    member(C, B),
 8208    C=suspension(_, _, _, _, D, E),
 8209    A=rule(D, E).
 8210'$enumerate_constraints'(least_occurrence, A) :-
 8211    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
 8212              B),
 8213    value_ht(B, C),
 8214    C=suspension(_, _, D, E),
 8215    A=least_occurrence(D, E).
 8216'$enumerate_constraints'(constraint_index, A) :-
 8217    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
 8218              B),
 8219    value_ht(B, C),
 8220    C=suspension(_, _, D, E),
 8221    A=constraint_index(D, E).
 8222'$enumerate_constraints'(max_constraint_index, A) :-
 8223    nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
 8224              B),
 8225    member(C, B),
 8226    C=suspension(_, _, _, D),
 8227    A=max_constraint_index(D).
 8228'$enumerate_constraints'(identifier_size, A) :-
 8229    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
 8230              B),
 8231    member(C, B),
 8232    C=suspension(_, _, _, D),
 8233    A=identifier_size(D).
 8234'$enumerate_constraints'(identifier_index, A) :-
 8235    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
 8236              B),
 8237    value_ht(B, C),
 8238    C=suspension(_, _, D, E, F),
 8239    A=identifier_index(D, E, F).
 8240'$enumerate_constraints'(type_indexed_identifier_size, A) :-
 8241    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
 8242              B),
 8243    value_ht(B, C),
 8244    C=suspension(_, _, D, E),
 8245    A=type_indexed_identifier_size(D, E).
 8246'$enumerate_constraints'(type_indexed_identifier_index, A) :-
 8247    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
 8248              B),
 8249    value_ht(B, C),
 8250    C=suspension(_, _, D, E, F, G),
 8251    A=type_indexed_identifier_index(D, E, F, G).
 8252'$enumerate_constraints'(no_history, A) :-
 8253    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', B),
 8254    value_ht(B, C),
 8255    C=suspension(_, _, D),
 8256    A=no_history(D).
 8257'$enumerate_constraints'(history, A) :-
 8258    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', B),
 8259    value_ht(B, C),
 8260    C=suspension(_, _, _, D, E, F),
 8261    A=history(D, E, F).
 8262'$enumerate_constraints'(indexing_spec, A) :-
 8263    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
 8264              B),
 8265    value_ht(B, C),
 8266    C=suspension(_, _, D, E),
 8267    A=indexing_spec(D, E).
 8268'$enumerate_constraints'(observation_analysis, A) :-
 8269    nb_getval('$chr_store_global_ground_chr_translate____observation_analysis___1',
 8270              B),
 8271    member(C, B),
 8272    C=suspension(_, _, _, D),
 8273    A=observation_analysis(D).
 8274'$enumerate_constraints'(spawns, A) :-
 8275    nb_getval('$chr_store_global_ground_chr_translate____spawns___3', B),
 8276    member(C, B),
 8277    C=suspension(_, _, _, _, D, E, F),
 8278    A=spawns(D, E, F).
 8279'$enumerate_constraints'(spawns_all, A) :-
 8280    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1', B),
 8281    value_ht(B, C),
 8282    C=suspension(_, _, D, E),
 8283    A=spawns_all(D, E).
 8284'$enumerate_constraints'(spawns_all_triggers, A) :-
 8285    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
 8286              B),
 8287    member(C, B),
 8288    C=suspension(_, _, _, _, D, E),
 8289    A=spawns_all_triggers(D, E).
 8290'$enumerate_constraints'(spawns_all_triggers_implies_spawns_all, A) :-
 8291    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
 8292              B),
 8293    member(C, B),
 8294    C=suspension(_, _, _),
 8295    A=spawns_all_triggers_implies_spawns_all.
 8296'$enumerate_constraints'(empty_named_history_initialisations, A) :-
 8297    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
 8298              B),
 8299    member(C, B),
 8300    C=suspension(_, _, _, D, E),
 8301    A=empty_named_history_initialisations(D, E).
 8302'$enumerate_constraints'(generate_empty_named_history_initialisation, A) :-
 8303    nb_current('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
 8304               B),
 8305    member(C, B),
 8306    C=suspension(_, _, _, _, D),
 8307    A=generate_empty_named_history_initialisation(D).
 8308'$enumerate_constraints'(find_empty_named_histories, A) :-
 8309    nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
 8310              B),
 8311    member(C, B),
 8312    C=suspension(_, _, _, _),
 8313    A=find_empty_named_histories.
 8314'$enumerate_constraints'(module_initializer, A) :-
 8315    nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
 8316              B),
 8317    member(C, B),
 8318    C=suspension(_, _, _, D),
 8319    A=module_initializer(D).
 8320'$enumerate_constraints'(actual_atomic_multi_hash_keys, A) :-
 8321    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
 8322              B),
 8323    value_ht(B, C),
 8324    C=suspension(_, _, D, E, F),
 8325    A=actual_atomic_multi_hash_keys(D, E, F).
 8326'$enumerate_constraints'(actual_ground_multi_hash_keys, A) :-
 8327    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
 8328              B),
 8329    value_ht(B, C),
 8330    C=suspension(_, _, D, E, F),
 8331    A=actual_ground_multi_hash_keys(D, E, F).
 8332'$enumerate_constraints'(actual_non_ground_multi_hash_key, A) :-
 8333    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
 8334              B),
 8335    value_ht(B, C),
 8336    C=suspension(_, _, D, E),
 8337    A=actual_non_ground_multi_hash_key(D, E).
 8338'$enumerate_constraints'(symbol_count, A) :-
 8339    nb_current('$chr_store_global_list_chr_translate____symbol_count___2',
 8340               B),
 8341    member(C, B),
 8342    C=suspension(_, _, _, D, E),
 8343    A=symbol_count(D, E).
 8344'$enumerate_constraints'(fresh_symbol, A) :-
 8345    nb_current('$chr_store_global_list_chr_translate____fresh_symbol___2',
 8346               B),
 8347    member(C, B),
 8348    C=suspension(_, _, _, _, _, D, E),
 8349    A=fresh_symbol(D, E).
 8350'$enumerate_constraints'(prolog_global_variable, A) :-
 8351    nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
 8352              B),
 8353    member(C, B),
 8354    C=suspension(_, _, _, D),
 8355    A=prolog_global_variable(D).
 8356'$enumerate_constraints'(background_info, A) :-
 8357    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
 8358              B),
 8359    member(C, B),
 8360    C=suspension(_, _, _, D),
 8361    A=background_info(D).
 8362'$enumerate_constraints'(background_info, A) :-
 8363    nb_current('$chr_store_global_list_chr_translate____background_info___2',
 8364               B),
 8365    member(C, B),
 8366    C=suspension(_, _, _, _, _, D, E),
 8367    A=background_info(D, E).
 8368'$enumerate_constraints'(get_bg_info, A) :-
 8369    nb_current('$chr_store_global_list_chr_translate____get_bg_info___2',
 8370               B),
 8371    member(C, B),
 8372    C=suspension(_, _, _, _, _, D, E),
 8373    A=get_bg_info(D, E).
 8374'$enumerate_constraints'(get_bg_info_answer, A) :-
 8375    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
 8376              B),
 8377    member(C, B),
 8378    C=suspension(_, _, _, D),
 8379    A=get_bg_info_answer(D).
 8380'$enumerate_constraints'(prev_guard_list, A) :-
 8381    nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
 8382              B),
 8383    member(C, B),
 8384    C=suspension(_, _, _, _, D, E, F, G, H, I),
 8385    A=prev_guard_list(D, E, F, G, H, I).
 8386'$enumerate_constraints'(set_all_passive, A) :-
 8387    nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
 8388              B),
 8389    value_ht(B, C),
 8390    C=suspension(_, _, _, D),
 8391    A=set_all_passive(D).
 8392'$enumerate_constraints'(precompute_head_matchings, A) :-
 8393    nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
 8394              B),
 8395    member(C, B),
 8396    C=suspension(_, _, _, _),
 8397    A=precompute_head_matchings.
 8398'$enumerate_constraints'(make_head_matchings_explicit_memo_table, A) :-
 8399    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
 8400              B),
 8401    value_ht(B, C),
 8402    C=suspension(_, _, D, E, F),
 8403    A=make_head_matchings_explicit_memo_table(D, E, F).
 8404'$enumerate_constraints'(multiple_occ_constraints_checked, A) :-
 8405    nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
 8406              B),
 8407    member(C, B),
 8408    C=suspension(_, _, _, D),
 8409    A=multiple_occ_constraints_checked(D).
 8410'$enumerate_constraints'(type_definition, A) :-
 8411    nb_current('$chr_store_global_list_chr_translate____type_definition___2',
 8412               B),
 8413    member(C, B),
 8414    C=suspension(_, _, _, _, _, D, E),
 8415    A=type_definition(D, E).
 8416'$enumerate_constraints'(type_alias, A) :-
 8417    nb_current('$chr_store_global_list_chr_translate____type_alias___2', B),
 8418    member(C, B),
 8419    C=suspension(_, _, _, _, _, D, E),
 8420    A=type_alias(D, E).
 8421'$enumerate_constraints'(constraint_type, A) :-
 8422    nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
 8423              B),
 8424    member(C, B),
 8425    C=suspension(_, _, _, D, E),
 8426    A=constraint_type(D, E).
 8427'$enumerate_constraints'(unalias_type, A) :-
 8428    nb_current('$chr_store_global_list_chr_translate____unalias_type___2',
 8429               B),
 8430    member(C, B),
 8431    C=suspension(_, _, _, D, E),
 8432    A=unalias_type(D, E).
 8433'$enumerate_constraints'(types_modes_condition, A) :-
 8434    nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 8435              B),
 8436    member(C, B),
 8437    C=suspension(_, _, _, D, E, F),
 8438    A=types_modes_condition(D, E, F).
 8439'$enumerate_constraints'(static_type_check, A) :-
 8440    nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
 8441              B),
 8442    member(C, B),
 8443    C=suspension(_, _, _, D, E),
 8444    A=static_type_check(D, E).
 8445'$enumerate_constraints'(ast_static_type_check_var, A) :-
 8446    nb_current('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
 8447               B),
 8448    member(C, B),
 8449    C=suspension(_, _, _, D, E, F, G),
 8450    A=ast_static_type_check_var(D, E, F, G).
 8451'$enumerate_constraints'(ast_static_atomic_builtin_type_check_var, A) :-
 8452    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
 8453              B),
 8454    value_ht(B, C),
 8455    C=suspension(_, _, D, E, F, G),
 8456    A=ast_static_atomic_builtin_type_check_var(D, E, F, G).
 8457'$enumerate_constraints'(dynamic_type_check, A) :-
 8458    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
 8459              B),
 8460    member(C, B),
 8461    C=suspension(_, _, _, _),
 8462    A=dynamic_type_check.
 8463'$enumerate_constraints'(dynamic_type_check_clauses, A) :-
 8464    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
 8465              B),
 8466    member(C, B),
 8467    C=suspension(_, _, _, D),
 8468    A=dynamic_type_check_clauses(D).
 8469'$enumerate_constraints'(atomic_type, A) :-
 8470    nb_current('$chr_store_global_list_chr_translate____atomic_type___1',
 8471               B),
 8472    member(C, B),
 8473    C=suspension(_, _, _, D),
 8474    A=atomic_type(D).
 8475'$enumerate_constraints'(stored, A) :-
 8476    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', B),
 8477    value_ht(B, C),
 8478    C=suspension(_, _, D, E, F),
 8479    A=stored(D, E, F).
 8480'$enumerate_constraints'(stored_complete, A) :-
 8481    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
 8482              B),
 8483    value_ht(B, C),
 8484    C=suspension(_, _, _, D, E, F),
 8485    A=stored_complete(D, E, F).
 8486'$enumerate_constraints'(check_all_passive, A) :-
 8487    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
 8488              B),
 8489    value_ht(B, C),
 8490    C=suspension(_, _, D, E),
 8491    A=check_all_passive(D, E).
 8492'$enumerate_constraints'(constraints_code1, A) :-
 8493    nb_getval('$chr_store_global_ground_chr_translate____constraints_code1___3',
 8494              B),
 8495    member(C, B),
 8496    C=suspension(_, _, _, D, E, F),
 8497    A=constraints_code1(D, E, F).
 8498'$enumerate_constraints'(memo_has_active_occurrence, A) :-
 8499    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
 8500              B),
 8501    value_ht(B, C),
 8502    C=suspension(_, _, D),
 8503    A=memo_has_active_occurrence(D).
 8504'$enumerate_constraints'(use_auxiliary_predicate, A) :-
 8505    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
 8506              B),
 8507    value_ht(B, C),
 8508    C=suspension(_, _, D),
 8509    A=use_auxiliary_predicate(D).
 8510'$enumerate_constraints'(use_auxiliary_predicate, A) :-
 8511    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
 8512              B),
 8513    value_ht(B, C),
 8514    C=suspension(_, _, D, E),
 8515    A=use_auxiliary_predicate(D, E).
 8516'$enumerate_constraints'(use_auxiliary_module, A) :-
 8517    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
 8518              B),
 8519    value_ht(B, C),
 8520    C=suspension(_, _, D),
 8521    A=use_auxiliary_module(D).
 8522'$enumerate_constraints'(functional_dependency, A) :-
 8523    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
 8524              B),
 8525    value_ht(B, C),
 8526    C=suspension(_, _, D, E, F, G),
 8527    A=functional_dependency(D, E, F, G).
 8528'$enumerate_constraints'(initial_call_pattern, A) :-
 8529    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
 8530              B),
 8531    value_ht(B, C),
 8532    C=suspension(_, _, _, D),
 8533    A=initial_call_pattern(D).
 8534'$enumerate_constraints'(call_pattern, A) :-
 8535    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
 8536              B),
 8537    value_ht(B, C),
 8538    C=suspension(_, _, D),
 8539    A=call_pattern(D).
 8540'$enumerate_constraints'(final_answer_pattern, A) :-
 8541    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
 8542              B),
 8543    value_ht(B, C),
 8544    C=suspension(_, _, _, D, E),
 8545    A=final_answer_pattern(D, E).
 8546'$enumerate_constraints'(abstract_constraints, A) :-
 8547    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
 8548              B),
 8549    member(C, B),
 8550    C=suspension(_, _, _, D),
 8551    A=abstract_constraints(D).
 8552'$enumerate_constraints'(depends_on, A) :-
 8553    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1', B),
 8554    value_ht(B, C),
 8555    C=suspension(_, _, _, D, E),
 8556    A=depends_on(D, E).
 8557'$enumerate_constraints'(depends_on_ap, A) :-
 8558    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
 8559              B),
 8560    value_ht(B, C),
 8561    C=suspension(_, _, _, D, E, F, G),
 8562    A=depends_on_ap(D, E, F, G).
 8563'$enumerate_constraints'(depends_on_goal, A) :-
 8564    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
 8565              B),
 8566    value_ht(B, C),
 8567    C=suspension(_, _, _, D, E),
 8568    A=depends_on_goal(D, E).
 8569'$enumerate_constraints'(ai_observed_internal, A) :-
 8570    nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
 8571              B),
 8572    member(C, B),
 8573    C=suspension(_, _, _, D, E),
 8574    A=ai_observed_internal(D, E).
 8575'$enumerate_constraints'(ai_not_observed_internal, A) :-
 8576    nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
 8577              B),
 8578    member(C, B),
 8579    C=suspension(_, _, _, D, E),
 8580    A=ai_not_observed_internal(D, E).
 8581'$enumerate_constraints'(ai_not_observed, A) :-
 8582    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
 8583              B),
 8584    value_ht(B, C),
 8585    C=suspension(_, _, D, E),
 8586    A=ai_not_observed(D, E).
 8587'$enumerate_constraints'(depends_on_as, A) :-
 8588    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
 8589              B),
 8590    value_ht(B, C),
 8591    C=suspension(_, _, _, D, E, F),
 8592    A=depends_on_as(D, E, F).
 8593'$enumerate_constraints'(ai_observation_gather_results, A) :-
 8594    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
 8595              B),
 8596    member(C, B),
 8597    C=suspension(_, _, _),
 8598    A=ai_observation_gather_results.
 8599'$enumerate_constraints'(ai_observation_memoed_simplification_rest_heads, A) :-
 8600    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
 8601              B),
 8602    value_ht(B, C),
 8603    C=suspension(_, _, D, E, F),
 8604    A=ai_observation_memoed_simplification_rest_heads(D, E, F).
 8605'$enumerate_constraints'(ai_observation_memoed_propagation_rest_heads, A) :-
 8606    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
 8607              B),
 8608    value_ht(B, C),
 8609    C=suspension(_, _, D, E, F),
 8610    A=ai_observation_memoed_propagation_rest_heads(D, E, F).
 8611'$enumerate_constraints'(ai_observation_memoed_abstract_goal, A) :-
 8612    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
 8613              B),
 8614    value_ht(B, C),
 8615    C=suspension(_, _, D, E),
 8616    A=ai_observation_memoed_abstract_goal(D, E).
 8617'$enumerate_constraints'(ai_observation_memo_abstract_goal, A) :-
 8618    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
 8619              B),
 8620    member(C, B),
 8621    C=suspension(_, _, _, D, E),
 8622    A=ai_observation_memo_abstract_goal(D, E).
 8623'$enumerate_constraints'(partial_wake_analysis, A) :-
 8624    nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
 8625              B),
 8626    member(C, B),
 8627    C=suspension(_, _, _, _),
 8628    A=partial_wake_analysis.
 8629'$enumerate_constraints'(no_partial_wake, A) :-
 8630    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
 8631              B),
 8632    value_ht(B, C),
 8633    C=suspension(_, _, D),
 8634    A=no_partial_wake(D).
 8635'$enumerate_constraints'(phase_end, A) :-
 8636    nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1', B),
 8637    value_ht(B, C),
 8638    C=suspension(_, _, D),
 8639    A=phase_end(D).
 8640'$enumerate_constraints'(delay_phase_end, A) :-
 8641    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
 8642              B),
 8643    value_ht(B, C),
 8644    C=suspension(_, _, D, E),
 8645    A=delay_phase_end(D, E).
 8646'$enumerate_constraints'(does_use_history, A) :-
 8647    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
 8648              B),
 8649    value_ht(B, C),
 8650    C=suspension(_, _, D, E),
 8651    A=does_use_history(D, E).
 8652'$enumerate_constraints'(does_use_field, A) :-
 8653    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
 8654              B),
 8655    value_ht(B, C),
 8656    C=suspension(_, _, D, E),
 8657    A=does_use_field(D, E).
 8658'$enumerate_constraints'(uses_state, A) :-
 8659    nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
 8660              B),
 8661    value_ht(B, C),
 8662    C=suspension(_, _, D, E),
 8663    A=uses_state(D, E).
 8664'$enumerate_constraints'(if_used_state, A) :-
 8665    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
 8666              B),
 8667    member(C, B),
 8668    C=suspension(_, _, _, D, E, F, G, H),
 8669    A=if_used_state(D, E, F, G, H).
 8670'$enumerate_constraints'(used_states_known, A) :-
 8671    nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
 8672              B),
 8673    member(C, B),
 8674    C=suspension(_, _, _),
 8675    A=used_states_known.
 8676'$enumerate_constraints'(stored_assertion, A) :-
 8677    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
 8678              B),
 8679    value_ht(B, C),
 8680    C=suspension(_, _, D),
 8681    A=stored_assertion(D).
 8682'$enumerate_constraints'(never_stored_default, A) :-
 8683    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
 8684              B),
 8685    value_ht(B, C),
 8686    C=suspension(_, _, D, E),
 8687    A=never_stored_default(D, E).
 8688'$enumerate_constraints'(never_stored_rules, A) :-
 8689    nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
 8690              B),
 8691    member(C, B),
 8692    C=suspension(_, _, _, D, E),
 8693    A=never_stored_rules(D, E).
 8694'$enumerate_constraints'(continuation_occurrence, A) :-
 8695    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
 8696              B),
 8697    value_ht(B, C),
 8698    C=suspension(_, _, D, E, F),
 8699    A=continuation_occurrence(D, E, F).
 8700'$enumerate_constraints'(skip_to_next_id, A) :-
 8701    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
 8702              B),
 8703    value_ht(B, C),
 8704    C=suspension(_, _, _, D, E),
 8705    A=skip_to_next_id(D, E).
 8706'$enumerate_constraints'(set_occurrence_code_id, A) :-
 8707    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
 8708              B),
 8709    value_ht(B, C),
 8710    C=suspension(_, _, D, E, F),
 8711    A=set_occurrence_code_id(D, E, F).
 8712'$enumerate_constraints'(occurrence_code_id, A) :-
 8713    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
 8714              B),
 8715    value_ht(B, C),
 8716    C=suspension(_, _, D, E, F),
 8717    A=occurrence_code_id(D, E, F).
 8718'$enumerate_constraints'(chr_constants, A) :-
 8719    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
 8720              B),
 8721    member(C, B),
 8722    C=suspension(_, _, _, D),
 8723    A=chr_constants(D).
 8724'$enumerate_constraints'(print_chr_constants, A) :-
 8725    nb_getval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
 8726              B),
 8727    member(C, B),
 8728    C=suspension(_, _, _),
 8729    A=print_chr_constants.
 8730'$via1_multi_hash_source_location___2-1'(A, B) :-
 8731    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 8732              C),
 8733    lookup_ht(C, A, B).
 8734'$via1_multi_hash_indexed_argument___2-1'(A, B) :-
 8735    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 8736              C),
 8737    lookup_ht(C, A, B).
 8738'$via1_multi_hash_indexed_argument___2-12'(A, B) :-
 8739    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 8740              C),
 8741    lookup_ht(C, A, B).
 8742'$via1_multi_hash_constraint_mode___2-1'(A, B) :-
 8743    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 8744              C),
 8745    lookup_ht(C, A, B).
 8746'$via1_multi_hash_store_type___2-1'(A, B) :-
 8747    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', C),
 8748    lookup_ht(C, A, B).
 8749'$via1_multi_hash_actual_store_types___2-1'(A, B) :-
 8750    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
 8751              C),
 8752    lookup_ht(C, A, B).
 8753'$via1_multi_hash_assumed_store_type___2-1'(A, B) :-
 8754    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
 8755              C),
 8756    lookup_ht(C, A, B).
 8757'$via1_multi_hash_validate_store_type_assumption___1-1'(A, B) :-
 8758    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
 8759              C),
 8760    lookup_ht(C, A, B).
 8761'$via1_multi_hash_passive___2-1'(A, B) :-
 8762    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', C),
 8763    lookup_ht(C, A, B).
 8764'$via1_multi_hash_passive___2-12'(A, B) :-
 8765    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', C),
 8766    lookup_ht(C, A, B).
 8767'$via1_multi_hash_occurrence___5-15'(A, B) :-
 8768    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
 8769              C),
 8770    lookup_ht(C, A, B).
 8771'$via1_multi_hash_occurrence___5-125'(A, B) :-
 8772    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
 8773              C),
 8774    lookup_ht(C, A, B).
 8775'$via1_multi_hash_occurrence___5-134'(A, B) :-
 8776    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
 8777              C),
 8778    lookup_ht(C, A, B).
 8779'$via1_multi_hash_occurrence___5-12'(A, B) :-
 8780    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
 8781              C),
 8782    lookup_ht(C, A, B).
 8783'$via1_multi_hash_occurrence___5-3'(A, B) :-
 8784    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', C),
 8785    lookup_ht(C, A, B).
 8786'$via1_multi_hash_occurrence___5-13'(A, B) :-
 8787    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
 8788              C),
 8789    lookup_ht(C, A, B).
 8790'$via1_multi_hash_occurrence___5-34'(A, B) :-
 8791    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
 8792              C),
 8793    lookup_ht(C, A, B).
 8794'$via1_multi_hash_occurrence___5-1'(A, B) :-
 8795    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', C),
 8796    lookup_ht(C, A, B).
 8797'$via1_multi_hash_max_occurrence___2-1'(A, B) :-
 8798    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
 8799              C),
 8800    lookup_ht(C, A, B).
 8801'$via1_multi_hash_allocation_occurrence___2-1'(A, B) :-
 8802    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
 8803              C),
 8804    lookup_ht(C, A, B).
 8805'$via1_multi_hash_allocation_occurrence___2-12'(A, B) :-
 8806    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
 8807              C),
 8808    lookup_ht(C, A, B).
 8809'$via1_multi_hash_rule___2-1'(A, B) :-
 8810    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', C),
 8811    lookup_ht(C, A, B).
 8812'$via1_multi_hash_least_occurrence___2-12'(A, B) :-
 8813    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
 8814              C),
 8815    lookup_ht(C, A, B).
 8816'$via1_multi_hash_least_occurrence___2-1'(A, B) :-
 8817    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
 8818              C),
 8819    lookup_ht(C, A, B).
 8820'$via1_multi_hash_constraint_index___2-2'(A, B) :-
 8821    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
 8822              C),
 8823    lookup_ht(C, A, B).
 8824'$via1_multi_hash_constraint_index___2-1'(A, B) :-
 8825    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
 8826              C),
 8827    lookup_ht(C, A, B).
 8828'$via1_multi_hash_identifier_index___3-12'(A, B) :-
 8829    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
 8830              C),
 8831    lookup_ht(C, A, B).
 8832'$via1_multi_hash_type_indexed_identifier_size___2-1'(A, B) :-
 8833    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
 8834              C),
 8835    lookup_ht(C, A, B).
 8836'$via1_multi_hash_type_indexed_identifier_index___4-123'(A, B) :-
 8837    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
 8838              C),
 8839    lookup_ht(C, A, B).
 8840'$via1_multi_hash_type_indexed_identifier_index___4-23'(A, B) :-
 8841    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
 8842              C),
 8843    lookup_ht(C, A, B).
 8844'$via1_multi_hash_no_history___1-1'(A, B) :-
 8845    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', C),
 8846    lookup_ht(C, A, B).
 8847'$chr_store_constants_chr_translate____history___3___[3]'([], '$chr_store_constants_chr_translate____history___3___[3]___[]').
 8848'$via1_multi_hash_history___3-2'(A, B) :-
 8849    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', C),
 8850    lookup_ht(C, A, B).
 8851'$via1_multi_hash_history___3-1'(A, B) :-
 8852    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', C),
 8853    lookup_ht(C, A, B).
 8854'$via1_multi_hash_indexing_spec___2-1'(A, B) :-
 8855    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
 8856              C),
 8857    lookup_ht(C, A, B).
 8858'$via1_multi_hash_spawns___3-13'(A, B) :-
 8859    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13', C),
 8860    lookup_ht(C, A, B).
 8861'$via1_multi_hash_spawns___3-12'(A, B) :-
 8862    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', C),
 8863    lookup_ht(C, A, B).
 8864'$via1_multi_hash_spawns___3-1'(A, B) :-
 8865    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1', C),
 8866    lookup_ht(C, A, B).
 8867'$via1_multi_hash_spawns___3-3'(A, B) :-
 8868    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', C),
 8869    lookup_ht(C, A, B).
 8870'$via1_multi_hash_spawns___3-123'(A, B) :-
 8871    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', C),
 8872    lookup_ht(C, A, B).
 8873'$via1_multi_hash_spawns_all___2-1'(A, B) :-
 8874    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1', C),
 8875    lookup_ht(C, A, B).
 8876'$via1_multi_hash_spawns_all___2-12'(A, B) :-
 8877    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
 8878              C),
 8879    lookup_ht(C, A, B).
 8880'$via1_multi_hash_spawns_all_triggers___2-1'(A, B) :-
 8881    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
 8882              C),
 8883    lookup_ht(C, A, B).
 8884'$via1_multi_hash_spawns_all_triggers___2-12'(A, B) :-
 8885    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
 8886              C),
 8887    lookup_ht(C, A, B).
 8888'$via1_multi_hash_actual_atomic_multi_hash_keys___3-12'(A, B) :-
 8889    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
 8890              C),
 8891    lookup_ht(C, A, B).
 8892'$via1_multi_hash_actual_atomic_multi_hash_keys___3-1'(A, B) :-
 8893    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
 8894              C),
 8895    lookup_ht(C, A, B).
 8896'$via1_multi_hash_actual_ground_multi_hash_keys___3-12'(A, B) :-
 8897    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
 8898              C),
 8899    lookup_ht(C, A, B).
 8900'$via1_multi_hash_actual_ground_multi_hash_keys___3-1'(A, B) :-
 8901    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
 8902              C),
 8903    lookup_ht(C, A, B).
 8904'$via1_multi_hash_actual_non_ground_multi_hash_key___2-12'(A, B) :-
 8905    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
 8906              C),
 8907    lookup_ht(C, A, B).
 8908'$via1_multi_hash_prolog_global_variable___1-1'(A, B) :-
 8909    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
 8910              C),
 8911    lookup_ht(C, A, B).
 8912'$via1_multi_hash_prev_guard_list___6-1'(A, B) :-
 8913    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
 8914              C),
 8915    lookup_ht(C, A, B).
 8916'$via1_multi_hash_set_all_passive___1-1'(A, B) :-
 8917    nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
 8918              C),
 8919    lookup_ht(C, A, B).
 8920'$via1_multi_hash_make_head_matchings_explicit_memo_table___3-1'(A, B) :-
 8921    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
 8922              C),
 8923    lookup_ht(C, A, B).
 8924'$via1_multi_hash_constraint_type___2-1'(A, B) :-
 8925    nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
 8926              C),
 8927    lookup_ht(C, A, B).
 8928'$via1_multi_hash_ast_static_atomic_builtin_type_check_var___4-1'(A, B) :-
 8929    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
 8930              C),
 8931    lookup_ht(C, A, B).
 8932'$via1_multi_hash_ast_static_atomic_builtin_type_check_var___4-13'(A, B) :-
 8933    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
 8934              C),
 8935    lookup_ht(C, A, B).
 8936'$via1_multi_hash_stored___3-13'(A, B) :-
 8937    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', C),
 8938    lookup_ht(C, A, B).
 8939'$via1_multi_hash_stored___3-123'(A, B) :-
 8940    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', C),
 8941    lookup_ht(C, A, B).
 8942'$via1_multi_hash_stored_complete___3-13'(A, B) :-
 8943    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
 8944              C),
 8945    lookup_ht(C, A, B).
 8946'$via1_multi_hash_stored_complete___3-1'(A, B) :-
 8947    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
 8948              C),
 8949    lookup_ht(C, A, B).
 8950'$via1_multi_hash_check_all_passive___2-12'(A, B) :-
 8951    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
 8952              C),
 8953    lookup_ht(C, A, B).
 8954'$via1_multi_hash_check_all_passive___2-1'(A, B) :-
 8955    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
 8956              C),
 8957    lookup_ht(C, A, B).
 8958'$via1_multi_hash_memo_has_active_occurrence___1-1'(A, B) :-
 8959    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
 8960              C),
 8961    lookup_ht(C, A, B).
 8962'$via1_multi_hash_use_auxiliary_predicate___1-1'(A, B) :-
 8963    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
 8964              C),
 8965    lookup_ht(C, A, B).
 8966'$via1_multi_hash_use_auxiliary_predicate___2-1'(A, B) :-
 8967    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
 8968              C),
 8969    lookup_ht(C, A, B).
 8970'$via1_multi_hash_use_auxiliary_predicate___2-12'(A, B) :-
 8971    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
 8972              C),
 8973    lookup_ht(C, A, B).
 8974'$via1_multi_hash_use_auxiliary_module___1-1'(A, B) :-
 8975    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
 8976              C),
 8977    lookup_ht(C, A, B).
 8978'$via1_multi_hash_functional_dependency___4-1'(A, B) :-
 8979    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
 8980              C),
 8981    lookup_ht(C, A, B).
 8982'$via1_multi_hash_functional_dependency___4-12'(A, B) :-
 8983    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
 8984              C),
 8985    lookup_ht(C, A, B).
 8986'$via1_multi_hash_initial_call_pattern___1-1'(A, B) :-
 8987    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
 8988              C),
 8989    lookup_ht(C, A, B).
 8990'$via1_multi_hash_call_pattern___1-1'(A, B) :-
 8991    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
 8992              C),
 8993    lookup_ht(C, A, B).
 8994'$via1_multi_hash_final_answer_pattern___2-1'(A, B) :-
 8995    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
 8996              C),
 8997    lookup_ht(C, A, B).
 8998'$via1_multi_hash_depends_on___2-1'(A, B) :-
 8999    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1', C),
 9000    lookup_ht(C, A, B).
 9001'$via1_multi_hash_depends_on___2-2'(A, B) :-
 9002    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2', C),
 9003    lookup_ht(C, A, B).
 9004'$via1_multi_hash_depends_on_ap___4-2'(A, B) :-
 9005    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
 9006              C),
 9007    lookup_ht(C, A, B).
 9008'$via1_multi_hash_depends_on_ap___4-3'(A, B) :-
 9009    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
 9010              C),
 9011    lookup_ht(C, A, B).
 9012'$via1_multi_hash_depends_on_goal___2-2'(A, B) :-
 9013    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
 9014              C),
 9015    lookup_ht(C, A, B).
 9016'$via1_multi_hash_ai_observed_internal___2-12'(A, B) :-
 9017    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
 9018              C),
 9019    lookup_ht(C, A, B).
 9020'$via1_multi_hash_ai_not_observed_internal___2-12'(A, B) :-
 9021    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
 9022              C),
 9023    lookup_ht(C, A, B).
 9024'$via1_multi_hash_ai_not_observed___2-12'(A, B) :-
 9025    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
 9026              C),
 9027    lookup_ht(C, A, B).
 9028'$via1_multi_hash_depends_on_as___3-3'(A, B) :-
 9029    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
 9030              C),
 9031    lookup_ht(C, A, B).
 9032'$via1_multi_hash_depends_on_as___3-2'(A, B) :-
 9033    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
 9034              C),
 9035    lookup_ht(C, A, B).
 9036'$via1_multi_hash_ai_observation_memoed_simplification_rest_heads___3-12'(A, B) :-
 9037    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
 9038              C),
 9039    lookup_ht(C, A, B).
 9040'$via1_multi_hash_ai_observation_memoed_propagation_rest_heads___3-12'(A, B) :-
 9041    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
 9042              C),
 9043    lookup_ht(C, A, B).
 9044'$via1_multi_hash_ai_observation_memoed_abstract_goal___2-1'(A, B) :-
 9045    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
 9046              C),
 9047    lookup_ht(C, A, B).
 9048'$via1_multi_hash_no_partial_wake___1-1'(A, B) :-
 9049    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
 9050              C),
 9051    lookup_ht(C, A, B).
 9052'$via1_multi_hash_phase_end___1-1'(A, B) :-
 9053    nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1', C),
 9054    lookup_ht(C, A, B).
 9055'$via1_multi_hash_delay_phase_end___2-1'(A, B) :-
 9056    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
 9057              C),
 9058    lookup_ht(C, A, B).
 9059'$via1_multi_hash_does_use_history___2-1'(A, B) :-
 9060    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
 9061              C),
 9062    lookup_ht(C, A, B).
 9063'$via1_multi_hash_does_use_history___2-12'(A, B) :-
 9064    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
 9065              C),
 9066    lookup_ht(C, A, B).
 9067'$via1_multi_hash_does_use_field___2-12'(A, B) :-
 9068    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
 9069              C),
 9070    lookup_ht(C, A, B).
 9071'$via1_multi_hash_uses_state___2-12'(A, B) :-
 9072    nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
 9073              C),
 9074    lookup_ht(C, A, B).
 9075'$via1_multi_hash_if_used_state___5-12'(A, B) :-
 9076    nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
 9077              C),
 9078    lookup_ht(C, A, B).
 9079'$via1_multi_hash_stored_assertion___1-1'(A, B) :-
 9080    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
 9081              C),
 9082    lookup_ht(C, A, B).
 9083'$via1_multi_hash_never_stored_default___2-1'(A, B) :-
 9084    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
 9085              C),
 9086    lookup_ht(C, A, B).
 9087'$via1_multi_hash_continuation_occurrence___3-12'(A, B) :-
 9088    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
 9089              C),
 9090    lookup_ht(C, A, B).
 9091'$via1_multi_hash_skip_to_next_id___2-12'(A, B) :-
 9092    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
 9093              C),
 9094    lookup_ht(C, A, B).
 9095'$via1_multi_hash_set_occurrence_code_id___3-12'(A, B) :-
 9096    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
 9097              C),
 9098    lookup_ht(C, A, B).
 9099'$via1_multi_hash_occurrence_code_id___3-12'(A, B) :-
 9100    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
 9101              C),
 9102    lookup_ht(C, A, B).
 9103'$chr_initialization' :-
 9104    nb_setval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
 9105              []),
 9106    nb_setval('$chr_store_global_ground_chr_translate____chr_constants___1', []),
 9107    new_ht(A),
 9108    nb_setval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
 9109              A),
 9110    new_ht(B),
 9111    nb_setval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
 9112              B),
 9113    new_ht(C),
 9114    nb_setval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
 9115              C),
 9116    new_ht(D),
 9117    nb_setval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
 9118              D),
 9119    nb_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
 9120              []),
 9121    new_ht(E),
 9122    nb_setval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
 9123              E),
 9124    new_ht(F),
 9125    nb_setval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
 9126              F),
 9127    nb_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
 9128              []),
 9129    new_ht(G),
 9130    nb_setval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
 9131              G),
 9132    nb_setval('$chr_store_global_ground_chr_translate____if_used_state___5', []),
 9133    new_ht(H),
 9134    nb_setval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
 9135              H),
 9136    new_ht(I),
 9137    nb_setval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
 9138              I),
 9139    new_ht(J),
 9140    nb_setval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
 9141              J),
 9142    new_ht(K),
 9143    nb_setval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
 9144              K),
 9145    new_ht(L),
 9146    nb_setval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
 9147              L),
 9148    new_ht(M),
 9149    nb_setval('$chr_store_multi_hash_chr_translate____phase_end___1-1', M),
 9150    new_ht(N),
 9151    nb_setval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
 9152              N),
 9153    nb_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
 9154              []),
 9155    nb_setval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
 9156              []),
 9157    new_ht(O),
 9158    nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
 9159              O),
 9160    new_ht(P),
 9161    nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
 9162              P),
 9163    new_ht(Q),
 9164    nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
 9165              Q),
 9166    nb_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
 9167              []),
 9168    new_ht(R),
 9169    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
 9170              R),
 9171    new_ht(S),
 9172    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
 9173              S),
 9174    new_ht(T),
 9175    nb_setval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
 9176              T),
 9177    new_ht(U),
 9178    nb_setval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
 9179              U),
 9180    nb_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
 9181              []),
 9182    new_ht(V),
 9183    nb_setval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
 9184              V),
 9185    nb_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
 9186              []),
 9187    new_ht(W),
 9188    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
 9189              W),
 9190    new_ht(X),
 9191    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
 9192              X),
 9193    new_ht(Y),
 9194    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
 9195              Y),
 9196    new_ht(Z),
 9197    nb_setval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
 9198              Z),
 9199    new_ht(A1),
 9200    nb_setval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
 9201              A1),
 9202    nb_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
 9203              []),
 9204    new_ht(B1),
 9205    nb_setval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
 9206              B1),
 9207    new_ht(C1),
 9208    nb_setval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
 9209              C1),
 9210    new_ht(D1),
 9211    nb_setval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
 9212              D1),
 9213    new_ht(E1),
 9214    nb_setval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
 9215              E1),
 9216    new_ht(F1),
 9217    nb_setval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
 9218              F1),
 9219    new_ht(G1),
 9220    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
 9221              G1),
 9222    new_ht(H1),
 9223    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
 9224              H1),
 9225    new_ht(I1),
 9226    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
 9227              I1),
 9228    new_ht(J1),
 9229    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
 9230              J1),
 9231    new_ht(K1),
 9232    nb_setval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
 9233              K1),
 9234    nb_setval('$chr_store_global_ground_chr_translate____constraints_code1___3',
 9235              []),
 9236    new_ht(L1),
 9237    nb_setval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
 9238              L1),
 9239    new_ht(M1),
 9240    nb_setval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
 9241              M1),
 9242    new_ht(N1),
 9243    nb_setval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
 9244              N1),
 9245    new_ht(O1),
 9246    nb_setval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
 9247              O1),
 9248    new_ht(P1),
 9249    nb_setval('$chr_store_multi_hash_chr_translate____stored___3-123', P1),
 9250    new_ht(Q1),
 9251    nb_setval('$chr_store_multi_hash_chr_translate____stored___3-13', Q1),
 9252    nb_setval('$chr_store_global_list_chr_translate____atomic_type___1', []),
 9253    nb_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
 9254              []),
 9255    nb_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
 9256              []),
 9257    new_ht(R1),
 9258    nb_setval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
 9259              R1),
 9260    new_ht(S1),
 9261    nb_setval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
 9262              S1),
 9263    nb_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
 9264              []),
 9265    nb_setval('$chr_store_global_ground_chr_translate____static_type_check___2',
 9266              []),
 9267    nb_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9268              []),
 9269    nb_setval('$chr_store_global_list_chr_translate____unalias_type___2', []),
 9270    new_ht(T1),
 9271    nb_setval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
 9272              T1),
 9273    nb_setval('$chr_store_global_ground_chr_translate____constraint_type___2',
 9274              []),
 9275    nb_setval('$chr_store_global_list_chr_translate____type_alias___2', []),
 9276    nb_setval('$chr_store_global_list_chr_translate____type_definition___2', []),
 9277    nb_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
 9278              []),
 9279    new_ht(U1),
 9280    nb_setval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
 9281              U1),
 9282    nb_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
 9283              []),
 9284    new_ht(V1),
 9285    nb_setval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
 9286              V1),
 9287    new_ht(W1),
 9288    nb_setval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
 9289              W1),
 9290    nb_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
 9291              []),
 9292    nb_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
 9293              []),
 9294    nb_setval('$chr_store_global_list_chr_translate____get_bg_info___2', []),
 9295    nb_setval('$chr_store_global_list_chr_translate____background_info___2', []),
 9296    nb_setval('$chr_store_global_ground_chr_translate____background_info___1',
 9297              []),
 9298    new_ht(X1),
 9299    nb_setval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
 9300              X1),
 9301    nb_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
 9302              []),
 9303    nb_setval('$chr_store_global_list_chr_translate____fresh_symbol___2', []),
 9304    nb_setval('$chr_store_global_list_chr_translate____symbol_count___2', []),
 9305    new_ht(Y1),
 9306    nb_setval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
 9307              Y1),
 9308    new_ht(Z1),
 9309    nb_setval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
 9310              Z1),
 9311    new_ht(A2),
 9312    nb_setval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
 9313              A2),
 9314    new_ht(B2),
 9315    nb_setval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
 9316              B2),
 9317    new_ht(C2),
 9318    nb_setval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
 9319              C2),
 9320    nb_setval('$chr_store_global_ground_chr_translate____module_initializer___1',
 9321              []),
 9322    nb_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
 9323              []),
 9324    nb_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
 9325              []),
 9326    nb_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
 9327              []),
 9328    nb_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
 9329              []),
 9330    new_ht(D2),
 9331    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
 9332              D2),
 9333    new_ht(E2),
 9334    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
 9335              E2),
 9336    nb_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
 9337              []),
 9338    new_ht(F2),
 9339    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
 9340              F2),
 9341    new_ht(G2),
 9342    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
 9343              G2),
 9344    new_ht(H2),
 9345    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-123', H2),
 9346    new_ht(I2),
 9347    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-3', I2),
 9348    new_ht(J2),
 9349    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-1', J2),
 9350    new_ht(K2),
 9351    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-12', K2),
 9352    nb_setval('$chr_store_global_ground_chr_translate____spawns___3', []),
 9353    new_ht(L2),
 9354    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-13', L2),
 9355    nb_setval('$chr_store_global_ground_chr_translate____observation_analysis___1',
 9356              []),
 9357    new_ht(M2),
 9358    nb_setval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
 9359              M2),
 9360    new_ht(N2),
 9361    nb_setval('$chr_store_multi_hash_chr_translate____history___3-1', N2),
 9362    new_ht(O2),
 9363    nb_setval('$chr_store_multi_hash_chr_translate____history___3-2', O2),
 9364    nb_setval('$chr_store_constants_chr_translate____history___3___[3]___[]', []),
 9365    new_ht(P2),
 9366    nb_setval('$chr_store_multi_hash_chr_translate____no_history___1-1',
 9367              P2),
 9368    new_ht(Q2),
 9369    nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
 9370              Q2),
 9371    new_ht(R2),
 9372    nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
 9373              R2),
 9374    new_ht(S2),
 9375    nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
 9376              S2),
 9377    new_ht(T2),
 9378    nb_setval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
 9379              T2),
 9380    nb_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
 9381              []),
 9382    nb_setval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
 9383              []),
 9384    new_ht(U2),
 9385    nb_setval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
 9386              U2),
 9387    new_ht(V2),
 9388    nb_setval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
 9389              V2),
 9390    new_ht(W2),
 9391    nb_setval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
 9392              W2),
 9393    new_ht(X2),
 9394    nb_setval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
 9395              X2),
 9396    new_ht(Y2),
 9397    nb_setval('$chr_store_multi_hash_chr_translate____rule___2-1', Y2),
 9398    nb_setval('$chr_store_global_ground_chr_translate____rule___2', []),
 9399    new_ht(Z2),
 9400    nb_setval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
 9401              Z2),
 9402    new_ht(A3),
 9403    nb_setval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
 9404              A3),
 9405    new_ht(B3),
 9406    nb_setval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
 9407              B3),
 9408    new_ht(C3),
 9409    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
 9410              C3),
 9411    new_ht(D3),
 9412    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
 9413              D3),
 9414    new_ht(E3),
 9415    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
 9416              E3),
 9417    new_ht(F3),
 9418    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
 9419              F3),
 9420    new_ht(G3),
 9421    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
 9422              G3),
 9423    new_ht(H3),
 9424    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
 9425              H3),
 9426    new_ht(I3),
 9427    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
 9428              I3),
 9429    nb_setval('$chr_store_global_ground_chr_translate____occurrence___5', []),
 9430    new_ht(J3),
 9431    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
 9432              J3),
 9433    new_ht(K3),
 9434    nb_setval('$chr_store_multi_hash_chr_translate____passive___2-12', K3),
 9435    new_ht(L3),
 9436    nb_setval('$chr_store_multi_hash_chr_translate____passive___2-1', L3),
 9437    nb_setval('$chr_store_global_ground_chr_translate____rule_count___1', []),
 9438    new_ht(M3),
 9439    nb_setval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
 9440              M3),
 9441    new_ht(N3),
 9442    nb_setval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
 9443              N3),
 9444    new_ht(O3),
 9445    nb_setval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
 9446              O3),
 9447    new_ht(P3),
 9448    nb_setval('$chr_store_multi_hash_chr_translate____store_type___2-1',
 9449              P3),
 9450    nb_setval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
 9451              []),
 9452    new_ht(Q3),
 9453    nb_setval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9454              Q3),
 9455    nb_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9456              []),
 9457    new_ht(R3),
 9458    nb_setval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9459              R3),
 9460    new_ht(S3),
 9461    nb_setval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 9462              S3),
 9463    new_ht(T3),
 9464    nb_setval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9465              T3),
 9466    nb_setval('$chr_store_global_ground_chr_translate____target_module___1', []),
 9467    nb_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9468              []).
 9469:- (initialization'$chr_initialization'). 9470:- (dynamic user:exception/3). 9471:- (multifile user:exception/3). 9472user:exception(undefined_global_variable, A, retry) :-
 9473    '$chr_prolog_global_variable'(A),
 9474    '$chr_initialization'.
 9475'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____print_chr_constants___0').
 9476'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____chr_constants___1').
 9477'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12').
 9478'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12').
 9479'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12').
 9480'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12').
 9481'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____never_stored_rules___2').
 9482'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____never_stored_default___2-1').
 9483'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_assertion___1-1').
 9484'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____used_states_known___0').
 9485'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____if_used_state___5-12').
 9486'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____if_used_state___5').
 9487'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____uses_state___2-12').
 9488'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_field___2-12').
 9489'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_history___2-12').
 9490'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_history___2-1').
 9491'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1').
 9492'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____phase_end___1-1').
 9493'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1').
 9494'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____partial_wake_analysis___0').
 9495'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2').
 9496'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1').
 9497'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12').
 9498'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12').
 9499'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0').
 9500'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_as___3-2').
 9501'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_as___3-3').
 9502'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12').
 9503'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12').
 9504'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2').
 9505'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12').
 9506'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observed_internal___2').
 9507'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2').
 9508'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3').
 9509'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2').
 9510'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on___2-2').
 9511'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on___2-1').
 9512'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____abstract_constraints___1').
 9513'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1').
 9514'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____call_pattern___1-1').
 9515'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1').
 9516'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____functional_dependency___4-12').
 9517'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____functional_dependency___4-1').
 9518'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1').
 9519'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12').
 9520'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1').
 9521'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1').
 9522'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1').
 9523'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraints_code1___3').
 9524'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____check_all_passive___2-1').
 9525'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____check_all_passive___2-12').
 9526'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_complete___3-1').
 9527'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_complete___3-13').
 9528'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored___3-123').
 9529'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored___3-13').
 9530'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____atomic_type___1').
 9531'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1').
 9532'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____dynamic_type_check___0').
 9533'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13').
 9534'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1').
 9535'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____ast_static_type_check_var___4').
 9536'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____static_type_check___2').
 9537'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____types_modes_condition___3').
 9538'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____unalias_type___2').
 9539'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_type___2-1').
 9540'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraint_type___2').
 9541'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____type_alias___2').
 9542'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____type_definition___2').
 9543'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1').
 9544'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1').
 9545'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____precompute_head_matchings___0').
 9546'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____set_all_passive___1-1').
 9547'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1').
 9548'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____prev_guard_list___6').
 9549'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____get_bg_info_answer___1').
 9550'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____get_bg_info___2').
 9551'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____background_info___2').
 9552'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____background_info___1').
 9553'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1').
 9554'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____prolog_global_variable___1').
 9555'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____fresh_symbol___2').
 9556'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____symbol_count___2').
 9557'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12').
 9558'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1').
 9559'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12').
 9560'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1').
 9561'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12').
 9562'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____module_initializer___1').
 9563'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____find_empty_named_histories___0').
 9564'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1').
 9565'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2').
 9566'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0').
 9567'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12').
 9568'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1').
 9569'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns_all_triggers___2').
 9570'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all___2-12').
 9571'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all___2-1').
 9572'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-123').
 9573'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-3').
 9574'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-1').
 9575'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-12').
 9576'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns___3').
 9577'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-13').
 9578'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____observation_analysis___1').
 9579'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexing_spec___2-1').
 9580'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____history___3-1').
 9581'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____history___3-2').
 9582'$chr_prolog_global_variable'('$chr_store_constants_chr_translate____history___3___[3]___[]').
 9583'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____no_history___1-1').
 9584'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23').
 9585'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123').
 9586'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1').
 9587'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____identifier_index___3-12').
 9588'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____identifier_size___1').
 9589'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____max_constraint_index___1').
 9590'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_index___2-1').
 9591'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_index___2-2').
 9592'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____least_occurrence___2-1').
 9593'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____least_occurrence___2-12').
 9594'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____rule___2-1').
 9595'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____rule___2').
 9596'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12').
 9597'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1').
 9598'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____max_occurrence___2-1').
 9599'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-1').
 9600'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-34').
 9601'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-13').
 9602'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-3').
 9603'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-12').
 9604'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-134').
 9605'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-125').
 9606'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____occurrence___5').
 9607'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-15').
 9608'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____passive___2-12').
 9609'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____passive___2-1').
 9610'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____rule_count___1').
 9611'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1').
 9612'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1').
 9613'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_store_types___2-1').
 9614'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____store_type___2-1').
 9615'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0').
 9616'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_mode___2-1').
 9617'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraint_mode___2').
 9618'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexed_argument___2-12').
 9619'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexed_argument___2-1').
 9620'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____source_location___2-1').
 9621'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____target_module___1').
 9622'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____chr_source_file___1').
 9623chr_source_file(A) :-
 9624    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9625              B),
 9626    (   member(C, B),
 9627        C=suspension(_, active, _, _),
 9628        !
 9629    ;   !,
 9630        chr_source_file___1__0__0__2(B, A)
 9631    ).
 9632chr_source_file___1__0__0__2([], A) :-
 9633    chr_source_file___1__1(A).
 9634chr_source_file___1__0__0__2([A|B], C) :-
 9635    (   A=suspension(_, active, _, _)
 9636    ->  setarg(2, A, removed),
 9637        arg(3, A, D),
 9638        (   var(D)
 9639        ->  nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9640                      E),
 9641            E=[_|F],
 9642            b_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9643                     F),
 9644            (   F=[G|_]
 9645            ->  setarg(3, G, _)
 9646            ;   true
 9647            )
 9648        ;   D=[_, _|F],
 9649            setarg(2, D, F),
 9650            (   F=[G|_]
 9651            ->  setarg(3, G, D)
 9652            ;   true
 9653            )
 9654        ),
 9655        chr_source_file___1__0__0__2(B, C)
 9656    ;   chr_source_file___1__0__0__2(B, C)
 9657    ).
 9658chr_source_file(A) :-
 9659    chr_source_file___1__1(A).
 9660chr_source_file___1__1(A) :-
 9661    B=suspension(C, active, _, A),
 9662    'chr gen_id'(C),
 9663    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9664              D),
 9665    E=[B|D],
 9666    b_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9667             E),
 9668    (   D=[F|_]
 9669    ->  setarg(3, F, E)
 9670    ;   true
 9671    ).
 9672get_chr_source_file(A) :-
 9673    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9674              B),
 9675    member(C, B),
 9676    C=suspension(_, active, _, D),
 9677    !,
 9678    A=D.
 9679get_chr_source_file(user).
 9680target_module(A) :-
 9681    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9682              B),
 9683    (   member(C, B),
 9684        C=suspension(_, active, _, _),
 9685        !
 9686    ;   !,
 9687        target_module___1__0__0__2(B, A)
 9688    ).
 9689target_module___1__0__0__2([], A) :-
 9690    target_module___1__1(A).
 9691target_module___1__0__0__2([A|B], C) :-
 9692    (   A=suspension(_, active, _, _)
 9693    ->  setarg(2, A, removed),
 9694        arg(3, A, D),
 9695        (   var(D)
 9696        ->  nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9697                      E),
 9698            E=[_|F],
 9699            b_setval('$chr_store_global_ground_chr_translate____target_module___1',
 9700                     F),
 9701            (   F=[G|_]
 9702            ->  setarg(3, G, _)
 9703            ;   true
 9704            )
 9705        ;   D=[_, _|F],
 9706            setarg(2, D, F),
 9707            (   F=[G|_]
 9708            ->  setarg(3, G, D)
 9709            ;   true
 9710            )
 9711        ),
 9712        target_module___1__0__0__2(B, C)
 9713    ;   target_module___1__0__0__2(B, C)
 9714    ).
 9715target_module(A) :-
 9716    target_module___1__1(A).
 9717target_module___1__1(A) :-
 9718    B=suspension(C, active, _, A),
 9719    'chr gen_id'(C),
 9720    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9721              D),
 9722    E=[B|D],
 9723    b_setval('$chr_store_global_ground_chr_translate____target_module___1',
 9724             E),
 9725    (   D=[F|_]
 9726    ->  setarg(3, F, E)
 9727    ;   true
 9728    ).
 9729get_target_module(A) :-
 9730    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9731              B),
 9732    member(C, B),
 9733    C=suspension(_, active, _, D),
 9734    !,
 9735    A=D.
 9736get_target_module(user).
 9737source_location(A, B) :-
 9738    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9739              C),
 9740    lookup_ht(C, A, D),
 9741    (   member(E, D),
 9742        E=suspension(_, active, _, _),
 9743        !
 9744    ;   !,
 9745        source_location___2__0__0__2(D, A, B)
 9746    ).
 9747source_location___2__0__0__2([], A, B) :-
 9748    source_location___2__1(A, B).
 9749source_location___2__0__0__2([A|B], C, D) :-
 9750    (   A=suspension(_, active, E, _),
 9751        E==C
 9752    ->  setarg(2, A, removed),
 9753        nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9754                  F),
 9755        delete_ht(F, C, A),
 9756        source_location___2__0__0__2(B, C, D)
 9757    ;   source_location___2__0__0__2(B, C, D)
 9758    ).
 9759source_location(A, B) :-
 9760    source_location___2__1(A, B).
 9761source_location___2__1(A, B) :-
 9762    C=suspension(D, active, A, B),
 9763    'chr gen_id'(D),
 9764    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9765              E),
 9766    insert_ht(E, A, C).
 9767get_line_number(A, B) :-
 9768    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9769              C),
 9770    lookup_ht(C, A, D),
 9771    member(E, D),
 9772    E=suspension(_, active, _, F),
 9773    !,
 9774    B=F.
 9775get_line_number(_, (?):0).
 9776indexed_argument(A, B) :-
 9777    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9778              C),
 9779    lookup_ht(C, k(A, B), D),
 9780    member(E, D),
 9781    E=suspension(_, active, _, _),
 9782    !.
 9783indexed_argument(A, B) :-
 9784    C=suspension(D, active, A, B),
 9785    'chr gen_id'(D),
 9786    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 9787              E),
 9788    insert_ht(E, A, C),
 9789    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9790              F),
 9791    insert_ht(F, k(A, B), C).
 9792is_indexed_argument(A, B) :-
 9793    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9794              C),
 9795    lookup_ht(C, k(A, B), D),
 9796    member(E, D),
 9797    E=suspension(_, active, _, _),
 9798    !.
 9799is_indexed_argument(_, _) :-
 9800    fail.
 9801constraint_mode(A, B) :-
 9802    constraint_mode___2__0(A, B, _).
 9803constraint_mode___2__0(A, B, C) :-
 9804    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9805              D),
 9806    lookup_ht(D, A, E),
 9807    (   member(F, E),
 9808        F=suspension(_, active, _, _, _, _),
 9809        !
 9810    ;   !,
 9811        constraint_mode___2__0__0__2(E, A, B, C)
 9812    ).
 9813constraint_mode___2__0__0__2([], A, B, C) :-
 9814    constraint_mode___2__1(A, B, C).
 9815constraint_mode___2__0__0__2([A|B], C, D, E) :-
 9816    (   A=suspension(_, active, _, _, F, _),
 9817        F==C
 9818    ->  setarg(2, A, removed),
 9819        ( arg(4, A, G),
 9820          (   var(G)
 9821          ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9822                        H),
 9823              H=[_|I],
 9824              b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9825                       I),
 9826              (   I=[J|_]
 9827              ->  setarg(4, J, _)
 9828              ;   true
 9829              )
 9830          ;   G=[_, _|I],
 9831              setarg(2, G, I),
 9832              (   I=[J|_]
 9833              ->  setarg(4, J, G)
 9834              ;   true
 9835              )
 9836          )
 9837        ),
 9838        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9839                  K),
 9840        delete_ht(K, C, A),
 9841        constraint_mode___2__0__0__2(B, C, D, E)
 9842    ;   constraint_mode___2__0__0__2(B, C, D, E)
 9843    ).
 9844constraint_mode___2__0(A, B, C) :-
 9845    constraint_mode___2__1(A, B, C).
 9846constraint_mode___2__1(A, B, C) :-
 9847    A=D/E,
 9848    nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9849              F),
 9850    !,
 9851    C=suspension(G, not_stored_yet, t, _, A, B),
 9852    'chr gen_id'(G),
 9853    constraint_mode___2__1__0__7(F,
 9854                                 A,
 9855                                 B,
 9856                                 C,
 9857                                 D,
 9858                                 E).
 9859constraint_mode___2__1__0__7([], A, B, C, _, _) :-
 9860    constraint_mode___2__2(A, B, C).
 9861constraint_mode___2__1__0__7([A|B], C, D, E, F, G) :-
 9862    (   A=suspension(_, active, _, H, I, J),
 9863        H=[K|L],
 9864        I=[M|N],
 9865        functor(K, F, G)
 9866    ->  setarg(2, A, removed),
 9867        arg(3, A, O),
 9868        (   var(O)
 9869        ->  nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9870                      P),
 9871            P=[_|Q],
 9872            b_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9873                     Q),
 9874            (   Q=[R|_]
 9875            ->  setarg(3, R, _)
 9876            ;   true
 9877            )
 9878        ;   O=[_, _|Q],
 9879            setarg(2, O, Q),
 9880            (   Q=[R|_]
 9881            ->  setarg(3, R, O)
 9882            ;   true
 9883            )
 9884        ),
 9885        arg(2, E, S),
 9886        setarg(2, E, active),
 9887        (   S==not_stored_yet
 9888        ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9889                      T),
 9890            U=[E|T],
 9891            b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9892                     U),
 9893            (   T=[V|_]
 9894            ->  setarg(4, V, U)
 9895            ;   true
 9896            ),
 9897            nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9898                      W),
 9899            insert_ht(W, C, E)
 9900        ;   true
 9901        ),
 9902        K=..[_|X],
 9903        J=(Y, Z, A1),
 9904        modes_condition(D, X, Y),
 9905        get_constraint_type_det(F/G, B1),
 9906        M=..[_|C1],
 9907        types_condition(B1, X, C1, D, Z),
 9908        types_modes_condition(L, N, A1),
 9909        (   E=suspension(_, active, _, _, _, _)
 9910        ->  setarg(2, E, inactive),
 9911            constraint_mode___2__1__0__7(B,
 9912                                         C,
 9913                                         D,
 9914                                         E,
 9915                                         F,
 9916                                         G)
 9917        ;   true
 9918        )
 9919    ;   constraint_mode___2__1__0__7(B,
 9920                                     C,
 9921                                     D,
 9922                                     E,
 9923                                     F,
 9924                                     G)
 9925    ).
 9926constraint_mode___2__1(A, B, C) :-
 9927    C=suspension(D, not_stored_yet, t, _, A, B),
 9928    'chr gen_id'(D),
 9929    constraint_mode___2__2(A, B, C).
 9930constraint_mode___2__2(A, B, C) :-
 9931    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', D),
 9932    lookup_ht(D, A, E),
 9933    !,
 9934    constraint_mode___2__2__0__8(E, A, B, C).
 9935constraint_mode___2__2__0__8([], A, B, C) :-
 9936    constraint_mode___2__3(A, B, C).
 9937constraint_mode___2__2__0__8([A|B], C, D, E) :-
 9938    (   A=suspension(_, active, _, _, F, _, G, H, I),
 9939        F==C,
 9940        nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
 9941                  J)
 9942    ->  constraint_mode___2__2__1__8(J,
 9943                                     G,
 9944                                     H,
 9945                                     I,
 9946                                     A,
 9947                                     B,
 9948                                     C,
 9949                                     D,
 9950                                     E)
 9951    ;   constraint_mode___2__2__0__8(B, C, D, E)
 9952    ).
 9953constraint_mode___2__2__1__8([], _, _, _, _, A, B, C, D) :-
 9954    constraint_mode___2__2__0__8(A, B, C, D).
 9955constraint_mode___2__2__1__8([A|B], C, D, E, F, G, H, I, J) :-
 9956    (   A=suspension(_, active, _, _),
 9957        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', K),
 9958        lookup_ht(K, C, L)
 9959    ->  constraint_mode___2__2__2__8(L,
 9960                                     A,
 9961                                     B,
 9962                                     C,
 9963                                     D,
 9964                                     E,
 9965                                     F,
 9966                                     G,
 9967                                     H,
 9968                                     I,
 9969                                     J)
 9970    ;   constraint_mode___2__2__1__8(B,
 9971                                     C,
 9972                                     D,
 9973                                     E,
 9974                                     F,
 9975                                     G,
 9976                                     H,
 9977                                     I,
 9978                                     J)
 9979    ).
 9980constraint_mode___2__2__2__8([], _, A, B, C, D, E, F, G, H, I) :-
 9981    constraint_mode___2__2__1__8(A,
 9982                                 B,
 9983                                 C,
 9984                                 D,
 9985                                 E,
 9986                                 F,
 9987                                 G,
 9988                                 H,
 9989                                 I).
 9990constraint_mode___2__2__2__8([A|B], C, D, E, F, G, H, I, J, K, L) :-
 9991    (   A=suspension(_, active, _, _, M, N),
 9992        M==E,
 9993        O=t(330, C, H, A, L),
 9994        '$novel_production'(C, O),
 9995        '$novel_production'(H, O),
 9996        '$novel_production'(A, O),
 9997        '$novel_production'(L, O)
 9998    ->  '$extend_history'(L, O),
 9999        arg(2, L, P),
10000        setarg(2, L, active),
10001        (   P==not_stored_yet
10002        ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10003                      Q),
10004            R=[L|Q],
10005            b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10006                     R),
10007            (   Q=[S|_]
10008            ->  setarg(4, S, R)
10009            ;   true
10010            ),
10011            nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10012                      T),
10013            insert_ht(T, J, L)
10014        ;   true
10015        ),
10016        N=pragma(rule(U, V, W, _), _, _, _, _),
10017        (   is_passive(E, F)
10018        ->  true
10019        ;   G==simplification
10020        ->  select(X, U, _),
10021            X=..[_|Y],
10022            term_variables(W, Z),
10023            partial_wake_args(Y, K, Z, J)
10024        ;   select(X, V, _),
10025            X=..[_|Y],
10026            term_variables(W, Z),
10027            partial_wake_args(Y, K, Z, J)
10028        ),
10029        (   L=suspension(_, active, _, _, _, _)
10030        ->  setarg(2, L, inactive),
10031            constraint_mode___2__2__2__8(B,
10032                                         C,
10033                                         D,
10034                                         E,
10035                                         F,
10036                                         G,
10037                                         H,
10038                                         I,
10039                                         J,
10040                                         K,
10041                                         L)
10042        ;   true
10043        )
10044    ;   constraint_mode___2__2__2__8(B,
10045                                     C,
10046                                     D,
10047                                     E,
10048                                     F,
10049                                     G,
10050                                     H,
10051                                     I,
10052                                     J,
10053                                     K,
10054                                     L)
10055    ).
10056constraint_mode___2__2(A, B, C) :-
10057    constraint_mode___2__3(A, B, C).
10058constraint_mode___2__3(A, _, B) :-
10059    arg(2, B, C),
10060    setarg(2, B, active),
10061    (   C==not_stored_yet
10062    ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10063                  D),
10064        E=[B|D],
10065        b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10066                 E),
10067        (   D=[F|_]
10068        ->  setarg(4, F, E)
10069        ;   true
10070        ),
10071        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10072                  G),
10073        insert_ht(G, A, B)
10074    ;   true
10075    ).
10076get_constraint_mode(A, B) :-
10077    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10078              C),
10079    lookup_ht(C, A, D),
10080    member(E, D),
10081    E=suspension(_, active, _, _, _, F),
10082    !,
10083    B=F.
10084get_constraint_mode(_/A, B) :-
10085    replicate(A, ?, B).
10086may_trigger(A) :-
10087    \+ has_active_occurrence(A),
10088    !,
10089    fail.
10090may_trigger(A) :-
10091    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10092              B),
10093    lookup_ht(B, A, C),
10094    member(D, C),
10095    D=suspension(_, active, _, _, _, E),
10096    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
10097              F),
10098    lookup_ht(F, A, G),
10099    member(H, G),
10100    H=suspension(_, active, _, I),
10101    nth1(I, E, J),
10102    J\==(+),
10103    !,
10104    is_stored(A).
10105may_trigger(_) :-
10106    chr_pp_flag(debugable, on).
10107only_ground_indexed_arguments(A) :-
10108    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10109              B),
10110    lookup_ht(B, A, C),
10111    member(D, C),
10112    D=suspension(_, active, _, _, _, E),
10113    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
10114              F),
10115    lookup_ht(F, A, G),
10116    member(H, G),
10117    H=suspension(_, active, _, I),
10118    nth1(I, E, J),
10119    J\==(+),
10120    !,
10121    fail.
10122only_ground_indexed_arguments(_).
10123none_suspended_on_variables :-
10124    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10125              A),
10126    member(B, A),
10127    B=suspension(_, active, _),
10128    !.
10129none_suspended_on_variables :-
10130    A=suspension(B, active, _),
10131    'chr gen_id'(B),
10132    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10133              C),
10134    D=[A|C],
10135    b_setval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10136             D),
10137    (   C=[E|_]
10138    ->  setarg(3, E, D)
10139    ;   true
10140    ).
10141are_none_suspended_on_variables :-
10142    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10143              A),
10144    member(B, A),
10145    B=suspension(_, active, _),
10146    !.
10147are_none_suspended_on_variables :-
10148    fail.
10149store_type(A, B) :-
10150    store_type___2__0(A, B, _).
10151store_type___2__0(A, B, C) :-
10152    chr_pp_flag(verbose, on),
10153    !,
10154    C=suspension(D, active, A, B),
10155    'chr gen_id'(D),
10156    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', E),
10157    insert_ht(E, A, C),
10158    format('The indexes for ~w are:\n', [A]),
10159    format_storetype(B),
10160    (   C=suspension(_, active, _, _)
10161    ->  setarg(2, C, inactive),
10162        store_type___2__1(A, B, C)
10163    ;   true
10164    ).
10165store_type___2__0(A, B, C) :-
10166    C=suspension(D, not_stored_yet, A, B),
10167    'chr gen_id'(D),
10168    store_type___2__1(A, B, C).
10169store_type___2__1(A, _, B) :-
10170    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10171              C),
10172    lookup_ht(C, A, D),
10173    member(E, D),
10174    E=suspension(_, active, _),
10175    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10176              F),
10177    lookup_ht(F, A, G),
10178    member(H, G),
10179    H=suspension(_, active, _, I),
10180    !,
10181    setarg(2, E, removed),
10182    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10183              J),
10184    delete_ht(J, A, E),
10185    setarg(2, H, removed),
10186    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10187              K),
10188    delete_ht(K, A, H),
10189    (   var(B)
10190    ->  true
10191    ;   arg(2, B, L),
10192        setarg(2, B, removed),
10193        (   L==not_stored_yet
10194        ->  true
10195        ;   nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10196                      M),
10197            delete_ht(M, A, B)
10198        )
10199    ),
10200    store_type(A, multi_store(I)).
10201store_type___2__1(A, _, B) :-
10202    arg(2, B, C),
10203    setarg(2, B, active),
10204    (   C==not_stored_yet
10205    ->  nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10206                  D),
10207        insert_ht(D, A, B)
10208    ;   true
10209    ).
10210get_store_type(A, B) :-
10211    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', C),
10212    lookup_ht(C, A, D),
10213    member(E, D),
10214    E=suspension(_, active, _, F),
10215    !,
10216    B=F.
10217get_store_type(A, B) :-
10218    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10219              C),
10220    lookup_ht(C, A, D),
10221    member(E, D),
10222    E=suspension(_, active, _, F),
10223    !,
10224    B=F.
10225get_store_type(_, default).
10226update_store_type(A, B) :-
10227    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10228              C),
10229    lookup_ht(C, A, D),
10230    member(E, D),
10231    E=suspension(_, active, _, F),
10232    (   memberchk(B, F),
10233        !
10234    ;   !,
10235        setarg(2, E, removed),
10236        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10237                  G),
10238        delete_ht(G, A, E),
10239        actual_store_types(A, [B|F])
10240    ).
10241update_store_type(A, B) :-
10242    actual_store_types(A, [B]).
10243actual_store_types(A, B) :-
10244    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10245              C),
10246    lookup_ht(C, A, D),
10247    member(E, D),
10248    E=suspension(_, active, _, F, G),
10249    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10250              H),
10251    lookup_ht(H, A, I),
10252    member(J, I),
10253    J=suspension(_, active, _),
10254    !,
10255    setarg(2, E, removed),
10256    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
10257              K),
10258    delete_ht(K, k(A, F), E),
10259    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10260              L),
10261    delete_ht(L, A, E),
10262    selectchk(multi_hash([F]), B, M),
10263    F=[N],
10264    (   get_constraint_arg_type(A, N, O),
10265        enumerated_atomic_type(O, P)
10266    ->  Q=P,
10267        R=complete
10268    ;   Q=G,
10269        R=incomplete
10270    ),
10271    actual_store_types(A,
10272                       [atomic_constants(F, Q, R)|M]).
10273actual_store_types(A, B) :-
10274    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10275              C),
10276    lookup_ht(C, A, D),
10277    member(E, D),
10278    E=suspension(_, active, _, F, G),
10279    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10280              H),
10281    lookup_ht(H, A, I),
10282    member(J, I),
10283    J=suspension(_, active, _),
10284    !,
10285    setarg(2, E, removed),
10286    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
10287              K),
10288    delete_ht(K, k(A, F), E),
10289    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10290              L),
10291    delete_ht(L, A, E),
10292    (   F=[M],
10293        get_constraint_arg_type(A, M, N),
10294        N=chr_enum(O)
10295    ->  P=complete
10296    ;   O=G,
10297        P=incomplete
10298    ),
10299    selectchk(multi_hash([F]), B, Q),
10300    actual_store_types(A,
10301                       [ground_constants(F, O, P)|Q]).
10302actual_store_types(A, B) :-
10303    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10304              C),
10305    lookup_ht(C, A, D),
10306    member(E, D),
10307    E=suspension(_, active, _),
10308    (   (   memberchk(multi_hash([[F]]), B),
10309            (   get_constraint_type(A, G),
10310                nth1(F, G, H),
10311                enumerated_atomic_type(H, I),
10312                !,
10313                selectchk(multi_hash([[F]]), B, J),
10314                actual_store_types(A,
10315                                   [ atomic_constants([F],
10316                                                      I,
10317                                                      complete)
10318                                   | J
10319                                   ])
10320            ;   get_constraint_arg_type(A, F, K),
10321                K=chr_enum(L),
10322                !,
10323                selectchk(multi_hash([[F]]), B, M),
10324                actual_store_types(A,
10325                                   [ ground_constants([F],
10326                                                      L,
10327                                                      complete)
10328                                   | M
10329                                   ])
10330            )
10331        ;   nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10332                      N),
10333            lookup_ht(N, A, O),
10334            member(P, O),
10335            P=suspension(_, active, _, _),
10336            !,
10337            setarg(2, E, removed),
10338            nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10339                      Q),
10340            delete_ht(Q, A, E),
10341            setarg(2, P, removed),
10342            nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10343                      R),
10344            delete_ht(R, A, P),
10345            (   maplist(partial_store, B)
10346            ->  S=[global_ground|B]
10347            ;   S=B
10348            ),
10349            store_type(A, multi_store(S))
10350        )
10351    ;   nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10352                  T),
10353        lookup_ht(T, A, U),
10354        member(V, U),
10355        V=suspension(_, active, _, _),
10356        !,
10357        setarg(2, E, removed),
10358        nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10359                  W),
10360        delete_ht(W, A, E),
10361        setarg(2, V, removed),
10362        nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10363                  X),
10364        delete_ht(X, A, V),
10365        store_type(A, multi_store(B))
10366    ).
10367actual_store_types(A, B) :-
10368    C=suspension(D, active, A, B),
10369    'chr gen_id'(D),
10370    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10371              E),
10372    insert_ht(E, A, C).
10373assumed_store_type(A, _) :-
10374    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10375              B),
10376    lookup_ht(B, A, C),
10377    member(D, C),
10378    D=suspension(_, active, _),
10379    (   (   nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10380                      E),
10381            lookup_ht(E, A, F),
10382            member(G, F),
10383            G=suspension(_, active, _, H),
10384            !,
10385            setarg(2, D, removed),
10386            nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10387                      I),
10388            delete_ht(I, A, D),
10389            setarg(2, G, removed),
10390            nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10391                      J),
10392            delete_ht(J, A, G),
10393            (   maplist(partial_store, H)
10394            ->  K=[global_ground|H]
10395            ;   K=H
10396            ),
10397            store_type(A, multi_store(K))
10398        ;   chr_pp_flag(debugable, on),
10399            !,
10400            setarg(2, D, removed),
10401            nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10402                      L),
10403            delete_ht(L, A, D),
10404            store_type(A, default)
10405        )
10406    ;   !,
10407        setarg(2, D, removed),
10408        nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10409                  M),
10410        delete_ht(M, A, D),
10411        store_type(A, global_ground)
10412    ).
10413assumed_store_type(A, B) :-
10414    C=suspension(D, active, A, B),
10415    'chr gen_id'(D),
10416    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10417              E),
10418    insert_ht(E, A, C).
10419validate_store_type_assumption(A) :-
10420    validate_store_type_assumption___1__0(A, _).
10421validate_store_type_assumption___1__0(A, B) :-
10422    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10423              C),
10424    lookup_ht(C, A, D),
10425    !,
10426    B=suspension(E, not_stored_yet, A),
10427    'chr gen_id'(E),
10428    validate_store_type_assumption___1__0__0__1(D, A, B).
10429validate_store_type_assumption___1__0__0__1([], A, B) :-
10430    validate_store_type_assumption___1__1(A, B).
10431validate_store_type_assumption___1__0__0__1([A|B], C, D) :-
10432    (   A=suspension(_, active, E, F),
10433        E==C,
10434        ground(C),
10435        nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10436                  G),
10437        lookup_ht(G, C, H),
10438        member(I, H),
10439        I=suspension(_, active, _, J, K)
10440    ->  ( setarg(2, A, removed),
10441          nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10442                    L),
10443          delete_ht(L, C, A)
10444        ),
10445        setarg(2, I, removed),
10446        ( nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
10447                    M),
10448          delete_ht(M, k(C, J), I)
10449        ),
10450        nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10451                  N),
10452        delete_ht(N, C, I),
10453        arg(2, D, O),
10454        setarg(2, D, active),
10455        (   O==not_stored_yet
10456        ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10457                      P),
10458            insert_ht(P, C, D)
10459        ;   true
10460        ),
10461        selectchk(multi_hash([J]), F, Q),
10462        J=[R],
10463        (   get_constraint_arg_type(C, R, S),
10464            enumerated_atomic_type(S, T)
10465        ->  U=T,
10466            V=complete
10467        ;   U=K,
10468            V=incomplete
10469        ),
10470        actual_store_types(C,
10471                           [ atomic_constants(J, U, V)
10472                           | Q
10473                           ]),
10474        (   D=suspension(_, active, _)
10475        ->  setarg(2, D, inactive),
10476            validate_store_type_assumption___1__0__0__1(B,
10477                                                        C,
10478                                                        D)
10479        ;   true
10480        )
10481    ;   validate_store_type_assumption___1__0__0__1(B, C, D)
10482    ).
10483validate_store_type_assumption___1__0(A, B) :-
10484    B=suspension(C, not_stored_yet, A),
10485    'chr gen_id'(C),
10486    validate_store_type_assumption___1__1(A, B).
10487validate_store_type_assumption___1__1(A, B) :-
10488    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10489              C),
10490    lookup_ht(C, A, D),
10491    !,
10492    validate_store_type_assumption___1__1__0__2(D, A, B).
10493validate_store_type_assumption___1__1__0__2([], A, B) :-
10494    validate_store_type_assumption___1__2(A, B).
10495validate_store_type_assumption___1__1__0__2([A|B], C, D) :-
10496    (   A=suspension(_, active, E, F),
10497        E==C,
10498        ground(C),
10499        nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10500                  G),
10501        lookup_ht(G, C, H),
10502        member(I, H),
10503        I=suspension(_, active, _, J, K)
10504    ->  ( setarg(2, A, removed),
10505          nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10506                    L),
10507          delete_ht(L, C, A)
10508        ),
10509        setarg(2, I, removed),
10510        ( nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
10511                    M),
10512          delete_ht(M, k(C, J), I)
10513        ),
10514        nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10515                  N),
10516        delete_ht(N, C, I),
10517        arg(2, D, O),
10518        setarg(2, D, active),
10519        (   O==not_stored_yet
10520        ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10521                      P),
10522            insert_ht(P, C, D)
10523        ;   true
10524        ),
10525        (   J=[Q],
10526            get_constraint_arg_type(C, Q, R),
10527            R=chr_enum(S)
10528        ->  T=complete
10529        ;   S=K,
10530            T=incomplete
10531        ),
10532        selectchk(multi_hash([J]), F, U),
10533        actual_store_types(C,
10534                           [ ground_constants(J, S, T)
10535                           | U
10536                           ]),
10537        (   D=suspension(_, active, _)
10538        ->  setarg(2, D, inactive),
10539            validate_store_type_assumption___1__1__0__2(B,
10540                                                        C,
10541                                                        D)
10542        ;   true
10543        )
10544    ;   validate_store_type_assumption___1__1__0__2(B, C, D)
10545    ).
10546validate_store_type_assumption___1__1(A, B) :-
10547    validate_store_type_assumption___1__2(A, B).
10548validate_store_type_assumption___1__2(A, B) :-
10549    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10550              C),
10551    lookup_ht(C, A, D),
10552    !,
10553    validate_store_type_assumption___1__2__0__3(D, A, B).
10554validate_store_type_assumption___1__2__0__3([], A, B) :-
10555    validate_store_type_assumption___1__3(A, B).
10556validate_store_type_assumption___1__2__0__3([A|B], C, D) :-
10557    (   A=suspension(_, active, E, F),
10558        E==C,
10559        memberchk(multi_hash([[G]]), F),
10560        get_constraint_type(C, H),
10561        nth1(G, H, I),
10562        enumerated_atomic_type(I, J)
10563    ->  setarg(2, A, removed),
10564        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10565                  K),
10566        delete_ht(K, C, A),
10567        arg(2, D, L),
10568        setarg(2, D, active),
10569        (   L==not_stored_yet
10570        ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10571                      M),
10572            insert_ht(M, C, D)
10573        ;   true
10574        ),
10575        selectchk(multi_hash([[G]]), F, N),
10576        actual_store_types(C,
10577                           [ atomic_constants([G], J, complete)
10578                           | N
10579                           ]),
10580        (   D=suspension(_, active, _)
10581        ->  setarg(2, D, inactive),
10582            validate_store_type_assumption___1__2__0__3(B,
10583                                                        C,
10584                                                        D)
10585        ;   true
10586        )
10587    ;   validate_store_type_assumption___1__2__0__3(B, C, D)
10588    ).
10589validate_store_type_assumption___1__2(A, B) :-
10590    validate_store_type_assumption___1__3(A, B).
10591validate_store_type_assumption___1__3(A, B) :-
10592    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10593              C),
10594    lookup_ht(C, A, D),
10595    !,
10596    validate_store_type_assumption___1__3__0__4(D, A, B).
10597validate_store_type_assumption___1__3__0__4([], A, B) :-
10598    validate_store_type_assumption___1__4(A, B).
10599validate_store_type_assumption___1__3__0__4([A|B], C, D) :-
10600    (   A=suspension(_, active, E, F),
10601        E==C,
10602        memberchk(multi_hash([[G]]), F),
10603        get_constraint_arg_type(C, G, H),
10604        H=chr_enum(I)
10605    ->  setarg(2, A, removed),
10606        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10607                  J),
10608        delete_ht(J, C, A),
10609        arg(2, D, K),
10610        setarg(2, D, active),
10611        (   K==not_stored_yet
10612        ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10613                      L),
10614            insert_ht(L, C, D)
10615        ;   true
10616        ),
10617        selectchk(multi_hash([[G]]), F, M),
10618        actual_store_types(C,
10619                           [ ground_constants([G], I, complete)
10620                           | M
10621                           ]),
10622        (   D=suspension(_, active, _)
10623        ->  setarg(2, D, inactive),
10624            validate_store_type_assumption___1__3__0__4(B,
10625                                                        C,
10626                                                        D)
10627        ;   true
10628        )
10629    ;   validate_store_type_assumption___1__3__0__4(B, C, D)
10630    ).
10631validate_store_type_assumption___1__3(A, B) :-
10632    validate_store_type_assumption___1__4(A, B).
10633validate_store_type_assumption___1__4(A, B) :-
10634    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10635              C),
10636    lookup_ht(C, A, D),
10637    member(E, D),
10638    E=suspension(_, active, _, F),
10639    (   nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10640                  G),
10641        lookup_ht(G, A, H),
10642        member(I, H),
10643        I=suspension(_, active, _, _),
10644        !,
10645        setarg(2, E, removed),
10646        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10647                  J),
10648        delete_ht(J, A, E),
10649        setarg(2, I, removed),
10650        nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10651                  K),
10652        delete_ht(K, A, I),
10653        (   var(B)
10654        ->  true
10655        ;   arg(2, B, L),
10656            setarg(2, B, removed),
10657            (   L==not_stored_yet
10658            ->  true
10659            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10660                          M),
10661                delete_ht(M, A, B)
10662            )
10663        ),
10664        (   maplist(partial_store, F)
10665        ->  N=[global_ground|F]
10666        ;   N=F
10667        ),
10668        store_type(A, multi_store(N))
10669    ;   nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10670                  O),
10671        lookup_ht(O, A, P),
10672        member(Q, P),
10673        Q=suspension(_, active, _, _),
10674        !,
10675        setarg(2, E, removed),
10676        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10677                  R),
10678        delete_ht(R, A, E),
10679        setarg(2, Q, removed),
10680        nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10681                  S),
10682        delete_ht(S, A, Q),
10683        (   var(B)
10684        ->  true
10685        ;   arg(2, B, T),
10686            setarg(2, B, removed),
10687            (   T==not_stored_yet
10688            ->  true
10689            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10690                          U),
10691                delete_ht(U, A, B)
10692            )
10693        ),
10694        store_type(A, multi_store(F))
10695    ).
10696validate_store_type_assumption___1__4(A, B) :-
10697    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10698              C),
10699    lookup_ht(C, A, D),
10700    member(E, D),
10701    E=suspension(_, active, _, _),
10702    (   chr_pp_flag(debugable, on),
10703        !,
10704        setarg(2, E, removed),
10705        nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10706                  F),
10707        delete_ht(F, A, E),
10708        (   var(B)
10709        ->  true
10710        ;   arg(2, B, G),
10711            setarg(2, B, removed),
10712            (   G==not_stored_yet
10713            ->  true
10714            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10715                          H),
10716                delete_ht(H, A, B)
10717            )
10718        ),
10719        store_type(A, default)
10720    ;   !,
10721        setarg(2, E, removed),
10722        nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10723                  I),
10724        delete_ht(I, A, E),
10725        (   var(B)
10726        ->  true
10727        ;   arg(2, B, J),
10728            setarg(2, B, removed),
10729            (   J==not_stored_yet
10730            ->  true
10731            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10732                          K),
10733                delete_ht(K, A, B)
10734            )
10735        ),
10736        store_type(A, global_ground)
10737    ).
10738validate_store_type_assumption___1__4(A, B) :-
10739    (   var(B)
10740    ->  true
10741    ;   arg(2, B, C),
10742        setarg(2, B, removed),
10743        (   C==not_stored_yet
10744        ->  true
10745        ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10746                      D),
10747            delete_ht(D, A, B)
10748        )
10749    ).
10750rule_count(A) :-
10751    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10752              B),
10753    (   member(C, B),
10754        C=suspension(_, active, _, _),
10755        !
10756    ;   !,
10757        rule_count___1__0__0__2(B, A)
10758    ).
10759rule_count___1__0__0__2([], A) :-
10760    rule_count___1__1(A).
10761rule_count___1__0__0__2([A|B], C) :-
10762    (   A=suspension(_, active, _, _)
10763    ->  setarg(2, A, removed),
10764        arg(3, A, D),
10765        (   var(D)
10766        ->  nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10767                      E),
10768            E=[_|F],
10769            b_setval('$chr_store_global_ground_chr_translate____rule_count___1',
10770                     F),
10771            (   F=[G|_]
10772            ->  setarg(3, G, _)
10773            ;   true
10774            )
10775        ;   D=[_, _|F],
10776            setarg(2, D, F),
10777            (   F=[G|_]
10778            ->  setarg(3, G, D)
10779            ;   true
10780            )
10781        ),
10782        rule_count___1__0__0__2(B, C)
10783    ;   rule_count___1__0__0__2(B, C)
10784    ).
10785rule_count(A) :-
10786    rule_count___1__1(A).
10787rule_count___1__1(A) :-
10788    B=suspension(C, active, _, A),
10789    'chr gen_id'(C),
10790    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10791              D),
10792    E=[B|D],
10793    b_setval('$chr_store_global_ground_chr_translate____rule_count___1', E),
10794    (   D=[F|_]
10795    ->  setarg(3, F, E)
10796    ;   true
10797    ).
10798inc_rule_count(A) :-
10799    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10800              B),
10801    member(C, B),
10802    C=suspension(_, active, _, D),
10803    !,
10804    setarg(2, C, removed),
10805    arg(3, C, E),
10806    (   var(E)
10807    ->  nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10808                  F),
10809        F=[_|G],
10810        b_setval('$chr_store_global_ground_chr_translate____rule_count___1',
10811                 G),
10812        (   G=[H|_]
10813        ->  setarg(3, H, _)
10814        ;   true
10815        )
10816    ;   E=[_, _|G],
10817        setarg(2, E, G),
10818        (   G=[H|_]
10819        ->  setarg(3, H, E)
10820        ;   true
10821        )
10822    ),
10823    A is D+1,
10824    rule_count(A).
10825inc_rule_count(1) :-
10826    rule_count(1).
10827passive(A, B) :-
10828    passive___2__0(A, B, _).
10829passive___2__0(A, B, _) :-
10830    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', C),
10831    lookup_ht(C, k(A, B), D),
10832    member(E, D),
10833    E=suspension(_, active, _, _, _),
10834    !.
10835passive___2__0(A, B, C) :-
10836    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
10837              D),
10838    lookup_ht(D, A, E),
10839    !,
10840    C=suspension(F, not_stored_yet, t, A, B),
10841    'chr gen_id'(F),
10842    passive___2__0__0__6(E, A, B, C).
10843passive___2__0__0__6([], A, B, C) :-
10844    passive___2__1(A, B, C).
10845passive___2__0__0__6([A|B], C, D, E) :-
10846    (   A=suspension(_, active, F, G),
10847        F==C,
10848        G=[H|I],
10849        H==D,
10850        ground(C),
10851        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', J),
10852        lookup_ht(J, C, K),
10853        member(L, K),
10854        L=suspension(_, active, _, _, _, _)
10855    ->  setarg(2, A, removed),
10856        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
10857                    M),
10858          delete_ht(M, k(C, [D|I]), A)
10859        ),
10860        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
10861                  N),
10862        delete_ht(N, C, A),
10863        arg(2, E, O),
10864        setarg(2, E, active),
10865        (   O==not_stored_yet
10866        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
10867                      P),
10868            insert_ht(P, C, E),
10869            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
10870                      Q),
10871            insert_ht(Q, k(C, D), E)
10872        ;   true
10873        ),
10874        least_occurrence(C, I),
10875        (   E=suspension(_, active, _, _, _)
10876        ->  setarg(2, E, inactive),
10877            passive___2__0__0__6(B, C, D, E)
10878        ;   true
10879        )
10880    ;   passive___2__0__0__6(B, C, D, E)
10881    ).
10882passive___2__0(A, B, C) :-
10883    C=suspension(D, not_stored_yet, t, A, B),
10884    'chr gen_id'(D),
10885    passive___2__1(A, B, C).
10886passive___2__1(A, B, C) :-
10887    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
10888              D),
10889    lookup_ht(D, k(A, B), E),
10890    !,
10891    passive___2__1__0__8(E, A, B, C).
10892passive___2__1__0__8([], A, B, C) :-
10893    passive___2__2(A, B, C).
10894passive___2__1__0__8([A|B], C, D, E) :-
10895    (   A=suspension(_, active, _, _, F, G, H, I, _),
10896        H==C,
10897        I==D,
10898        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
10899                  J),
10900        lookup_ht(J, F, K)
10901    ->  passive___2__1__1__8(K,
10902                             F,
10903                             G,
10904                             A,
10905                             B,
10906                             C,
10907                             D,
10908                             E)
10909    ;   passive___2__1__0__8(B, C, D, E)
10910    ).
10911passive___2__1__1__8([], _, _, _, A, B, C, D) :-
10912    passive___2__1__0__8(A, B, C, D).
10913passive___2__1__1__8([A|B], C, D, E, F, G, H, I) :-
10914    (   A=suspension(_, active, _, J, K, L),
10915        J==C,
10916        D<K,
10917        ( ground(C),
10918          ground(D)
10919        ),
10920        nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
10921                  M),
10922        lookup_ht(M, k(C, D, yes), N),
10923        member(O, N),
10924        O=suspension(_, active, _, _, _)
10925    ->  ( setarg(2, A, removed),
10926          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
10927                    P),
10928          delete_ht(P, k(C, L), A),
10929          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
10930                    Q),
10931          delete_ht(Q, C, A)
10932        ),
10933        setarg(2, O, removed),
10934        ( nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13',
10935                    R),
10936          delete_ht(R, k(C, yes), O)
10937        ),
10938        nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
10939                  S),
10940        delete_ht(S, k(C, D, yes), O),
10941        arg(2, I, T),
10942        setarg(2, I, active),
10943        (   T==not_stored_yet
10944        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
10945                      U),
10946            insert_ht(U, G, I),
10947            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
10948                      V),
10949            insert_ht(V, k(G, H), I)
10950        ;   true
10951        ),
10952        W is L-1,
10953        stored(C, D, maybe),
10954        stored_complete(C, K, W),
10955        (   I=suspension(_, active, _, _, _)
10956        ->  setarg(2, I, inactive),
10957            passive___2__1__1__8(B,
10958                                 C,
10959                                 D,
10960                                 E,
10961                                 F,
10962                                 G,
10963                                 H,
10964                                 I)
10965        ;   true
10966        )
10967    ;   passive___2__1__1__8(B,
10968                             C,
10969                             D,
10970                             E,
10971                             F,
10972                             G,
10973                             H,
10974                             I)
10975    ).
10976passive___2__1(A, B, C) :-
10977    passive___2__2(A, B, C).
10978passive___2__2(A, B, C) :-
10979    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', D),
10980    lookup_ht(D, A, E),
10981    !,
10982    passive___2__2__0__9(E, A, B, C).
10983passive___2__2__0__9([], A, B, C) :-
10984    passive___2__3(A, B, C).
10985passive___2__2__0__9([A|B], C, D, E) :-
10986    (   A=suspension(_, active, _, _, F, G),
10987        F==C,
10988        H=t(251, A, E),
10989        '$novel_production'(A, H),
10990        '$novel_production'(E, H),
10991        G=pragma(rule(_, _, _, _), ids([D|I], J), _, _, C)
10992    ->  '$extend_history'(E, H),
10993        arg(2, E, K),
10994        setarg(2, E, active),
10995        (   K==not_stored_yet
10996        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
10997                      L),
10998            insert_ht(L, C, E),
10999            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11000                      M),
11001            insert_ht(M, k(C, D), E)
11002        ;   true
11003        ),
11004        append(I, J, N),
11005        check_all_passive(C, N),
11006        (   E=suspension(_, active, _, _, _)
11007        ->  setarg(2, E, inactive),
11008            passive___2__2__0__9(B, C, D, E)
11009        ;   true
11010        )
11011    ;   passive___2__2__0__9(B, C, D, E)
11012    ).
11013passive___2__2(A, B, C) :-
11014    passive___2__3(A, B, C).
11015passive___2__3(A, B, C) :-
11016    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', D),
11017    lookup_ht(D, A, E),
11018    !,
11019    passive___2__3__0__10(E, A, B, C).
11020passive___2__3__0__10([], A, B, C) :-
11021    passive___2__4(A, B, C).
11022passive___2__3__0__10([A|B], C, D, E) :-
11023    (   A=suspension(_, active, _, _, F, G),
11024        F==C,
11025        H=t(252, A, E),
11026        '$novel_production'(A, H),
11027        '$novel_production'(E, H),
11028        G=pragma(rule(_, _, _, _), ids([], [D|I]), _, _, C)
11029    ->  '$extend_history'(E, H),
11030        arg(2, E, J),
11031        setarg(2, E, active),
11032        (   J==not_stored_yet
11033        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11034                      K),
11035            insert_ht(K, C, E),
11036            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11037                      L),
11038            insert_ht(L, k(C, D), E)
11039        ;   true
11040        ),
11041        check_all_passive(C, I),
11042        (   E=suspension(_, active, _, _, _)
11043        ->  setarg(2, E, inactive),
11044            passive___2__3__0__10(B, C, D, E)
11045        ;   true
11046        )
11047    ;   passive___2__3__0__10(B, C, D, E)
11048    ).
11049passive___2__3(A, B, C) :-
11050    passive___2__4(A, B, C).
11051passive___2__4(A, B, C) :-
11052    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
11053              D),
11054    lookup_ht(D, A, E),
11055    !,
11056    passive___2__4__0__11(E, A, B, C).
11057passive___2__4__0__11([], A, B, C) :-
11058    passive___2__5(A, B, C).
11059passive___2__4__0__11([A|B], C, D, E) :-
11060    (   A=suspension(_, active, F, G),
11061        F==C,
11062        G=[H|I],
11063        H==D
11064    ->  setarg(2, A, removed),
11065        ( nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
11066                    J),
11067          delete_ht(J, k(C, [D|I]), A)
11068        ),
11069        nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
11070                  K),
11071        delete_ht(K, C, A),
11072        arg(2, E, L),
11073        setarg(2, E, active),
11074        (   L==not_stored_yet
11075        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11076                      M),
11077            insert_ht(M, C, E),
11078            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11079                      N),
11080            insert_ht(N, k(C, D), E)
11081        ;   true
11082        ),
11083        check_all_passive(C, I),
11084        (   E=suspension(_, active, _, _, _)
11085        ->  setarg(2, E, inactive),
11086            passive___2__4__0__11(B, C, D, E)
11087        ;   true
11088        )
11089    ;   passive___2__4__0__11(B, C, D, E)
11090    ).
11091passive___2__4(A, B, C) :-
11092    passive___2__5(A, B, C).
11093passive___2__5(A, B, C) :-
11094    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11095              D),
11096    lookup_ht(D, k(A, B), E),
11097    !,
11098    passive___2__5__0__14(E, A, B, C).
11099passive___2__5__0__14([], A, B, C) :-
11100    passive___2__6(A, B, C).
11101passive___2__5__0__14([A|B], C, D, E) :-
11102    (   A=suspension(_, active, _, _, F, G, H, I, _),
11103        H==C,
11104        I==D,
11105        nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
11106                  J),
11107        lookup_ht(J, k(F, G), K)
11108    ->  passive___2__5__1__14(K,
11109                              F,
11110                              G,
11111                              A,
11112                              B,
11113                              C,
11114                              D,
11115                              E)
11116    ;   passive___2__5__0__14(B, C, D, E)
11117    ).
11118passive___2__5__1__14([], _, _, _, A, B, C, D) :-
11119    passive___2__5__0__14(A, B, C, D).
11120passive___2__5__1__14([A|B], C, D, E, F, G, H, I) :-
11121    (   A=suspension(_, active, _, J, K),
11122        J==C,
11123        K==D,
11124        L=t(362, E, I, A),
11125        '$novel_production'(E, L),
11126        '$novel_production'(I, L),
11127        '$novel_production'(A, L),
11128        D>1
11129    ->  '$extend_history'(I, L),
11130        arg(2, I, M),
11131        setarg(2, I, active),
11132        (   M==not_stored_yet
11133        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11134                      N),
11135            insert_ht(N, G, I),
11136            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11137                      O),
11138            insert_ht(O, k(G, H), I)
11139        ;   true
11140        ),
11141        P is D-1,
11142        skip_to_next_id(C, P),
11143        (   I=suspension(_, active, _, _, _)
11144        ->  setarg(2, I, inactive),
11145            passive___2__5__1__14(B,
11146                                  C,
11147                                  D,
11148                                  E,
11149                                  F,
11150                                  G,
11151                                  H,
11152                                  I)
11153        ;   true
11154        )
11155    ;   passive___2__5__1__14(B,
11156                              C,
11157                              D,
11158                              E,
11159                              F,
11160                              G,
11161                              H,
11162                              I)
11163    ).
11164passive___2__5(A, B, C) :-
11165    passive___2__6(A, B, C).
11166passive___2__6(A, B, C) :-
11167    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11168              D),
11169    lookup_ht(D, k(A, B), E),
11170    !,
11171    passive___2__6__0__15(E, A, B, C).
11172passive___2__6__0__15([], A, B, C) :-
11173    passive___2__7(A, B, C).
11174passive___2__6__0__15([A|B], C, D, E) :-
11175    (   A=suspension(_, active, _, _, F, G, H, I, _),
11176        H==C,
11177        I==D,
11178        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
11179                  J),
11180        lookup_ht(J, k(F, G), K)
11181    ->  passive___2__6__1__15(K,
11182                              F,
11183                              G,
11184                              A,
11185                              B,
11186                              C,
11187                              D,
11188                              E)
11189    ;   passive___2__6__0__15(B, C, D, E)
11190    ).
11191passive___2__6__1__15([], _, _, _, A, B, C, D) :-
11192    passive___2__6__0__15(A, B, C, D).
11193passive___2__6__1__15([A|B], C, D, E, F, G, H, I) :-
11194    (   A=suspension(_, active, J, K, L),
11195        J==C,
11196        K==D
11197    ->  setarg(2, A, removed),
11198        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
11199                  M),
11200        delete_ht(M, k(C, D), A),
11201        arg(2, I, N),
11202        setarg(2, I, active),
11203        (   N==not_stored_yet
11204        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11205                      O),
11206            insert_ht(O, G, I),
11207            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11208                      P),
11209            insert_ht(P, k(G, H), I)
11210        ;   true
11211        ),
11212        occurrence_code_id(C, D, L),
11213        Q is D+1,
11214        set_occurrence_code_id(C, Q, L),
11215        (   I=suspension(_, active, _, _, _)
11216        ->  setarg(2, I, inactive),
11217            passive___2__6__1__15(B,
11218                                  C,
11219                                  D,
11220                                  E,
11221                                  F,
11222                                  G,
11223                                  H,
11224                                  I)
11225        ;   true
11226        )
11227    ;   passive___2__6__1__15(B,
11228                              C,
11229                              D,
11230                              E,
11231                              F,
11232                              G,
11233                              H,
11234                              I)
11235    ).
11236passive___2__6(A, B, C) :-
11237    passive___2__7(A, B, C).
11238passive___2__7(A, B, C) :-
11239    arg(2, C, D),
11240    setarg(2, C, active),
11241    (   D==not_stored_yet
11242    ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11243                  E),
11244        insert_ht(E, A, C),
11245        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11246                  F),
11247        insert_ht(F, k(A, B), C)
11248    ;   true
11249    ).
11250is_passive(A, B) :-
11251    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', C),
11252    lookup_ht(C, k(A, B), D),
11253    member(E, D),
11254    E=suspension(_, active, _, _, _),
11255    !.
11256is_passive(_, _) :-
11257    fail.
11258any_passive_head(A) :-
11259    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', B),
11260    lookup_ht(B, A, C),
11261    member(D, C),
11262    D=suspension(_, active, _, _, _),
11263    !.
11264any_passive_head(_) :-
11265    fail.
11266new_occurrence(A, B, C, D) :-
11267    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
11268              E),
11269    lookup_ht(E, A, F),
11270    member(G, F),
11271    G=suspension(_, active, _, _, H),
11272    !,
11273    setarg(2, G, removed),
11274    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
11275              I),
11276    delete_ht(I, A, G),
11277    J is H+1,
11278    occurrence(A, J, B, C, D),
11279    max_occurrence(A, J).
11280new_occurrence(A, B, _, _) :-
11281    chr_error(internal,
11282              'new_occurrence: missing max_occurrence for ~w in rule ~w\n',
11283              [A, B]).
11284occurrence(A, B, C, D, E) :-
11285    occurrence___5__0(A, B, C, D, E, _).
11286occurrence___5__0(A, B, C, D, E, F) :-
11287    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
11288    lookup_ht(G, C, H),
11289    !,
11290    F=suspension(I, not_stored_yet, t, _, A, B, C, D, E),
11291    'chr gen_id'(I),
11292    occurrence___5__0__0__4(H,
11293                            A,
11294                            B,
11295                            C,
11296                            D,
11297                            E,
11298                            F).
11299occurrence___5__0__0__4([], A, B, C, D, E, F) :-
11300    occurrence___5__1(A, B, C, D, E, F).
11301occurrence___5__0__0__4([A|B], C, D, E, F, G, H) :-
11302    (   A=suspension(_, active, _, _, I, J),
11303        I==E,
11304        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
11305                  K),
11306        lookup_ht(K, k(C, D), L)
11307    ->  occurrence___5__0__1__4(L,
11308                                J,
11309                                A,
11310                                B,
11311                                C,
11312                                D,
11313                                E,
11314                                F,
11315                                G,
11316                                H)
11317    ;   occurrence___5__0__0__4(B,
11318                                C,
11319                                D,
11320                                E,
11321                                F,
11322                                G,
11323                                H)
11324    ).
11325occurrence___5__0__1__4([], _, _, A, B, C, D, E, F, G) :-
11326    occurrence___5__0__0__4(A,
11327                            B,
11328                            C,
11329                            D,
11330                            E,
11331                            F,
11332                            G).
11333occurrence___5__0__1__4([A|B], C, D, E, F, G, H, I, J, K) :-
11334    (   A=suspension(_, active, _, L, M),
11335        L==F,
11336        M==G,
11337        N=t(60, D, K, A),
11338        '$novel_production'(D, N),
11339        '$novel_production'(K, N),
11340        '$novel_production'(A, N)
11341    ->  '$extend_history'(K, N),
11342        arg(2, K, O),
11343        setarg(2, K, active),
11344        (   O==not_stored_yet
11345        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11346                      P),
11347            insert_ht(P, k(F, J), K),
11348            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11349                      Q),
11350            R=[K|Q],
11351            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11352                     R),
11353            (   Q=[S|_]
11354            ->  setarg(4, S, R)
11355            ;   true
11356            ),
11357            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11358                      T),
11359            insert_ht(T, k(F, G, J), K),
11360            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11361                      U),
11362            insert_ht(U, k(F, H, I), K),
11363            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11364                      V),
11365            insert_ht(V, k(F, G), K),
11366            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11367                      W),
11368            insert_ht(W, H, K),
11369            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11370                      X),
11371            insert_ht(X, k(F, H), K),
11372            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11373                      Y),
11374            insert_ht(Y, k(H, I), K),
11375            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11376                      Z),
11377            insert_ht(Z, F, K)
11378        ;   true
11379        ),
11380        \+ is_passive(H, I),
11381        J==propagation,
11382        (   stored_in_guard_before_next_kept_occurrence(F, G)
11383        ->  true
11384        ;   C=pragma(rule([_|_], _, _, _), _, _, _, _)
11385        ->  is_observed(F, G)
11386        ;   is_least_occurrence(H)
11387        ->  is_observed(F, G)
11388        ;   true
11389        ),
11390        (   K=suspension(_, active, _, _, _, _, _, _, _)
11391        ->  setarg(2, K, inactive),
11392            occurrence___5__0__1__4(B,
11393                                    C,
11394                                    D,
11395                                    E,
11396                                    F,
11397                                    G,
11398                                    H,
11399                                    I,
11400                                    J,
11401                                    K)
11402        ;   true
11403        )
11404    ;   occurrence___5__0__1__4(B,
11405                                C,
11406                                D,
11407                                E,
11408                                F,
11409                                G,
11410                                H,
11411                                I,
11412                                J,
11413                                K)
11414    ).
11415occurrence___5__0(A, B, C, D, E, F) :-
11416    F=suspension(G, not_stored_yet, t, _, A, B, C, D, E),
11417    'chr gen_id'(G),
11418    occurrence___5__1(A, B, C, D, E, F).
11419occurrence___5__1(A, B, C, D, E, F) :-
11420    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
11421              G),
11422    lookup_ht(G, C, H),
11423    !,
11424    occurrence___5__1__0__7(H,
11425                            A,
11426                            B,
11427                            C,
11428                            D,
11429                            E,
11430                            F).
11431occurrence___5__1__0__7([], A, B, C, D, E, F) :-
11432    occurrence___5__2(A, B, C, D, E, F).
11433occurrence___5__1__0__7([A|B], C, D, E, F, G, H) :-
11434    (   A=suspension(_, active, I, J),
11435        I==E,
11436        J=[K|L],
11437        K==F,
11438        ( ground(C),
11439          nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
11440                    M),
11441          lookup_ht(M, C, N)
11442        ),
11443        member(O, N),
11444        O=suspension(_, active, _, _, P),
11445        P>=D,
11446        ( ground(E),
11447          nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
11448                    Q),
11449          lookup_ht(Q, E, R)
11450        ),
11451        member(S, R),
11452        S=suspension(_, active, _, _, _, _),
11453        \+ may_trigger(C)
11454    ->  setarg(2, A, removed),
11455        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
11456                    T),
11457          delete_ht(T, k(E, [F|L]), A)
11458        ),
11459        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
11460                  U),
11461        delete_ht(U, E, A),
11462        arg(2, H, V),
11463        setarg(2, H, active),
11464        (   V==not_stored_yet
11465        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11466                      W),
11467            insert_ht(W, k(C, G), H),
11468            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11469                      X),
11470            Y=[H|X],
11471            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11472                     Y),
11473            (   X=[Z|_]
11474            ->  setarg(4, Z, Y)
11475            ;   true
11476            ),
11477            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11478                      A1),
11479            insert_ht(A1, k(C, D, G), H),
11480            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11481                      B1),
11482            insert_ht(B1, k(C, E, F), H),
11483            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11484                      C1),
11485            insert_ht(C1, k(C, D), H),
11486            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11487                      D1),
11488            insert_ht(D1, E, H),
11489            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11490                      E1),
11491            insert_ht(E1, k(C, E), H),
11492            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11493                      F1),
11494            insert_ht(F1, k(E, F), H),
11495            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11496                      G1),
11497            insert_ht(G1, C, H)
11498        ;   true
11499        ),
11500        least_occurrence(E, L),
11501        (   H=suspension(_, active, _, _, _, _, _, _, _)
11502        ->  setarg(2, H, inactive),
11503            occurrence___5__1__0__7(B,
11504                                    C,
11505                                    D,
11506                                    E,
11507                                    F,
11508                                    G,
11509                                    H)
11510        ;   true
11511        )
11512    ;   occurrence___5__1__0__7(B,
11513                                C,
11514                                D,
11515                                E,
11516                                F,
11517                                G,
11518                                H)
11519    ).
11520occurrence___5__1(A, B, C, D, E, F) :-
11521    occurrence___5__2(A, B, C, D, E, F).
11522occurrence___5__2(A, B, C, D, E, F) :-
11523    nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
11524              G),
11525    lookup_ht(G, C, H),
11526    !,
11527    occurrence___5__2__0__29(H,
11528                             A,
11529                             B,
11530                             C,
11531                             D,
11532                             E,
11533                             F).
11534occurrence___5__2__0__29([], A, B, C, D, E, F) :-
11535    occurrence___5__3(A, B, C, D, E, F).
11536occurrence___5__2__0__29([A|B], C, D, E, F, G, H) :-
11537    (   A=suspension(_, active, _, I),
11538        I==E,
11539        J=t(180, A, H),
11540        '$novel_production'(A, J),
11541        '$novel_production'(H, J)
11542    ->  '$extend_history'(H, J),
11543        arg(2, H, K),
11544        setarg(2, H, active),
11545        (   K==not_stored_yet
11546        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11547                      L),
11548            insert_ht(L, k(C, G), H),
11549            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11550                      M),
11551            N=[H|M],
11552            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11553                     N),
11554            (   M=[O|_]
11555            ->  setarg(4, O, N)
11556            ;   true
11557            ),
11558            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11559                      P),
11560            insert_ht(P, k(C, D, G), H),
11561            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11562                      Q),
11563            insert_ht(Q, k(C, E, F), H),
11564            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11565                      R),
11566            insert_ht(R, k(C, D), H),
11567            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11568                      S),
11569            insert_ht(S, E, H),
11570            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11571                      T),
11572            insert_ht(T, k(C, E), H),
11573            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11574                      U),
11575            insert_ht(U, k(E, F), H),
11576            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11577                      V),
11578            insert_ht(V, C, H)
11579        ;   true
11580        ),
11581        passive(E, F),
11582        (   H=suspension(_, active, _, _, _, _, _, _, _)
11583        ->  setarg(2, H, inactive),
11584            occurrence___5__2__0__29(B,
11585                                     C,
11586                                     D,
11587                                     E,
11588                                     F,
11589                                     G,
11590                                     H)
11591        ;   true
11592        )
11593    ;   occurrence___5__2__0__29(B,
11594                                 C,
11595                                 D,
11596                                 E,
11597                                 F,
11598                                 G,
11599                                 H)
11600    ).
11601occurrence___5__2(A, B, C, D, E, F) :-
11602    occurrence___5__3(A, B, C, D, E, F).
11603occurrence___5__3(A, B, C, D, E, F) :-
11604    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
11605    lookup_ht(G, C, H),
11606    !,
11607    occurrence___5__3__0__30(H,
11608                             A,
11609                             B,
11610                             C,
11611                             D,
11612                             E,
11613                             F).
11614occurrence___5__3__0__30([], A, B, C, D, E, F) :-
11615    occurrence___5__4(A, B, C, D, E, F).
11616occurrence___5__3__0__30([A|B], C, D, E, F, G, H) :-
11617    (   A=suspension(_, active, _, _, I, J),
11618        I==E,
11619        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11620                  K),
11621        lookup_ht(K, k(C, E), L)
11622    ->  occurrence___5__3__1__30(L,
11623                                 J,
11624                                 A,
11625                                 B,
11626                                 C,
11627                                 D,
11628                                 E,
11629                                 F,
11630                                 G,
11631                                 H)
11632    ;   occurrence___5__3__0__30(B,
11633                                 C,
11634                                 D,
11635                                 E,
11636                                 F,
11637                                 G,
11638                                 H)
11639    ).
11640occurrence___5__3__1__30([], _, _, A, B, C, D, E, F, G) :-
11641    occurrence___5__3__0__30(A,
11642                             B,
11643                             C,
11644                             D,
11645                             E,
11646                             F,
11647                             G).
11648occurrence___5__3__1__30([A|B], C, D, E, F, G, H, I, J, K) :-
11649    (   A=suspension(_, active, _, _, L, M, N, _, _),
11650        L==F,
11651        N==H,
11652        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
11653                  O),
11654        lookup_ht(O, H, P)
11655    ->  occurrence___5__3__2__30(P,
11656                                 M,
11657                                 A,
11658                                 B,
11659                                 C,
11660                                 D,
11661                                 E,
11662                                 F,
11663                                 G,
11664                                 H,
11665                                 I,
11666                                 J,
11667                                 K)
11668    ;   occurrence___5__3__1__30(B,
11669                                 C,
11670                                 D,
11671                                 E,
11672                                 F,
11673                                 G,
11674                                 H,
11675                                 I,
11676                                 J,
11677                                 K)
11678    ).
11679occurrence___5__3__2__30([], _, _, A, B, C, D, E, F, G, H, I, J) :-
11680    occurrence___5__3__1__30(A,
11681                             B,
11682                             C,
11683                             D,
11684                             E,
11685                             F,
11686                             G,
11687                             H,
11688                             I,
11689                             J).
11690occurrence___5__3__2__30([A|B], C, D, E, F, G, H, I, J, K, L, M, N) :-
11691    (   A=suspension(_, active, _, _, O, _, _, _, _, _),
11692        O==K,
11693        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11694                  P)
11695    ->  occurrence___5__3__3__30(P,
11696                                 A,
11697                                 B,
11698                                 C,
11699                                 D,
11700                                 E,
11701                                 F,
11702                                 G,
11703                                 H,
11704                                 I,
11705                                 J,
11706                                 K,
11707                                 L,
11708                                 M,
11709                                 N)
11710    ;   occurrence___5__3__2__30(B,
11711                                 C,
11712                                 D,
11713                                 E,
11714                                 F,
11715                                 G,
11716                                 H,
11717                                 I,
11718                                 J,
11719                                 K,
11720                                 L,
11721                                 M,
11722                                 N)
11723    ).
11724occurrence___5__3__3__30([], _, A, B, C, D, E, F, G, H, I, J, K, L, M) :-
11725    occurrence___5__3__2__30(A,
11726                             B,
11727                             C,
11728                             D,
11729                             E,
11730                             F,
11731                             G,
11732                             H,
11733                             I,
11734                             J,
11735                             K,
11736                             L,
11737                             M).
11738occurrence___5__3__3__30([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O, P) :-
11739    (   A=suspension(_, active, _, Q),
11740        L<E,
11741        chr_pp_flag(occurrence_subsumption, on),
11742        H=pragma(rule(R, _, _, _), _, _, _, _),
11743        R\==[],
11744        \+ tree_set_memberchk(K, Q)
11745    ->  setarg(2, A, removed),
11746        arg(3, A, S),
11747        (   var(S)
11748        ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11749                      T),
11750            T=[_|U],
11751            b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11752                     U),
11753            (   U=[V|_]
11754            ->  setarg(3, V, _)
11755            ;   true
11756            )
11757        ;   S=[_, _|U],
11758            setarg(2, S, U),
11759            (   U=[V|_]
11760            ->  setarg(3, V, S)
11761            ;   true
11762            )
11763        ),
11764        arg(2, P, W),
11765        setarg(2, P, active),
11766        (   W==not_stored_yet
11767        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11768                      X),
11769            insert_ht(X, k(K, O), P),
11770            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11771                      Y),
11772            Z=[P|Y],
11773            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11774                     Z),
11775            (   Y=[A1|_]
11776            ->  setarg(4, A1, Z)
11777            ;   true
11778            ),
11779            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11780                      B1),
11781            insert_ht(B1, k(K, L, O), P),
11782            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11783                      C1),
11784            insert_ht(C1, k(K, M, N), P),
11785            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11786                      D1),
11787            insert_ht(D1, k(K, L), P),
11788            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11789                      E1),
11790            insert_ht(E1, M, P),
11791            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11792                      F1),
11793            insert_ht(F1, k(K, M), P),
11794            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11795                      G1),
11796            insert_ht(G1, k(M, N), P),
11797            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11798                      H1),
11799            insert_ht(H1, K, P)
11800        ;   true
11801        ),
11802        first_occ_in_rule(M, K, L, N),
11803        tree_set_add(Q, K, I1),
11804        multiple_occ_constraints_checked(I1),
11805        (   P=suspension(_, active, _, _, _, _, _, _, _)
11806        ->  setarg(2, P, inactive),
11807            occurrence___5__3__3__30(B,
11808                                     C,
11809                                     D,
11810                                     E,
11811                                     F,
11812                                     G,
11813                                     H,
11814                                     I,
11815                                     J,
11816                                     K,
11817                                     L,
11818                                     M,
11819                                     N,
11820                                     O,
11821                                     P)
11822        ;   true
11823        )
11824    ;   occurrence___5__3__3__30(B,
11825                                 C,
11826                                 D,
11827                                 E,
11828                                 F,
11829                                 G,
11830                                 H,
11831                                 I,
11832                                 J,
11833                                 K,
11834                                 L,
11835                                 M,
11836                                 N,
11837                                 O,
11838                                 P)
11839    ).
11840occurrence___5__3(A, B, C, D, E, F) :-
11841    occurrence___5__4(A, B, C, D, E, F).
11842occurrence___5__4(A, B, C, D, E, F) :-
11843    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
11844    lookup_ht(G, C, H),
11845    !,
11846    occurrence___5__4__0__31(H,
11847                             A,
11848                             B,
11849                             C,
11850                             D,
11851                             E,
11852                             F).
11853occurrence___5__4__0__31([], A, B, C, D, E, F) :-
11854    occurrence___5__5(A, B, C, D, E, F).
11855occurrence___5__4__0__31([A|B], C, D, E, F, G, H) :-
11856    (   A=suspension(_, active, _, _, I, J),
11857        I==E,
11858        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11859                  K),
11860        lookup_ht(K, k(C, E), L)
11861    ->  occurrence___5__4__1__31(L,
11862                                 J,
11863                                 A,
11864                                 B,
11865                                 C,
11866                                 D,
11867                                 E,
11868                                 F,
11869                                 G,
11870                                 H)
11871    ;   occurrence___5__4__0__31(B,
11872                                 C,
11873                                 D,
11874                                 E,
11875                                 F,
11876                                 G,
11877                                 H)
11878    ).
11879occurrence___5__4__1__31([], _, _, A, B, C, D, E, F, G) :-
11880    occurrence___5__4__0__31(A,
11881                             B,
11882                             C,
11883                             D,
11884                             E,
11885                             F,
11886                             G).
11887occurrence___5__4__1__31([A|B], C, D, E, F, G, H, I, J, K) :-
11888    (   A=suspension(_, active, _, _, L, M, N, O, _),
11889        L==F,
11890        N==H,
11891        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
11892                  P),
11893        lookup_ht(P, H, Q)
11894    ->  occurrence___5__4__2__31(Q,
11895                                 M,
11896                                 O,
11897                                 A,
11898                                 B,
11899                                 C,
11900                                 D,
11901                                 E,
11902                                 F,
11903                                 G,
11904                                 H,
11905                                 I,
11906                                 J,
11907                                 K)
11908    ;   occurrence___5__4__1__31(B,
11909                                 C,
11910                                 D,
11911                                 E,
11912                                 F,
11913                                 G,
11914                                 H,
11915                                 I,
11916                                 J,
11917                                 K)
11918    ).
11919occurrence___5__4__2__31([], _, _, _, A, B, C, D, E, F, G, H, I, J) :-
11920    occurrence___5__4__1__31(A,
11921                             B,
11922                             C,
11923                             D,
11924                             E,
11925                             F,
11926                             G,
11927                             H,
11928                             I,
11929                             J).
11930occurrence___5__4__2__31([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O) :-
11931    (   A=suspension(_, active, _, _, P, _, _, _, _, _),
11932        P==L,
11933        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11934                  Q)
11935    ->  occurrence___5__4__3__31(Q,
11936                                 A,
11937                                 B,
11938                                 C,
11939                                 D,
11940                                 E,
11941                                 F,
11942                                 G,
11943                                 H,
11944                                 I,
11945                                 J,
11946                                 K,
11947                                 L,
11948                                 M,
11949                                 N,
11950                                 O)
11951    ;   occurrence___5__4__2__31(B,
11952                                 C,
11953                                 D,
11954                                 E,
11955                                 F,
11956                                 G,
11957                                 H,
11958                                 I,
11959                                 J,
11960                                 K,
11961                                 L,
11962                                 M,
11963                                 N,
11964                                 O)
11965    ).
11966occurrence___5__4__3__31([], _, A, B, C, D, E, F, G, H, I, J, K, L, M, N) :-
11967    occurrence___5__4__2__31(A,
11968                             B,
11969                             C,
11970                             D,
11971                             E,
11972                             F,
11973                             G,
11974                             H,
11975                             I,
11976                             J,
11977                             K,
11978                             L,
11979                             M,
11980                             N).
11981occurrence___5__4__3__31([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) :-
11982    (   A=suspension(_, active, _, R),
11983        E<M,
11984        chr_pp_flag(occurrence_subsumption, on),
11985        I=pragma(rule(S, _, _, _), _, _, _, _),
11986        S\==[],
11987        \+ tree_set_memberchk(L, R)
11988    ->  setarg(2, A, removed),
11989        arg(3, A, T),
11990        (   var(T)
11991        ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11992                      U),
11993            U=[_|V],
11994            b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11995                     V),
11996            (   V=[W|_]
11997            ->  setarg(3, W, _)
11998            ;   true
11999            )
12000        ;   T=[_, _|V],
12001            setarg(2, T, V),
12002            (   V=[W|_]
12003            ->  setarg(3, W, T)
12004            ;   true
12005            )
12006        ),
12007        arg(2, Q, X),
12008        setarg(2, Q, active),
12009        (   X==not_stored_yet
12010        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12011                      Y),
12012            insert_ht(Y, k(L, P), Q),
12013            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12014                      Z),
12015            A1=[Q|Z],
12016            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12017                     A1),
12018            (   Z=[B1|_]
12019            ->  setarg(4, B1, A1)
12020            ;   true
12021            ),
12022            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12023                      C1),
12024            insert_ht(C1, k(L, M, P), Q),
12025            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12026                      D1),
12027            insert_ht(D1, k(L, N, O), Q),
12028            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12029                      E1),
12030            insert_ht(E1, k(L, M), Q),
12031            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12032                      F1),
12033            insert_ht(F1, N, Q),
12034            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12035                      G1),
12036            insert_ht(G1, k(L, N), Q),
12037            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12038                      H1),
12039            insert_ht(H1, k(N, O), Q),
12040            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12041                      I1),
12042            insert_ht(I1, L, Q)
12043        ;   true
12044        ),
12045        first_occ_in_rule(N, L, E, F),
12046        tree_set_add(R, L, J1),
12047        multiple_occ_constraints_checked(J1),
12048        (   Q=suspension(_, active, _, _, _, _, _, _, _)
12049        ->  setarg(2, Q, inactive),
12050            occurrence___5__4__3__31(B,
12051                                     C,
12052                                     D,
12053                                     E,
12054                                     F,
12055                                     G,
12056                                     H,
12057                                     I,
12058                                     J,
12059                                     K,
12060                                     L,
12061                                     M,
12062                                     N,
12063                                     O,
12064                                     P,
12065                                     Q)
12066        ;   true
12067        )
12068    ;   occurrence___5__4__3__31(B,
12069                                 C,
12070                                 D,
12071                                 E,
12072                                 F,
12073                                 G,
12074                                 H,
12075                                 I,
12076                                 J,
12077                                 K,
12078                                 L,
12079                                 M,
12080                                 N,
12081                                 O,
12082                                 P,
12083                                 Q)
12084    ).
12085occurrence___5__4(A, B, C, D, E, F) :-
12086    occurrence___5__5(A, B, C, D, E, F).
12087occurrence___5__5(A, B, C, D, E, F) :-
12088    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', G),
12089    lookup_ht(G, k(A, B, yes), H),
12090    !,
12091    occurrence___5__5__0__35(H,
12092                             A,
12093                             B,
12094                             C,
12095                             D,
12096                             E,
12097                             F).
12098occurrence___5__5__0__35([], A, B, C, D, E, F) :-
12099    occurrence___5__6(A, B, C, D, E, F).
12100occurrence___5__5__0__35([A|B], C, D, E, F, G, H) :-
12101    (   A=suspension(_, active, I, J, K),
12102        I==C,
12103        J==D,
12104        K=yes,
12105        ( ground(E),
12106          ground(F),
12107          nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
12108                    L),
12109          lookup_ht(L, k(E, F), M)
12110        ),
12111        member(N, M),
12112        N=suspension(_, active, _, _, _),
12113        ( ground(C),
12114          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
12115                    O),
12116          lookup_ht(O, C, P)
12117        ),
12118        member(Q, P),
12119        Q=suspension(_, active, _, _, R, S),
12120        D<R
12121    ->  ( setarg(2, A, removed),
12122          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13',
12123                    T),
12124          delete_ht(T, k(C, yes), A),
12125          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
12126                    U),
12127          delete_ht(U, k(C, D, yes), A)
12128        ),
12129        setarg(2, Q, removed),
12130        ( nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
12131                    V),
12132          delete_ht(V, k(C, S), Q)
12133        ),
12134        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
12135                  W),
12136        delete_ht(W, C, Q),
12137        arg(2, H, X),
12138        setarg(2, H, active),
12139        (   X==not_stored_yet
12140        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12141                      Y),
12142            insert_ht(Y, k(C, G), H),
12143            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12144                      Z),
12145            A1=[H|Z],
12146            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12147                     A1),
12148            (   Z=[B1|_]
12149            ->  setarg(4, B1, A1)
12150            ;   true
12151            ),
12152            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12153                      C1),
12154            insert_ht(C1, k(C, D, G), H),
12155            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12156                      D1),
12157            insert_ht(D1, k(C, E, F), H),
12158            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12159                      E1),
12160            insert_ht(E1, k(C, D), H),
12161            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12162                      F1),
12163            insert_ht(F1, E, H),
12164            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12165                      G1),
12166            insert_ht(G1, k(C, E), H),
12167            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12168                      H1),
12169            insert_ht(H1, k(E, F), H),
12170            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12171                      I1),
12172            insert_ht(I1, C, H)
12173        ;   true
12174        ),
12175        J1 is S-1,
12176        stored(C, D, maybe),
12177        stored_complete(C, R, J1),
12178        (   H=suspension(_, active, _, _, _, _, _, _, _)
12179        ->  setarg(2, H, inactive),
12180            occurrence___5__5__0__35(B,
12181                                     C,
12182                                     D,
12183                                     E,
12184                                     F,
12185                                     G,
12186                                     H)
12187        ;   true
12188        )
12189    ;   occurrence___5__5__0__35(B,
12190                                 C,
12191                                 D,
12192                                 E,
12193                                 F,
12194                                 G,
12195                                 H)
12196    ).
12197occurrence___5__5(A, B, C, D, E, F) :-
12198    occurrence___5__6(A, B, C, D, E, F).
12199occurrence___5__6(A, B, C, D, E, F) :-
12200    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', G),
12201    lookup_ht(G, C, H),
12202    !,
12203    occurrence___5__6__0__36(H,
12204                             A,
12205                             B,
12206                             C,
12207                             D,
12208                             E,
12209                             F).
12210occurrence___5__6__0__36([], A, B, C, D, E, F) :-
12211    occurrence___5__7(A, B, C, D, E, F).
12212occurrence___5__6__0__36([A|B], C, D, E, F, G, H) :-
12213    (   A=suspension(_, active, _, _, I, _, J, _, _),
12214        J==E,
12215        nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
12216                  K),
12217        lookup_ht(K, I, L)
12218    ->  occurrence___5__6__1__36(L,
12219                                 I,
12220                                 A,
12221                                 B,
12222                                 C,
12223                                 D,
12224                                 E,
12225                                 F,
12226                                 G,
12227                                 H)
12228    ;   occurrence___5__6__0__36(B,
12229                                 C,
12230                                 D,
12231                                 E,
12232                                 F,
12233                                 G,
12234                                 H)
12235    ).
12236occurrence___5__6__1__36([], _, _, A, B, C, D, E, F, G) :-
12237    occurrence___5__6__0__36(A,
12238                             B,
12239                             C,
12240                             D,
12241                             E,
12242                             F,
12243                             G).
12244occurrence___5__6__1__36([A|B], C, D, E, F, G, H, I, J, K) :-
12245    (   A=suspension(_, active, _, L, M),
12246        L==C,
12247        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
12248                  N),
12249        lookup_ht(N, k(C, 0), O)
12250    ->  occurrence___5__6__2__36(O,
12251                                 M,
12252                                 A,
12253                                 B,
12254                                 C,
12255                                 D,
12256                                 E,
12257                                 F,
12258                                 G,
12259                                 H,
12260                                 I,
12261                                 J,
12262                                 K)
12263    ;   occurrence___5__6__1__36(B,
12264                                 C,
12265                                 D,
12266                                 E,
12267                                 F,
12268                                 G,
12269                                 H,
12270                                 I,
12271                                 J,
12272                                 K)
12273    ).
12274occurrence___5__6__2__36([], _, _, A, B, C, D, E, F, G, H, I, J) :-
12275    occurrence___5__6__1__36(A,
12276                             B,
12277                             C,
12278                             D,
12279                             E,
12280                             F,
12281                             G,
12282                             H,
12283                             I,
12284                             J).
12285occurrence___5__6__2__36([A|B], C, D, E, F, G, H, I, J, K, L, M, N) :-
12286    (   A=suspension(_, active, _, O, P, Q),
12287        O==F,
12288        Q=0,
12289        R=t(250, N, G, A, D),
12290        '$novel_production'(N, R),
12291        '$novel_production'(G, R),
12292        '$novel_production'(A, R),
12293        '$novel_production'(D, R),
12294        P=<C
12295    ->  '$extend_history'(N, R),
12296        arg(2, N, S),
12297        setarg(2, N, active),
12298        (   S==not_stored_yet
12299        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12300                      T),
12301            insert_ht(T, k(I, M), N),
12302            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12303                      U),
12304            V=[N|U],
12305            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12306                     V),
12307            (   U=[W|_]
12308            ->  setarg(4, W, V)
12309            ;   true
12310            ),
12311            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12312                      X),
12313            insert_ht(X, k(I, J, M), N),
12314            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12315                      Y),
12316            insert_ht(Y, k(I, K, L), N),
12317            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12318                      Z),
12319            insert_ht(Z, k(I, J), N),
12320            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12321                      A1),
12322            insert_ht(A1, K, N),
12323            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12324                      B1),
12325            insert_ht(B1, k(I, K), N),
12326            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12327                      C1),
12328            insert_ht(C1, k(K, L), N),
12329            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12330                      D1),
12331            insert_ht(D1, I, N)
12332        ;   true
12333        ),
12334        passive(K, L),
12335        (   N=suspension(_, active, _, _, _, _, _, _, _)
12336        ->  setarg(2, N, inactive),
12337            occurrence___5__6__2__36(B,
12338                                     C,
12339                                     D,
12340                                     E,
12341                                     F,
12342                                     G,
12343                                     H,
12344                                     I,
12345                                     J,
12346                                     K,
12347                                     L,
12348                                     M,
12349                                     N)
12350        ;   true
12351        )
12352    ;   occurrence___5__6__2__36(B,
12353                                 C,
12354                                 D,
12355                                 E,
12356                                 F,
12357                                 G,
12358                                 H,
12359                                 I,
12360                                 J,
12361                                 K,
12362                                 L,
12363                                 M,
12364                                 N)
12365    ).
12366occurrence___5__6(A, B, C, D, E, F) :-
12367    occurrence___5__7(A, B, C, D, E, F).
12368occurrence___5__7(A, B, C, D, E, F) :-
12369    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', G),
12370    lookup_ht(G, C, H),
12371    !,
12372    occurrence___5__7__0__37(H,
12373                             A,
12374                             B,
12375                             C,
12376                             D,
12377                             E,
12378                             F).
12379occurrence___5__7__0__37([], A, B, C, D, E, F) :-
12380    occurrence___5__8(A, B, C, D, E, F).
12381occurrence___5__7__0__37([A|B], C, D, E, F, G, H) :-
12382    (   A=suspension(_, active, _, _, _, _, I, J, _),
12383        I==E,
12384        nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
12385                  K),
12386        lookup_ht(K, C, L)
12387    ->  occurrence___5__7__1__37(L,
12388                                 J,
12389                                 A,
12390                                 B,
12391                                 C,
12392                                 D,
12393                                 E,
12394                                 F,
12395                                 G,
12396                                 H)
12397    ;   occurrence___5__7__0__37(B,
12398                                 C,
12399                                 D,
12400                                 E,
12401                                 F,
12402                                 G,
12403                                 H)
12404    ).
12405occurrence___5__7__1__37([], _, _, A, B, C, D, E, F, G) :-
12406    occurrence___5__7__0__37(A,
12407                             B,
12408                             C,
12409                             D,
12410                             E,
12411                             F,
12412                             G).
12413occurrence___5__7__1__37([A|B], C, D, E, F, G, H, I, J, K) :-
12414    (   A=suspension(_, active, _, L, M),
12415        L==F,
12416        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
12417                  N),
12418        lookup_ht(N, k(F, 0), O)
12419    ->  occurrence___5__7__2__37(O,
12420                                 M,
12421                                 A,
12422                                 B,
12423                                 C,
12424                                 D,
12425                                 E,
12426                                 F,
12427                                 G,
12428                                 H,
12429                                 I,
12430                                 J,
12431                                 K)
12432    ;   occurrence___5__7__1__37(B,
12433                                 C,
12434                                 D,
12435                                 E,
12436                                 F,
12437                                 G,
12438                                 H,
12439                                 I,
12440                                 J,
12441                                 K)
12442    ).
12443occurrence___5__7__2__37([], _, _, A, B, C, D, E, F, G, H, I, J) :-
12444    occurrence___5__7__1__37(A,
12445                             B,
12446                             C,
12447                             D,
12448                             E,
12449                             F,
12450                             G,
12451                             H,
12452                             I,
12453                             J).
12454occurrence___5__7__2__37([A|B], C, D, E, F, G, H, I, J, K, L, M, N) :-
12455    (   A=suspension(_, active, _, O, P, Q),
12456        O==I,
12457        Q=0,
12458        R=t(250, G, N, A, D),
12459        '$novel_production'(G, R),
12460        '$novel_production'(N, R),
12461        '$novel_production'(A, R),
12462        '$novel_production'(D, R),
12463        P=<C
12464    ->  '$extend_history'(N, R),
12465        arg(2, N, S),
12466        setarg(2, N, active),
12467        (   S==not_stored_yet
12468        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12469                      T),
12470            insert_ht(T, k(I, M), N),
12471            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12472                      U),
12473            V=[N|U],
12474            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12475                     V),
12476            (   U=[W|_]
12477            ->  setarg(4, W, V)
12478            ;   true
12479            ),
12480            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12481                      X),
12482            insert_ht(X, k(I, J, M), N),
12483            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12484                      Y),
12485            insert_ht(Y, k(I, K, L), N),
12486            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12487                      Z),
12488            insert_ht(Z, k(I, J), N),
12489            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12490                      A1),
12491            insert_ht(A1, K, N),
12492            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12493                      B1),
12494            insert_ht(B1, k(I, K), N),
12495            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12496                      C1),
12497            insert_ht(C1, k(K, L), N),
12498            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12499                      D1),
12500            insert_ht(D1, I, N)
12501        ;   true
12502        ),
12503        passive(K, F),
12504        (   N=suspension(_, active, _, _, _, _, _, _, _)
12505        ->  setarg(2, N, inactive),
12506            occurrence___5__7__2__37(B,
12507                                     C,
12508                                     D,
12509                                     E,
12510                                     F,
12511                                     G,
12512                                     H,
12513                                     I,
12514                                     J,
12515                                     K,
12516                                     L,
12517                                     M,
12518                                     N)
12519        ;   true
12520        )
12521    ;   occurrence___5__7__2__37(B,
12522                                 C,
12523                                 D,
12524                                 E,
12525                                 F,
12526                                 G,
12527                                 H,
12528                                 I,
12529                                 J,
12530                                 K,
12531                                 L,
12532                                 M,
12533                                 N)
12534    ).
12535occurrence___5__7(A, B, C, D, E, F) :-
12536    occurrence___5__8(A, B, C, D, E, F).
12537occurrence___5__8(A, B, C, D, E, F) :-
12538    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
12539              G),
12540    lookup_ht(G, A, H),
12541    !,
12542    occurrence___5__8__0__38(H,
12543                             A,
12544                             B,
12545                             C,
12546                             D,
12547                             E,
12548                             F).
12549occurrence___5__8__0__38([], A, B, C, D, E, F) :-
12550    occurrence___5__9(A, B, C, D, E, F).
12551occurrence___5__8__0__38([A|B], C, D, E, F, G, H) :-
12552    (   A=suspension(_, active, _, I, J, _),
12553        I==C,
12554        K=t(259, A, H),
12555        '$novel_production'(A, K),
12556        '$novel_production'(H, K),
12557        D>J
12558    ->  '$extend_history'(H, K),
12559        arg(2, H, L),
12560        setarg(2, H, active),
12561        (   L==not_stored_yet
12562        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12563                      M),
12564            insert_ht(M, k(C, G), H),
12565            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12566                      N),
12567            O=[H|N],
12568            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12569                     O),
12570            (   N=[P|_]
12571            ->  setarg(4, P, O)
12572            ;   true
12573            ),
12574            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12575                      Q),
12576            insert_ht(Q, k(C, D, G), H),
12577            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12578                      R),
12579            insert_ht(R, k(C, E, F), H),
12580            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12581                      S),
12582            insert_ht(S, k(C, D), H),
12583            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12584                      T),
12585            insert_ht(T, E, H),
12586            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12587                      U),
12588            insert_ht(U, k(C, E), H),
12589            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12590                      V),
12591            insert_ht(V, k(E, F), H),
12592            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12593                      W),
12594            insert_ht(W, C, H)
12595        ;   true
12596        ),
12597        passive(E, F),
12598        (   H=suspension(_, active, _, _, _, _, _, _, _)
12599        ->  setarg(2, H, inactive),
12600            occurrence___5__8__0__38(B,
12601                                     C,
12602                                     D,
12603                                     E,
12604                                     F,
12605                                     G,
12606                                     H)
12607        ;   true
12608        )
12609    ;   occurrence___5__8__0__38(B,
12610                                 C,
12611                                 D,
12612                                 E,
12613                                 F,
12614                                 G,
12615                                 H)
12616    ).
12617occurrence___5__8(A, B, C, D, E, F) :-
12618    occurrence___5__9(A, B, C, D, E, F).
12619occurrence___5__9(A, B, C, D, E, F) :-
12620    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
12621              G),
12622    lookup_ht(G, k(A, C), H),
12623    !,
12624    occurrence___5__9__0__42(H,
12625                             A,
12626                             B,
12627                             C,
12628                             D,
12629                             E,
12630                             F).
12631occurrence___5__9__0__42([], A, B, C, D, E, F) :-
12632    occurrence___5__10(A, B, C, D, E, F).
12633occurrence___5__9__0__42([A|B], C, D, E, F, G, H) :-
12634    (   A=suspension(_, active, I, J, K, L),
12635        I==C,
12636        J==E,
12637        E>1,
12638        ( ground(C),
12639          nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
12640                    M),
12641          lookup_ht(M, C, N)
12642        ),
12643        member(O, N),
12644        O=suspension(_, active, _, _, P),
12645        P>D
12646    ->  setarg(2, A, removed),
12647        ( nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
12648                    Q),
12649          delete_ht(Q, C, A)
12650        ),
12651        nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
12652                  R),
12653        delete_ht(R, k(C, E), A),
12654        arg(2, H, S),
12655        setarg(2, H, active),
12656        (   S==not_stored_yet
12657        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12658                      T),
12659            insert_ht(T, k(C, G), H),
12660            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12661                      U),
12662            V=[H|U],
12663            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12664                     V),
12665            (   U=[W|_]
12666            ->  setarg(4, W, V)
12667            ;   true
12668            ),
12669            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12670                      X),
12671            insert_ht(X, k(C, D, G), H),
12672            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12673                      Y),
12674            insert_ht(Y, k(C, E, F), H),
12675            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12676                      Z),
12677            insert_ht(Z, k(C, D), H),
12678            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12679                      A1),
12680            insert_ht(A1, E, H),
12681            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12682                      B1),
12683            insert_ht(B1, k(C, E), H),
12684            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12685                      C1),
12686            insert_ht(C1, k(E, F), H),
12687            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12688                      D1),
12689            insert_ht(D1, C, H)
12690        ;   true
12691        ),
12692        functional_dependency(C, 1, K, L),
12693        (   H=suspension(_, active, _, _, _, _, _, _, _)
12694        ->  setarg(2, H, inactive),
12695            occurrence___5__9__0__42(B,
12696                                     C,
12697                                     D,
12698                                     E,
12699                                     F,
12700                                     G,
12701                                     H)
12702        ;   true
12703        )
12704    ;   occurrence___5__9__0__42(B,
12705                                 C,
12706                                 D,
12707                                 E,
12708                                 F,
12709                                 G,
12710                                 H)
12711    ).
12712occurrence___5__9(A, B, C, D, E, F) :-
12713    occurrence___5__10(A, B, C, D, E, F).
12714occurrence___5__10(A, B, C, D, E, F) :-
12715    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
12716              G),
12717    lookup_ht(G, A, H),
12718    !,
12719    occurrence___5__10__0__48(H,
12720                              A,
12721                              B,
12722                              C,
12723                              D,
12724                              E,
12725                              F).
12726occurrence___5__10__0__48([], A, B, C, D, E, F) :-
12727    occurrence___5__11(A, B, C, D, E, F).
12728occurrence___5__10__0__48([A|B], C, D, E, F, G, H) :-
12729    (   A=suspension(_, active, _, _, I, J),
12730        I==C,
12731        nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
12732                  K)
12733    ->  occurrence___5__10__1__48(K,
12734                                  J,
12735                                  A,
12736                                  B,
12737                                  C,
12738                                  D,
12739                                  E,
12740                                  F,
12741                                  G,
12742                                  H)
12743    ;   occurrence___5__10__0__48(B,
12744                                  C,
12745                                  D,
12746                                  E,
12747                                  F,
12748                                  G,
12749                                  H)
12750    ).
12751occurrence___5__10__1__48([], _, _, A, B, C, D, E, F, G) :-
12752    occurrence___5__10__0__48(A,
12753                              B,
12754                              C,
12755                              D,
12756                              E,
12757                              F,
12758                              G).
12759occurrence___5__10__1__48([A|B], C, D, E, F, G, H, I, J, K) :-
12760    (   A=suspension(_, active, _, _),
12761        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', L),
12762        lookup_ht(L, H, M)
12763    ->  occurrence___5__10__2__48(M,
12764                                  A,
12765                                  B,
12766                                  C,
12767                                  D,
12768                                  E,
12769                                  F,
12770                                  G,
12771                                  H,
12772                                  I,
12773                                  J,
12774                                  K)
12775    ;   occurrence___5__10__1__48(B,
12776                                  C,
12777                                  D,
12778                                  E,
12779                                  F,
12780                                  G,
12781                                  H,
12782                                  I,
12783                                  J,
12784                                  K)
12785    ).
12786occurrence___5__10__2__48([], _, A, B, C, D, E, F, G, H, I, J) :-
12787    occurrence___5__10__1__48(A,
12788                              B,
12789                              C,
12790                              D,
12791                              E,
12792                              F,
12793                              G,
12794                              H,
12795                              I,
12796                              J).
12797occurrence___5__10__2__48([A|B], C, D, E, F, G, H, I, J, K, L, M) :-
12798    (   A=suspension(_, active, _, _, N, O),
12799        N==J,
12800        P=t(330, C, M, A, F),
12801        '$novel_production'(C, P),
12802        '$novel_production'(M, P),
12803        '$novel_production'(A, P),
12804        '$novel_production'(F, P)
12805    ->  '$extend_history'(M, P),
12806        arg(2, M, Q),
12807        setarg(2, M, active),
12808        (   Q==not_stored_yet
12809        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12810                      R),
12811            insert_ht(R, k(H, L), M),
12812            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12813                      S),
12814            T=[M|S],
12815            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12816                     T),
12817            (   S=[U|_]
12818            ->  setarg(4, U, T)
12819            ;   true
12820            ),
12821            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12822                      V),
12823            insert_ht(V, k(H, I, L), M),
12824            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12825                      W),
12826            insert_ht(W, k(H, J, K), M),
12827            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12828                      X),
12829            insert_ht(X, k(H, I), M),
12830            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12831                      Y),
12832            insert_ht(Y, J, M),
12833            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12834                      Z),
12835            insert_ht(Z, k(H, J), M),
12836            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12837                      A1),
12838            insert_ht(A1, k(J, K), M),
12839            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12840                      B1),
12841            insert_ht(B1, H, M)
12842        ;   true
12843        ),
12844        O=pragma(rule(C1, D1, E1, _), _, _, _, _),
12845        (   is_passive(J, K)
12846        ->  true
12847        ;   L==simplification
12848        ->  select(F1, C1, _),
12849            F1=..[_|G1],
12850            term_variables(E1, H1),
12851            partial_wake_args(G1, E, H1, H)
12852        ;   select(F1, D1, _),
12853            F1=..[_|G1],
12854            term_variables(E1, H1),
12855            partial_wake_args(G1, E, H1, H)
12856        ),
12857        (   M=suspension(_, active, _, _, _, _, _, _, _)
12858        ->  setarg(2, M, inactive),
12859            occurrence___5__10__2__48(B,
12860                                      C,
12861                                      D,
12862                                      E,
12863                                      F,
12864                                      G,
12865                                      H,
12866                                      I,
12867                                      J,
12868                                      K,
12869                                      L,
12870                                      M)
12871        ;   true
12872        )
12873    ;   occurrence___5__10__2__48(B,
12874                                  C,
12875                                  D,
12876                                  E,
12877                                  F,
12878                                  G,
12879                                  H,
12880                                  I,
12881                                  J,
12882                                  K,
12883                                  L,
12884                                  M)
12885    ).
12886occurrence___5__10(A, B, C, D, E, F) :-
12887    occurrence___5__11(A, B, C, D, E, F).
12888occurrence___5__11(A, B, C, D, E, F) :-
12889    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', G),
12890    lookup_ht(G, k(C, D), H),
12891    !,
12892    occurrence___5__11__0__50(H,
12893                              A,
12894                              B,
12895                              C,
12896                              D,
12897                              E,
12898                              F).
12899occurrence___5__11__0__50([], A, B, C, D, E, F) :-
12900    occurrence___5__12(A, B, C, D, E, F).
12901occurrence___5__11__0__50([A|B], C, D, E, F, G, H) :-
12902    (   A=suspension(_, active, _, I, J),
12903        I==E,
12904        J==F,
12905        nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
12906                  K),
12907        lookup_ht(K, k(C, D), L)
12908    ->  occurrence___5__11__1__50(L,
12909                                  A,
12910                                  B,
12911                                  C,
12912                                  D,
12913                                  E,
12914                                  F,
12915                                  G,
12916                                  H)
12917    ;   occurrence___5__11__0__50(B,
12918                                  C,
12919                                  D,
12920                                  E,
12921                                  F,
12922                                  G,
12923                                  H)
12924    ).
12925occurrence___5__11__1__50([], _, A, B, C, D, E, F, G) :-
12926    occurrence___5__11__0__50(A,
12927                              B,
12928                              C,
12929                              D,
12930                              E,
12931                              F,
12932                              G).
12933occurrence___5__11__1__50([A|B], C, D, E, F, G, H, I, J) :-
12934    (   A=suspension(_, active, _, K, L),
12935        K==E,
12936        L==F,
12937        M=t(362, J, C, A),
12938        '$novel_production'(J, M),
12939        '$novel_production'(C, M),
12940        '$novel_production'(A, M),
12941        F>1
12942    ->  '$extend_history'(J, M),
12943        arg(2, J, N),
12944        setarg(2, J, active),
12945        (   N==not_stored_yet
12946        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12947                      O),
12948            insert_ht(O, k(E, I), J),
12949            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12950                      P),
12951            Q=[J|P],
12952            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12953                     Q),
12954            (   P=[R|_]
12955            ->  setarg(4, R, Q)
12956            ;   true
12957            ),
12958            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12959                      S),
12960            insert_ht(S, k(E, F, I), J),
12961            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12962                      T),
12963            insert_ht(T, k(E, G, H), J),
12964            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12965                      U),
12966            insert_ht(U, k(E, F), J),
12967            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12968                      V),
12969            insert_ht(V, G, J),
12970            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12971                      W),
12972            insert_ht(W, k(E, G), J),
12973            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12974                      X),
12975            insert_ht(X, k(G, H), J),
12976            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12977                      Y),
12978            insert_ht(Y, E, J)
12979        ;   true
12980        ),
12981        Z is F-1,
12982        skip_to_next_id(E, Z),
12983        (   J=suspension(_, active, _, _, _, _, _, _, _)
12984        ->  setarg(2, J, inactive),
12985            occurrence___5__11__1__50(B,
12986                                      C,
12987                                      D,
12988                                      E,
12989                                      F,
12990                                      G,
12991                                      H,
12992                                      I,
12993                                      J)
12994        ;   true
12995        )
12996    ;   occurrence___5__11__1__50(B,
12997                                  C,
12998                                  D,
12999                                  E,
13000                                  F,
13001                                  G,
13002                                  H,
13003                                  I,
13004                                  J)
13005    ).
13006occurrence___5__11(A, B, C, D, E, F) :-
13007    occurrence___5__12(A, B, C, D, E, F).
13008occurrence___5__12(A, B, C, D, E, F) :-
13009    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13010              G),
13011    lookup_ht(G, k(A, B), H),
13012    !,
13013    occurrence___5__12__0__51(H,
13014                              A,
13015                              B,
13016                              C,
13017                              D,
13018                              E,
13019                              F).
13020occurrence___5__12__0__51([], A, B, C, D, E, F) :-
13021    occurrence___5__13(A, B, C, D, E, F).
13022occurrence___5__12__0__51([A|B], C, D, E, F, G, H) :-
13023    (   A=suspension(_, active, I, J, K),
13024        I==C,
13025        J==D,
13026        ( ground(E),
13027          ground(F)
13028        ),
13029        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
13030                  L),
13031        lookup_ht(L, k(E, F), M),
13032        member(N, M),
13033        N=suspension(_, active, _, _, _)
13034    ->  setarg(2, A, removed),
13035        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13036                  O),
13037        delete_ht(O, k(C, D), A),
13038        arg(2, H, P),
13039        setarg(2, H, active),
13040        (   P==not_stored_yet
13041        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13042                      Q),
13043            insert_ht(Q, k(C, G), H),
13044            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13045                      R),
13046            S=[H|R],
13047            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13048                     S),
13049            (   R=[T|_]
13050            ->  setarg(4, T, S)
13051            ;   true
13052            ),
13053            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13054                      U),
13055            insert_ht(U, k(C, D, G), H),
13056            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13057                      V),
13058            insert_ht(V, k(C, E, F), H),
13059            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13060                      W),
13061            insert_ht(W, k(C, D), H),
13062            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13063                      X),
13064            insert_ht(X, E, H),
13065            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13066                      Y),
13067            insert_ht(Y, k(C, E), H),
13068            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13069                      Z),
13070            insert_ht(Z, k(E, F), H),
13071            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13072                      A1),
13073            insert_ht(A1, C, H)
13074        ;   true
13075        ),
13076        occurrence_code_id(C, D, K),
13077        B1 is D+1,
13078        set_occurrence_code_id(C, B1, K),
13079        (   H=suspension(_, active, _, _, _, _, _, _, _)
13080        ->  setarg(2, H, inactive),
13081            occurrence___5__12__0__51(B,
13082                                      C,
13083                                      D,
13084                                      E,
13085                                      F,
13086                                      G,
13087                                      H)
13088        ;   true
13089        )
13090    ;   occurrence___5__12__0__51(B,
13091                                  C,
13092                                  D,
13093                                  E,
13094                                  F,
13095                                  G,
13096                                  H)
13097    ).
13098occurrence___5__12(A, B, C, D, E, F) :-
13099    occurrence___5__13(A, B, C, D, E, F).
13100occurrence___5__13(A, B, C, D, simplification, E) :-
13101    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13102              F),
13103    lookup_ht(F, k(A, B), G),
13104    !,
13105    occurrence___5__13__0__52(G,
13106                              A,
13107                              B,
13108                              C,
13109                              D,
13110                              simplification,
13111                              E).
13112occurrence___5__13__0__52([], A, B, C, D, E, F) :-
13113    occurrence___5__15(A, B, C, D, E, F).
13114occurrence___5__13__0__52([A|B], C, D, E, F, G, H) :-
13115    (   A=suspension(_, active, I, J, K),
13116        I==C,
13117        J==D
13118    ->  setarg(2, A, removed),
13119        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13120                  L),
13121        delete_ht(L, k(C, D), A),
13122        arg(2, H, M),
13123        setarg(2, H, active),
13124        (   M==not_stored_yet
13125        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13126                      N),
13127            insert_ht(N, k(C, G), H),
13128            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13129                      O),
13130            P=[H|O],
13131            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13132                     P),
13133            (   O=[Q|_]
13134            ->  setarg(4, Q, P)
13135            ;   true
13136            ),
13137            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13138                      R),
13139            insert_ht(R, k(C, D, G), H),
13140            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13141                      S),
13142            insert_ht(S, k(C, E, F), H),
13143            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13144                      T),
13145            insert_ht(T, k(C, D), H),
13146            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13147                      U),
13148            insert_ht(U, E, H),
13149            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13150                      V),
13151            insert_ht(V, k(C, E), H),
13152            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13153                      W),
13154            insert_ht(W, k(E, F), H),
13155            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13156                      X),
13157            insert_ht(X, C, H)
13158        ;   true
13159        ),
13160        occurrence_code_id(C, D, K),
13161        Y is D+1,
13162        set_occurrence_code_id(C, Y, K),
13163        (   H=suspension(_, active, _, _, _, _, _, _, _)
13164        ->  setarg(2, H, inactive),
13165            occurrence___5__13__0__52(B,
13166                                      C,
13167                                      D,
13168                                      E,
13169                                      F,
13170                                      G,
13171                                      H)
13172        ;   true
13173        )
13174    ;   occurrence___5__13__0__52(B,
13175                                  C,
13176                                  D,
13177                                  E,
13178                                  F,
13179                                  G,
13180                                  H)
13181    ).
13182occurrence___5__13(A, B, C, D, propagation, E) :-
13183    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13184              F),
13185    lookup_ht(F, k(A, B), G),
13186    !,
13187    occurrence___5__13__0__53(G,
13188                              A,
13189                              B,
13190                              C,
13191                              D,
13192                              propagation,
13193                              E).
13194occurrence___5__13__0__53([], A, B, C, D, E, F) :-
13195    occurrence___5__14(A, B, C, D, E, F).
13196occurrence___5__13__0__53([A|B], C, D, E, F, G, H) :-
13197    (   A=suspension(_, active, I, J, K),
13198        I==C,
13199        J==D,
13200        ( ground(C),
13201          ground(D)
13202        ),
13203        nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
13204                  L),
13205        lookup_ht(L, k(C, D), M),
13206        member(N, M),
13207        N=suspension(_, active, _, _, _)
13208    ->  setarg(2, A, removed),
13209        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13210                  O),
13211        delete_ht(O, k(C, D), A),
13212        arg(2, H, P),
13213        setarg(2, H, active),
13214        (   P==not_stored_yet
13215        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13216                      Q),
13217            insert_ht(Q, k(C, G), H),
13218            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13219                      R),
13220            S=[H|R],
13221            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13222                     S),
13223            (   R=[T|_]
13224            ->  setarg(4, T, S)
13225            ;   true
13226            ),
13227            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13228                      U),
13229            insert_ht(U, k(C, D, G), H),
13230            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13231                      V),
13232            insert_ht(V, k(C, E, F), H),
13233            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13234                      W),
13235            insert_ht(W, k(C, D), H),
13236            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13237                      X),
13238            insert_ht(X, E, H),
13239            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13240                      Y),
13241            insert_ht(Y, k(C, E), H),
13242            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13243                      Z),
13244            insert_ht(Z, k(E, F), H),
13245            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13246                      A1),
13247            insert_ht(A1, C, H)
13248        ;   true
13249        ),
13250        occurrence_code_id(C, D, K),
13251        B1 is D+1,
13252        C1 is K+1,
13253        set_occurrence_code_id(C, B1, C1),
13254        (   H=suspension(_, active, _, _, _, _, _, _, _)
13255        ->  setarg(2, H, inactive),
13256            occurrence___5__13__0__53(B,
13257                                      C,
13258                                      D,
13259                                      E,
13260                                      F,
13261                                      G,
13262                                      H)
13263        ;   true
13264        )
13265    ;   occurrence___5__13__0__53(B,
13266                                  C,
13267                                  D,
13268                                  E,
13269                                  F,
13270                                  G,
13271                                  H)
13272    ).
13273occurrence___5__13(A, B, C, D, E, F) :-
13274    occurrence___5__14(A, B, C, D, E, F).
13275occurrence___5__14(A, B, C, D, propagation, E) :-
13276    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13277              F),
13278    lookup_ht(F, k(A, B), G),
13279    !,
13280    occurrence___5__14__0__54(G,
13281                              A,
13282                              B,
13283                              C,
13284                              D,
13285                              propagation,
13286                              E).
13287occurrence___5__14__0__54([], A, B, C, D, E, F) :-
13288    occurrence___5__15(A, B, C, D, E, F).
13289occurrence___5__14__0__54([A|B], C, D, E, F, G, H) :-
13290    (   A=suspension(_, active, I, J, K),
13291        I==C,
13292        J==D
13293    ->  setarg(2, A, removed),
13294        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13295                  L),
13296        delete_ht(L, k(C, D), A),
13297        arg(2, H, M),
13298        setarg(2, H, active),
13299        (   M==not_stored_yet
13300        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13301                      N),
13302            insert_ht(N, k(C, G), H),
13303            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13304                      O),
13305            P=[H|O],
13306            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13307                     P),
13308            (   O=[Q|_]
13309            ->  setarg(4, Q, P)
13310            ;   true
13311            ),
13312            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13313                      R),
13314            insert_ht(R, k(C, D, G), H),
13315            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13316                      S),
13317            insert_ht(S, k(C, E, F), H),
13318            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13319                      T),
13320            insert_ht(T, k(C, D), H),
13321            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13322                      U),
13323            insert_ht(U, E, H),
13324            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13325                      V),
13326            insert_ht(V, k(C, E), H),
13327            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13328                      W),
13329            insert_ht(W, k(E, F), H),
13330            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13331                      X),
13332            insert_ht(X, C, H)
13333        ;   true
13334        ),
13335        occurrence_code_id(C, D, K),
13336        Y is D+1,
13337        set_occurrence_code_id(C, Y, K),
13338        (   H=suspension(_, active, _, _, _, _, _, _, _)
13339        ->  setarg(2, H, inactive),
13340            occurrence___5__14__0__54(B,
13341                                      C,
13342                                      D,
13343                                      E,
13344                                      F,
13345                                      G,
13346                                      H)
13347        ;   true
13348        )
13349    ;   occurrence___5__14__0__54(B,
13350                                  C,
13351                                  D,
13352                                  E,
13353                                  F,
13354                                  G,
13355                                  H)
13356    ).
13357occurrence___5__14(A, B, C, D, E, F) :-
13358    occurrence___5__15(A, B, C, D, E, F).
13359occurrence___5__15(A, B, C, D, E, F) :-
13360    arg(2, F, G),
13361    setarg(2, F, active),
13362    (   G==not_stored_yet
13363    ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13364                  H),
13365        insert_ht(H, k(A, E), F),
13366        nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13367                  I),
13368        J=[F|I],
13369        b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13370                 J),
13371        (   I=[K|_]
13372        ->  setarg(4, K, J)
13373        ;   true
13374        ),
13375        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13376                  L),
13377        insert_ht(L, k(A, B, E), F),
13378        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13379                  M),
13380        insert_ht(M, k(A, C, D), F),
13381        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13382                  N),
13383        insert_ht(N, k(A, B), F),
13384        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13385                  O),
13386        insert_ht(O, C, F),
13387        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13388                  P),
13389        insert_ht(P, k(A, C), F),
13390        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13391                  Q),
13392        insert_ht(Q, k(C, D), F),
13393        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13394                  R),
13395        insert_ht(R, A, F)
13396    ;   true
13397    ).
13398get_occurrence(A, B, C, D) :-
13399    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13400              E),
13401    lookup_ht(E, k(A, B), F),
13402    member(G, F),
13403    G=suspension(_, active, _, _, _, _, H, I, _),
13404    !,
13405    H=C,
13406    I=D.
13407get_occurrence(A, B, _, _) :-
13408    chr_error(internal,
13409              'get_occurrence: missing occurrence ~w:~w\n',
13410              [A, B]).
13411get_occurrence(A, B, C, D, E) :-
13412    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13413              F),
13414    lookup_ht(F, k(A, B), G),
13415    member(H, G),
13416    H=suspension(_, active, _, _, _, _, I, J, K),
13417    !,
13418    I=C,
13419    J=D,
13420    K=E.
13421get_occurrence(A, B, _, _, _) :-
13422    chr_error(internal,
13423              'get_occurrence: missing occurrence ~w:~w\n',
13424              [A, B]).
13425get_occurrence_from_id(A, B, C, D) :-
13426    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13427              E),
13428    lookup_ht(E, k(C, D), F),
13429    member(G, F),
13430    G=suspension(_, active, _, _, H, I, _, _, _),
13431    !,
13432    A=H,
13433    B=I.
13434get_occurrence_from_id(_, _, _, _) :-
13435    chr_error(internal, 'get_occurrence_from_id: missing occurrence ~w:~w\n', []).
13436max_occurrence(A, B) :-
13437    max_occurrence___2__0(A, B, _).
13438max_occurrence___2__0(A, B, C) :-
13439    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13440              D),
13441    lookup_ht(D, A, E),
13442    (   member(F, E),
13443        F=suspension(_, active, _, _, G),
13444        G>=B,
13445        !
13446    ;   !,
13447        max_occurrence___2__0__0__2(E, A, B, C)
13448    ).
13449max_occurrence___2__0__0__2([], A, B, C) :-
13450    max_occurrence___2__1(A, B, C).
13451max_occurrence___2__0__0__2([A|B], C, D, E) :-
13452    (   A=suspension(_, active, _, F, G),
13453        F==C,
13454        D>=G
13455    ->  setarg(2, A, removed),
13456        nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13457                  H),
13458        delete_ht(H, C, A),
13459        max_occurrence___2__0__0__2(B, C, D, E)
13460    ;   max_occurrence___2__0__0__2(B, C, D, E)
13461    ).
13462max_occurrence___2__0(A, B, C) :-
13463    max_occurrence___2__1(A, B, C).
13464max_occurrence___2__1(A, B, C) :-
13465    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
13466              D),
13467    lookup_ht(D, k(A, 0), E),
13468    !,
13469    C=suspension(F, not_stored_yet, t, A, B),
13470    'chr gen_id'(F),
13471    max_occurrence___2__1__0__5(E, A, B, C).
13472max_occurrence___2__1__0__5([], A, B, C) :-
13473    max_occurrence___2__2(A, B, C).
13474max_occurrence___2__1__0__5([A|B], C, D, E) :-
13475    (   A=suspension(_, active, _, F, G, H),
13476        F==C,
13477        H=0,
13478        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13479                  I),
13480        lookup_ht(I, C, J)
13481    ->  max_occurrence___2__1__1__5(J,
13482                                    G,
13483                                    A,
13484                                    B,
13485                                    C,
13486                                    D,
13487                                    E)
13488    ;   max_occurrence___2__1__0__5(B, C, D, E)
13489    ).
13490max_occurrence___2__1__1__5([], _, _, A, B, C, D) :-
13491    max_occurrence___2__1__0__5(A, B, C, D).
13492max_occurrence___2__1__1__5([A|B], C, D, E, F, G, H) :-
13493    (   A=suspension(_, active, _, _, I, _, J, _, _),
13494        I==F,
13495        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13496                  K),
13497        lookup_ht(K, J, L)
13498    ->  max_occurrence___2__1__2__5(L,
13499                                    J,
13500                                    A,
13501                                    B,
13502                                    C,
13503                                    D,
13504                                    E,
13505                                    F,
13506                                    G,
13507                                    H)
13508    ;   max_occurrence___2__1__1__5(B,
13509                                    C,
13510                                    D,
13511                                    E,
13512                                    F,
13513                                    G,
13514                                    H)
13515    ).
13516max_occurrence___2__1__2__5([], _, _, A, B, C, D, E, F, G) :-
13517    max_occurrence___2__1__1__5(A,
13518                                B,
13519                                C,
13520                                D,
13521                                E,
13522                                F,
13523                                G).
13524max_occurrence___2__1__2__5([A|B], C, D, E, F, G, H, I, J, K) :-
13525    (   A=suspension(_, active, _, _, _, _, L, M, _),
13526        A\==D,
13527        L==C,
13528        N=t(250, A, D, G, K),
13529        '$novel_production'(A, N),
13530        '$novel_production'(D, N),
13531        '$novel_production'(G, N),
13532        '$novel_production'(K, N),
13533        F=<J
13534    ->  '$extend_history'(K, N),
13535        arg(2, K, O),
13536        setarg(2, K, active),
13537        (   O==not_stored_yet
13538        ->  nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13539                      P),
13540            insert_ht(P, I, K)
13541        ;   true
13542        ),
13543        passive(C, M),
13544        (   K=suspension(_, active, _, _, _)
13545        ->  setarg(2, K, inactive),
13546            max_occurrence___2__1__2__5(B,
13547                                        C,
13548                                        D,
13549                                        E,
13550                                        F,
13551                                        G,
13552                                        H,
13553                                        I,
13554                                        J,
13555                                        K)
13556        ;   true
13557        )
13558    ;   max_occurrence___2__1__2__5(B,
13559                                    C,
13560                                    D,
13561                                    E,
13562                                    F,
13563                                    G,
13564                                    H,
13565                                    I,
13566                                    J,
13567                                    K)
13568    ).
13569max_occurrence___2__1(A, B, C) :-
13570    C=suspension(D, not_stored_yet, t, A, B),
13571    'chr gen_id'(D),
13572    max_occurrence___2__2(A, B, C).
13573max_occurrence___2__2(A, _, B) :-
13574    arg(2, B, C),
13575    setarg(2, B, active),
13576    (   C==not_stored_yet
13577    ->  nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13578                  D),
13579        insert_ht(D, A, B)
13580    ;   true
13581    ).
13582get_max_occurrence(A, B) :-
13583    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13584              C),
13585    lookup_ht(C, A, D),
13586    member(E, D),
13587    E=suspension(_, active, _, _, F),
13588    !,
13589    B=F.
13590get_max_occurrence(A, _) :-
13591    chr_error(internal,
13592              'get_max_occurrence: missing max occurrence for ~w\n',
13593              [A]).
13594allocation_occurrence(A, B) :-
13595    allocation_occurrence___2__0(A, B, _).
13596allocation_occurrence___2__0(A, 0, B) :-
13597    !,
13598    B=suspension(C, active, t, A, 0),
13599    'chr gen_id'(C),
13600    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13601              D),
13602    insert_ht(D, A, B),
13603    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13604              E),
13605    insert_ht(E, k(A, 0), B),
13606    stored_in_guard_before_next_kept_occurrence(A, 0),
13607    (   B=suspension(_, active, _, _, _)
13608    ->  setarg(2, B, inactive),
13609        allocation_occurrence___2__1(A, 0, B)
13610    ;   true
13611    ).
13612allocation_occurrence___2__0(A, B, C) :-
13613    C=suspension(D, not_stored_yet, t, A, B),
13614    'chr gen_id'(D),
13615    allocation_occurrence___2__1(A, B, C).
13616allocation_occurrence___2__1(A, B, C) :-
13617    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13618              D),
13619    lookup_ht(D, k(A, B), E),
13620    !,
13621    allocation_occurrence___2__1__0__2(E, A, B, C).
13622allocation_occurrence___2__1__0__2([], A, B, C) :-
13623    allocation_occurrence___2__2(A, B, C).
13624allocation_occurrence___2__1__0__2([A|B], C, D, E) :-
13625    (   A=suspension(_, active, _, _, F, G, H, I, J),
13626        F==C,
13627        G==D,
13628        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', K),
13629        lookup_ht(K, H, L)
13630    ->  allocation_occurrence___2__1__1__2(L,
13631                                           H,
13632                                           I,
13633                                           J,
13634                                           A,
13635                                           B,
13636                                           C,
13637                                           D,
13638                                           E)
13639    ;   allocation_occurrence___2__1__0__2(B, C, D, E)
13640    ).
13641allocation_occurrence___2__1__1__2([], _, _, _, _, A, B, C, D) :-
13642    allocation_occurrence___2__1__0__2(A, B, C, D).
13643allocation_occurrence___2__1__1__2([A|B], C, D, E, F, G, H, I, J) :-
13644    (   A=suspension(_, active, _, _, K, L),
13645        K==C,
13646        M=t(60, A, F, J),
13647        '$novel_production'(A, M),
13648        '$novel_production'(F, M),
13649        '$novel_production'(J, M)
13650    ->  '$extend_history'(J, M),
13651        arg(2, J, N),
13652        setarg(2, J, active),
13653        (   N==not_stored_yet
13654        ->  nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13655                      O),
13656            insert_ht(O, H, J),
13657            nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13658                      P),
13659            insert_ht(P, k(H, I), J)
13660        ;   true
13661        ),
13662        \+ is_passive(C, D),
13663        E==propagation,
13664        (   stored_in_guard_before_next_kept_occurrence(H, I)
13665        ->  true
13666        ;   L=pragma(rule([_|_], _, _, _), _, _, _, _)
13667        ->  is_observed(H, I)
13668        ;   is_least_occurrence(C)
13669        ->  is_observed(H, I)
13670        ;   true
13671        ),
13672        (   J=suspension(_, active, _, _, _)
13673        ->  setarg(2, J, inactive),
13674            allocation_occurrence___2__1__1__2(B,
13675                                               C,
13676                                               D,
13677                                               E,
13678                                               F,
13679                                               G,
13680                                               H,
13681                                               I,
13682                                               J)
13683        ;   true
13684        )
13685    ;   allocation_occurrence___2__1__1__2(B,
13686                                           C,
13687                                           D,
13688                                           E,
13689                                           F,
13690                                           G,
13691                                           H,
13692                                           I,
13693                                           J)
13694    ).
13695allocation_occurrence___2__1(A, B, C) :-
13696    allocation_occurrence___2__2(A, B, C).
13697allocation_occurrence___2__2(A, B, C) :-
13698    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', D),
13699    lookup_ht(D, A, E),
13700    !,
13701    allocation_occurrence___2__2__0__3(E, A, B, C).
13702allocation_occurrence___2__2__0__3([], A, B, C) :-
13703    allocation_occurrence___2__3(A, B, C).
13704allocation_occurrence___2__2__0__3([A|B], C, D, E) :-
13705    (   A=suspension(_, active, _, _, F, G, H, I, _),
13706        F==C,
13707        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
13708                  J),
13709        lookup_ht(J, H, K)
13710    ->  allocation_occurrence___2__2__1__3(K,
13711                                           G,
13712                                           H,
13713                                           I,
13714                                           A,
13715                                           B,
13716                                           C,
13717                                           D,
13718                                           E)
13719    ;   allocation_occurrence___2__2__0__3(B, C, D, E)
13720    ).
13721allocation_occurrence___2__2__1__3([], _, _, _, _, A, B, C, D) :-
13722    allocation_occurrence___2__2__0__3(A, B, C, D).
13723allocation_occurrence___2__2__1__3([A|B], C, D, E, F, G, H, I, J) :-
13724    (   A=suspension(_, active, K, L),
13725        K==D,
13726        L=[M|N],
13727        M==E,
13728        I>=C,
13729        ( ground(D),
13730          nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
13731                    O),
13732          lookup_ht(O, D, P)
13733        ),
13734        member(Q, P),
13735        Q=suspension(_, active, _, _, _, _),
13736        \+ may_trigger(H)
13737    ->  setarg(2, A, removed),
13738        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
13739                    R),
13740          delete_ht(R, k(D, [E|N]), A)
13741        ),
13742        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
13743                  S),
13744        delete_ht(S, D, A),
13745        arg(2, J, T),
13746        setarg(2, J, active),
13747        (   T==not_stored_yet
13748        ->  nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13749                      U),
13750            insert_ht(U, H, J),
13751            nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13752                      V),
13753            insert_ht(V, k(H, I), J)
13754        ;   true
13755        ),
13756        least_occurrence(D, N),
13757        (   J=suspension(_, active, _, _, _)
13758        ->  setarg(2, J, inactive),
13759            allocation_occurrence___2__2__1__3(B,
13760                                               C,
13761                                               D,
13762                                               E,
13763                                               F,
13764                                               G,
13765                                               H,
13766                                               I,
13767                                               J)
13768        ;   true
13769        )
13770    ;   allocation_occurrence___2__2__1__3(B,
13771                                           C,
13772                                           D,
13773                                           E,
13774                                           F,
13775                                           G,
13776                                           H,
13777                                           I,
13778                                           J)
13779    ).
13780allocation_occurrence___2__2(A, B, C) :-
13781    allocation_occurrence___2__3(A, B, C).
13782allocation_occurrence___2__3(A, B, C) :-
13783    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
13784              D),
13785    lookup_ht(D, A, E),
13786    !,
13787    allocation_occurrence___2__3__0__5(E, A, B, C).
13788allocation_occurrence___2__3__0__5([], A, B, C) :-
13789    allocation_occurrence___2__4(A, B, C).
13790allocation_occurrence___2__3__0__5([A|B], C, D, E) :-
13791    (   A=suspension(_, active, F, G, H, I),
13792        F==C,
13793        G>1,
13794        ( ground(C),
13795          ground(G),
13796          nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13797                    J),
13798          lookup_ht(J, k(C, G), K)
13799        ),
13800        member(L, K),
13801        L=suspension(_, active, _, _, _, M, _, _, _),
13802        D>M
13803    ->  setarg(2, A, removed),
13804        ( nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
13805                    N),
13806          delete_ht(N, C, A)
13807        ),
13808        nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
13809                  O),
13810        delete_ht(O, k(C, G), A),
13811        arg(2, E, P),
13812        setarg(2, E, active),
13813        (   P==not_stored_yet
13814        ->  nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13815                      Q),
13816            insert_ht(Q, C, E),
13817            nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13818                      R),
13819            insert_ht(R, k(C, D), E)
13820        ;   true
13821        ),
13822        functional_dependency(C, 1, H, I),
13823        (   E=suspension(_, active, _, _, _)
13824        ->  setarg(2, E, inactive),
13825            allocation_occurrence___2__3__0__5(B,
13826                                               C,
13827                                               D,
13828                                               E)
13829        ;   true
13830        )
13831    ;   allocation_occurrence___2__3__0__5(B, C, D, E)
13832    ).
13833allocation_occurrence___2__3(A, B, C) :-
13834    allocation_occurrence___2__4(A, B, C).
13835allocation_occurrence___2__4(A, B, C) :-
13836    arg(2, C, D),
13837    setarg(2, C, active),
13838    (   D==not_stored_yet
13839    ->  nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13840                  E),
13841        insert_ht(E, A, C),
13842        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13843                  F),
13844        insert_ht(F, k(A, B), C)
13845    ;   true
13846    ).
13847get_allocation_occurrence(A, B) :-
13848    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13849              C),
13850    lookup_ht(C, A, D),
13851    member(E, D),
13852    E=suspension(_, active, _, _, F),
13853    !,
13854    B=F.
13855get_allocation_occurrence(_, A) :-
13856    chr_pp_flag(late_allocation, off),
13857    A=0.
13858rule(A, B) :-
13859    rule___2__0(A, B, _).
13860rule___2__0(A, B, C) :-
13861    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
13862    lookup_ht(D, A, E),
13863    !,
13864    C=suspension(F, not_stored_yet, t, _, A, B),
13865    'chr gen_id'(F),
13866    rule___2__0__0__1(E, A, B, C).
13867rule___2__0__0__1([], A, B, C) :-
13868    rule___2__1(A, B, C).
13869rule___2__0__0__1([A|B], C, D, E) :-
13870    (   A=suspension(_, active, _, _, F, G, H, I, J),
13871        H==C,
13872        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13873                  K),
13874        lookup_ht(K, k(F, G), L)
13875    ->  rule___2__0__1__1(L,
13876                          F,
13877                          G,
13878                          I,
13879                          J,
13880                          A,
13881                          B,
13882                          C,
13883                          D,
13884                          E)
13885    ;   rule___2__0__0__1(B, C, D, E)
13886    ).
13887rule___2__0__1__1([], _, _, _, _, _, A, B, C, D) :-
13888    rule___2__0__0__1(A, B, C, D).
13889rule___2__0__1__1([A|B], C, D, E, F, G, H, I, J, K) :-
13890    (   A=suspension(_, active, _, L, M),
13891        L==C,
13892        M==D,
13893        N=t(60, K, G, A),
13894        '$novel_production'(K, N),
13895        '$novel_production'(G, N),
13896        '$novel_production'(A, N)
13897    ->  '$extend_history'(K, N),
13898        arg(2, K, O),
13899        setarg(2, K, active),
13900        (   O==not_stored_yet
13901        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
13902                      P),
13903            Q=[K|P],
13904            b_setval('$chr_store_global_ground_chr_translate____rule___2',
13905                     Q),
13906            (   P=[R|_]
13907            ->  setarg(4, R, Q)
13908            ;   true
13909            ),
13910            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
13911                      S),
13912            insert_ht(S, I, K)
13913        ;   true
13914        ),
13915        \+ is_passive(I, E),
13916        F==propagation,
13917        (   stored_in_guard_before_next_kept_occurrence(C, D)
13918        ->  true
13919        ;   J=pragma(rule([_|_], _, _, _), _, _, _, _)
13920        ->  is_observed(C, D)
13921        ;   is_least_occurrence(I)
13922        ->  is_observed(C, D)
13923        ;   true
13924        ),
13925        (   K=suspension(_, active, _, _, _, _)
13926        ->  setarg(2, K, inactive),
13927            rule___2__0__1__1(B,
13928                              C,
13929                              D,
13930                              E,
13931                              F,
13932                              G,
13933                              H,
13934                              I,
13935                              J,
13936                              K)
13937        ;   true
13938        )
13939    ;   rule___2__0__1__1(B,
13940                          C,
13941                          D,
13942                          E,
13943                          F,
13944                          G,
13945                          H,
13946                          I,
13947                          J,
13948                          K)
13949    ).
13950rule___2__0(A, B, C) :-
13951    C=suspension(D, not_stored_yet, t, _, A, B),
13952    'chr gen_id'(D),
13953    rule___2__1(A, B, C).
13954rule___2__1(A, B, C) :-
13955    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
13956              D),
13957    lookup_ht(D, A, E),
13958    !,
13959    rule___2__1__0__2(E, A, B, C).
13960rule___2__1__0__2([], A, B, C) :-
13961    rule___2__2(A, B, C).
13962rule___2__1__0__2([A|B], C, D, E) :-
13963    (   A=suspension(_, active, F, G),
13964        F==C,
13965        G=[H|I],
13966        ( ground(C),
13967          ground(H),
13968          nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13969                    J),
13970          lookup_ht(J, k(C, H), K)
13971        ),
13972        member(L, K),
13973        L=suspension(_, active, _, _, M, N, _, _, _),
13974        ( nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13975                    O),
13976          lookup_ht(O, M, P)
13977        ),
13978        member(Q, P),
13979        Q=suspension(_, active, _, _, R),
13980        R>=N,
13981        \+ may_trigger(M)
13982    ->  setarg(2, A, removed),
13983        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
13984                    S),
13985          delete_ht(S, k(C, [H|I]), A)
13986        ),
13987        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
13988                  T),
13989        delete_ht(T, C, A),
13990        arg(2, E, U),
13991        setarg(2, E, active),
13992        (   U==not_stored_yet
13993        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
13994                      V),
13995            W=[E|V],
13996            b_setval('$chr_store_global_ground_chr_translate____rule___2',
13997                     W),
13998            (   V=[X|_]
13999            ->  setarg(4, X, W)
14000            ;   true
14001            ),
14002            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14003                      Y),
14004            insert_ht(Y, C, E)
14005        ;   true
14006        ),
14007        least_occurrence(C, I),
14008        (   E=suspension(_, active, _, _, _, _)
14009        ->  setarg(2, E, inactive),
14010            rule___2__1__0__2(B, C, D, E)
14011        ;   true
14012        )
14013    ;   rule___2__1__0__2(B, C, D, E)
14014    ).
14015rule___2__1(A, B, C) :-
14016    rule___2__2(A, B, C).
14017rule___2__2(A, B, C) :-
14018    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14019              D),
14020    lookup_ht(D, A, E),
14021    !,
14022    rule___2__2__0__3(E, A, B, C).
14023rule___2__2__0__3([], A, B, C) :-
14024    rule___2__3(A, B, C).
14025rule___2__2__0__3([A|B], C, D, E) :-
14026    (   A=suspension(_, active, F, G),
14027        F==C,
14028        G=[H|I],
14029        ( ground(C),
14030          ground(H)
14031        ),
14032        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
14033                  J),
14034        lookup_ht(J, k(C, H), K),
14035        member(L, K),
14036        L=suspension(_, active, _, _, _)
14037    ->  setarg(2, A, removed),
14038        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
14039                    M),
14040          delete_ht(M, k(C, [H|I]), A)
14041        ),
14042        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14043                  N),
14044        delete_ht(N, C, A),
14045        arg(2, E, O),
14046        setarg(2, E, active),
14047        (   O==not_stored_yet
14048        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14049                      P),
14050            Q=[E|P],
14051            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14052                     Q),
14053            (   P=[R|_]
14054            ->  setarg(4, R, Q)
14055            ;   true
14056            ),
14057            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14058                      S),
14059            insert_ht(S, C, E)
14060        ;   true
14061        ),
14062        least_occurrence(C, I),
14063        (   E=suspension(_, active, _, _, _, _)
14064        ->  setarg(2, E, inactive),
14065            rule___2__2__0__3(B, C, D, E)
14066        ;   true
14067        )
14068    ;   rule___2__2__0__3(B, C, D, E)
14069    ).
14070rule___2__2(A, B, C) :-
14071    rule___2__3(A, B, C).
14072rule___2__3(A, B, C) :-
14073    B=pragma(rule([], _, _, _), ids([], D), _, _, _),
14074    !,
14075    arg(2, C, E),
14076    setarg(2, C, active),
14077    (   E==not_stored_yet
14078    ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2', F),
14079        G=[C|F],
14080        b_setval('$chr_store_global_ground_chr_translate____rule___2', G),
14081        (   F=[H|_]
14082        ->  setarg(4, H, G)
14083        ;   true
14084        ),
14085        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I),
14086        insert_ht(I, A, C)
14087    ;   true
14088    ),
14089    least_occurrence(A, D),
14090    (   C=suspension(_, active, _, _, _, _)
14091    ->  setarg(2, C, inactive),
14092        rule___2__4(A, B, C)
14093    ;   true
14094    ).
14095rule___2__3(A, B, C) :-
14096    rule___2__4(A, B, C).
14097rule___2__4(A, B, C) :-
14098    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14099              D),
14100    lookup_ht(D, A, E),
14101    member(F, E),
14102    F=suspension(_, active, _, _, _, G, H, I, J, _),
14103    B=pragma(rule(K, L, H, M), N, O, P, A),
14104    H\==true,
14105    append(J, I, Q),
14106    (   conj2list(H, R),
14107        append(Q, R, S),
14108        guard_entailment:entails_guard(S, fail)
14109    ->  T=fail
14110    ;   simplify_guard(H, M, Q, T, U)
14111    ),
14112    H\==T,
14113    !,
14114    setarg(2, F, removed),
14115    arg(4, F, V),
14116    (   var(V)
14117    ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
14118                  W),
14119        W=[_|X],
14120        b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
14121                 X),
14122        (   X=[Y|_]
14123        ->  setarg(4, Y, _)
14124        ;   true
14125        )
14126    ;   V=[_, _|X],
14127        setarg(2, V, X),
14128        (   X=[Y|_]
14129        ->  setarg(4, Y, V)
14130        ;   true
14131        )
14132    ),
14133    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14134              Z),
14135    delete_ht(Z, A, F),
14136    (   var(C)
14137    ->  true
14138    ;   arg(2, C, A1),
14139        setarg(2, C, removed),
14140        (   A1==not_stored_yet
14141        ->  true
14142        ;   arg(4, C, B1),
14143            (   var(B1)
14144            ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14145                          C1),
14146                C1=[_|D1],
14147                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14148                         D1),
14149                (   D1=[E1|_]
14150                ->  setarg(4, E1, _)
14151                ;   true
14152                )
14153            ;   B1=[_, _|D1],
14154                setarg(2, B1, D1),
14155                (   D1=[E1|_]
14156                ->  setarg(4, E1, B1)
14157                ;   true
14158                )
14159            ),
14160            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14161                      F1),
14162            delete_ht(F1, A, C)
14163        )
14164    ),
14165    rule(A,
14166         pragma(rule(K, L, T, U),
14167                N,
14168                O,
14169                P,
14170                A)),
14171    prev_guard_list(A, G, T, I, J, []).
14172rule___2__4(A, B, C) :-
14173    nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
14174              D),
14175    !,
14176    rule___2__4__0__10(D, A, B, C).
14177rule___2__4__0__10([], A, B, C) :-
14178    rule___2__5(A, B, C).
14179rule___2__4__0__10([A|B], C, D, E) :-
14180    (   A=suspension(_, active, _, _),
14181        F=t(174, E, A),
14182        '$novel_production'(E, F),
14183        '$novel_production'(A, F)
14184    ->  '$extend_history'(E, F),
14185        arg(2, E, G),
14186        setarg(2, E, active),
14187        (   G==not_stored_yet
14188        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14189                      H),
14190            I=[E|H],
14191            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14192                     I),
14193            (   H=[J|_]
14194            ->  setarg(4, J, I)
14195            ;   true
14196            ),
14197            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14198                      K),
14199            insert_ht(K, C, E)
14200        ;   true
14201        ),
14202        D=pragma(rule(L, M, _, _), _, _, _, _),
14203        append(L, M, N),
14204        make_head_matchings_explicit_(N, O, P),
14205        copy_term_nat(O-P, Q-R),
14206        make_head_matchings_explicit_memo_table(C, Q, R),
14207        (   E=suspension(_, active, _, _, _, _)
14208        ->  setarg(2, E, inactive),
14209            rule___2__4__0__10(B, C, D, E)
14210        ;   true
14211        )
14212    ;   rule___2__4__0__10(B, C, D, E)
14213    ).
14214rule___2__4(A, B, C) :-
14215    rule___2__5(A, B, C).
14216rule___2__5(A, B, C) :-
14217    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14218              D),
14219    lookup_ht(D, A, E),
14220    !,
14221    rule___2__5__0__11(E, A, B, C).
14222rule___2__5__0__11([], A, B, C) :-
14223    rule___2__6(A, B, C).
14224rule___2__5__0__11([A|B], C, D, E) :-
14225    (   A=suspension(_, active, _, _, F, _, G, H, I, _),
14226        F==C,
14227        J=t(178, A, E),
14228        '$novel_production'(A, J),
14229        '$novel_production'(E, J),
14230        chr_pp_flag(check_impossible_rules, on),
14231        D=pragma(rule(_, _, G, _), _, _, _, C),
14232        conj2list(G, K),
14233        append(I, H, L),
14234        append(L, K, M),
14235        guard_entailment:entails_guard(M, fail)
14236    ->  '$extend_history'(E, J),
14237        arg(2, E, N),
14238        setarg(2, E, active),
14239        (   N==not_stored_yet
14240        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14241                      O),
14242            P=[E|O],
14243            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14244                     P),
14245            (   O=[Q|_]
14246            ->  setarg(4, Q, P)
14247            ;   true
14248            ),
14249            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14250                      R),
14251            insert_ht(R, C, E)
14252        ;   true
14253        ),
14254        chr_warning(weird_program,
14255                    'Heads will never match or guard will always fail in ~@.\n\tThis rule will never fire!\n',
14256                    [format_rule(D)]),
14257        set_all_passive(C),
14258        (   E=suspension(_, active, _, _, _, _)
14259        ->  setarg(2, E, inactive),
14260            rule___2__5__0__11(B, C, D, E)
14261        ;   true
14262        )
14263    ;   rule___2__5__0__11(B, C, D, E)
14264    ).
14265rule___2__5(A, B, C) :-
14266    rule___2__6(A, B, C).
14267rule___2__6(A, B, C) :-
14268    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14269              D),
14270    lookup_ht(D, A, E),
14271    member(F, E),
14272    F=suspension(_, active, _, _, _, G, H, I, J, _),
14273    B=pragma(rule(K, L, H, M), N, O, P, A),
14274    simplify_heads(J, I, H, M, Q, R),
14275    Q\==[],
14276    extract_arguments(K, S),
14277    extract_arguments(L, T),
14278    extract_arguments(G, U),
14279    replace_some_heads(S,
14280                       T,
14281                       U,
14282                       Q,
14283                       V,
14284                       W,
14285                       H,
14286                       M,
14287                       X),
14288    substitute_arguments(K, V, Y),
14289    substitute_arguments(L, W, Z),
14290    append(R, X, A1),
14291    list2conj(A1, B1),
14292    C1=pragma(rule(Y, Z, H, (B1, M)), N, O, P, A),
14293    (   K\==Y
14294    ;   L\==Z
14295    ),
14296    !,
14297    (   var(C)
14298    ->  true
14299    ;   arg(2, C, D1),
14300        setarg(2, C, removed),
14301        (   D1==not_stored_yet
14302        ->  true
14303        ;   arg(4, C, E1),
14304            (   var(E1)
14305            ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14306                          F1),
14307                F1=[_|G1],
14308                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14309                         G1),
14310                (   G1=[H1|_]
14311                ->  setarg(4, H1, _)
14312                ;   true
14313                )
14314            ;   E1=[_, _|G1],
14315                setarg(2, E1, G1),
14316                (   G1=[H1|_]
14317                ->  setarg(4, H1, E1)
14318                ;   true
14319                )
14320            ),
14321            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14322                      I1),
14323            delete_ht(I1, A, C)
14324        )
14325    ),
14326    rule(A, C1).
14327rule___2__6(A, B, C) :-
14328    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
14329    lookup_ht(D, A, E),
14330    !,
14331    rule___2__6__0__13(E, A, B, C).
14332rule___2__6__0__13([], A, B, C) :-
14333    rule___2__7(A, B, C).
14334rule___2__6__0__13([A|B], C, D, E) :-
14335    (   A=suspension(_, active, _, _, F, G, H, _, _),
14336        H==C,
14337        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
14338                  I),
14339        lookup_ht(I, k(F, C), J)
14340    ->  rule___2__6__1__13(J,
14341                           F,
14342                           G,
14343                           A,
14344                           B,
14345                           C,
14346                           D,
14347                           E)
14348    ;   rule___2__6__0__13(B, C, D, E)
14349    ).
14350rule___2__6__1__13([], _, _, _, A, B, C, D) :-
14351    rule___2__6__0__13(A, B, C, D).
14352rule___2__6__1__13([A|B], C, D, E, F, G, H, I) :-
14353    (   A=suspension(_, active, _, _, J, K, L, M, _),
14354        A\==E,
14355        J==C,
14356        L==G,
14357        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14358                  N),
14359        lookup_ht(N, G, O)
14360    ->  rule___2__6__2__13(O,
14361                           K,
14362                           M,
14363                           A,
14364                           B,
14365                           C,
14366                           D,
14367                           E,
14368                           F,
14369                           G,
14370                           H,
14371                           I)
14372    ;   rule___2__6__1__13(B,
14373                           C,
14374                           D,
14375                           E,
14376                           F,
14377                           G,
14378                           H,
14379                           I)
14380    ).
14381rule___2__6__2__13([], _, _, _, A, B, C, D, E, F, G, H) :-
14382    rule___2__6__1__13(A,
14383                       B,
14384                       C,
14385                       D,
14386                       E,
14387                       F,
14388                       G,
14389                       H).
14390rule___2__6__2__13([A|B], C, D, E, F, G, H, I, J, K, L, M) :-
14391    (   A=suspension(_, active, _, _, N, _, _, _, _, _),
14392        N==K,
14393        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
14394                  O)
14395    ->  rule___2__6__3__13(O,
14396                           A,
14397                           B,
14398                           C,
14399                           D,
14400                           E,
14401                           F,
14402                           G,
14403                           H,
14404                           I,
14405                           J,
14406                           K,
14407                           L,
14408                           M)
14409    ;   rule___2__6__2__13(B,
14410                           C,
14411                           D,
14412                           E,
14413                           F,
14414                           G,
14415                           H,
14416                           I,
14417                           J,
14418                           K,
14419                           L,
14420                           M)
14421    ).
14422rule___2__6__3__13([], _, A, B, C, D, E, F, G, H, I, J, K, L) :-
14423    rule___2__6__2__13(A,
14424                       B,
14425                       C,
14426                       D,
14427                       E,
14428                       F,
14429                       G,
14430                       H,
14431                       I,
14432                       J,
14433                       K,
14434                       L).
14435rule___2__6__3__13([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O) :-
14436    (   A=suspension(_, active, _, P),
14437        E<J,
14438        chr_pp_flag(occurrence_subsumption, on),
14439        N=pragma(rule(Q, _, _, _), _, _, _, _),
14440        Q\==[],
14441        \+ tree_set_memberchk(I, P)
14442    ->  setarg(2, A, removed),
14443        arg(3, A, R),
14444        (   var(R)
14445        ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
14446                      S),
14447            S=[_|T],
14448            b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
14449                     T),
14450            (   T=[U|_]
14451            ->  setarg(3, U, _)
14452            ;   true
14453            )
14454        ;   R=[_, _|T],
14455            setarg(2, R, T),
14456            (   T=[U|_]
14457            ->  setarg(3, U, R)
14458            ;   true
14459            )
14460        ),
14461        arg(2, O, V),
14462        setarg(2, O, active),
14463        (   V==not_stored_yet
14464        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14465                      W),
14466            X=[O|W],
14467            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14468                     X),
14469            (   W=[Y|_]
14470            ->  setarg(4, Y, X)
14471            ;   true
14472            ),
14473            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14474                      Z),
14475            insert_ht(Z, M, O)
14476        ;   true
14477        ),
14478        first_occ_in_rule(M, I, E, F),
14479        tree_set_add(P, I, A1),
14480        multiple_occ_constraints_checked(A1),
14481        (   O=suspension(_, active, _, _, _, _)
14482        ->  setarg(2, O, inactive),
14483            rule___2__6__3__13(B,
14484                               C,
14485                               D,
14486                               E,
14487                               F,
14488                               G,
14489                               H,
14490                               I,
14491                               J,
14492                               K,
14493                               L,
14494                               M,
14495                               N,
14496                               O)
14497        ;   true
14498        )
14499    ;   rule___2__6__3__13(B,
14500                           C,
14501                           D,
14502                           E,
14503                           F,
14504                           G,
14505                           H,
14506                           I,
14507                           J,
14508                           K,
14509                           L,
14510                           M,
14511                           N,
14512                           O)
14513    ).
14514rule___2__6(A, B, C) :-
14515    rule___2__7(A, B, C).
14516rule___2__7(A, B, C) :-
14517    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', D),
14518    lookup_ht(D, A, E),
14519    !,
14520    rule___2__7__0__15(E, A, B, C).
14521rule___2__7__0__15([], A, B, C) :-
14522    rule___2__8(A, B, C).
14523rule___2__7__0__15([A|B], C, D, E) :-
14524    (   A=suspension(_, active, _, F, G),
14525        F==C,
14526        H=t(251, E, A),
14527        '$novel_production'(E, H),
14528        '$novel_production'(A, H),
14529        D=pragma(rule(_, _, _, _), ids([G|I], J), _, _, C)
14530    ->  '$extend_history'(E, H),
14531        arg(2, E, K),
14532        setarg(2, E, active),
14533        (   K==not_stored_yet
14534        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14535                      L),
14536            M=[E|L],
14537            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14538                     M),
14539            (   L=[N|_]
14540            ->  setarg(4, N, M)
14541            ;   true
14542            ),
14543            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14544                      O),
14545            insert_ht(O, C, E)
14546        ;   true
14547        ),
14548        append(I, J, P),
14549        check_all_passive(C, P),
14550        (   E=suspension(_, active, _, _, _, _)
14551        ->  setarg(2, E, inactive),
14552            rule___2__7__0__15(B, C, D, E)
14553        ;   true
14554        )
14555    ;   rule___2__7__0__15(B, C, D, E)
14556    ).
14557rule___2__7(A, B, C) :-
14558    rule___2__8(A, B, C).
14559rule___2__8(A, B, C) :-
14560    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', D),
14561    lookup_ht(D, A, E),
14562    !,
14563    rule___2__8__0__16(E, A, B, C).
14564rule___2__8__0__16([], A, B, C) :-
14565    rule___2__9(A, B, C).
14566rule___2__8__0__16([A|B], C, D, E) :-
14567    (   A=suspension(_, active, _, F, G),
14568        F==C,
14569        H=t(252, E, A),
14570        '$novel_production'(E, H),
14571        '$novel_production'(A, H),
14572        D=pragma(rule(_, _, _, _), ids([], [G|I]), _, _, C)
14573    ->  '$extend_history'(E, H),
14574        arg(2, E, J),
14575        setarg(2, E, active),
14576        (   J==not_stored_yet
14577        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14578                      K),
14579            L=[E|K],
14580            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14581                     L),
14582            (   K=[M|_]
14583            ->  setarg(4, M, L)
14584            ;   true
14585            ),
14586            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14587                      N),
14588            insert_ht(N, C, E)
14589        ;   true
14590        ),
14591        check_all_passive(C, I),
14592        (   E=suspension(_, active, _, _, _, _)
14593        ->  setarg(2, E, inactive),
14594            rule___2__8__0__16(B, C, D, E)
14595        ;   true
14596        )
14597    ;   rule___2__8__0__16(B, C, D, E)
14598    ).
14599rule___2__8(A, B, C) :-
14600    rule___2__9(A, B, C).
14601rule___2__9(A, B, C) :-
14602    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
14603              D),
14604    lookup_ht(D, k(A, []), E),
14605    !,
14606    rule___2__9__0__17(E, A, B, C).
14607rule___2__9__0__17([], A, B, C) :-
14608    rule___2__10(A, B, C).
14609rule___2__9__0__17([A|B], C, D, E) :-
14610    (   A=suspension(_, active, F, G),
14611        F==C,
14612        G=[]
14613    ->  setarg(2, A, removed),
14614        ( nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
14615                    H),
14616          delete_ht(H, k(C, []), A)
14617        ),
14618        nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
14619                  I),
14620        delete_ht(I, C, A),
14621        arg(2, E, J),
14622        setarg(2, E, active),
14623        (   J==not_stored_yet
14624        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14625                      K),
14626            L=[E|K],
14627            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14628                     L),
14629            (   K=[M|_]
14630            ->  setarg(4, M, L)
14631            ;   true
14632            ),
14633            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14634                      N),
14635            insert_ht(N, C, E)
14636        ;   true
14637        ),
14638        chr_warning(weird_program,
14639                    'All heads passive in ~@.\n\tThis rule never fires. Please check your program.\n',
14640                    [format_rule(D)]),
14641        (   E=suspension(_, active, _, _, _, _)
14642        ->  setarg(2, E, inactive),
14643            rule___2__9__0__17(B, C, D, E)
14644        ;   true
14645        )
14646    ;   rule___2__9__0__17(B, C, D, E)
14647    ).
14648rule___2__9(A, B, C) :-
14649    rule___2__10(A, B, C).
14650rule___2__10(A, B, C) :-
14651    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
14652    lookup_ht(D, A, E),
14653    !,
14654    rule___2__10__0__22(E, A, B, C).
14655rule___2__10__0__22([], A, B, C) :-
14656    rule___2__11(A, B, C).
14657rule___2__10__0__22([A|B], C, D, E) :-
14658    (   A=suspension(_, active, _, _, F, _, G, H, I),
14659        G==C,
14660        nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
14661                  J)
14662    ->  rule___2__10__1__22(J,
14663                            F,
14664                            H,
14665                            I,
14666                            A,
14667                            B,
14668                            C,
14669                            D,
14670                            E)
14671    ;   rule___2__10__0__22(B, C, D, E)
14672    ).
14673rule___2__10__1__22([], _, _, _, _, A, B, C, D) :-
14674    rule___2__10__0__22(A, B, C, D).
14675rule___2__10__1__22([A|B], C, D, E, F, G, H, I, J) :-
14676    (   A=suspension(_, active, _, _),
14677        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
14678                  K),
14679        lookup_ht(K, C, L)
14680    ->  rule___2__10__2__22(L,
14681                            A,
14682                            B,
14683                            C,
14684                            D,
14685                            E,
14686                            F,
14687                            G,
14688                            H,
14689                            I,
14690                            J)
14691    ;   rule___2__10__1__22(B,
14692                            C,
14693                            D,
14694                            E,
14695                            F,
14696                            G,
14697                            H,
14698                            I,
14699                            J)
14700    ).
14701rule___2__10__2__22([], _, A, B, C, D, E, F, G, H, I) :-
14702    rule___2__10__1__22(A,
14703                        B,
14704                        C,
14705                        D,
14706                        E,
14707                        F,
14708                        G,
14709                        H,
14710                        I).
14711rule___2__10__2__22([A|B], C, D, E, F, G, H, I, J, K, L) :-
14712    (   A=suspension(_, active, _, _, M, N),
14713        M==E,
14714        O=t(330, C, H, L, A),
14715        '$novel_production'(C, O),
14716        '$novel_production'(H, O),
14717        '$novel_production'(L, O),
14718        '$novel_production'(A, O)
14719    ->  '$extend_history'(L, O),
14720        arg(2, L, P),
14721        setarg(2, L, active),
14722        (   P==not_stored_yet
14723        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14724                      Q),
14725            R=[L|Q],
14726            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14727                     R),
14728            (   Q=[S|_]
14729            ->  setarg(4, S, R)
14730            ;   true
14731            ),
14732            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14733                      T),
14734            insert_ht(T, J, L)
14735        ;   true
14736        ),
14737        K=pragma(rule(U, V, W, _), _, _, _, _),
14738        (   is_passive(J, F)
14739        ->  true
14740        ;   G==simplification
14741        ->  select(X, U, _),
14742            X=..[_|Y],
14743            term_variables(W, Z),
14744            partial_wake_args(Y, N, Z, E)
14745        ;   select(X, V, _),
14746            X=..[_|Y],
14747            term_variables(W, Z),
14748            partial_wake_args(Y, N, Z, E)
14749        ),
14750        (   L=suspension(_, active, _, _, _, _)
14751        ->  setarg(2, L, inactive),
14752            rule___2__10__2__22(B,
14753                                C,
14754                                D,
14755                                E,
14756                                F,
14757                                G,
14758                                H,
14759                                I,
14760                                J,
14761                                K,
14762                                L)
14763        ;   true
14764        )
14765    ;   rule___2__10__2__22(B,
14766                            C,
14767                            D,
14768                            E,
14769                            F,
14770                            G,
14771                            H,
14772                            I,
14773                            J,
14774                            K,
14775                            L)
14776    ).
14777rule___2__10(A, B, C) :-
14778    rule___2__11(A, B, C).
14779rule___2__11(A, _, B) :-
14780    arg(2, B, C),
14781    setarg(2, B, active),
14782    (   C==not_stored_yet
14783    ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2', D),
14784        E=[B|D],
14785        b_setval('$chr_store_global_ground_chr_translate____rule___2', E),
14786        (   D=[F|_]
14787        ->  setarg(4, F, E)
14788        ;   true
14789        ),
14790        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
14791        insert_ht(G, A, B)
14792    ;   true
14793    ).
14794get_rule(A, B) :-
14795    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', C),
14796    lookup_ht(C, A, D),
14797    member(E, D),
14798    E=suspension(_, active, _, _, _, F),
14799    !,
14800    B=F.
14801get_rule(_, _) :-
14802    fail.
14803least_occurrence(A, [B|C]) :-
14804    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', D),
14805    lookup_ht(D, A, E),
14806    member(F, E),
14807    F=suspension(_, active, _, _, _, _),
14808    (   nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
14809                  G),
14810        lookup_ht(G, k(A, B), H),
14811        member(I, H),
14812        I=suspension(_, active, _, _, J, K, _, _, _),
14813        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
14814                  L),
14815        lookup_ht(L, J, M),
14816        member(N, M),
14817        N=suspension(_, active, _, _, O),
14818        O>=K,
14819        \+ may_trigger(J),
14820        !,
14821        least_occurrence(A, C)
14822    ;   nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
14823                  P),
14824        lookup_ht(P, k(A, B), Q),
14825        member(R, Q),
14826        R=suspension(_, active, _, _, _),
14827        !,
14828        least_occurrence(A, C)
14829    ).
14830least_occurrence(A, B) :-
14831    C=suspension(D, active, A, B),
14832    'chr gen_id'(D),
14833    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
14834              E),
14835    insert_ht(E, k(A, B), C),
14836    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14837              F),
14838    insert_ht(F, A, C).
14839is_least_occurrence(A) :-
14840    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
14841              B),
14842    lookup_ht(B, k(A, []), C),
14843    member(D, C),
14844    D=suspension(_, active, _, _),
14845    !.
14846is_least_occurrence(_) :-
14847    fail.
14848stored_in_guard_lookahead(A, B) :-
14849    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
14850              C),
14851    lookup_ht(C, k(A, B), D),
14852    member(E, D),
14853    E=suspension(_, active, _, _, _, _, F, G, H),
14854    (   nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
14855                  I),
14856        lookup_ht(I, k(F, G), J),
14857        member(K, J),
14858        K=suspension(_, active, _, _, _),
14859        !,
14860        L is B+1,
14861        stored_in_guard_lookahead(A, L)
14862    ;   !,
14863        H==simplification,
14864        (   is_stored_in_guard(A, F)
14865        ->  true
14866        ;   M is B+1,
14867            stored_in_guard_lookahead(A, M)
14868        )
14869    ).
14870stored_in_guard_lookahead(_, _) :-
14871    fail.
14872constraint_index(A, B) :-
14873    C=suspension(D, active, A, B),
14874    'chr gen_id'(D),
14875    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
14876              E),
14877    insert_ht(E, B, C),
14878    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
14879              F),
14880    insert_ht(F, A, C).
14881get_constraint_index(A, B) :-
14882    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
14883              C),
14884    lookup_ht(C, A, D),
14885    member(E, D),
14886    E=suspension(_, active, _, F),
14887    !,
14888    B=F.
14889get_constraint_index(_, _) :-
14890    fail.
14891get_indexed_constraint(A, B) :-
14892    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
14893              C),
14894    lookup_ht(C, A, D),
14895    member(E, D),
14896    E=suspension(_, active, F, _),
14897    !,
14898    B=F.
14899get_indexed_constraint(_, _) :-
14900    fail.
14901max_constraint_index(A) :-
14902    B=suspension(C, active, _, A),
14903    'chr gen_id'(C),
14904    nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
14905              D),
14906    E=[B|D],
14907    b_setval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
14908             E),
14909    (   D=[F|_]
14910    ->  setarg(3, F, E)
14911    ;   true
14912    ).
14913get_max_constraint_index(A) :-
14914    nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
14915              B),
14916    member(C, B),
14917    C=suspension(_, active, _, D),
14918    !,
14919    A=D.
14920get_max_constraint_index(0).
14921identifier_size(A) :-
14922    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
14923              B),
14924    (   member(C, B),
14925        C=suspension(_, active, _, _),
14926        !
14927    ;   !,
14928        identifier_size___1__0__0__2(B, A)
14929    ).
14930identifier_size___1__0__0__2([], A) :-
14931    identifier_size___1__1(A).
14932identifier_size___1__0__0__2([A|B], C) :-
14933    (   A=suspension(_, active, _, _)
14934    ->  setarg(2, A, removed),
14935        arg(3, A, D),
14936        (   var(D)
14937        ->  nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
14938                      E),
14939            E=[_|F],
14940            b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
14941                     F),
14942            (   F=[G|_]
14943            ->  setarg(3, G, _)
14944            ;   true
14945            )
14946        ;   D=[_, _|F],
14947            setarg(2, D, F),
14948            (   F=[G|_]
14949            ->  setarg(3, G, D)
14950            ;   true
14951            )
14952        ),
14953        identifier_size___1__0__0__2(B, C)
14954    ;   identifier_size___1__0__0__2(B, C)
14955    ).
14956identifier_size(A) :-
14957    identifier_size___1__1(A).
14958identifier_size___1__1(A) :-
14959    B=suspension(C, active, _, A),
14960    'chr gen_id'(C),
14961    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
14962              D),
14963    E=[B|D],
14964    b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
14965             E),
14966    (   D=[F|_]
14967    ->  setarg(3, F, E)
14968    ;   true
14969    ).
14970get_identifier_size(A) :-
14971    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
14972              B),
14973    member(C, B),
14974    C=suspension(_, active, _, D),
14975    !,
14976    A=D.
14977get_identifier_size(1).
14978identifier_index(A, B, C) :-
14979    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
14980              D),
14981    lookup_ht(D, k(A, B), E),
14982    (   member(F, E),
14983        F=suspension(_, active, _, _, _),
14984        !
14985    ;   !,
14986        identifier_index___3__0__0__2(E, A, B, C)
14987    ).
14988identifier_index___3__0__0__2([], A, B, C) :-
14989    identifier_index___3__1(A, B, C).
14990identifier_index___3__0__0__2([A|B], C, D, E) :-
14991    (   A=suspension(_, active, F, G, _),
14992        F==C,
14993        G==D
14994    ->  setarg(2, A, removed),
14995        nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
14996                  H),
14997        delete_ht(H, k(C, D), A),
14998        identifier_index___3__0__0__2(B, C, D, E)
14999    ;   identifier_index___3__0__0__2(B, C, D, E)
15000    ).
15001identifier_index(A, B, C) :-
15002    identifier_index___3__1(A, B, C).
15003identifier_index___3__1(A, B, C) :-
15004    D=suspension(E, active, A, B, C),
15005    'chr gen_id'(E),
15006    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
15007              F),
15008    insert_ht(F, k(A, B), D).
15009get_identifier_index(A, B, C) :-
15010    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
15011              D),
15012    lookup_ht(D, k(A, B), E),
15013    member(F, E),
15014    F=suspension(_, active, _, _, G),
15015    !,
15016    C=G.
15017get_identifier_index(A, B, C) :-
15018    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
15019              D),
15020    member(E, D),
15021    E=suspension(_, active, _, F),
15022    !,
15023    setarg(2, E, removed),
15024    arg(3, E, G),
15025    (   var(G)
15026    ->  nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
15027                  H),
15028        H=[_|I],
15029        b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
15030                 I),
15031        (   I=[J|_]
15032        ->  setarg(3, J, _)
15033        ;   true
15034        )
15035    ;   G=[_, _|I],
15036        setarg(2, G, I),
15037        (   I=[J|_]
15038        ->  setarg(3, J, G)
15039        ;   true
15040        )
15041    ),
15042    K is F+1,
15043    identifier_index(A, B, K),
15044    identifier_size(K),
15045    C=K.
15046get_identifier_index(A, B, C) :-
15047    identifier_index(A, B, 2),
15048    identifier_size(2),
15049    C=2.
15050type_indexed_identifier_size(A, B) :-
15051    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15052              C),
15053    lookup_ht(C, A, D),
15054    (   member(E, D),
15055        E=suspension(_, active, _, _),
15056        !
15057    ;   !,
15058        type_indexed_identifier_size___2__0__0__2(D, A, B)
15059    ).
15060type_indexed_identifier_size___2__0__0__2([], A, B) :-
15061    type_indexed_identifier_size___2__1(A, B).
15062type_indexed_identifier_size___2__0__0__2([A|B], C, D) :-
15063    (   A=suspension(_, active, E, _),
15064        E==C
15065    ->  setarg(2, A, removed),
15066        nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15067                  F),
15068        delete_ht(F, C, A),
15069        type_indexed_identifier_size___2__0__0__2(B, C, D)
15070    ;   type_indexed_identifier_size___2__0__0__2(B, C, D)
15071    ).
15072type_indexed_identifier_size(A, B) :-
15073    type_indexed_identifier_size___2__1(A, B).
15074type_indexed_identifier_size___2__1(A, B) :-
15075    C=suspension(D, active, A, B),
15076    'chr gen_id'(D),
15077    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15078              E),
15079    insert_ht(E, A, C).
15080get_type_indexed_identifier_size(A, B) :-
15081    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15082              C),
15083    lookup_ht(C, A, D),
15084    member(E, D),
15085    E=suspension(_, active, _, F),
15086    !,
15087    B=F.
15088get_type_indexed_identifier_size(_, 1).
15089type_indexed_identifier_index(A, B, C, D) :-
15090    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
15091              E),
15092    lookup_ht(E, k(B, C), F),
15093    (   member(G, F),
15094        G=suspension(_, active, _, _, _, _),
15095        !
15096    ;   !,
15097        type_indexed_identifier_index___4__0__0__2(F,
15098                                                   A,
15099                                                   B,
15100                                                   C,
15101                                                   D)
15102    ).
15103type_indexed_identifier_index___4__0__0__2([], A, B, C, D) :-
15104    type_indexed_identifier_index___4__1(A, B, C, D).
15105type_indexed_identifier_index___4__0__0__2([A|B], C, D, E, F) :-
15106    (   A=suspension(_, active, G, H, I, _),
15107        H==D,
15108        I==E
15109    ->  setarg(2, A, removed),
15110        ( nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
15111                    J),
15112          delete_ht(J, k(G, D, E), A)
15113        ),
15114        nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
15115                  K),
15116        delete_ht(K, k(D, E), A),
15117        type_indexed_identifier_index___4__0__0__2(B,
15118                                                   C,
15119                                                   D,
15120                                                   E,
15121                                                   F)
15122    ;   type_indexed_identifier_index___4__0__0__2(B,
15123                                                   C,
15124                                                   D,
15125                                                   E,
15126                                                   F)
15127    ).
15128type_indexed_identifier_index(A, B, C, D) :-
15129    type_indexed_identifier_index___4__1(A, B, C, D).
15130type_indexed_identifier_index___4__1(A, B, C, D) :-
15131    E=suspension(F, active, A, B, C, D),
15132    'chr gen_id'(F),
15133    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
15134              G),
15135    insert_ht(G, k(A, B, C), E),
15136    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
15137              H),
15138    insert_ht(H, k(B, C), E).
15139get_type_indexed_identifier_index(A, B, C, D) :-
15140    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
15141              E),
15142    lookup_ht(E, k(A, B, C), F),
15143    member(G, F),
15144    G=suspension(_, active, _, _, _, H),
15145    !,
15146    D=H.
15147get_type_indexed_identifier_index(A, B, C, D) :-
15148    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15149              E),
15150    lookup_ht(E, A, F),
15151    member(G, F),
15152    G=suspension(_, active, _, H),
15153    !,
15154    setarg(2, G, removed),
15155    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15156              I),
15157    delete_ht(I, A, G),
15158    J is H+1,
15159    type_indexed_identifier_index(A, B, C, J),
15160    type_indexed_identifier_size(A, J),
15161    D=J.
15162get_type_indexed_identifier_index(A, B, C, D) :-
15163    type_indexed_identifier_index(A, B, C, 2),
15164    type_indexed_identifier_size(A, 2),
15165    D=2.
15166no_history(A) :-
15167    B=suspension(C, active, A),
15168    'chr gen_id'(C),
15169    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', D),
15170    insert_ht(D, A, B).
15171has_no_history(A) :-
15172    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', B),
15173    lookup_ht(B, A, C),
15174    member(D, C),
15175    D=suspension(_, active, _),
15176    !.
15177has_no_history(_) :-
15178    fail.
15179history(A, B, C) :-
15180    history___3__0(A, B, C, _).
15181history___3__0(A, B, C, D) :-
15182    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', E),
15183    lookup_ht(E, A, F),
15184    !,
15185    D=suspension(G, not_stored_yet, t, A, B, C),
15186    'chr gen_id'(G),
15187    history___3__0__0__1(F, A, B, C, D).
15188history___3__0__0__1([], A, B, C, D) :-
15189    history___3__1(A, B, C, D).
15190history___3__0__0__1([A|B], C, D, E, F) :-
15191    (   A=suspension(_, active, _, G, _, _),
15192        G==C,
15193        H=t(95, F, A),
15194        '$novel_production'(F, H),
15195        '$novel_production'(A, H)
15196    ->  '$extend_history'(F, H),
15197        arg(2, F, I),
15198        setarg(2, F, active),
15199        (   I==not_stored_yet
15200        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15201                                                                          J)
15202            ->  nb_getval(J, K),
15203                b_setval(J, [F|K])
15204            ;   true
15205            ),
15206            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15207                      L),
15208            insert_ht(L, D, F),
15209            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15210                      M),
15211            insert_ht(M, C, F)
15212        ;   true
15213        ),
15214        chr_error(syntax,
15215                  'Only one pragma history allowed per rule (rule number ~w)\n',
15216                  [C]),
15217        (   F=suspension(_, active, _, _, _, _)
15218        ->  setarg(2, F, inactive),
15219            history___3__0__0__1(B, C, D, E, F)
15220        ;   true
15221        )
15222    ;   history___3__0__0__1(B, C, D, E, F)
15223    ).
15224history___3__0(A, B, C, D) :-
15225    D=suspension(E, not_stored_yet, t, A, B, C),
15226    'chr gen_id'(E),
15227    history___3__1(A, B, C, D).
15228history___3__1(A, B, C, D) :-
15229    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', E),
15230    lookup_ht(E, A, F),
15231    !,
15232    history___3__1__0__2(F, A, B, C, D).
15233history___3__1__0__2([], A, B, C, D) :-
15234    history___3__2(A, B, C, D).
15235history___3__1__0__2([A|B], C, D, E, F) :-
15236    (   A=suspension(_, active, _, G, _, _),
15237        G==C,
15238        H=t(95, A, F),
15239        '$novel_production'(A, H),
15240        '$novel_production'(F, H)
15241    ->  '$extend_history'(F, H),
15242        arg(2, F, I),
15243        setarg(2, F, active),
15244        (   I==not_stored_yet
15245        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15246                                                                          J)
15247            ->  nb_getval(J, K),
15248                b_setval(J, [F|K])
15249            ;   true
15250            ),
15251            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15252                      L),
15253            insert_ht(L, D, F),
15254            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15255                      M),
15256            insert_ht(M, C, F)
15257        ;   true
15258        ),
15259        chr_error(syntax,
15260                  'Only one pragma history allowed per rule (rule number ~w)\n',
15261                  [C]),
15262        (   F=suspension(_, active, _, _, _, _)
15263        ->  setarg(2, F, inactive),
15264            history___3__1__0__2(B, C, D, E, F)
15265        ;   true
15266        )
15267    ;   history___3__1__0__2(B, C, D, E, F)
15268    ).
15269history___3__1(A, B, C, D) :-
15270    history___3__2(A, B, C, D).
15271history___3__2(A, B, C, D) :-
15272    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', E),
15273    lookup_ht(E, B, F),
15274    !,
15275    history___3__2__0__3(F, A, B, C, D).
15276history___3__2__0__3([], A, B, C, D) :-
15277    history___3__3(A, B, C, D).
15278history___3__2__0__3([A|B], C, D, E, F) :-
15279    (   A=suspension(_, active, _, G, H, I),
15280        H==D,
15281        J=t(96, F, A),
15282        '$novel_production'(F, J),
15283        '$novel_production'(A, J)
15284    ->  '$extend_history'(F, J),
15285        arg(2, F, K),
15286        setarg(2, F, active),
15287        (   K==not_stored_yet
15288        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15289                                                                          L)
15290            ->  nb_getval(L, M),
15291                b_setval(L, [F|M])
15292            ;   true
15293            ),
15294            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15295                      N),
15296            insert_ht(N, D, F),
15297            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15298                      O),
15299            insert_ht(O, C, F)
15300        ;   true
15301        ),
15302        length(E, P),
15303        length(I, Q),
15304        (   P\==Q
15305        ->  chr_error(syntax,
15306                      'The history named ~w does not always range over an equal amount of occurrences.\n',
15307                      [D])
15308        ;   test_named_history_id_pairs(C, E, G, I)
15309        ),
15310        (   F=suspension(_, active, _, _, _, _)
15311        ->  setarg(2, F, inactive),
15312            history___3__2__0__3(B, C, D, E, F)
15313        ;   true
15314        )
15315    ;   history___3__2__0__3(B, C, D, E, F)
15316    ).
15317history___3__2(A, B, C, D) :-
15318    history___3__3(A, B, C, D).
15319history___3__3(A, B, C, D) :-
15320    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', E),
15321    lookup_ht(E, B, F),
15322    !,
15323    history___3__3__0__4(F, A, B, C, D).
15324history___3__3__0__4([], A, B, C, D) :-
15325    history___3__4(A, B, C, D).
15326history___3__3__0__4([A|B], C, D, E, F) :-
15327    (   A=suspension(_, active, _, G, H, I),
15328        H==D,
15329        J=t(96, A, F),
15330        '$novel_production'(A, J),
15331        '$novel_production'(F, J)
15332    ->  '$extend_history'(F, J),
15333        arg(2, F, K),
15334        setarg(2, F, active),
15335        (   K==not_stored_yet
15336        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15337                                                                          L)
15338            ->  nb_getval(L, M),
15339                b_setval(L, [F|M])
15340            ;   true
15341            ),
15342            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15343                      N),
15344            insert_ht(N, D, F),
15345            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15346                      O),
15347            insert_ht(O, C, F)
15348        ;   true
15349        ),
15350        length(I, P),
15351        length(E, Q),
15352        (   P\==Q
15353        ->  chr_error(syntax,
15354                      'The history named ~w does not always range over an equal amount of occurrences.\n',
15355                      [D])
15356        ;   test_named_history_id_pairs(G, I, C, E)
15357        ),
15358        (   F=suspension(_, active, _, _, _, _)
15359        ->  setarg(2, F, inactive),
15360            history___3__3__0__4(B, C, D, E, F)
15361        ;   true
15362        )
15363    ;   history___3__3__0__4(B, C, D, E, F)
15364    ).
15365history___3__3(A, B, C, D) :-
15366    history___3__4(A, B, C, D).
15367history___3__4(A, B, [], C) :-
15368    nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
15369              D),
15370    !,
15371    history___3__4__0__6(D, A, B, [], C).
15372history___3__4__0__6([], A, B, C, D) :-
15373    history___3__5(A, B, C, D).
15374history___3__4__0__6([A|B], C, D, E, F) :-
15375    (   A=suspension(_, active, _, _),
15376        G=t(142, A, F),
15377        '$novel_production'(A, G),
15378        '$novel_production'(F, G)
15379    ->  '$extend_history'(F, G),
15380        arg(2, F, H),
15381        setarg(2, F, active),
15382        (   H==not_stored_yet
15383        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15384                                                                          I)
15385            ->  nb_getval(I, J),
15386                b_setval(I, [F|J])
15387            ;   true
15388            ),
15389            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15390                      K),
15391            insert_ht(K, D, F),
15392            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15393                      L),
15394            insert_ht(L, C, F)
15395        ;   true
15396        ),
15397        generate_empty_named_history_initialisation(D),
15398        (   F=suspension(_, active, _, _, _, _)
15399        ->  setarg(2, F, inactive),
15400            history___3__4__0__6(B, C, D, E, F)
15401        ;   true
15402        )
15403    ;   history___3__4__0__6(B, C, D, E, F)
15404    ).
15405history___3__4(A, B, C, D) :-
15406    history___3__5(A, B, C, D).
15407history___3__5(A, B, C, D) :-
15408    arg(2, D, E),
15409    setarg(2, D, active),
15410    (   E==not_stored_yet
15411    ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(C,
15412                                                                      F)
15413        ->  nb_getval(F, G),
15414            b_setval(F, [D|G])
15415        ;   true
15416        ),
15417        nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15418                  H),
15419        insert_ht(H, B, D),
15420        nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15421                  I),
15422        insert_ht(I, A, D)
15423    ;   true
15424    ).
15425named_history(A, B, C) :-
15426    ground(A),
15427    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', D),
15428    lookup_ht(D, A, E),
15429    member(F, E),
15430    F=suspension(_, active, _, _, G, H),
15431    !,
15432    B=G,
15433    C=H.
15434named_history(_, _, _) :-
15435    fail.
15436test_named_history_id_pair(A, B, C, D) :-
15437    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
15438              E),
15439    lookup_ht(E, k(A, B), F),
15440    member(G, F),
15441    G=suspension(_, active, _, _, H, _, _, _, _),
15442    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
15443              I),
15444    lookup_ht(I, k(H, C, D), J),
15445    member(K, J),
15446    K=suspension(_, active, _, _, _, _, _, _, _),
15447    K\==G,
15448    !.
15449test_named_history_id_pair(A, _, B, _) :-
15450    chr_error(syntax,
15451              'Occurrences of shared history in rules number ~w and ~w do not correspond\n',
15452              [B, A]).
15453indexing_spec(A, B) :-
15454    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15455              C),
15456    lookup_ht(C, A, D),
15457    member(E, D),
15458    E=suspension(_, active, _, F),
15459    !,
15460    setarg(2, E, removed),
15461    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15462              G),
15463    delete_ht(G, A, E),
15464    append(B, F, H),
15465    indexing_spec(A, H).
15466indexing_spec(A, B) :-
15467    C=suspension(D, active, A, B),
15468    'chr gen_id'(D),
15469    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15470              E),
15471    insert_ht(E, A, C).
15472get_indexing_spec(A, B) :-
15473    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15474              C),
15475    lookup_ht(C, A, D),
15476    member(E, D),
15477    E=suspension(_, active, _, F),
15478    !,
15479    B=F.
15480get_indexing_spec(_, []).
15481observation_analysis(A) :-
15482    observation_analysis___1__0(A, _).
15483observation_analysis___1__0(A, B) :-
15484    nb_getval('$chr_store_global_ground_chr_translate____rule___2', C),
15485    !,
15486    B=suspension(D, not_stored_yet, _, A),
15487    'chr gen_id'(D),
15488    observation_analysis___1__0__0__1(C, A, B).
15489observation_analysis___1__0__0__1([], A, B) :-
15490    observation_analysis___1__1(A, B).
15491observation_analysis___1__0__0__1([A|B], C, D) :-
15492    (   A=suspension(_, active, _, _, E, F)
15493    ->  F=pragma(rule(_, _, G, H), _, _, _, _),
15494        (   chr_pp_flag(store_in_guards, on)
15495        ->  observation_analysis(E, G, guard, C)
15496        ;   true
15497        ),
15498        observation_analysis(E, H, body, C),
15499        observation_analysis___1__0__0__1(B, C, D)
15500    ;   observation_analysis___1__0__0__1(B, C, D)
15501    ).
15502observation_analysis___1__0(A, B) :-
15503    B=suspension(C, not_stored_yet, _, A),
15504    'chr gen_id'(C),
15505    observation_analysis___1__1(A, B).
15506observation_analysis___1__1(_, A) :-
15507    (   var(A)
15508    ->  true
15509    ;   arg(2, A, B),
15510        setarg(2, A, removed),
15511        (   B==not_stored_yet
15512        ->  true
15513        ;   arg(3, A, C),
15514            (   var(C)
15515            ->  nb_getval('$chr_store_global_ground_chr_translate____observation_analysis___1',
15516                          D),
15517                D=[_|E],
15518                b_setval('$chr_store_global_ground_chr_translate____observation_analysis___1',
15519                         E),
15520                (   E=[F|_]
15521                ->  setarg(3, F, _)
15522                ;   true
15523                )
15524            ;   C=[_, _|E],
15525                setarg(2, C, E),
15526                (   E=[F|_]
15527                ->  setarg(3, F, C)
15528                ;   true
15529                )
15530            )
15531        )
15532    ).
15533spawns(A, B, C) :-
15534    spawns___3__0(A, B, C, _).
15535spawns___3__0(A, B, C, _) :-
15536    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', D),
15537    lookup_ht(D, k(A, B, C), E),
15538    member(F, E),
15539    F=suspension(_, active, _, _, _, _, _),
15540    !.
15541spawns___3__0(A, body, B, _) :-
15542    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', C),
15543    lookup_ht(C, k(A, guard, B), D),
15544    member(E, D),
15545    E=suspension(_, active, _, _, _, _, _),
15546    !.
15547spawns___3__0(A, guard, B, C) :-
15548    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', D),
15549    lookup_ht(D, k(A, body, B), E),
15550    !,
15551    spawns___3__0__0__4(E, A, guard, B, C).
15552spawns___3__0__0__4([], A, B, C, D) :-
15553    spawns___3__1(A, B, C, D).
15554spawns___3__0__0__4([A|B], C, D, E, F) :-
15555    (   A=suspension(_, active, _, _, G, H, I),
15556        G==C,
15557        H=body,
15558        I==E
15559    ->  setarg(2, A, removed),
15560        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15561                    J),
15562          delete_ht(J, k(C, E), A)
15563        ),
15564        ( arg(4, A, K),
15565          (   var(K)
15566          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15567                        L),
15568              L=[_|M],
15569              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15570                       M),
15571              (   M=[N|_]
15572              ->  setarg(4, N, _)
15573              ;   true
15574              )
15575          ;   K=[_, _|M],
15576              setarg(2, K, M),
15577              (   M=[N|_]
15578              ->  setarg(4, N, K)
15579              ;   true
15580              )
15581          )
15582        ),
15583        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15584                    O),
15585          delete_ht(O, k(C, body), A)
15586        ),
15587        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15588                    P),
15589          delete_ht(P, C, A)
15590        ),
15591        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15592                    Q),
15593          delete_ht(Q, E, A)
15594        ),
15595        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15596                  R),
15597        delete_ht(R, k(C, body, E), A),
15598        spawns___3__0__0__4(B, C, D, E, F)
15599    ;   spawns___3__0__0__4(B, C, D, E, F)
15600    ).
15601spawns___3__0(A, B, C, D) :-
15602    spawns___3__1(A, B, C, D).
15603spawns___3__1(A, B, C, D) :-
15604    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
15605              E),
15606    lookup_ht(E, k(A, B), F),
15607    member(G, F),
15608    G=suspension(_, active, _, _),
15609    !,
15610    (   var(D)
15611    ->  true
15612    ;   arg(2, D, H),
15613        setarg(2, D, removed),
15614        (   H==not_stored_yet
15615        ->  true
15616        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15617                      I),
15618            delete_ht(I, k(A, C), D),
15619            arg(4, D, J),
15620            (   var(J)
15621            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15622                          K),
15623                K=[_|L],
15624                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15625                         L),
15626                (   L=[M|_]
15627                ->  setarg(4, M, _)
15628                ;   true
15629                )
15630            ;   J=[_, _|L],
15631                setarg(2, J, L),
15632                (   L=[M|_]
15633                ->  setarg(4, M, J)
15634                ;   true
15635                )
15636            ),
15637            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15638                      N),
15639            delete_ht(N, k(A, B), D),
15640            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15641                      O),
15642            delete_ht(O, A, D),
15643            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15644                      P),
15645            delete_ht(P, C, D),
15646            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15647                      Q),
15648            delete_ht(Q, k(A, B, C), D)
15649        )
15650    ).
15651spawns___3__1(A, body, B, C) :-
15652    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
15653              D),
15654    lookup_ht(D, k(A, guard), E),
15655    member(F, E),
15656    F=suspension(_, active, _, _),
15657    !,
15658    (   var(C)
15659    ->  true
15660    ;   arg(2, C, G),
15661        setarg(2, C, removed),
15662        (   G==not_stored_yet
15663        ->  true
15664        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15665                      H),
15666            delete_ht(H, k(A, B), C),
15667            arg(4, C, I),
15668            (   var(I)
15669            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15670                          J),
15671                J=[_|K],
15672                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15673                         K),
15674                (   K=[L|_]
15675                ->  setarg(4, L, _)
15676                ;   true
15677                )
15678            ;   I=[_, _|K],
15679                setarg(2, I, K),
15680                (   K=[L|_]
15681                ->  setarg(4, L, I)
15682                ;   true
15683                )
15684            ),
15685            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15686                      M),
15687            delete_ht(M, k(A, body), C),
15688            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15689                      N),
15690            delete_ht(N, A, C),
15691            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15692                      O),
15693            delete_ht(O, B, C),
15694            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15695                      P),
15696            delete_ht(P, k(A, body, B), C)
15697        )
15698    ).
15699spawns___3__1(A, B, C, D) :-
15700    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
15701              E),
15702    lookup_ht(E, k(A, B), F),
15703    member(G, F),
15704    G=suspension(_, active, _, _, _, _),
15705    may_trigger(C),
15706    !,
15707    (   var(D)
15708    ->  true
15709    ;   arg(2, D, H),
15710        setarg(2, D, removed),
15711        (   H==not_stored_yet
15712        ->  true
15713        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15714                      I),
15715            delete_ht(I, k(A, C), D),
15716            arg(4, D, J),
15717            (   var(J)
15718            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15719                          K),
15720                K=[_|L],
15721                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15722                         L),
15723                (   L=[M|_]
15724                ->  setarg(4, M, _)
15725                ;   true
15726                )
15727            ;   J=[_, _|L],
15728                setarg(2, J, L),
15729                (   L=[M|_]
15730                ->  setarg(4, M, J)
15731                ;   true
15732                )
15733            ),
15734            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15735                      N),
15736            delete_ht(N, k(A, B), D),
15737            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15738                      O),
15739            delete_ht(O, A, D),
15740            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15741                      P),
15742            delete_ht(P, C, D),
15743            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15744                      Q),
15745            delete_ht(Q, k(A, B, C), D)
15746        )
15747    ).
15748spawns___3__1(A, body, B, C) :-
15749    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
15750              D),
15751    lookup_ht(D, k(A, guard), E),
15752    member(F, E),
15753    F=suspension(_, active, _, _, _, _),
15754    may_trigger(B),
15755    !,
15756    (   var(C)
15757    ->  true
15758    ;   arg(2, C, G),
15759        setarg(2, C, removed),
15760        (   G==not_stored_yet
15761        ->  true
15762        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15763                      H),
15764            delete_ht(H, k(A, B), C),
15765            arg(4, C, I),
15766            (   var(I)
15767            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15768                          J),
15769                J=[_|K],
15770                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15771                         K),
15772                (   K=[L|_]
15773                ->  setarg(4, L, _)
15774                ;   true
15775                )
15776            ;   I=[_, _|K],
15777                setarg(2, I, K),
15778                (   K=[L|_]
15779                ->  setarg(4, L, I)
15780                ;   true
15781                )
15782            ),
15783            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15784                      M),
15785            delete_ht(M, k(A, body), C),
15786            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15787                      N),
15788            delete_ht(N, A, C),
15789            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15790                      O),
15791            delete_ht(O, B, C),
15792            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15793                      P),
15794            delete_ht(P, k(A, body, B), C)
15795        )
15796    ).
15797spawns___3__1(A, B, C, D) :-
15798    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', E),
15799    lookup_ht(E, C, F),
15800    (   member(G, F),
15801        G=suspension(_, active, _, _, _, _, H, I, _),
15802        (   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
15803                      J),
15804            lookup_ht(J, H, K),
15805            member(L, K),
15806            L=suspension(_, active, _, _),
15807            \+ is_passive(H, I),
15808            !,
15809            (   var(D)
15810            ->  true
15811            ;   arg(2, D, M),
15812                setarg(2, D, removed),
15813                (   M==not_stored_yet
15814                ->  true
15815                ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15816                              N),
15817                    delete_ht(N, k(A, C), D),
15818                    arg(4, D, O),
15819                    (   var(O)
15820                    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15821                                  P),
15822                        P=[_|Q],
15823                        b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15824                                 Q),
15825                        (   Q=[R|_]
15826                        ->  setarg(4, R, _)
15827                        ;   true
15828                        )
15829                    ;   O=[_, _|Q],
15830                        setarg(2, O, Q),
15831                        (   Q=[R|_]
15832                        ->  setarg(4, R, O)
15833                        ;   true
15834                        )
15835                    ),
15836                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15837                              S),
15838                    delete_ht(S, k(A, B), D),
15839                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15840                              T),
15841                    delete_ht(T, A, D),
15842                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15843                              U),
15844                    delete_ht(U, C, D),
15845                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15846                              V),
15847                    delete_ht(V, k(A, B, C), D)
15848                )
15849            ),
15850            spawns_all(A, B)
15851        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
15852                      W),
15853            lookup_ht(W, H, X),
15854            member(Y, X),
15855            Y=suspension(_, active, _, _, _, _),
15856            may_trigger(C),
15857            \+ is_passive(H, I),
15858            !,
15859            (   var(D)
15860            ->  true
15861            ;   arg(2, D, Z),
15862                setarg(2, D, removed),
15863                (   Z==not_stored_yet
15864                ->  true
15865                ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15866                              A1),
15867                    delete_ht(A1, k(A, C), D),
15868                    arg(4, D, B1),
15869                    (   var(B1)
15870                    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15871                                  C1),
15872                        C1=[_|D1],
15873                        b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15874                                 D1),
15875                        (   D1=[E1|_]
15876                        ->  setarg(4, E1, _)
15877                        ;   true
15878                        )
15879                    ;   B1=[_, _|D1],
15880                        setarg(2, B1, D1),
15881                        (   D1=[E1|_]
15882                        ->  setarg(4, E1, B1)
15883                        ;   true
15884                        )
15885                    ),
15886                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15887                              F1),
15888                    delete_ht(F1, k(A, B), D),
15889                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15890                              G1),
15891                    delete_ht(G1, A, D),
15892                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15893                              H1),
15894                    delete_ht(H1, C, D),
15895                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15896                              I1),
15897                    delete_ht(I1, k(A, B, C), D)
15898                )
15899            ),
15900            spawns_all_triggers(A, B)
15901        )
15902    ;   !,
15903        D=suspension(J1, not_stored_yet, t, _, A, B, C),
15904        'chr gen_id'(J1),
15905        spawns___3__1__0__11(F, A, B, C, D)
15906    ).
15907spawns___3__1__0__11([], A, B, C, D) :-
15908    spawns___3__2(A, B, C, D).
15909spawns___3__1__0__11([A|B], C, D, E, F) :-
15910    (   A=suspension(_, active, _, _, G, _, H, I, _),
15911        G==E,
15912        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
15913                  J),
15914        lookup_ht(J, H, K)
15915    ->  spawns___3__1__1__11(K,
15916                             H,
15917                             I,
15918                             A,
15919                             B,
15920                             C,
15921                             D,
15922                             E,
15923                             F)
15924    ;   spawns___3__1__0__11(B, C, D, E, F)
15925    ).
15926spawns___3__1__1__11([], _, _, _, A, B, C, D, E) :-
15927    spawns___3__1__0__11(A, B, C, D, E).
15928spawns___3__1__1__11([A|B], C, D, E, F, G, H, I, J) :-
15929    (   A=suspension(_, active, _, _, K, _),
15930        K==C,
15931        L=t(123, A, E, J),
15932        '$novel_production'(A, L),
15933        '$novel_production'(J, L),
15934        \+ may_trigger(I),
15935        \+ is_passive(C, D)
15936    ->  '$extend_history'(J, L),
15937        arg(2, J, M),
15938        setarg(2, J, active),
15939        (   M==not_stored_yet
15940        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15941                      N),
15942            insert_ht(N, k(G, I), J),
15943            nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15944                      O),
15945            P=[J|O],
15946            b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15947                     P),
15948            (   O=[Q|_]
15949            ->  setarg(4, Q, P)
15950            ;   true
15951            ),
15952            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15953                      R),
15954            insert_ht(R, k(G, H), J),
15955            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15956                      S),
15957            insert_ht(S, G, J),
15958            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15959                      T),
15960            insert_ht(T, I, J),
15961            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15962                      U),
15963            insert_ht(U, k(G, H, I), J)
15964        ;   true
15965        ),
15966        spawns_all_triggers(G, H),
15967        (   J=suspension(_, active, _, _, _, _, _)
15968        ->  setarg(2, J, inactive),
15969            spawns___3__1__1__11(B,
15970                                 C,
15971                                 D,
15972                                 E,
15973                                 F,
15974                                 G,
15975                                 H,
15976                                 I,
15977                                 J)
15978        ;   true
15979        )
15980    ;   spawns___3__1__1__11(B,
15981                             C,
15982                             D,
15983                             E,
15984                             F,
15985                             G,
15986                             H,
15987                             I,
15988                             J)
15989    ).
15990spawns___3__1(A, B, C, D) :-
15991    D=suspension(E, not_stored_yet, t, _, A, B, C),
15992    'chr gen_id'(E),
15993    spawns___3__2(A, B, C, D).
15994spawns___3__2(A, B, C, D) :-
15995    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', E),
15996    lookup_ht(E, A, F),
15997    !,
15998    spawns___3__2__0__12(F, A, B, C, D).
15999spawns___3__2__0__12([], A, B, C, D) :-
16000    spawns___3__3(A, B, C, D).
16001spawns___3__2__0__12([A|B], C, D, E, F) :-
16002    (   A=suspension(_, active, _, _, G, _, H, I, _),
16003        H==C,
16004        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', J),
16005        lookup_ht(J, G, K)
16006    ->  spawns___3__2__1__12(K,
16007                             G,
16008                             I,
16009                             A,
16010                             B,
16011                             C,
16012                             D,
16013                             E,
16014                             F)
16015    ;   spawns___3__2__0__12(B, C, D, E, F)
16016    ).
16017spawns___3__2__1__12([], _, _, _, A, B, C, D, E) :-
16018    spawns___3__2__0__12(A, B, C, D, E).
16019spawns___3__2__1__12([A|B], C, D, E, F, G, H, I, J) :-
16020    (   A=suspension(_, active, _, _, K, L, M),
16021        M==C,
16022        N=t(124, J, E, A),
16023        '$novel_production'(J, N),
16024        '$novel_production'(A, N),
16025        K\==G,
16026        C\==I,
16027        \+ is_passive(G, D)
16028    ->  '$extend_history'(J, N),
16029        arg(2, J, O),
16030        setarg(2, J, active),
16031        (   O==not_stored_yet
16032        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16033                      P),
16034            insert_ht(P, k(G, I), J),
16035            nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16036                      Q),
16037            R=[J|Q],
16038            b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16039                     R),
16040            (   Q=[S|_]
16041            ->  setarg(4, S, R)
16042            ;   true
16043            ),
16044            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16045                      T),
16046            insert_ht(T, k(G, H), J),
16047            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16048                      U),
16049            insert_ht(U, G, J),
16050            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16051                      V),
16052            insert_ht(V, I, J),
16053            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16054                      W),
16055            insert_ht(W, k(G, H, I), J)
16056        ;   true
16057        ),
16058        spawns(K, L, I),
16059        (   J=suspension(_, active, _, _, _, _, _)
16060        ->  setarg(2, J, inactive),
16061            spawns___3__2__1__12(B,
16062                                 C,
16063                                 D,
16064                                 E,
16065                                 F,
16066                                 G,
16067                                 H,
16068                                 I,
16069                                 J)
16070        ;   true
16071        )
16072    ;   spawns___3__2__1__12(B,
16073                             C,
16074                             D,
16075                             E,
16076                             F,
16077                             G,
16078                             H,
16079                             I,
16080                             J)
16081    ).
16082spawns___3__2(A, B, C, D) :-
16083    spawns___3__3(A, B, C, D).
16084spawns___3__3(A, B, C, D) :-
16085    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', E),
16086    lookup_ht(E, C, F),
16087    !,
16088    spawns___3__3__0__13(F, A, B, C, D).
16089spawns___3__3__0__13([], A, B, C, D) :-
16090    spawns___3__4(A, B, C, D).
16091spawns___3__3__0__13([A|B], C, D, E, F) :-
16092    (   A=suspension(_, active, _, _, G, _, H, I, _),
16093        G==E,
16094        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1', J),
16095        lookup_ht(J, H, K)
16096    ->  spawns___3__3__1__13(K,
16097                             H,
16098                             I,
16099                             A,
16100                             B,
16101                             C,
16102                             D,
16103                             E,
16104                             F)
16105    ;   spawns___3__3__0__13(B, C, D, E, F)
16106    ).
16107spawns___3__3__1__13([], _, _, _, A, B, C, D, E) :-
16108    spawns___3__3__0__13(A, B, C, D, E).
16109spawns___3__3__1__13([A|B], C, D, E, F, G, H, I, J) :-
16110    (   A=suspension(_, active, _, _, K, _, L),
16111        K==C,
16112        M=t(124, A, E, J),
16113        '$novel_production'(A, M),
16114        '$novel_production'(J, M),
16115        G\==C,
16116        I\==L,
16117        \+ is_passive(C, D)
16118    ->  '$extend_history'(J, M),
16119        arg(2, J, N),
16120        setarg(2, J, active),
16121        (   N==not_stored_yet
16122        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16123                      O),
16124            insert_ht(O, k(G, I), J),
16125            nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16126                      P),
16127            Q=[J|P],
16128            b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16129                     Q),
16130            (   P=[R|_]
16131            ->  setarg(4, R, Q)
16132            ;   true
16133            ),
16134            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16135                      S),
16136            insert_ht(S, k(G, H), J),
16137            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16138                      T),
16139            insert_ht(T, G, J),
16140            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16141                      U),
16142            insert_ht(U, I, J),
16143            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16144                      V),
16145            insert_ht(V, k(G, H, I), J)
16146        ;   true
16147        ),
16148        spawns(G, H, L),
16149        (   J=suspension(_, active, _, _, _, _, _)
16150        ->  setarg(2, J, inactive),
16151            spawns___3__3__1__13(B,
16152                                 C,
16153                                 D,
16154                                 E,
16155                                 F,
16156                                 G,
16157                                 H,
16158                                 I,
16159                                 J)
16160        ;   true
16161        )
16162    ;   spawns___3__3__1__13(B,
16163                             C,
16164                             D,
16165                             E,
16166                             F,
16167                             G,
16168                             H,
16169                             I,
16170                             J)
16171    ).
16172spawns___3__3(A, B, C, D) :-
16173    spawns___3__4(A, B, C, D).
16174spawns___3__4(A, B, C, D) :-
16175    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', E),
16176    lookup_ht(E, A, F),
16177    !,
16178    spawns___3__4__0__14(F, A, B, C, D).
16179spawns___3__4__0__14([], A, B, C, D) :-
16180    spawns___3__5(A, B, C, D).
16181spawns___3__4__0__14([A|B], C, D, E, F) :-
16182    (   A=suspension(_, active, _, _, G, _, H, I, _),
16183        H==C,
16184        nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16185                  J)
16186    ->  spawns___3__4__1__14(J,
16187                             G,
16188                             I,
16189                             A,
16190                             B,
16191                             C,
16192                             D,
16193                             E,
16194                             F)
16195    ;   spawns___3__4__0__14(B, C, D, E, F)
16196    ).
16197spawns___3__4__1__14([], _, _, _, A, B, C, D, E) :-
16198    spawns___3__4__0__14(A, B, C, D, E).
16199spawns___3__4__1__14([A|B], C, D, E, F, G, H, I, J) :-
16200    (   A=suspension(_, active, _, _, K, L),
16201        M=t(125, J, E, A),
16202        '$novel_production'(J, M),
16203        '$novel_production'(A, M),
16204        \+ is_passive(G, D),
16205        may_trigger(C),
16206        \+ may_trigger(I)
16207    ->  '$extend_history'(J, M),
16208        arg(2, J, N),
16209        setarg(2, J, active),
16210        (   N==not_stored_yet
16211        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16212                      O),
16213            insert_ht(O, k(G, I), J),
16214            nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16215                      P),
16216            Q=[J|P],
16217            b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16218                     Q),
16219            (   P=[R|_]
16220            ->  setarg(4, R, Q)
16221            ;   true
16222            ),
16223            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16224                      S),
16225            insert_ht(S, k(G, H), J),
16226            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16227                      T),
16228            insert_ht(T, G, J),
16229            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16230                      U),
16231            insert_ht(U, I, J),
16232            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16233                      V),
16234            insert_ht(V, k(G, H, I), J)
16235        ;   true
16236        ),
16237        spawns(K, L, I),
16238        (   J=suspension(_, active, _, _, _, _, _)
16239        ->  setarg(2, J, inactive),
16240            spawns___3__4__1__14(B,
16241                                 C,
16242                                 D,
16243                                 E,
16244                                 F,
16245                                 G,
16246                                 H,
16247                                 I,
16248                                 J)
16249        ;   true
16250        )
16251    ;   spawns___3__4__1__14(B,
16252                             C,
16253                             D,
16254                             E,
16255                             F,
16256                             G,
16257                             H,
16258                             I,
16259                             J)
16260    ).
16261spawns___3__4(A, B, C, D) :-
16262    spawns___3__5(A, B, C, D).
16263spawns___3__5(A, B, C, D) :-
16264    arg(2, D, E),
16265    setarg(2, D, active),
16266    (   E==not_stored_yet
16267    ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16268                  F),
16269        insert_ht(F, k(A, C), D),
16270        nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16271                  G),
16272        H=[D|G],
16273        b_setval('$chr_store_global_ground_chr_translate____spawns___3', H),
16274        (   G=[I|_]
16275        ->  setarg(4, I, H)
16276        ;   true
16277        ),
16278        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16279                  J),
16280        insert_ht(J, k(A, B), D),
16281        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16282                  K),
16283        insert_ht(K, A, D),
16284        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16285                  L),
16286        insert_ht(L, C, D),
16287        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16288                  M),
16289        insert_ht(M, k(A, B, C), D)
16290    ;   true
16291    ).
16292spawns_all(A, B) :-
16293    spawns_all___2__0(A, B, _).
16294spawns_all___2__0(A, B, _) :-
16295    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16296              C),
16297    lookup_ht(C, k(A, B), D),
16298    member(E, D),
16299    E=suspension(_, active, _, _),
16300    !.
16301spawns_all___2__0(A, body, _) :-
16302    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16303              B),
16304    lookup_ht(B, k(A, guard), C),
16305    member(D, C),
16306    D=suspension(_, active, _, _),
16307    !.
16308spawns_all___2__0(A, guard, B) :-
16309    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16310              C),
16311    lookup_ht(C, k(A, body), D),
16312    !,
16313    spawns_all___2__0__0__4(D, A, guard, B).
16314spawns_all___2__0__0__4([], A, B, C) :-
16315    spawns_all___2__1(A, B, C).
16316spawns_all___2__0__0__4([A|B], C, D, E) :-
16317    (   A=suspension(_, active, F, G),
16318        F==C,
16319        G=body
16320    ->  setarg(2, A, removed),
16321        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16322                    H),
16323          delete_ht(H, C, A)
16324        ),
16325        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16326                  I),
16327        delete_ht(I, k(C, body), A),
16328        spawns_all___2__0__0__4(B, C, D, E)
16329    ;   spawns_all___2__0__0__4(B, C, D, E)
16330    ).
16331spawns_all___2__0(A, B, C) :-
16332    spawns_all___2__1(A, B, C).
16333spawns_all___2__1(A, B, C) :-
16334    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', D),
16335    lookup_ht(D, k(A, B), E),
16336    !,
16337    spawns_all___2__1__0__5(E, A, B, C).
16338spawns_all___2__1__0__5([], A, B, C) :-
16339    spawns_all___2__2(A, B, C).
16340spawns_all___2__1__0__5([A|B], C, D, E) :-
16341    (   A=suspension(_, active, _, _, F, G, H),
16342        F==C,
16343        G==D
16344    ->  setarg(2, A, removed),
16345        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16346                    I),
16347          delete_ht(I, k(C, H), A)
16348        ),
16349        ( arg(4, A, J),
16350          (   var(J)
16351          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16352                        K),
16353              K=[_|L],
16354              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16355                       L),
16356              (   L=[M|_]
16357              ->  setarg(4, M, _)
16358              ;   true
16359              )
16360          ;   J=[_, _|L],
16361              setarg(2, J, L),
16362              (   L=[M|_]
16363              ->  setarg(4, M, J)
16364              ;   true
16365              )
16366          )
16367        ),
16368        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16369                    N),
16370          delete_ht(N, k(C, D), A)
16371        ),
16372        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16373                    O),
16374          delete_ht(O, C, A)
16375        ),
16376        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16377                    P),
16378          delete_ht(P, H, A)
16379        ),
16380        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16381                  Q),
16382        delete_ht(Q, k(C, D, H), A),
16383        spawns_all___2__1__0__5(B, C, D, E)
16384    ;   spawns_all___2__1__0__5(B, C, D, E)
16385    ).
16386spawns_all___2__1(A, B, C) :-
16387    spawns_all___2__2(A, B, C).
16388spawns_all___2__2(A, guard, B) :-
16389    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', C),
16390    lookup_ht(C, k(A, body), D),
16391    !,
16392    spawns_all___2__2__0__6(D, A, guard, B).
16393spawns_all___2__2__0__6([], A, B, C) :-
16394    spawns_all___2__3(A, B, C).
16395spawns_all___2__2__0__6([A|B], C, D, E) :-
16396    (   A=suspension(_, active, _, _, F, G, H),
16397        F==C,
16398        G=body
16399    ->  setarg(2, A, removed),
16400        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16401                    I),
16402          delete_ht(I, k(C, H), A)
16403        ),
16404        ( arg(4, A, J),
16405          (   var(J)
16406          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16407                        K),
16408              K=[_|L],
16409              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16410                       L),
16411              (   L=[M|_]
16412              ->  setarg(4, M, _)
16413              ;   true
16414              )
16415          ;   J=[_, _|L],
16416              setarg(2, J, L),
16417              (   L=[M|_]
16418              ->  setarg(4, M, J)
16419              ;   true
16420              )
16421          )
16422        ),
16423        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16424                    N),
16425          delete_ht(N, k(C, body), A)
16426        ),
16427        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16428                    O),
16429          delete_ht(O, C, A)
16430        ),
16431        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16432                    P),
16433          delete_ht(P, H, A)
16434        ),
16435        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16436                  Q),
16437        delete_ht(Q, k(C, body, H), A),
16438        spawns_all___2__2__0__6(B, C, D, E)
16439    ;   spawns_all___2__2__0__6(B, C, D, E)
16440    ).
16441spawns_all___2__2(A, B, C) :-
16442    spawns_all___2__3(A, B, C).
16443spawns_all___2__3(A, B, C) :-
16444    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16445              D),
16446    lookup_ht(D, k(A, B), E),
16447    !,
16448    spawns_all___2__3__0__7(E, A, B, C).
16449spawns_all___2__3__0__7([], A, B, C) :-
16450    spawns_all___2__4(A, B, C).
16451spawns_all___2__3__0__7([A|B], C, D, E) :-
16452    (   A=suspension(_, active, _, _, F, G),
16453        F==C,
16454        G==D
16455    ->  setarg(2, A, removed),
16456        ( arg(4, A, H),
16457          (   var(H)
16458          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16459                        I),
16460              I=[_|J],
16461              b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16462                       J),
16463              (   J=[K|_]
16464              ->  setarg(4, K, _)
16465              ;   true
16466              )
16467          ;   H=[_, _|J],
16468              setarg(2, H, J),
16469              (   J=[K|_]
16470              ->  setarg(4, K, H)
16471              ;   true
16472              )
16473          )
16474        ),
16475        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16476                    L),
16477          delete_ht(L, C, A)
16478        ),
16479        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16480                  M),
16481        delete_ht(M, k(C, D), A),
16482        spawns_all___2__3__0__7(B, C, D, E)
16483    ;   spawns_all___2__3__0__7(B, C, D, E)
16484    ).
16485spawns_all___2__3(A, B, C) :-
16486    spawns_all___2__4(A, B, C).
16487spawns_all___2__4(A, guard, B) :-
16488    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16489              C),
16490    lookup_ht(C, k(A, body), D),
16491    !,
16492    spawns_all___2__4__0__8(D, A, guard, B).
16493spawns_all___2__4__0__8([], A, B, C) :-
16494    spawns_all___2__5(A, B, C).
16495spawns_all___2__4__0__8([A|B], C, D, E) :-
16496    (   A=suspension(_, active, _, _, F, G),
16497        F==C,
16498        G=body
16499    ->  setarg(2, A, removed),
16500        ( arg(4, A, H),
16501          (   var(H)
16502          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16503                        I),
16504              I=[_|J],
16505              b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16506                       J),
16507              (   J=[K|_]
16508              ->  setarg(4, K, _)
16509              ;   true
16510              )
16511          ;   H=[_, _|J],
16512              setarg(2, H, J),
16513              (   J=[K|_]
16514              ->  setarg(4, K, H)
16515              ;   true
16516              )
16517          )
16518        ),
16519        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16520                    L),
16521          delete_ht(L, C, A)
16522        ),
16523        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16524                  M),
16525        delete_ht(M, k(C, body), A),
16526        spawns_all___2__4__0__8(B, C, D, E)
16527    ;   spawns_all___2__4__0__8(B, C, D, E)
16528    ).
16529spawns_all___2__4(A, B, C) :-
16530    spawns_all___2__5(A, B, C).
16531spawns_all___2__5(A, B, C) :-
16532    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
16533    lookup_ht(D, A, E),
16534    !,
16535    C=suspension(F, not_stored_yet, A, B),
16536    'chr gen_id'(F),
16537    spawns_all___2__5__0__9(E, A, B, C).
16538spawns_all___2__5__0__9([], A, B, C) :-
16539    spawns_all___2__6(A, B, C).
16540spawns_all___2__5__0__9([A|B], C, D, E) :-
16541    (   A=suspension(_, active, _, _, F, _, G, H, _),
16542        G==C,
16543        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', I),
16544        lookup_ht(I, F, J)
16545    ->  spawns_all___2__5__1__9(J,
16546                                F,
16547                                H,
16548                                A,
16549                                B,
16550                                C,
16551                                D,
16552                                E)
16553    ;   spawns_all___2__5__0__9(B, C, D, E)
16554    ).
16555spawns_all___2__5__1__9([], _, _, _, A, B, C, D) :-
16556    spawns_all___2__5__0__9(A, B, C, D).
16557spawns_all___2__5__1__9([A|B], C, D, E, F, G, H, I) :-
16558    (   A=suspension(_, active, _, _, J, K, L),
16559        L==C,
16560        \+ is_passive(G, D)
16561    ->  setarg(2, A, removed),
16562        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16563                    M),
16564          delete_ht(M, k(J, C), A)
16565        ),
16566        ( arg(4, A, N),
16567          (   var(N)
16568          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16569                        O),
16570              O=[_|P],
16571              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16572                       P),
16573              (   P=[Q|_]
16574              ->  setarg(4, Q, _)
16575              ;   true
16576              )
16577          ;   N=[_, _|P],
16578              setarg(2, N, P),
16579              (   P=[Q|_]
16580              ->  setarg(4, Q, N)
16581              ;   true
16582              )
16583          )
16584        ),
16585        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16586                    R),
16587          delete_ht(R, k(J, K), A)
16588        ),
16589        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16590                    S),
16591          delete_ht(S, J, A)
16592        ),
16593        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16594                    T),
16595          delete_ht(T, C, A)
16596        ),
16597        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16598                  U),
16599        delete_ht(U, k(J, K, C), A),
16600        arg(2, I, V),
16601        setarg(2, I, active),
16602        (   V==not_stored_yet
16603        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16604                      W),
16605            insert_ht(W, G, I),
16606            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16607                      X),
16608            insert_ht(X, k(G, H), I)
16609        ;   true
16610        ),
16611        spawns_all(J, K),
16612        (   I=suspension(_, active, _, _)
16613        ->  setarg(2, I, inactive),
16614            spawns_all___2__5__1__9(B,
16615                                    C,
16616                                    D,
16617                                    E,
16618                                    F,
16619                                    G,
16620                                    H,
16621                                    I)
16622        ;   true
16623        )
16624    ;   spawns_all___2__5__1__9(B,
16625                                C,
16626                                D,
16627                                E,
16628                                F,
16629                                G,
16630                                H,
16631                                I)
16632    ).
16633spawns_all___2__5(A, B, C) :-
16634    C=suspension(D, not_stored_yet, A, B),
16635    'chr gen_id'(D),
16636    spawns_all___2__6(A, B, C).
16637spawns_all___2__6(A, B, C) :-
16638    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
16639    lookup_ht(D, A, E),
16640    !,
16641    spawns_all___2__6__0__10(E, A, B, C).
16642spawns_all___2__6__0__10([], A, B, C) :-
16643    spawns_all___2__7(A, B, C).
16644spawns_all___2__6__0__10([A|B], C, D, E) :-
16645    (   A=suspension(_, active, _, _, F, _, G, H, _),
16646        G==C,
16647        \+ \+ spawns_all_triggers_implies_spawns_all,
16648        \+ is_passive(C, H),
16649        may_trigger(F)
16650    ->  arg(2, E, I),
16651        setarg(2, E, active),
16652        (   I==not_stored_yet
16653        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16654                      J),
16655            insert_ht(J, C, E),
16656            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16657                      K),
16658            insert_ht(K, k(C, D), E)
16659        ;   true
16660        ),
16661        spawns_all_triggers_implies_spawns_all,
16662        (   E=suspension(_, active, _, _)
16663        ->  setarg(2, E, inactive),
16664            spawns_all___2__6__0__10(B, C, D, E)
16665        ;   true
16666        )
16667    ;   spawns_all___2__6__0__10(B, C, D, E)
16668    ).
16669spawns_all___2__6(A, B, C) :-
16670    spawns_all___2__7(A, B, C).
16671spawns_all___2__7(A, B, C) :-
16672    arg(2, C, D),
16673    setarg(2, C, active),
16674    (   D==not_stored_yet
16675    ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16676                  E),
16677        insert_ht(E, A, C),
16678        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16679                  F),
16680        insert_ht(F, k(A, B), C)
16681    ;   true
16682    ).
16683spawns_all_triggers(A, B) :-
16684    spawns_all_triggers___2__0(A, B, _).
16685spawns_all_triggers___2__0(A, B, _) :-
16686    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16687              C),
16688    lookup_ht(C, k(A, B), D),
16689    member(E, D),
16690    E=suspension(_, active, _, _, _, _),
16691    !.
16692spawns_all_triggers___2__0(A, body, _) :-
16693    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16694              B),
16695    lookup_ht(B, k(A, guard), C),
16696    member(D, C),
16697    D=suspension(_, active, _, _, _, _),
16698    !.
16699spawns_all_triggers___2__0(A, guard, B) :-
16700    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16701              C),
16702    lookup_ht(C, k(A, body), D),
16703    !,
16704    spawns_all_triggers___2__0__0__4(D, A, guard, B).
16705spawns_all_triggers___2__0__0__4([], A, B, C) :-
16706    spawns_all_triggers___2__1(A, B, C).
16707spawns_all_triggers___2__0__0__4([A|B], C, D, E) :-
16708    (   A=suspension(_, active, _, _, F, G),
16709        F==C,
16710        G=body
16711    ->  setarg(2, A, removed),
16712        ( arg(4, A, H),
16713          (   var(H)
16714          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16715                        I),
16716              I=[_|J],
16717              b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16718                       J),
16719              (   J=[K|_]
16720              ->  setarg(4, K, _)
16721              ;   true
16722              )
16723          ;   H=[_, _|J],
16724              setarg(2, H, J),
16725              (   J=[K|_]
16726              ->  setarg(4, K, H)
16727              ;   true
16728              )
16729          )
16730        ),
16731        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16732                    L),
16733          delete_ht(L, C, A)
16734        ),
16735        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16736                  M),
16737        delete_ht(M, k(C, body), A),
16738        spawns_all_triggers___2__0__0__4(B, C, D, E)
16739    ;   spawns_all_triggers___2__0__0__4(B, C, D, E)
16740    ).
16741spawns_all_triggers___2__0(A, B, C) :-
16742    spawns_all_triggers___2__1(A, B, C).
16743spawns_all_triggers___2__1(A, B, C) :-
16744    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16745              D),
16746    lookup_ht(D, k(A, B), E),
16747    member(F, E),
16748    F=suspension(_, active, _, _),
16749    !,
16750    (   var(C)
16751    ->  true
16752    ;   arg(2, C, G),
16753        setarg(2, C, removed),
16754        (   G==not_stored_yet
16755        ->  true
16756        ;   arg(4, C, H),
16757            (   var(H)
16758            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16759                          I),
16760                I=[_|J],
16761                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16762                         J),
16763                (   J=[K|_]
16764                ->  setarg(4, K, _)
16765                ;   true
16766                )
16767            ;   H=[_, _|J],
16768                setarg(2, H, J),
16769                (   J=[K|_]
16770                ->  setarg(4, K, H)
16771                ;   true
16772                )
16773            ),
16774            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16775                      L),
16776            delete_ht(L, A, C),
16777            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16778                      M),
16779            delete_ht(M, k(A, B), C)
16780        )
16781    ).
16782spawns_all_triggers___2__1(A, body, B) :-
16783    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16784              C),
16785    lookup_ht(C, k(A, guard), D),
16786    member(E, D),
16787    E=suspension(_, active, _, _),
16788    !,
16789    (   var(B)
16790    ->  true
16791    ;   arg(2, B, F),
16792        setarg(2, B, removed),
16793        (   F==not_stored_yet
16794        ->  true
16795        ;   arg(4, B, G),
16796            (   var(G)
16797            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16798                          H),
16799                H=[_|I],
16800                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16801                         I),
16802                (   I=[J|_]
16803                ->  setarg(4, J, _)
16804                ;   true
16805                )
16806            ;   G=[_, _|I],
16807                setarg(2, G, I),
16808                (   I=[J|_]
16809                ->  setarg(4, J, G)
16810                ;   true
16811                )
16812            ),
16813            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16814                      K),
16815            delete_ht(K, A, B),
16816            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16817                      L),
16818            delete_ht(L, k(A, body), B)
16819        )
16820    ).
16821spawns_all_triggers___2__1(A, B, C) :-
16822    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', D),
16823    lookup_ht(D, k(A, B), E),
16824    !,
16825    spawns_all_triggers___2__1__0__7(E, A, B, C).
16826spawns_all_triggers___2__1__0__7([], A, B, C) :-
16827    spawns_all_triggers___2__2(A, B, C).
16828spawns_all_triggers___2__1__0__7([A|B], C, D, E) :-
16829    (   A=suspension(_, active, _, _, F, G, H),
16830        F==C,
16831        G==D,
16832        may_trigger(H)
16833    ->  setarg(2, A, removed),
16834        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16835                    I),
16836          delete_ht(I, k(C, H), A)
16837        ),
16838        ( arg(4, A, J),
16839          (   var(J)
16840          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16841                        K),
16842              K=[_|L],
16843              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16844                       L),
16845              (   L=[M|_]
16846              ->  setarg(4, M, _)
16847              ;   true
16848              )
16849          ;   J=[_, _|L],
16850              setarg(2, J, L),
16851              (   L=[M|_]
16852              ->  setarg(4, M, J)
16853              ;   true
16854              )
16855          )
16856        ),
16857        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16858                    N),
16859          delete_ht(N, k(C, D), A)
16860        ),
16861        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16862                    O),
16863          delete_ht(O, C, A)
16864        ),
16865        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16866                    P),
16867          delete_ht(P, H, A)
16868        ),
16869        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16870                  Q),
16871        delete_ht(Q, k(C, D, H), A),
16872        spawns_all_triggers___2__1__0__7(B, C, D, E)
16873    ;   spawns_all_triggers___2__1__0__7(B, C, D, E)
16874    ).
16875spawns_all_triggers___2__1(A, B, C) :-
16876    spawns_all_triggers___2__2(A, B, C).
16877spawns_all_triggers___2__2(A, guard, B) :-
16878    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', C),
16879    lookup_ht(C, k(A, body), D),
16880    !,
16881    spawns_all_triggers___2__2__0__8(D, A, guard, B).
16882spawns_all_triggers___2__2__0__8([], A, B, C) :-
16883    spawns_all_triggers___2__3(A, B, C).
16884spawns_all_triggers___2__2__0__8([A|B], C, D, E) :-
16885    (   A=suspension(_, active, _, _, F, G, H),
16886        F==C,
16887        G=body,
16888        may_trigger(H)
16889    ->  setarg(2, A, removed),
16890        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16891                    I),
16892          delete_ht(I, k(C, H), A)
16893        ),
16894        ( arg(4, A, J),
16895          (   var(J)
16896          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16897                        K),
16898              K=[_|L],
16899              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16900                       L),
16901              (   L=[M|_]
16902              ->  setarg(4, M, _)
16903              ;   true
16904              )
16905          ;   J=[_, _|L],
16906              setarg(2, J, L),
16907              (   L=[M|_]
16908              ->  setarg(4, M, J)
16909              ;   true
16910              )
16911          )
16912        ),
16913        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16914                    N),
16915          delete_ht(N, k(C, body), A)
16916        ),
16917        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16918                    O),
16919          delete_ht(O, C, A)
16920        ),
16921        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16922                    P),
16923          delete_ht(P, H, A)
16924        ),
16925        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16926                  Q),
16927        delete_ht(Q, k(C, body, H), A),
16928        spawns_all_triggers___2__2__0__8(B, C, D, E)
16929    ;   spawns_all_triggers___2__2__0__8(B, C, D, E)
16930    ).
16931spawns_all_triggers___2__2(A, B, C) :-
16932    spawns_all_triggers___2__3(A, B, C).
16933spawns_all_triggers___2__3(A, B, C) :-
16934    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
16935              D),
16936    member(E, D),
16937    E=suspension(_, active, _),
16938    !,
16939    (   var(C)
16940    ->  true
16941    ;   arg(2, C, F),
16942        setarg(2, C, removed),
16943        (   F==not_stored_yet
16944        ->  true
16945        ;   arg(4, C, G),
16946            (   var(G)
16947            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16948                          H),
16949                H=[_|I],
16950                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16951                         I),
16952                (   I=[J|_]
16953                ->  setarg(4, J, _)
16954                ;   true
16955                )
16956            ;   G=[_, _|I],
16957                setarg(2, G, I),
16958                (   I=[J|_]
16959                ->  setarg(4, J, G)
16960                ;   true
16961                )
16962            ),
16963            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16964                      K),
16965            delete_ht(K, A, C),
16966            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16967                      L),
16968            delete_ht(L, k(A, B), C)
16969        )
16970    ),
16971    spawns_all(A, B).
16972spawns_all_triggers___2__3(A, B, C) :-
16973    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
16974    lookup_ht(D, A, E),
16975    !,
16976    C=suspension(F, not_stored_yet, t, _, A, B),
16977    'chr gen_id'(F),
16978    spawns_all_triggers___2__3__0__10(E, A, B, C).
16979spawns_all_triggers___2__3__0__10([], A, B, C) :-
16980    spawns_all_triggers___2__4(A, B, C).
16981spawns_all_triggers___2__3__0__10([A|B], C, D, E) :-
16982    (   A=suspension(_, active, _, _, F, _, G, H, _),
16983        G==C,
16984        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', I),
16985        lookup_ht(I, F, J)
16986    ->  spawns_all_triggers___2__3__1__10(J,
16987                                          F,
16988                                          H,
16989                                          A,
16990                                          B,
16991                                          C,
16992                                          D,
16993                                          E)
16994    ;   spawns_all_triggers___2__3__0__10(B, C, D, E)
16995    ).
16996spawns_all_triggers___2__3__1__10([], _, _, _, A, B, C, D) :-
16997    spawns_all_triggers___2__3__0__10(A, B, C, D).
16998spawns_all_triggers___2__3__1__10([A|B], C, D, E, F, G, H, I) :-
16999    (   A=suspension(_, active, _, _, J, K, L),
17000        L==C,
17001        may_trigger(C),
17002        \+ is_passive(G, D)
17003    ->  setarg(2, A, removed),
17004        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
17005                    M),
17006          delete_ht(M, k(J, C), A)
17007        ),
17008        ( arg(4, A, N),
17009          (   var(N)
17010          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
17011                        O),
17012              O=[_|P],
17013              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
17014                       P),
17015              (   P=[Q|_]
17016              ->  setarg(4, Q, _)
17017              ;   true
17018              )
17019          ;   N=[_, _|P],
17020              setarg(2, N, P),
17021              (   P=[Q|_]
17022              ->  setarg(4, Q, N)
17023              ;   true
17024              )
17025          )
17026        ),
17027        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
17028                    R),
17029          delete_ht(R, k(J, K), A)
17030        ),
17031        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
17032                    S),
17033          delete_ht(S, J, A)
17034        ),
17035        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
17036                    T),
17037          delete_ht(T, C, A)
17038        ),
17039        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
17040                  U),
17041        delete_ht(U, k(J, K, C), A),
17042        arg(2, I, V),
17043        setarg(2, I, active),
17044        (   V==not_stored_yet
17045        ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17046                      W),
17047            X=[I|W],
17048            b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17049                     X),
17050            (   W=[Y|_]
17051            ->  setarg(4, Y, X)
17052            ;   true
17053            ),
17054            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17055                      Z),
17056            insert_ht(Z, G, I),
17057            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17058                      A1),
17059            insert_ht(A1, k(G, H), I)
17060        ;   true
17061        ),
17062        spawns_all_triggers(J, K),
17063        (   I=suspension(_, active, _, _, _, _)
17064        ->  setarg(2, I, inactive),
17065            spawns_all_triggers___2__3__1__10(B,
17066                                              C,
17067                                              D,
17068                                              E,
17069                                              F,
17070                                              G,
17071                                              H,
17072                                              I)
17073        ;   true
17074        )
17075    ;   spawns_all_triggers___2__3__1__10(B,
17076                                          C,
17077                                          D,
17078                                          E,
17079                                          F,
17080                                          G,
17081                                          H,
17082                                          I)
17083    ).
17084spawns_all_triggers___2__3(A, B, C) :-
17085    C=suspension(D, not_stored_yet, t, _, A, B),
17086    'chr gen_id'(D),
17087    spawns_all_triggers___2__4(A, B, C).
17088spawns_all_triggers___2__4(A, B, C) :-
17089    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
17090    lookup_ht(D, A, E),
17091    !,
17092    spawns_all_triggers___2__4__0__11(E, A, B, C).
17093spawns_all_triggers___2__4__0__11([], A, B, C) :-
17094    spawns_all_triggers___2__5(A, B, C).
17095spawns_all_triggers___2__4__0__11([A|B], C, D, E) :-
17096    (   A=suspension(_, active, _, _, F, _, G, H, _),
17097        G==C,
17098        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', I),
17099        lookup_ht(I, F, J)
17100    ->  spawns_all_triggers___2__4__1__11(J,
17101                                          F,
17102                                          H,
17103                                          A,
17104                                          B,
17105                                          C,
17106                                          D,
17107                                          E)
17108    ;   spawns_all_triggers___2__4__0__11(B, C, D, E)
17109    ).
17110spawns_all_triggers___2__4__1__11([], _, _, _, A, B, C, D) :-
17111    spawns_all_triggers___2__4__0__11(A, B, C, D).
17112spawns_all_triggers___2__4__1__11([A|B], C, D, E, F, G, H, I) :-
17113    (   A=suspension(_, active, _, _, J, K, L),
17114        L==C,
17115        M=t(123, I, E, A),
17116        '$novel_production'(I, M),
17117        '$novel_production'(A, M),
17118        \+ may_trigger(C),
17119        \+ is_passive(G, D)
17120    ->  '$extend_history'(I, M),
17121        arg(2, I, N),
17122        setarg(2, I, active),
17123        (   N==not_stored_yet
17124        ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17125                      O),
17126            P=[I|O],
17127            b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17128                     P),
17129            (   O=[Q|_]
17130            ->  setarg(4, Q, P)
17131            ;   true
17132            ),
17133            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17134                      R),
17135            insert_ht(R, G, I),
17136            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17137                      S),
17138            insert_ht(S, k(G, H), I)
17139        ;   true
17140        ),
17141        spawns_all_triggers(J, K),
17142        (   I=suspension(_, active, _, _, _, _)
17143        ->  setarg(2, I, inactive),
17144            spawns_all_triggers___2__4__1__11(B,
17145                                              C,
17146                                              D,
17147                                              E,
17148                                              F,
17149                                              G,
17150                                              H,
17151                                              I)
17152        ;   true
17153        )
17154    ;   spawns_all_triggers___2__4__1__11(B,
17155                                          C,
17156                                          D,
17157                                          E,
17158                                          F,
17159                                          G,
17160                                          H,
17161                                          I)
17162    ).
17163spawns_all_triggers___2__4(A, B, C) :-
17164    spawns_all_triggers___2__5(A, B, C).
17165spawns_all_triggers___2__5(A, B, C) :-
17166    nb_getval('$chr_store_global_ground_chr_translate____spawns___3', D),
17167    !,
17168    spawns_all_triggers___2__5__0__12(D, A, B, C).
17169spawns_all_triggers___2__5__0__12([], A, B, C) :-
17170    spawns_all_triggers___2__6(A, B, C).
17171spawns_all_triggers___2__5__0__12([A|B], C, D, E) :-
17172    (   A=suspension(_, active, _, _, F, _, G),
17173        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
17174                  H),
17175        lookup_ht(H, F, I)
17176    ->  spawns_all_triggers___2__5__1__12(I,
17177                                          F,
17178                                          G,
17179                                          A,
17180                                          B,
17181                                          C,
17182                                          D,
17183                                          E)
17184    ;   spawns_all_triggers___2__5__0__12(B, C, D, E)
17185    ).
17186spawns_all_triggers___2__5__1__12([], _, _, _, A, B, C, D) :-
17187    spawns_all_triggers___2__5__0__12(A, B, C, D).
17188spawns_all_triggers___2__5__1__12([A|B], C, D, E, F, G, H, I) :-
17189    (   A=suspension(_, active, _, _, J, _, K, L, _),
17190        K==C,
17191        M=t(125, E, A, I),
17192        '$novel_production'(E, M),
17193        '$novel_production'(I, M),
17194        \+ is_passive(C, L),
17195        may_trigger(J),
17196        \+ may_trigger(D)
17197    ->  '$extend_history'(I, M),
17198        arg(2, I, N),
17199        setarg(2, I, active),
17200        (   N==not_stored_yet
17201        ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17202                      O),
17203            P=[I|O],
17204            b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17205                     P),
17206            (   O=[Q|_]
17207            ->  setarg(4, Q, P)
17208            ;   true
17209            ),
17210            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17211                      R),
17212            insert_ht(R, G, I),
17213            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17214                      S),
17215            insert_ht(S, k(G, H), I)
17216        ;   true
17217        ),
17218        spawns(G, H, D),
17219        (   I=suspension(_, active, _, _, _, _)
17220        ->  setarg(2, I, inactive),
17221            spawns_all_triggers___2__5__1__12(B,
17222                                              C,
17223                                              D,
17224                                              E,
17225                                              F,
17226                                              G,
17227                                              H,
17228                                              I)
17229        ;   true
17230        )
17231    ;   spawns_all_triggers___2__5__1__12(B,
17232                                          C,
17233                                          D,
17234                                          E,
17235                                          F,
17236                                          G,
17237                                          H,
17238                                          I)
17239    ).
17240spawns_all_triggers___2__5(A, B, C) :-
17241    spawns_all_triggers___2__6(A, B, C).
17242spawns_all_triggers___2__6(A, B, C) :-
17243    arg(2, C, D),
17244    setarg(2, C, active),
17245    (   D==not_stored_yet
17246    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17247                  E),
17248        F=[C|E],
17249        b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17250                 F),
17251        (   E=[G|_]
17252        ->  setarg(4, G, F)
17253        ;   true
17254        ),
17255        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17256                  H),
17257        insert_ht(H, A, C),
17258        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17259                  I),
17260        insert_ht(I, k(A, B), C)
17261    ;   true
17262    ).
17263spawns_all_triggers_implies_spawns_all :-
17264    spawns_all_triggers_implies_spawns_all___0__0(_).
17265spawns_all_triggers_implies_spawns_all___0__0(_) :-
17266    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17267              A),
17268    member(B, A),
17269    B=suspension(_, active, _),
17270    !,
17271    setarg(2, B, removed),
17272    arg(3, B, C),
17273    (   var(C)
17274    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17275                  D),
17276        D=[_|E],
17277        b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17278                 E),
17279        (   E=[F|_]
17280        ->  setarg(3, F, _)
17281        ;   true
17282        )
17283    ;   C=[_, _|E],
17284        setarg(2, C, E),
17285        (   E=[F|_]
17286        ->  setarg(3, F, C)
17287        ;   true
17288        )
17289    ),
17290    fail.
17291spawns_all_triggers_implies_spawns_all___0__0(A) :-
17292    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17293              B),
17294    !,
17295    A=suspension(C, not_stored_yet, _),
17296    'chr gen_id'(C),
17297    spawns_all_triggers_implies_spawns_all___0__0__0__3(B, A).
17298spawns_all_triggers_implies_spawns_all___0__0__0__3([], A) :-
17299    spawns_all_triggers_implies_spawns_all___0__1(A).
17300spawns_all_triggers_implies_spawns_all___0__0__0__3([A|B], C) :-
17301    (   A=suspension(_, active, _, _, D, E)
17302    ->  setarg(2, A, removed),
17303        ( arg(4, A, F),
17304          (   var(F)
17305          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17306                        G),
17307              G=[_|H],
17308              b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17309                       H),
17310              (   H=[I|_]
17311              ->  setarg(4, I, _)
17312              ;   true
17313              )
17314          ;   F=[_, _|H],
17315              setarg(2, F, H),
17316              (   H=[I|_]
17317              ->  setarg(4, I, F)
17318              ;   true
17319              )
17320          )
17321        ),
17322        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17323                    J),
17324          delete_ht(J, D, A)
17325        ),
17326        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17327                  K),
17328        delete_ht(K, k(D, E), A),
17329        arg(2, C, L),
17330        setarg(2, C, active),
17331        (   L==not_stored_yet
17332        ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17333                      M),
17334            N=[C|M],
17335            b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17336                     N),
17337            (   M=[O|_]
17338            ->  setarg(3, O, N)
17339            ;   true
17340            )
17341        ;   true
17342        ),
17343        spawns_all(D, E),
17344        (   C=suspension(_, active, _)
17345        ->  setarg(2, C, inactive),
17346            spawns_all_triggers_implies_spawns_all___0__0__0__3(B,
17347                                                                C)
17348        ;   true
17349        )
17350    ;   spawns_all_triggers_implies_spawns_all___0__0__0__3(B, C)
17351    ).
17352spawns_all_triggers_implies_spawns_all___0__0(A) :-
17353    A=suspension(B, not_stored_yet, _),
17354    'chr gen_id'(B),
17355    spawns_all_triggers_implies_spawns_all___0__1(A).
17356spawns_all_triggers_implies_spawns_all___0__1(A) :-
17357    arg(2, A, B),
17358    setarg(2, A, active),
17359    (   B==not_stored_yet
17360    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17361                  C),
17362        D=[A|C],
17363        b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17364                 D),
17365        (   C=[E|_]
17366        ->  setarg(3, E, D)
17367        ;   true
17368        )
17369    ;   true
17370    ).
17371all_spawned(A, B) :-
17372    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
17373              C),
17374    (   lookup_ht(C, k(A, guard), D),
17375        member(E, D),
17376        E=suspension(_, active, _, _),
17377        !
17378    ;   lookup_ht(C, k(A, B), F),
17379        member(G, F),
17380        G=suspension(_, active, _, _),
17381        !
17382    ).
17383all_spawned(_, _) :-
17384    fail.
17385is_observed(A, B, C) :-
17386    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
17387              D),
17388    lookup_ht(D, k(A, B), E),
17389    member(F, E),
17390    F=suspension(_, active, _, _, _, _, G, _, _),
17391    !,
17392    do_is_observed(A, G, C).
17393is_observed(_, _, _) :-
17394    fail.
17395do_is_observed(A, B, C) :-
17396    var(C),
17397    !,
17398    do_is_observed(A, B).
17399do_is_observed(A, B, C) :-
17400    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', D),
17401    lookup_ht(D, A, E),
17402    member(F, E),
17403    F=suspension(_, active, _, _, _, _, G, _, _),
17404    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', H),
17405    lookup_ht(H, G, I),
17406    member(J, I),
17407    J=suspension(_, active, _, _, K, _, _, L, _),
17408    J\==F,
17409    ground(C),
17410    (   (   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
17411                      M),
17412            lookup_ht(M, k(B, C), N),
17413            member(O, N),
17414            O=suspension(_, active, _, _),
17415            \+ is_passive(G, L),
17416            !
17417        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
17418                      P),
17419            lookup_ht(P, k(B, C, K), Q),
17420            member(R, Q),
17421            R=suspension(_, active, _, _, _, _, _),
17422            \+ is_passive(G, L),
17423            !
17424        )
17425    ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17426                  S),
17427        lookup_ht(S, k(B, C), T),
17428        member(U, T),
17429        U=suspension(_, active, _, _, _, _),
17430        \+ is_passive(G, L),
17431        may_trigger(K),
17432        !
17433    ).
17434do_is_observed(_, _, _) :-
17435    chr_pp_flag(observation_analysis, off).
17436do_is_observed(A, B) :-
17437    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', C),
17438    lookup_ht(C, A, D),
17439    member(E, D),
17440    E=suspension(_, active, _, _, _, _, F, _, _),
17441    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', G),
17442    lookup_ht(G, F, H),
17443    member(I, H),
17444    I=suspension(_, active, _, _, J, _, _, K, _),
17445    I\==E,
17446    (   (   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
17447                      L),
17448            lookup_ht(L, B, M),
17449            member(N, M),
17450            N=suspension(_, active, _, _),
17451            \+ is_passive(F, K),
17452            !
17453        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
17454                      O),
17455            lookup_ht(O, k(B, J), P),
17456            member(Q, P),
17457            Q=suspension(_, active, _, _, _, _, _),
17458            \+ is_passive(F, K),
17459            !
17460        )
17461    ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17462                  R),
17463        lookup_ht(R, B, S),
17464        member(T, S),
17465        T=suspension(_, active, _, _, _, _),
17466        \+ is_passive(F, K),
17467        may_trigger(J),
17468        !
17469    ).
17470do_is_observed(_, _) :-
17471    chr_pp_flag(observation_analysis, off).
17472generate_indexed_variables_body(A/B, C, D, E) :-
17473    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
17474              F),
17475    lookup_ht(F, A/B, G),
17476    member(H, G),
17477    H=suspension(_, active, _, _, _, I),
17478    !,
17479    get_indexing_spec(A/B, J),
17480    (   chr_pp_flag(term_indexing, on)
17481    ->  spectermvars(J, C, A, B, D, E)
17482    ;   get_constraint_type_det(A/B, K),
17483        create_indexed_variables_body(C,
17484                                      I,
17485                                      K,
17486                                      E,
17487                                      1,
17488                                      A/B,
17489                                      L,
17490                                      M),
17491        (   L==empty
17492        ->  D=true,
17493            E=[]
17494        ;   M==0
17495        ->  (   C=[N]
17496            ->  true
17497            ;   N=..[term|C]
17498            ),
17499            D=term_variables(N, E)
17500        ;   L=D
17501        )
17502    ).
17503generate_indexed_variables_body(A, _, _, _) :-
17504    chr_error(internal,
17505              'generate_indexed_variables_body: missing mode info for ~w.\n',
17506              [A]).
17507empty_named_history_initialisations(A, B) :-
17508    C=suspension(D, active, _, A, B),
17509    'chr gen_id'(D),
17510    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17511              E),
17512    F=[C|E],
17513    b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17514             F),
17515    (   E=[G|_]
17516    ->  setarg(3, G, F)
17517    ;   true
17518    ).
17519generate_empty_named_history_initialisation(A) :-
17520    generate_empty_named_history_initialisation___1__0(A, _).
17521generate_empty_named_history_initialisation___1__0(A, B) :-
17522    (   'chr newvia_1'(A, C)
17523    ->  get_attr(C, chr_translate, D),
17524        D=v(_, E, _, _, _, _, _, _, _, _, _)
17525    ;   nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17526                  E)
17527    ),
17528    member(F, E),
17529    F=suspension(_, active, _, _, G),
17530    G==A,
17531    !,
17532    (   var(B)
17533    ->  true
17534    ;   B=suspension(_, H, _, _, I),
17535        setarg(2, B, removed),
17536        (   H==not_stored_yet
17537        ->  J=[]
17538        ;   term_variables(I, J),
17539            arg(4, B, K),
17540            (   var(K)
17541            ->  nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17542                          L),
17543                L=[_|M],
17544                b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17545                         M),
17546                (   M=[N|_]
17547                ->  setarg(4, N, _)
17548                ;   true
17549                )
17550            ;   K=[_, _|M],
17551                setarg(2, K, M),
17552                (   M=[N|_]
17553                ->  setarg(4, N, K)
17554                ;   true
17555                )
17556            ),
17557            detach_generate_empty_named_history_initialisation___1(J,
17558                                                                   B)
17559        )
17560    ).
17561generate_empty_named_history_initialisation___1__0(A, B) :-
17562    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17563              C),
17564    !,
17565    (   var(B)
17566    ->  B=suspension(D, not_stored_yet, 0, _, A),
17567        'chr gen_id'(D)
17568    ;   true
17569    ),
17570    generate_empty_named_history_initialisation___1__0__0__3(C,
17571                                                             A,
17572                                                             B).
17573generate_empty_named_history_initialisation___1__0__0__3([], A, B) :-
17574    generate_empty_named_history_initialisation___1__1(A, B).
17575generate_empty_named_history_initialisation___1__0__0__3([A|B], C, D) :-
17576    (   A=suspension(_, active, _, E, F)
17577    ->  setarg(2, A, removed),
17578        arg(3, A, G),
17579        (   var(G)
17580        ->  nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17581                      H),
17582            H=[_|I],
17583            b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17584                     I),
17585            (   I=[J|_]
17586            ->  setarg(3, J, _)
17587            ;   true
17588            )
17589        ;   G=[_, _|I],
17590            setarg(2, G, I),
17591            (   I=[J|_]
17592            ->  setarg(3, J, G)
17593            ;   true
17594            )
17595        ),
17596        arg(2, D, K),
17597        setarg(2, D, active),
17598        ( arg(3, D, L),
17599          M is L+1,
17600          setarg(3, D, M)
17601        ),
17602        (   K==not_stored_yet
17603        ->  D=suspension(_, _, _, _, N),
17604            term_variables(N, O),
17605            nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17606                      P),
17607            Q=[D|P],
17608            b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17609                     Q),
17610            (   P=[R|_]
17611            ->  setarg(4, R, Q)
17612            ;   true
17613            ),
17614            attach_generate_empty_named_history_initialisation___1(O,
17615                                                                   D)
17616        ;   true
17617        ),
17618        empty_named_history_global_variable(C, S),
17619        E=[(:-nb_setval(S, 0))|T],
17620        empty_named_history_initialisations(T, F),
17621        (   D=suspension(_, active, M, _, _)
17622        ->  setarg(2, D, inactive),
17623            generate_empty_named_history_initialisation___1__0__0__3(B,
17624                                                                     C,
17625                                                                     D)
17626        ;   true
17627        )
17628    ;   generate_empty_named_history_initialisation___1__0__0__3(B,
17629                                                                 C,
17630                                                                 D)
17631    ).
17632generate_empty_named_history_initialisation___1__0(A, B) :-
17633    (   var(B)
17634    ->  B=suspension(C, not_stored_yet, 0, _, A),
17635        'chr gen_id'(C)
17636    ;   true
17637    ),
17638    generate_empty_named_history_initialisation___1__1(A, B).
17639generate_empty_named_history_initialisation___1__1(_, A) :-
17640    arg(2, A, B),
17641    setarg(2, A, active),
17642    arg(3, A, C),
17643    D is C+1,
17644    setarg(3, A, D),
17645    (   B==not_stored_yet
17646    ->  A=suspension(_, _, _, _, E),
17647        term_variables(E, F),
17648        nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17649                  G),
17650        H=[A|G],
17651        b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17652                 H),
17653        (   G=[I|_]
17654        ->  setarg(4, I, H)
17655        ;   true
17656        ),
17657        attach_generate_empty_named_history_initialisation___1(F,
17658                                                               A)
17659    ;   true
17660    ).
17661find_empty_named_histories :-
17662    find_empty_named_histories___0__0(_).
17663find_empty_named_histories___0__0(A) :-
17664    nb_getval('$chr_store_constants_chr_translate____history___3___[3]___[]',
17665              B),
17666    !,
17667    A=suspension(C, not_stored_yet, t, _),
17668    'chr gen_id'(C),
17669    find_empty_named_histories___0__0__0__1(B, A).
17670find_empty_named_histories___0__0__0__1([], A) :-
17671    find_empty_named_histories___0__1(A).
17672find_empty_named_histories___0__0__0__1([A|B], C) :-
17673    (   A=suspension(_, active, _, _, D, E),
17674        E=[],
17675        F=t(142, C, A),
17676        '$novel_production'(C, F),
17677        '$novel_production'(A, F)
17678    ->  '$extend_history'(C, F),
17679        arg(2, C, G),
17680        setarg(2, C, active),
17681        (   G==not_stored_yet
17682        ->  nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17683                      H),
17684            I=[C|H],
17685            b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17686                     I),
17687            (   H=[J|_]
17688            ->  setarg(4, J, I)
17689            ;   true
17690            )
17691        ;   true
17692        ),
17693        generate_empty_named_history_initialisation(D),
17694        (   C=suspension(_, active, _, _)
17695        ->  setarg(2, C, inactive),
17696            find_empty_named_histories___0__0__0__1(B, C)
17697        ;   true
17698        )
17699    ;   find_empty_named_histories___0__0__0__1(B, C)
17700    ).
17701find_empty_named_histories___0__0(A) :-
17702    A=suspension(B, not_stored_yet, t, _),
17703    'chr gen_id'(B),
17704    find_empty_named_histories___0__1(A).
17705find_empty_named_histories___0__1(A) :-
17706    nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17707              B),
17708    !,
17709    find_empty_named_histories___0__1__0__2(B, A).
17710find_empty_named_histories___0__1__0__2([], A) :-
17711    find_empty_named_histories___0__2(A).
17712find_empty_named_histories___0__1__0__2([A|B], C) :-
17713    (   A=suspension(_, active, _, _, _)
17714    ->  A=suspension(_, _, _, _, D),
17715        setarg(2, A, removed),
17716        term_variables(D, E),
17717        ( arg(4, A, F),
17718          (   var(F)
17719          ->  nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17720                        G),
17721              G=[_|H],
17722              b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17723                       H),
17724              (   H=[I|_]
17725              ->  setarg(4, I, _)
17726              ;   true
17727              )
17728          ;   F=[_, _|H],
17729              setarg(2, F, H),
17730              (   H=[I|_]
17731              ->  setarg(4, I, F)
17732              ;   true
17733              )
17734          )
17735        ),
17736        detach_generate_empty_named_history_initialisation___1(E,
17737                                                               A),
17738        find_empty_named_histories___0__1__0__2(B, C)
17739    ;   find_empty_named_histories___0__1__0__2(B, C)
17740    ).
17741find_empty_named_histories___0__1(A) :-
17742    find_empty_named_histories___0__2(A).
17743find_empty_named_histories___0__2(A) :-
17744    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17745              B),
17746    member(C, B),
17747    C=suspension(_, active, _, D, E),
17748    !,
17749    setarg(2, C, removed),
17750    arg(3, C, F),
17751    (   var(F)
17752    ->  nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17753                  G),
17754        G=[_|H],
17755        b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17756                 H),
17757        (   H=[I|_]
17758        ->  setarg(3, I, _)
17759        ;   true
17760        )
17761    ;   F=[_, _|H],
17762        setarg(2, F, H),
17763        (   H=[I|_]
17764        ->  setarg(3, I, F)
17765        ;   true
17766        )
17767    ),
17768    (   var(A)
17769    ->  true
17770    ;   arg(2, A, J),
17771        setarg(2, A, removed),
17772        (   J==not_stored_yet
17773        ->  true
17774        ;   arg(4, A, K),
17775            (   var(K)
17776            ->  nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17777                          L),
17778                L=[_|M],
17779                b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17780                         M),
17781                (   M=[N|_]
17782                ->  setarg(4, N, _)
17783                ;   true
17784                )
17785            ;   K=[_, _|M],
17786                setarg(2, K, M),
17787                (   M=[N|_]
17788                ->  setarg(4, N, K)
17789                ;   true
17790                )
17791            )
17792        )
17793    ),
17794    D=E.
17795find_empty_named_histories___0__2(A) :-
17796    (   var(A)
17797    ->  true
17798    ;   arg(2, A, B),
17799        setarg(2, A, removed),
17800        (   B==not_stored_yet
17801        ->  true
17802        ;   arg(4, A, C),
17803            (   var(C)
17804            ->  nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17805                          D),
17806                D=[_|E],
17807                b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17808                         E),
17809                (   E=[F|_]
17810                ->  setarg(4, F, _)
17811                ;   true
17812                )
17813            ;   C=[_, _|E],
17814                setarg(2, C, E),
17815                (   E=[F|_]
17816                ->  setarg(4, F, C)
17817                ;   true
17818                )
17819            )
17820        )
17821    ),
17822    chr_error(internal, 'find_empty_named_histories was not removed', []).
17823module_initializer(A) :-
17824    B=suspension(C, active, _, A),
17825    'chr gen_id'(C),
17826    nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
17827              D),
17828    E=[B|D],
17829    b_setval('$chr_store_global_ground_chr_translate____module_initializer___1',
17830             E),
17831    (   D=[F|_]
17832    ->  setarg(3, F, E)
17833    ;   true
17834    ).
17835module_initializers(A) :-
17836    nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
17837              B),
17838    member(C, B),
17839    C=suspension(_, active, _, D),
17840    !,
17841    setarg(2, C, removed),
17842    arg(3, C, E),
17843    (   var(E)
17844    ->  nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
17845                  F),
17846        F=[_|G],
17847        b_setval('$chr_store_global_ground_chr_translate____module_initializer___1',
17848                 G),
17849        (   G=[H|_]
17850        ->  setarg(3, H, _)
17851        ;   true
17852        )
17853    ;   E=[_, _|G],
17854        setarg(2, E, G),
17855        (   G=[H|_]
17856        ->  setarg(3, H, E)
17857        ;   true
17858        )
17859    ),
17860    A=(D, I),
17861    module_initializers(I).
17862module_initializers(true).
17863actual_atomic_multi_hash_keys(A, B, C) :-
17864    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
17865              D),
17866    lookup_ht(D, A, E),
17867    member(F, E),
17868    F=suspension(_, active, _, G),
17869    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
17870              H),
17871    lookup_ht(H, A, I),
17872    member(J, I),
17873    J=suspension(_, active, _),
17874    !,
17875    setarg(2, F, removed),
17876    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
17877              K),
17878    delete_ht(K, A, F),
17879    selectchk(multi_hash([B]), G, L),
17880    B=[M],
17881    (   get_constraint_arg_type(A, M, N),
17882        enumerated_atomic_type(N, O)
17883    ->  P=O,
17884        Q=complete
17885    ;   P=C,
17886        Q=incomplete
17887    ),
17888    actual_store_types(A,
17889                       [atomic_constants(B, P, Q)|L]).
17890actual_atomic_multi_hash_keys(A, B, C) :-
17891    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17892              D),
17893    lookup_ht(D, k(A, B), E),
17894    member(F, E),
17895    F=suspension(_, active, _, _, G),
17896    !,
17897    setarg(2, F, removed),
17898    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17899              H),
17900    delete_ht(H, k(A, B), F),
17901    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
17902              I),
17903    delete_ht(I, A, F),
17904    append(C, G, J),
17905    sort(J, K),
17906    actual_atomic_multi_hash_keys(A, B, K).
17907actual_atomic_multi_hash_keys(A, B, C) :-
17908    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
17909              D),
17910    lookup_ht(D, k(A, B), E),
17911    member(F, E),
17912    F=suspension(_, active, _, _, G),
17913    !,
17914    setarg(2, F, removed),
17915    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
17916              H),
17917    delete_ht(H, k(A, B), F),
17918    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
17919              I),
17920    delete_ht(I, A, F),
17921    append(G, C, J),
17922    sort(J, K),
17923    actual_ground_multi_hash_keys(A, B, K).
17924actual_atomic_multi_hash_keys(A, B, _) :-
17925    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
17926              C),
17927    lookup_ht(C, k(A, B), D),
17928    member(E, D),
17929    E=suspension(_, active, _, _),
17930    !.
17931actual_atomic_multi_hash_keys(A, B, C) :-
17932    D=suspension(E, active, A, B, C),
17933    'chr gen_id'(E),
17934    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17935              F),
17936    insert_ht(F, k(A, B), D),
17937    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
17938              G),
17939    insert_ht(G, A, D).
17940actual_ground_multi_hash_keys(A, B, C) :-
17941    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
17942              D),
17943    lookup_ht(D, A, E),
17944    member(F, E),
17945    F=suspension(_, active, _, G),
17946    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
17947              H),
17948    lookup_ht(H, A, I),
17949    member(J, I),
17950    J=suspension(_, active, _),
17951    !,
17952    setarg(2, F, removed),
17953    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
17954              K),
17955    delete_ht(K, A, F),
17956    (   B=[L],
17957        get_constraint_arg_type(A, L, M),
17958        M=chr_enum(N)
17959    ->  O=complete
17960    ;   N=C,
17961        O=incomplete
17962    ),
17963    selectchk(multi_hash([B]), G, P),
17964    actual_store_types(A,
17965                       [ground_constants(B, N, O)|P]).
17966actual_ground_multi_hash_keys(A, B, C) :-
17967    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17968              D),
17969    lookup_ht(D, k(A, B), E),
17970    member(F, E),
17971    F=suspension(_, active, _, _, G),
17972    !,
17973    setarg(2, F, removed),
17974    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17975              H),
17976    delete_ht(H, k(A, B), F),
17977    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
17978              I),
17979    delete_ht(I, A, F),
17980    append(C, G, J),
17981    sort(J, K),
17982    actual_ground_multi_hash_keys(A, B, K).
17983actual_ground_multi_hash_keys(A, B, C) :-
17984    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
17985              D),
17986    lookup_ht(D, k(A, B), E),
17987    member(F, E),
17988    F=suspension(_, active, _, _, G),
17989    !,
17990    setarg(2, F, removed),
17991    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
17992              H),
17993    delete_ht(H, k(A, B), F),
17994    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
17995              I),
17996    delete_ht(I, A, F),
17997    append(C, G, J),
17998    sort(J, K),
17999    actual_ground_multi_hash_keys(A, B, K).
18000actual_ground_multi_hash_keys(A, B, _) :-
18001    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
18002              C),
18003    lookup_ht(C, k(A, B), D),
18004    member(E, D),
18005    E=suspension(_, active, _, _),
18006    !.
18007actual_ground_multi_hash_keys(A, B, C) :-
18008    D=suspension(E, active, A, B, C),
18009    'chr gen_id'(E),
18010    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18011              F),
18012    insert_ht(F, k(A, B), D),
18013    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
18014              G),
18015    insert_ht(G, A, D).
18016actual_non_ground_multi_hash_key(A, B) :-
18017    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
18018              C),
18019    lookup_ht(C, k(A, B), D),
18020    member(E, D),
18021    E=suspension(_, active, _, _),
18022    !.
18023actual_non_ground_multi_hash_key(A, B) :-
18024    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
18025              C),
18026    lookup_ht(C, k(A, B), D),
18027    !,
18028    actual_non_ground_multi_hash_key___2__0__0__3(D, A, B).
18029actual_non_ground_multi_hash_key___2__0__0__3([], A, B) :-
18030    actual_non_ground_multi_hash_key___2__1(A, B).
18031actual_non_ground_multi_hash_key___2__0__0__3([A|B], C, D) :-
18032    (   A=suspension(_, active, E, F, _),
18033        E==C,
18034        F==D
18035    ->  setarg(2, A, removed),
18036        ( nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
18037                    G),
18038          delete_ht(G, k(C, D), A)
18039        ),
18040        nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
18041                  H),
18042        delete_ht(H, C, A),
18043        actual_non_ground_multi_hash_key___2__0__0__3(B, C, D)
18044    ;   actual_non_ground_multi_hash_key___2__0__0__3(B, C, D)
18045    ).
18046actual_non_ground_multi_hash_key(A, B) :-
18047    actual_non_ground_multi_hash_key___2__1(A, B).
18048actual_non_ground_multi_hash_key___2__1(A, B) :-
18049    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18050              C),
18051    lookup_ht(C, k(A, B), D),
18052    !,
18053    actual_non_ground_multi_hash_key___2__1__0__4(D, A, B).
18054actual_non_ground_multi_hash_key___2__1__0__4([], A, B) :-
18055    actual_non_ground_multi_hash_key___2__2(A, B).
18056actual_non_ground_multi_hash_key___2__1__0__4([A|B], C, D) :-
18057    (   A=suspension(_, active, E, F, _),
18058        E==C,
18059        F==D
18060    ->  setarg(2, A, removed),
18061        ( nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18062                    G),
18063          delete_ht(G, k(C, D), A)
18064        ),
18065        nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
18066                  H),
18067        delete_ht(H, C, A),
18068        actual_non_ground_multi_hash_key___2__1__0__4(B, C, D)
18069    ;   actual_non_ground_multi_hash_key___2__1__0__4(B, C, D)
18070    ).
18071actual_non_ground_multi_hash_key___2__1(A, B) :-
18072    actual_non_ground_multi_hash_key___2__2(A, B).
18073actual_non_ground_multi_hash_key___2__2(A, B) :-
18074    C=suspension(D, active, A, B),
18075    'chr gen_id'(D),
18076    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
18077              E),
18078    insert_ht(E, k(A, B), C).
18079symbol_count(A, B) :-
18080    symbol_count___2__0(A, B, _).
18081symbol_count___2__0(A, B, C) :-
18082    (   'chr newvia_1'(A, D)
18083    ->  get_attr(D, chr_translate, E),
18084        E=v(_, _, _, F, _, _, _, _, _, _, _)
18085    ;   nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18086                  F)
18087    ),
18088    member(G, F),
18089    G=suspension(_, active, _, _, _, H, I),
18090    H==A,
18091    !,
18092    G=suspension(_, _, _, _, _, J, _),
18093    setarg(2, G, removed),
18094    term_variables(J, K),
18095    arg(5, G, L),
18096    (   var(L)
18097    ->  nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18098                  M),
18099        M=[_|N],
18100        b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18101                 N),
18102        (   N=[O|_]
18103        ->  setarg(5, O, _)
18104        ;   true
18105        )
18106    ;   L=[_, _|N],
18107        setarg(2, L, N),
18108        (   N=[O|_]
18109        ->  setarg(5, O, L)
18110        ;   true
18111        )
18112    ),
18113    detach_fresh_symbol___2(K, G),
18114    (   var(C)
18115    ->  true
18116    ;   C=suspension(_, _, _, P, _),
18117        setarg(2, C, removed),
18118        term_variables(P, Q),
18119        arg(3, C, R),
18120        (   var(R)
18121        ->  nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18122                      S),
18123            S=[_|T],
18124            b_setval('$chr_store_global_list_chr_translate____symbol_count___2',
18125                     T),
18126            (   T=[U|_]
18127            ->  setarg(3, U, _)
18128            ;   true
18129            )
18130        ;   R=[_, _|T],
18131            setarg(2, R, T),
18132            (   T=[U|_]
18133            ->  setarg(3, U, R)
18134            ;   true
18135            )
18136        ),
18137        detach_symbol_count___2(Q, C)
18138    ),
18139    atom_concat(A, B, I),
18140    V is B+1,
18141    symbol_count(A, V).
18142symbol_count___2__0(A, B, C) :-
18143    (   var(C)
18144    ->  C=suspension(D, active, _, A, B),
18145        term_variables(A, E),
18146        'chr gen_id'(D),
18147        nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18148                  F),
18149        G=[C|F],
18150        b_setval('$chr_store_global_list_chr_translate____symbol_count___2',
18151                 G),
18152        (   F=[H|_]
18153        ->  setarg(3, H, G)
18154        ;   true
18155        ),
18156        attach_symbol_count___2(E, C)
18157    ;   setarg(2, C, active)
18158    ).
18159fresh_symbol(A, B) :-
18160    fresh_symbol___2__0(A, B, _).
18161fresh_symbol___2__0(A, B, C) :-
18162    (   'chr newvia_1'(A, D)
18163    ->  get_attr(D, chr_translate, E),
18164        E=v(_, _, F, _, _, _, _, _, _, _, _)
18165    ;   nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18166                  F)
18167    ),
18168    member(G, F),
18169    G=suspension(_, active, _, H, I),
18170    H==A,
18171    !,
18172    G=suspension(_, _, _, J, _),
18173    setarg(2, G, removed),
18174    term_variables(J, K),
18175    arg(3, G, L),
18176    (   var(L)
18177    ->  nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18178                  M),
18179        M=[_|N],
18180        b_setval('$chr_store_global_list_chr_translate____symbol_count___2',
18181                 N),
18182        (   N=[O|_]
18183        ->  setarg(3, O, _)
18184        ;   true
18185        )
18186    ;   L=[_, _|N],
18187        setarg(2, L, N),
18188        (   N=[O|_]
18189        ->  setarg(3, O, L)
18190        ;   true
18191        )
18192    ),
18193    detach_symbol_count___2(K, G),
18194    (   var(C)
18195    ->  true
18196    ;   C=suspension(_, P, _, _, _, Q, _),
18197        setarg(2, C, removed),
18198        (   P==not_stored_yet
18199        ->  R=[]
18200        ;   term_variables(Q, R),
18201            arg(5, C, S),
18202            (   var(S)
18203            ->  nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18204                          T),
18205                T=[_|U],
18206                b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18207                         U),
18208                (   U=[V|_]
18209                ->  setarg(5, V, _)
18210                ;   true
18211                )
18212            ;   S=[_, _|U],
18213                setarg(2, S, U),
18214                (   U=[V|_]
18215                ->  setarg(5, V, S)
18216                ;   true
18217                )
18218            ),
18219            detach_fresh_symbol___2(R, C)
18220        )
18221    ),
18222    atom_concat(A, I, B),
18223    W is I+1,
18224    symbol_count(A, W).
18225fresh_symbol___2__0(A, B, C) :-
18226    (   var(C)
18227    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
18228        'chr gen_id'(D)
18229    ;   true
18230    ),
18231    (   '$novel_production'(C, 157),
18232        !,
18233        '$extend_history'(C, 157),
18234        arg(2, C, E),
18235        setarg(2, C, active),
18236        arg(4, C, F),
18237        G is F+1,
18238        setarg(4, C, G),
18239        (   E==not_stored_yet
18240        ->  C=suspension(_, _, _, _, _, H, _),
18241            term_variables(H, I),
18242            nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18243                      J),
18244            K=[C|J],
18245            b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18246                     K),
18247            (   J=[L|_]
18248            ->  setarg(5, L, K)
18249            ;   true
18250            ),
18251            attach_fresh_symbol___2(I, C)
18252        ;   true
18253        ),
18254        symbol_count(A, 0),
18255        (   C=suspension(_, active, _, G, _, _, _)
18256        ->  setarg(2, C, inactive),
18257            fresh_symbol___2__1(A, B, C)
18258        ;   true
18259        )
18260    ;   fresh_symbol___2__1(A, B, C)
18261    ).
18262fresh_symbol___2__1(_, _, A) :-
18263    arg(2, A, B),
18264    setarg(2, A, active),
18265    arg(4, A, C),
18266    D is C+1,
18267    setarg(4, A, D),
18268    (   B==not_stored_yet
18269    ->  A=suspension(_, _, _, _, _, E, _),
18270        term_variables(E, F),
18271        nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18272                  G),
18273        H=[A|G],
18274        b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18275                 H),
18276        (   G=[I|_]
18277        ->  setarg(5, I, H)
18278        ;   true
18279        ),
18280        attach_fresh_symbol___2(F, A)
18281    ;   true
18282    ).
18283prolog_global_variable(A) :-
18284    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
18285              B),
18286    lookup_ht(B, A, C),
18287    member(D, C),
18288    D=suspension(_, active, _, _),
18289    !.
18290prolog_global_variable(A) :-
18291    B=suspension(C, active, _, A),
18292    'chr gen_id'(C),
18293    nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18294              D),
18295    E=[B|D],
18296    b_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18297             E),
18298    (   D=[F|_]
18299    ->  setarg(3, F, E)
18300    ;   true
18301    ),
18302    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
18303              G),
18304    insert_ht(G, A, B).
18305prolog_global_variables(A) :-
18306    nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18307              B),
18308    member(C, B),
18309    C=suspension(_, active, _, D),
18310    !,
18311    setarg(2, C, removed),
18312    arg(3, C, E),
18313    (   var(E)
18314    ->  nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18315                  F),
18316        F=[_|G],
18317        b_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18318                 G),
18319        (   G=[H|_]
18320        ->  setarg(3, H, _)
18321        ;   true
18322        )
18323    ;   E=[_, _|G],
18324        setarg(2, E, G),
18325        (   G=[H|_]
18326        ->  setarg(3, H, E)
18327        ;   true
18328        )
18329    ),
18330    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
18331              I),
18332    delete_ht(I, D, C),
18333    A=[D|J],
18334    prolog_global_variables(J).
18335prolog_global_variables([]).
18336background_info(A) :-
18337    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18338              B),
18339    member(C, B),
18340    C=suspension(_, active, _, D),
18341    !,
18342    setarg(2, C, removed),
18343    arg(3, C, E),
18344    (   var(E)
18345    ->  nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18346                  F),
18347        F=[_|G],
18348        b_setval('$chr_store_global_ground_chr_translate____background_info___1',
18349                 G),
18350        (   G=[H|_]
18351        ->  setarg(3, H, _)
18352        ;   true
18353        )
18354    ;   E=[_, _|G],
18355        setarg(2, E, G),
18356        (   G=[H|_]
18357        ->  setarg(3, H, E)
18358        ;   true
18359        )
18360    ),
18361    append(A, D, I),
18362    background_info(I).
18363background_info(A) :-
18364    B=suspension(C, active, _, A),
18365    'chr gen_id'(C),
18366    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18367              D),
18368    E=[B|D],
18369    b_setval('$chr_store_global_ground_chr_translate____background_info___1',
18370             E),
18371    (   D=[F|_]
18372    ->  setarg(3, F, E)
18373    ;   true
18374    ).
18375background_info(A, B) :-
18376    background_info___2__0(A, B, _).
18377background_info___2__0(A, B, C) :-
18378    nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2', D),
18379    !,
18380    (   var(C)
18381    ->  C=suspension(E, not_stored_yet, t, 0, _, A, B),
18382        'chr gen_id'(E)
18383    ;   true
18384    ),
18385    background_info___2__0__0__1(D, A, B, C).
18386background_info___2__0__0__1([], A, B, C) :-
18387    background_info___2__1(A, B, C).
18388background_info___2__0__0__1([A|B], C, D, E) :-
18389    (   A=suspension(_, active, _, _, _, F, _),
18390        G=t(164, E, A),
18391        '$novel_production'(E, G),
18392        '$novel_production'(A, G),
18393        copy_term_nat(C, H),
18394        subsumes_term(H, F)
18395    ->  '$extend_history'(E, G),
18396        arg(2, E, I),
18397        setarg(2, E, active),
18398        ( arg(4, E, J),
18399          K is J+1,
18400          setarg(4, E, K)
18401        ),
18402        (   I==not_stored_yet
18403        ->  E=suspension(_, _, _, _, _, L, _),
18404            term_variables(L, M),
18405            nb_getval('$chr_store_global_list_chr_translate____background_info___2',
18406                      N),
18407            O=[E|N],
18408            b_setval('$chr_store_global_list_chr_translate____background_info___2',
18409                     O),
18410            (   N=[P|_]
18411            ->  setarg(5, P, O)
18412            ;   true
18413            ),
18414            attach_background_info___2(M, E)
18415        ;   true
18416        ),
18417        copy_term_nat(C-D, F-Q),
18418        get_bg_info_answer([Q]),
18419        (   E=suspension(_, active, _, K, _, _, _)
18420        ->  setarg(2, E, inactive),
18421            background_info___2__0__0__1(B, C, D, E)
18422        ;   true
18423        )
18424    ;   background_info___2__0__0__1(B, C, D, E)
18425    ).
18426background_info___2__0(A, B, C) :-
18427    (   var(C)
18428    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
18429        'chr gen_id'(D)
18430    ;   true
18431    ),
18432    background_info___2__1(A, B, C).
18433background_info___2__1(_, _, A) :-
18434    arg(2, A, B),
18435    setarg(2, A, active),
18436    arg(4, A, C),
18437    D is C+1,
18438    setarg(4, A, D),
18439    (   B==not_stored_yet
18440    ->  A=suspension(_, _, _, _, _, E, _),
18441        term_variables(E, F),
18442        nb_getval('$chr_store_global_list_chr_translate____background_info___2',
18443                  G),
18444        H=[A|G],
18445        b_setval('$chr_store_global_list_chr_translate____background_info___2',
18446                 H),
18447        (   G=[I|_]
18448        ->  setarg(5, I, H)
18449        ;   true
18450        ),
18451        attach_background_info___2(F, A)
18452    ;   true
18453    ).
18454get_bg_info(A) :-
18455    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18456              B),
18457    member(C, B),
18458    C=suspension(_, active, _, D),
18459    !,
18460    A=D.
18461get_bg_info([]).
18462get_bg_info(A, B) :-
18463    get_bg_info___2__0(A, B, _).
18464get_bg_info___2__0(A, B, C) :-
18465    nb_getval('$chr_store_global_list_chr_translate____background_info___2',
18466              D),
18467    !,
18468    (   var(C)
18469    ->  C=suspension(E, not_stored_yet, t, 0, _, A, B),
18470        'chr gen_id'(E)
18471    ;   true
18472    ),
18473    get_bg_info___2__0__0__1(D, A, B, C).
18474get_bg_info___2__0__0__1([], A, B, C) :-
18475    get_bg_info___2__1(A, B, C).
18476get_bg_info___2__0__0__1([A|B], C, D, E) :-
18477    (   A=suspension(_, active, _, _, _, F, G),
18478        H=t(164, A, E),
18479        '$novel_production'(A, H),
18480        '$novel_production'(E, H),
18481        copy_term_nat(F, I),
18482        subsumes_term(I, C)
18483    ->  '$extend_history'(E, H),
18484        arg(2, E, J),
18485        setarg(2, E, active),
18486        ( arg(4, E, K),
18487          L is K+1,
18488          setarg(4, E, L)
18489        ),
18490        (   J==not_stored_yet
18491        ->  E=suspension(_, _, _, _, _, M, _),
18492            term_variables(M, N),
18493            nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',
18494                      O),
18495            P=[E|O],
18496            b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',
18497                     P),
18498            (   O=[Q|_]
18499            ->  setarg(5, Q, P)
18500            ;   true
18501            ),
18502            attach_get_bg_info___2(N, E)
18503        ;   true
18504        ),
18505        copy_term_nat(F-G, C-R),
18506        get_bg_info_answer([R]),
18507        (   E=suspension(_, active, _, L, _, _, _)
18508        ->  setarg(2, E, inactive),
18509            get_bg_info___2__0__0__1(B, C, D, E)
18510        ;   true
18511        )
18512    ;   get_bg_info___2__0__0__1(B, C, D, E)
18513    ).
18514get_bg_info___2__0(A, B, C) :-
18515    (   var(C)
18516    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
18517        'chr gen_id'(D)
18518    ;   true
18519    ),
18520    get_bg_info___2__1(A, B, C).
18521get_bg_info___2__1(_, A, B) :-
18522    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18523              C),
18524    member(D, C),
18525    D=suspension(_, active, _, E),
18526    !,
18527    setarg(2, D, removed),
18528    arg(3, D, F),
18529    (   var(F)
18530    ->  nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18531                  G),
18532        G=[_|H],
18533        b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18534                 H),
18535        (   H=[I|_]
18536        ->  setarg(3, I, _)
18537        ;   true
18538        )
18539    ;   F=[_, _|H],
18540        setarg(2, F, H),
18541        (   H=[I|_]
18542        ->  setarg(3, I, F)
18543        ;   true
18544        )
18545    ),
18546    (   var(B)
18547    ->  true
18548    ;   B=suspension(_, J, _, _, _, K, _),
18549        setarg(2, B, removed),
18550        (   J==not_stored_yet
18551        ->  L=[]
18552        ;   term_variables(K, L),
18553            arg(5, B, M),
18554            (   var(M)
18555            ->  nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',
18556                          N),
18557                N=[_|O],
18558                b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',
18559                         O),
18560                (   O=[P|_]
18561                ->  setarg(5, P, _)
18562                ;   true
18563                )
18564            ;   M=[_, _|O],
18565                setarg(2, M, O),
18566                (   O=[P|_]
18567                ->  setarg(5, P, M)
18568                ;   true
18569                )
18570            ),
18571            detach_get_bg_info___2(L, B)
18572        )
18573    ),
18574    A=E.
18575get_bg_info___2__1(_, A, B) :-
18576    (   var(B)
18577    ->  true
18578    ;   B=suspension(_, C, _, _, _, D, _),
18579        setarg(2, B, removed),
18580        (   C==not_stored_yet
18581        ->  E=[]
18582        ;   term_variables(D, E),
18583            arg(5, B, F),
18584            (   var(F)
18585            ->  nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',
18586                          G),
18587                G=[_|H],
18588                b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',
18589                         H),
18590                (   H=[I|_]
18591                ->  setarg(5, I, _)
18592                ;   true
18593                )
18594            ;   F=[_, _|H],
18595                setarg(2, F, H),
18596                (   H=[I|_]
18597                ->  setarg(5, I, F)
18598                ;   true
18599                )
18600            ),
18601            detach_get_bg_info___2(E, B)
18602        )
18603    ),
18604    A=[].
18605get_bg_info_answer(A) :-
18606    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18607              B),
18608    member(C, B),
18609    C=suspension(_, active, _, D),
18610    !,
18611    setarg(2, C, removed),
18612    arg(3, C, E),
18613    (   var(E)
18614    ->  nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18615                  F),
18616        F=[_|G],
18617        b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18618                 G),
18619        (   G=[H|_]
18620        ->  setarg(3, H, _)
18621        ;   true
18622        )
18623    ;   E=[_, _|G],
18624        setarg(2, E, G),
18625        (   G=[H|_]
18626        ->  setarg(3, H, E)
18627        ;   true
18628        )
18629    ),
18630    append(A, D, I),
18631    get_bg_info_answer(I).
18632get_bg_info_answer(A) :-
18633    B=suspension(C, active, _, A),
18634    'chr gen_id'(C),
18635    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18636              D),
18637    E=[B|D],
18638    b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18639             E),
18640    (   D=[F|_]
18641    ->  setarg(3, F, E)
18642    ;   true
18643    ).
18644prev_guard_list(A, B, C, D, E, F, G, H) :-
18645    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I),
18646    lookup_ht(I, B, J),
18647    member(K, J),
18648    K=suspension(_, active, _, _, _, L),
18649    L=pragma(rule(M, N, O, _), _, _, _, _),
18650    M\==[],
18651    make_head_matchings_explicit(B, P, Q),
18652    setof(R,
18653          chr_translate:head_subset(P, D, R),
18654          S),
18655    !,
18656    append(M, N, T),
18657    compute_derived_info(S,
18658                         Q,
18659                         P,
18660                         T,
18661                         O,
18662                         G,
18663                         D,
18664                         H,
18665                         U,
18666                         V),
18667    append(F, U, W),
18668    normalize_conj_list(W, X),
18669    append(V, H, Y),
18670    normalize_conj_list(Y, Z),
18671    next_prev_rule(C, A1, B1),
18672    prev_guard_list(A,
18673                    A1,
18674                    B1,
18675                    D,
18676                    E,
18677                    X,
18678                    G,
18679                    Z).
18680prev_guard_list(A, B, C, D, E, F, G, H) :-
18681    (   B>0
18682    ->  next_prev_rule(C, I, J),
18683        prev_guard_list(A,
18684                        I,
18685                        J,
18686                        D,
18687                        E,
18688                        F,
18689                        G,
18690                        H)
18691    ;   prev_guard_list(A, D, E, F, G, H)
18692    ).
18693prev_guard_list(A, B, C, D, E, F) :-
18694    prev_guard_list___6__0(A,
18695                           B,
18696                           C,
18697                           D,
18698                           E,
18699                           F,
18700                           _).
18701prev_guard_list___6__0(A, B, C, D, E, F, _) :-
18702    F\==[],
18703    !,
18704    head_types_modes_condition(F, B, G),
18705    conj2list(G, H),
18706    term_variables(B, I),
18707    append([chr_pp_headvariables(I)|H], D, J),
18708    normalize_conj_list(J, K),
18709    append(B, K, L),
18710    add_background_info([C|L], M),
18711    append(K, M, N),
18712    normalize_conj_list(N, O),
18713    prev_guard_list(A, B, C, O, E, []).
18714prev_guard_list___6__0(A, B, C, D, E, F, G) :-
18715    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', H),
18716    lookup_ht(H, A, I),
18717    (   member(J, I),
18718        J=suspension(_, active, _, _, _, K),
18719        K=pragma(rule(L, M, C, N), O, P, Q, A),
18720        C\==true,
18721        append(E, D, R),
18722        (   conj2list(C, S),
18723            append(R, S, T),
18724            guard_entailment:entails_guard(T, fail)
18725        ->  U=fail
18726        ;   simplify_guard(C, N, R, U, V)
18727        ),
18728        C\==U,
18729        !,
18730        setarg(2, J, removed),
18731        arg(4, J, W),
18732        (   var(W)
18733        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
18734                      X),
18735            X=[_|Y],
18736            b_setval('$chr_store_global_ground_chr_translate____rule___2',
18737                     Y),
18738            (   Y=[Z|_]
18739            ->  setarg(4, Z, _)
18740            ;   true
18741            )
18742        ;   W=[_, _|Y],
18743            setarg(2, W, Y),
18744            (   Y=[Z|_]
18745            ->  setarg(4, Z, W)
18746            ;   true
18747            )
18748        ),
18749        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A1),
18750        delete_ht(A1, A, J),
18751        rule(A,
18752             pragma(rule(L, M, U, V),
18753                    O,
18754                    P,
18755                    Q,
18756                    A)),
18757        prev_guard_list(A, B, U, D, E, [])
18758    ;   !,
18759        G=suspension(B1, not_stored_yet, t, _, A, B, C, D, E, F),
18760        'chr gen_id'(B1),
18761        prev_guard_list___6__0__0__3(I,
18762                                     A,
18763                                     B,
18764                                     C,
18765                                     D,
18766                                     E,
18767                                     F,
18768                                     G)
18769    ).
18770prev_guard_list___6__0__0__3([], A, B, C, D, E, F, G) :-
18771    prev_guard_list___6__1(A,
18772                           B,
18773                           C,
18774                           D,
18775                           E,
18776                           F,
18777                           G).
18778prev_guard_list___6__0__0__3([A|B], C, D, E, F, G, H, I) :-
18779    (   A=suspension(_, active, _, _, J, K),
18780        J==C,
18781        L=t(178, I, A),
18782        '$novel_production'(I, L),
18783        '$novel_production'(A, L),
18784        chr_pp_flag(check_impossible_rules, on),
18785        K=pragma(rule(_, _, E, _), _, _, _, C),
18786        conj2list(E, M),
18787        append(G, F, N),
18788        append(N, M, O),
18789        guard_entailment:entails_guard(O, fail)
18790    ->  '$extend_history'(I, L),
18791        arg(2, I, P),
18792        setarg(2, I, active),
18793        (   P==not_stored_yet
18794        ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
18795                      Q),
18796            R=[I|Q],
18797            b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
18798                     R),
18799            (   Q=[S|_]
18800            ->  setarg(4, S, R)
18801            ;   true
18802            ),
18803            nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
18804                      T),
18805            insert_ht(T, C, I)
18806        ;   true
18807        ),
18808        chr_warning(weird_program,
18809                    'Heads will never match or guard will always fail in ~@.\n\tThis rule will never fire!\n',
18810                    [format_rule(K)]),
18811        set_all_passive(C),
18812        (   I=suspension(_, active, _, _, _, _, _, _, _, _)
18813        ->  setarg(2, I, inactive),
18814            prev_guard_list___6__0__0__3(B,
18815                                         C,
18816                                         D,
18817                                         E,
18818                                         F,
18819                                         G,
18820                                         H,
18821                                         I)
18822        ;   true
18823        )
18824    ;   prev_guard_list___6__0__0__3(B,
18825                                     C,
18826                                     D,
18827                                     E,
18828                                     F,
18829                                     G,
18830                                     H,
18831                                     I)
18832    ).
18833prev_guard_list___6__0(A, B, C, D, E, F, G) :-
18834    G=suspension(H, not_stored_yet, t, _, A, B, C, D, E, F),
18835    'chr gen_id'(H),
18836    prev_guard_list___6__1(A,
18837                           B,
18838                           C,
18839                           D,
18840                           E,
18841                           F,
18842                           G).
18843prev_guard_list___6__1(A, B, C, D, E, F, G) :-
18844    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', H),
18845    lookup_ht(H, A, I),
18846    !,
18847    prev_guard_list___6__1__0__4(I,
18848                                 A,
18849                                 B,
18850                                 C,
18851                                 D,
18852                                 E,
18853                                 F,
18854                                 G).
18855prev_guard_list___6__1__0__4([], A, B, C, D, E, F, G) :-
18856    prev_guard_list___6__2(A,
18857                           B,
18858                           C,
18859                           D,
18860                           E,
18861                           F,
18862                           G).
18863prev_guard_list___6__1__0__4([A|B], C, D, E, F, G, H, I) :-
18864    (   A=suspension(_, active, _, _, J, K),
18865        J==C,
18866        K=pragma(rule(L, M, E, N), O, P, Q, C),
18867        simplify_heads(G, F, E, N, R, S),
18868        R\==[],
18869        extract_arguments(L, T),
18870        extract_arguments(M, U),
18871        extract_arguments(D, V),
18872        replace_some_heads(T,
18873                           U,
18874                           V,
18875                           R,
18876                           W,
18877                           X,
18878                           E,
18879                           N,
18880                           Y),
18881        substitute_arguments(L, W, Z),
18882        substitute_arguments(M, X, A1),
18883        append(S, Y, B1),
18884        list2conj(B1, C1),
18885        D1=pragma(rule(Z, A1, E, (C1, N)), O, P, Q, C),
18886        (   L\==Z
18887        ;   M\==A1
18888        )
18889    ->  setarg(2, A, removed),
18890        ( arg(4, A, E1),
18891          (   var(E1)
18892          ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
18893                        F1),
18894              F1=[_|G1],
18895              b_setval('$chr_store_global_ground_chr_translate____rule___2',
18896                       G1),
18897              (   G1=[H1|_]
18898              ->  setarg(4, H1, _)
18899              ;   true
18900              )
18901          ;   E1=[_, _|G1],
18902              setarg(2, E1, G1),
18903              (   G1=[H1|_]
18904              ->  setarg(4, H1, E1)
18905              ;   true
18906              )
18907          )
18908        ),
18909        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I1),
18910        delete_ht(I1, C, A),
18911        arg(2, I, J1),
18912        setarg(2, I, active),
18913        (   J1==not_stored_yet
18914        ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
18915                      K1),
18916            L1=[I|K1],
18917            b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
18918                     L1),
18919            (   K1=[M1|_]
18920            ->  setarg(4, M1, L1)
18921            ;   true
18922            ),
18923            nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
18924                      N1),
18925            insert_ht(N1, C, I)
18926        ;   true
18927        ),
18928        rule(C, D1),
18929        (   I=suspension(_, active, _, _, _, _, _, _, _, _)
18930        ->  setarg(2, I, inactive),
18931            prev_guard_list___6__1__0__4(B,
18932                                         C,
18933                                         D,
18934                                         E,
18935                                         F,
18936                                         G,
18937                                         H,
18938                                         I)
18939        ;   true
18940        )
18941    ;   prev_guard_list___6__1__0__4(B,
18942                                     C,
18943                                     D,
18944                                     E,
18945                                     F,
18946                                     G,
18947                                     H,
18948                                     I)
18949    ).
18950prev_guard_list___6__1(A, B, C, D, E, F, G) :-
18951    prev_guard_list___6__2(A,
18952                           B,
18953                           C,
18954                           D,
18955                           E,
18956                           F,
18957                           G).
18958prev_guard_list___6__2(A, B, C, D, E, F, G) :-
18959    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', H),
18960    lookup_ht(H, A, I),
18961    !,
18962    prev_guard_list___6__2__0__5(I,
18963                                 A,
18964                                 B,
18965                                 C,
18966                                 D,
18967                                 E,
18968                                 F,
18969                                 G).
18970prev_guard_list___6__2__0__5([], A, B, C, D, E, F, G) :-
18971    prev_guard_list___6__3(A,
18972                           B,
18973                           C,
18974                           D,
18975                           E,
18976                           F,
18977                           G).
18978prev_guard_list___6__2__0__5([A|B], C, D, E, F, G, H, I) :-
18979    (   A=suspension(_, active, _, _, J, K),
18980        J==C,
18981        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
18982                  L),
18983        lookup_ht(L, C, M)
18984    ->  prev_guard_list___6__2__1__5(M,
18985                                     K,
18986                                     A,
18987                                     B,
18988                                     C,
18989                                     D,
18990                                     E,
18991                                     F,
18992                                     G,
18993                                     H,
18994                                     I)
18995    ;   prev_guard_list___6__2__0__5(B,
18996                                     C,
18997                                     D,
18998                                     E,
18999                                     F,
19000                                     G,
19001                                     H,
19002                                     I)
19003    ).
19004prev_guard_list___6__2__1__5([], _, _, A, B, C, D, E, F, G, H) :-
19005    prev_guard_list___6__2__0__5(A,
19006                                 B,
19007                                 C,
19008                                 D,
19009                                 E,
19010                                 F,
19011                                 G,
19012                                 H).
19013prev_guard_list___6__2__1__5([A|B], C, D, E, F, G, H, I, J, K, L) :-
19014    (   A=suspension(_, active, _, _, M, N, O, _, _),
19015        O==F,
19016        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
19017                  P),
19018        lookup_ht(P, k(M, F), Q)
19019    ->  prev_guard_list___6__2__2__5(Q,
19020                                     M,
19021                                     N,
19022                                     A,
19023                                     B,
19024                                     C,
19025                                     D,
19026                                     E,
19027                                     F,
19028                                     G,
19029                                     H,
19030                                     I,
19031                                     J,
19032                                     K,
19033                                     L)
19034    ;   prev_guard_list___6__2__1__5(B,
19035                                     C,
19036                                     D,
19037                                     E,
19038                                     F,
19039                                     G,
19040                                     H,
19041                                     I,
19042                                     J,
19043                                     K,
19044                                     L)
19045    ).
19046prev_guard_list___6__2__2__5([], _, _, _, A, B, C, D, E, F, G, H, I, J, K) :-
19047    prev_guard_list___6__2__1__5(A,
19048                                 B,
19049                                 C,
19050                                 D,
19051                                 E,
19052                                 F,
19053                                 G,
19054                                 H,
19055                                 I,
19056                                 J,
19057                                 K).
19058prev_guard_list___6__2__2__5([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O, P) :-
19059    (   A=suspension(_, active, _, _, Q, R, S, T, _),
19060        A\==E,
19061        Q==C,
19062        S==J,
19063        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19064                  U)
19065    ->  prev_guard_list___6__2__3__5(U,
19066                                     R,
19067                                     T,
19068                                     A,
19069                                     B,
19070                                     C,
19071                                     D,
19072                                     E,
19073                                     F,
19074                                     G,
19075                                     H,
19076                                     I,
19077                                     J,
19078                                     K,
19079                                     L,
19080                                     M,
19081                                     N,
19082                                     O,
19083                                     P)
19084    ;   prev_guard_list___6__2__2__5(B,
19085                                     C,
19086                                     D,
19087                                     E,
19088                                     F,
19089                                     G,
19090                                     H,
19091                                     I,
19092                                     J,
19093                                     K,
19094                                     L,
19095                                     M,
19096                                     N,
19097                                     O,
19098                                     P)
19099    ).
19100prev_guard_list___6__2__3__5([], _, _, _, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) :-
19101    prev_guard_list___6__2__2__5(A,
19102                                 B,
19103                                 C,
19104                                 D,
19105                                 E,
19106                                 F,
19107                                 G,
19108                                 H,
19109                                 I,
19110                                 J,
19111                                 K,
19112                                 L,
19113                                 M,
19114                                 N,
19115                                 O).
19116prev_guard_list___6__2__3__5([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T) :-
19117    (   A=suspension(_, active, _, U),
19118        C<H,
19119        chr_pp_flag(occurrence_subsumption, on),
19120        K=pragma(rule(V, _, _, _), _, _, _, _),
19121        V\==[],
19122        \+ tree_set_memberchk(G, U)
19123    ->  setarg(2, A, removed),
19124        arg(3, A, W),
19125        (   var(W)
19126        ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19127                      X),
19128            X=[_|Y],
19129            b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19130                     Y),
19131            (   Y=[Z|_]
19132            ->  setarg(3, Z, _)
19133            ;   true
19134            )
19135        ;   W=[_, _|Y],
19136            setarg(2, W, Y),
19137            (   Y=[Z|_]
19138            ->  setarg(3, Z, W)
19139            ;   true
19140            )
19141        ),
19142        arg(2, T, A1),
19143        setarg(2, T, active),
19144        (   A1==not_stored_yet
19145        ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19146                      B1),
19147            C1=[T|B1],
19148            b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19149                     C1),
19150            (   B1=[D1|_]
19151            ->  setarg(4, D1, C1)
19152            ;   true
19153            ),
19154            nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19155                      E1),
19156            insert_ht(E1, N, T)
19157        ;   true
19158        ),
19159        first_occ_in_rule(N, G, C, D),
19160        tree_set_add(U, G, F1),
19161        multiple_occ_constraints_checked(F1),
19162        (   T=suspension(_, active, _, _, _, _, _, _, _, _)
19163        ->  setarg(2, T, inactive),
19164            prev_guard_list___6__2__3__5(B,
19165                                         C,
19166                                         D,
19167                                         E,
19168                                         F,
19169                                         G,
19170                                         H,
19171                                         I,
19172                                         J,
19173                                         K,
19174                                         L,
19175                                         M,
19176                                         N,
19177                                         O,
19178                                         P,
19179                                         Q,
19180                                         R,
19181                                         S,
19182                                         T)
19183        ;   true
19184        )
19185    ;   prev_guard_list___6__2__3__5(B,
19186                                     C,
19187                                     D,
19188                                     E,
19189                                     F,
19190                                     G,
19191                                     H,
19192                                     I,
19193                                     J,
19194                                     K,
19195                                     L,
19196                                     M,
19197                                     N,
19198                                     O,
19199                                     P,
19200                                     Q,
19201                                     R,
19202                                     S,
19203                                     T)
19204    ).
19205prev_guard_list___6__2(A, B, C, D, E, F, G) :-
19206    prev_guard_list___6__3(A,
19207                           B,
19208                           C,
19209                           D,
19210                           E,
19211                           F,
19212                           G).
19213prev_guard_list___6__3(A, _, _, _, _, _, B) :-
19214    nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19215              C),
19216    member(D, C),
19217    D=suspension(_, active, _, _),
19218    !,
19219    setarg(2, D, removed),
19220    arg(3, D, E),
19221    (   var(E)
19222    ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19223                  F),
19224        F=[_|G],
19225        b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19226                 G),
19227        (   G=[H|_]
19228        ->  setarg(3, H, _)
19229        ;   true
19230        )
19231    ;   E=[_, _|G],
19232        setarg(2, E, G),
19233        (   G=[H|_]
19234        ->  setarg(3, H, E)
19235        ;   true
19236        )
19237    ),
19238    (   var(B)
19239    ->  true
19240    ;   arg(2, B, I),
19241        setarg(2, B, removed),
19242        (   I==not_stored_yet
19243        ->  true
19244        ;   arg(4, B, J),
19245            (   var(J)
19246            ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19247                          K),
19248                K=[_|L],
19249                b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19250                         L),
19251                (   L=[M|_]
19252                ->  setarg(4, M, _)
19253                ;   true
19254                )
19255            ;   J=[_, _|L],
19256                setarg(2, J, L),
19257                (   L=[M|_]
19258                ->  setarg(4, M, J)
19259                ;   true
19260                )
19261            ),
19262            nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19263                      N),
19264            delete_ht(N, A, B)
19265        )
19266    ).
19267prev_guard_list___6__3(A, _, _, _, _, _, B) :-
19268    arg(2, B, C),
19269    setarg(2, B, active),
19270    (   C==not_stored_yet
19271    ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19272                  D),
19273        E=[B|D],
19274        b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19275                 E),
19276        (   D=[F|_]
19277        ->  setarg(4, F, E)
19278        ;   true
19279        ),
19280        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19281                  G),
19282        insert_ht(G, A, B)
19283    ;   true
19284    ).
19285simplify_guards(A) :-
19286    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', B),
19287    lookup_ht(B, A, C),
19288    member(D, C),
19289    D=suspension(_, active, _, _, _, E),
19290    !,
19291    E=pragma(rule(F, G, H, _), ids(I, J), _, _, A),
19292    append(F, G, K),
19293    make_head_matchings_explicit_not_negated(K, L, M),
19294    tree_set_empty(N),
19295    multiple_occ_constraints_checked(N),
19296    apply_guard_wrt_term(K, H, O),
19297    append(I, J, P),
19298    findall(tuple(Q, R, A)-(-A),
19299            ( member(S, P),
19300              get_occurrence_from_id(Q, R, A, S)
19301            ),
19302            T),
19303    empty_q(U),
19304    insert_list_q(T, U, V),
19305    next_prev_rule(V, _, W),
19306    next_prev_rule(W, X, Y),
19307    prev_guard_list(A,
19308                    X,
19309                    Y,
19310                    L,
19311                    H,
19312                    [],
19313                    M,
19314                    [O]),
19315    Z is A+1,
19316    simplify_guards(Z).
19317simplify_guards(_).
19318set_all_passive(A) :-
19319    set_all_passive___1__0(A, _).
19320set_all_passive___1__0(A, B) :-
19321    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', C),
19322    lookup_ht(C, A, D),
19323    !,
19324    B=suspension(E, not_stored_yet, t, A),
19325    'chr gen_id'(E),
19326    set_all_passive___1__0__0__1(D, A, B).
19327set_all_passive___1__0__0__1([], A, B) :-
19328    set_all_passive___1__1(A, B).
19329set_all_passive___1__0__0__1([A|B], C, D) :-
19330    (   A=suspension(_, active, _, _, _, _, E, F, _),
19331        E==C,
19332        G=t(180, D, A),
19333        '$novel_production'(D, G),
19334        '$novel_production'(A, G)
19335    ->  '$extend_history'(D, G),
19336        arg(2, D, H),
19337        setarg(2, D, active),
19338        (   H==not_stored_yet
19339        ->  nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
19340                      I),
19341            insert_ht(I, C, D)
19342        ;   true
19343        ),
19344        passive(C, F),
19345        (   D=suspension(_, active, _, _)
19346        ->  setarg(2, D, inactive),
19347            set_all_passive___1__0__0__1(B, C, D)
19348        ;   true
19349        )
19350    ;   set_all_passive___1__0__0__1(B, C, D)
19351    ).
19352set_all_passive___1__0(A, B) :-
19353    B=suspension(C, not_stored_yet, t, A),
19354    'chr gen_id'(C),
19355    set_all_passive___1__1(A, B).
19356set_all_passive___1__1(A, B) :-
19357    (   var(B)
19358    ->  true
19359    ;   arg(2, B, C),
19360        setarg(2, B, removed),
19361        (   C==not_stored_yet
19362        ->  true
19363        ;   nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
19364                      D),
19365            delete_ht(D, A, B)
19366        )
19367    ).
19368precompute_head_matchings :-
19369    precompute_head_matchings___0__0(_).
19370precompute_head_matchings___0__0(A) :-
19371    nb_getval('$chr_store_global_ground_chr_translate____rule___2', B),
19372    !,
19373    A=suspension(C, not_stored_yet, t, _),
19374    'chr gen_id'(C),
19375    precompute_head_matchings___0__0__0__1(B, A).
19376precompute_head_matchings___0__0__0__1([], A) :-
19377    precompute_head_matchings___0__1(A).
19378precompute_head_matchings___0__0__0__1([A|B], C) :-
19379    (   A=suspension(_, active, _, _, D, E),
19380        F=t(174, A, C),
19381        '$novel_production'(A, F),
19382        '$novel_production'(C, F)
19383    ->  '$extend_history'(C, F),
19384        arg(2, C, G),
19385        setarg(2, C, active),
19386        (   G==not_stored_yet
19387        ->  nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19388                      H),
19389            I=[C|H],
19390            b_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19391                     I),
19392            (   H=[J|_]
19393            ->  setarg(4, J, I)
19394            ;   true
19395            )
19396        ;   true
19397        ),
19398        E=pragma(rule(K, L, _, _), _, _, _, _),
19399        append(K, L, M),
19400        make_head_matchings_explicit_(M, N, O),
19401        copy_term_nat(N-O, P-Q),
19402        make_head_matchings_explicit_memo_table(D, P, Q),
19403        (   C=suspension(_, active, _, _)
19404        ->  setarg(2, C, inactive),
19405            precompute_head_matchings___0__0__0__1(B, C)
19406        ;   true
19407        )
19408    ;   precompute_head_matchings___0__0__0__1(B, C)
19409    ).
19410precompute_head_matchings___0__0(A) :-
19411    A=suspension(B, not_stored_yet, t, _),
19412    'chr gen_id'(B),
19413    precompute_head_matchings___0__1(A).
19414precompute_head_matchings___0__1(A) :-
19415    (   var(A)
19416    ->  true
19417    ;   arg(2, A, B),
19418        setarg(2, A, removed),
19419        (   B==not_stored_yet
19420        ->  true
19421        ;   arg(4, A, C),
19422            (   var(C)
19423            ->  nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19424                          D),
19425                D=[_|E],
19426                b_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19427                         E),
19428                (   E=[F|_]
19429                ->  setarg(4, F, _)
19430                ;   true
19431                )
19432            ;   C=[_, _|E],
19433                setarg(2, C, E),
19434                (   E=[F|_]
19435                ->  setarg(4, F, C)
19436                ;   true
19437                )
19438            )
19439        )
19440    ).
19441make_head_matchings_explicit_memo_table(A, B, C) :-
19442    D=suspension(E, active, A, B, C),
19443    'chr gen_id'(E),
19444    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
19445              F),
19446    insert_ht(F, A, D).
19447make_head_matchings_explicit_memo_lookup(A, B, C) :-
19448    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
19449              D),
19450    lookup_ht(D, A, E),
19451    member(F, E),
19452    F=suspension(_, active, _, G, H),
19453    !,
19454    B=G,
19455    C=H.
19456make_head_matchings_explicit_memo_lookup(_, _, _) :-
19457    fail.
19458first_occ_in_rule(A, B, C, _) :-
19459    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
19460              D),
19461    lookup_ht(D, k(B, A), E),
19462    member(F, E),
19463    F=suspension(_, active, _, _, _, G, _, H, _),
19464    G<C,
19465    !,
19466    first_occ_in_rule(A, B, G, H).
19467first_occ_in_rule(A, B, C, D) :-
19468    B=E/F,
19469    functor(G, E, F),
19470    next_occ_in_rule(A, B, C, D, [], G).
19471next_occ_in_rule(A, B, C, D, _, E) :-
19472    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', F),
19473    lookup_ht(F, A, G),
19474    member(H, G),
19475    H=suspension(_, active, _, _, I),
19476    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
19477              J),
19478    lookup_ht(J, k(B, A, I), K),
19479    member(L, K),
19480    L=suspension(_, active, _, _, _, M, _, _, _),
19481    M is C+1,
19482    !,
19483    next_occ_in_rule(A, B, M, D, _, E).
19484next_occ_in_rule(A, B, C, D, E, F) :-
19485    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19486              G),
19487    lookup_ht(G, A, H),
19488    member(I, H),
19489    I=suspension(_, active, _, _, _, J, K, L, M, _),
19490    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', N),
19491    lookup_ht(N, A, O),
19492    member(P, O),
19493    P=suspension(_, active, _, _, _, Q),
19494    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
19495              R),
19496    lookup_ht(R, k(B, A), S),
19497    member(T, S),
19498    T=suspension(_, active, _, _, _, U, _, V, _),
19499    U is C+1,
19500    Q=pragma(rule(W, X, K, _), ids(_, _), _, _, A),
19501    !,
19502    append(W, X, Y),
19503    add_failing_occ(Q,
19504                    Y,
19505                    J,
19506                    D,
19507                    Z,
19508                    F,
19509                    M,
19510                    B,
19511                    A1),
19512    (   Z==[chr_pp_void_info]
19513    ->  next_occ_in_rule(A, B, U, V, E, F)
19514    ;   append(Z, E, B1),
19515        add_failing_occ(Q,
19516                        Y,
19517                        J,
19518                        V,
19519                        C1,
19520                        F,
19521                        M,
19522                        B,
19523                        D1),
19524        copy_term(L, E1),
19525        variable_replacement(L, E1, F1),
19526        copy_with_variable_replacement(L, G1, A1),
19527        copy_with_variable_replacement(L, H1, D1),
19528        copy_with_variable_replacement(H1, I1, F1),
19529        append(B1, G1, J1),
19530        append(J1, I1, K1),
19531        copy_with_variable_replacement(M, L1, A1),
19532        copy_with_variable_replacement(M, M1, D1),
19533        append(M1, K1, N1),
19534        append([chr_pp_active_constraint(F)|L1], N1, O1),
19535        list2conj(C1, P1),
19536        copy_term((B1, K1, O1, P1, F),
19537                  (_, _, Q1, R1, _)),
19538        (   P1\=chr_pp_void_info
19539        ->  (   guard_entailment:entails_guard(Q1, R1)
19540            ->  passive(A, V)
19541            ;   true
19542            )
19543        ;   true
19544        ),
19545        !,
19546        next_occ_in_rule(A, B, U, V, B1, F)
19547    ).
19548next_occ_in_rule(_, _, _, _, _, _).
19549multiple_occ_constraints_checked(A) :-
19550    nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19551              B),
19552    member(C, B),
19553    C=suspension(_, active, _, _, D, _, _, _, _, _),
19554    (   nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
19555                  E),
19556        lookup_ht(E, D, F),
19557        member(G, F),
19558        G=suspension(_, active, _, _, H, I, _, _, _),
19559        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', J),
19560        lookup_ht(J, D, K),
19561        member(L, K),
19562        L=suspension(_, active, _, _, _, M),
19563        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
19564                  N),
19565        lookup_ht(N, k(H, D), O),
19566        member(P, O),
19567        P=suspension(_, active, _, _, _, Q, _, R, _),
19568        P\==G,
19569        Q<I,
19570        chr_pp_flag(occurrence_subsumption, on),
19571        M=pragma(rule(S, _, _, _), _, _, _, _),
19572        S\==[],
19573        \+ tree_set_memberchk(H, A),
19574        !,
19575        first_occ_in_rule(D, H, Q, R),
19576        tree_set_add(A, H, T),
19577        multiple_occ_constraints_checked(T)
19578    ;   !,
19579        setarg(2, C, removed),
19580        arg(4, C, U),
19581        (   var(U)
19582        ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19583                      V),
19584            V=[_|W],
19585            b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19586                     W),
19587            (   W=[X|_]
19588            ->  setarg(4, X, _)
19589            ;   true
19590            )
19591        ;   U=[_, _|W],
19592            setarg(2, U, W),
19593            (   W=[X|_]
19594            ->  setarg(4, X, U)
19595            ;   true
19596            )
19597        ),
19598        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19599                  Y),
19600        delete_ht(Y, D, C)
19601    ).
19602multiple_occ_constraints_checked(A) :-
19603    B=suspension(C, active, _, A),
19604    'chr gen_id'(C),
19605    nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19606              D),
19607    E=[B|D],
19608    b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19609             E),
19610    (   D=[F|_]
19611    ->  setarg(3, F, E)
19612    ;   true
19613    ).
19614type_definition(A, B) :-
19615    type_definition___2__0(A, B, _).
19616type_definition___2__0(A, _, B) :-
19617    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19618              C),
19619    member(D, C),
19620    D=suspension(_, active, _, _, _, E, _),
19621    (   functor(A, F, G),
19622        functor(E, F, G),
19623        !,
19624        D=suspension(_, _, _, _, _, H, I),
19625        setarg(2, D, removed),
19626        term_variables(term(H, I), J),
19627        arg(5, D, K),
19628        (   var(K)
19629        ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19630                      L),
19631            L=[_|M],
19632            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19633                     M),
19634            (   M=[N|_]
19635            ->  setarg(5, N, _)
19636            ;   true
19637            )
19638        ;   K=[_, _|M],
19639            setarg(2, K, M),
19640            (   M=[N|_]
19641            ->  setarg(5, N, K)
19642            ;   true
19643            )
19644        ),
19645        detach_type_definition___2(J, D),
19646        (   var(B)
19647        ->  true
19648        ;   B=suspension(_, O, _, _, _, P, Q),
19649            setarg(2, B, removed),
19650            (   O==not_stored_yet
19651            ->  R=[]
19652            ;   term_variables(term(P, Q), R),
19653                arg(5, B, S),
19654                (   var(S)
19655                ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19656                              T),
19657                    T=[_|U],
19658                    b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19659                             U),
19660                    (   U=[V|_]
19661                    ->  setarg(5, V, _)
19662                    ;   true
19663                    )
19664                ;   S=[_, _|U],
19665                    setarg(2, S, U),
19666                    (   U=[V|_]
19667                    ->  setarg(5, V, S)
19668                    ;   true
19669                    )
19670                ),
19671                detach_type_definition___2(R, B)
19672            )
19673        ),
19674        chr_error(type_error,
19675                  'Multiple definitions for type: ~w/~w.\n',
19676                  [F, G])
19677    ;   functor(E, W, X),
19678        functor(A, W, X),
19679        !,
19680        D=suspension(_, _, _, _, _, Y, Z),
19681        setarg(2, D, removed),
19682        term_variables(term(Y, Z), A1),
19683        arg(5, D, B1),
19684        (   var(B1)
19685        ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19686                      C1),
19687            C1=[_|D1],
19688            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19689                     D1),
19690            (   D1=[E1|_]
19691            ->  setarg(5, E1, _)
19692            ;   true
19693            )
19694        ;   B1=[_, _|D1],
19695            setarg(2, B1, D1),
19696            (   D1=[E1|_]
19697            ->  setarg(5, E1, B1)
19698            ;   true
19699            )
19700        ),
19701        detach_type_definition___2(A1, D),
19702        (   var(B)
19703        ->  true
19704        ;   B=suspension(_, F1, _, _, _, G1, H1),
19705            setarg(2, B, removed),
19706            (   F1==not_stored_yet
19707            ->  I1=[]
19708            ;   term_variables(term(G1, H1), I1),
19709                arg(5, B, J1),
19710                (   var(J1)
19711                ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19712                              K1),
19713                    K1=[_|L1],
19714                    b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19715                             L1),
19716                    (   L1=[M1|_]
19717                    ->  setarg(5, M1, _)
19718                    ;   true
19719                    )
19720                ;   J1=[_, _|L1],
19721                    setarg(2, J1, L1),
19722                    (   L1=[M1|_]
19723                    ->  setarg(5, M1, J1)
19724                    ;   true
19725                    )
19726                ),
19727                detach_type_definition___2(I1, B)
19728            )
19729        ),
19730        chr_error(type_error,
19731                  'Multiple definitions for type: ~w/~w.\n',
19732                  [W, X])
19733    ).
19734type_definition___2__0(A, _, B) :-
19735    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', C),
19736    member(D, C),
19737    D=suspension(_, active, _, _, _, E, _),
19738    functor(A, F, G),
19739    functor(E, F, G),
19740    !,
19741    D=suspension(_, _, _, _, _, H, I),
19742    setarg(2, D, removed),
19743    term_variables(term(H, I), J),
19744    arg(5, D, K),
19745    (   var(K)
19746    ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
19747                  L),
19748        L=[_|M],
19749        b_setval('$chr_store_global_list_chr_translate____type_alias___2',
19750                 M),
19751        (   M=[N|_]
19752        ->  setarg(5, N, _)
19753        ;   true
19754        )
19755    ;   K=[_, _|M],
19756        setarg(2, K, M),
19757        (   M=[N|_]
19758        ->  setarg(5, N, K)
19759        ;   true
19760        )
19761    ),
19762    detach_type_alias___2(J, D),
19763    (   var(B)
19764    ->  true
19765    ;   B=suspension(_, O, _, _, _, P, Q),
19766        setarg(2, B, removed),
19767        (   O==not_stored_yet
19768        ->  R=[]
19769        ;   term_variables(term(P, Q), R),
19770            arg(5, B, S),
19771            (   var(S)
19772            ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19773                          T),
19774                T=[_|U],
19775                b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19776                         U),
19777                (   U=[V|_]
19778                ->  setarg(5, V, _)
19779                ;   true
19780                )
19781            ;   S=[_, _|U],
19782                setarg(2, S, U),
19783                (   U=[V|_]
19784                ->  setarg(5, V, S)
19785                ;   true
19786                )
19787            ),
19788            detach_type_definition___2(R, B)
19789        )
19790    ),
19791    chr_error(type_error,
19792              'Multiple definitions for type, once in a type definition and once as a type alias: ~w/~w.\n',
19793              [F, G]).
19794type_definition___2__0(A, B, C) :-
19795    nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
19796              D),
19797    !,
19798    (   var(C)
19799    ->  C=suspension(E, not_stored_yet, t, 0, _, A, B),
19800        'chr gen_id'(E)
19801    ;   true
19802    ),
19803    type_definition___2__0__0__5(D, A, B, C).
19804type_definition___2__0__0__5([], A, B, C) :-
19805    type_definition___2__1(A, B, C).
19806type_definition___2__0__0__5([A|B], C, D, E) :-
19807    (   A=suspension(_, active, _, F, G),
19808        nonvar(C),
19809        functor(C, H, I),
19810        functor(F, H, I)
19811    ->  A=suspension(_, _, _, J, _),
19812        setarg(2, A, removed),
19813        term_variables(J, K),
19814        ( arg(3, A, L),
19815          (   var(L)
19816          ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
19817                        M),
19818              M=[_|N],
19819              b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
19820                       N),
19821              (   N=[O|_]
19822              ->  setarg(3, O, _)
19823              ;   true
19824              )
19825          ;   L=[_, _|N],
19826              setarg(2, L, N),
19827              (   N=[O|_]
19828              ->  setarg(3, O, L)
19829              ;   true
19830              )
19831          )
19832        ),
19833        detach_unalias_type___2(K, A),
19834        arg(2, E, P),
19835        setarg(2, E, active),
19836        ( arg(4, E, Q),
19837          R is Q+1,
19838          setarg(4, E, R)
19839        ),
19840        (   P==not_stored_yet
19841        ->  E=suspension(_, _, _, _, _, S, T),
19842            term_variables(term(S, T), U),
19843            nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19844                      V),
19845            W=[E|V],
19846            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19847                     W),
19848            (   V=[X|_]
19849            ->  setarg(5, X, W)
19850            ;   true
19851            ),
19852            attach_type_definition___2(U, E)
19853        ;   true
19854        ),
19855        G=F,
19856        (   E=suspension(_, active, _, R, _, _, _)
19857        ->  setarg(2, E, inactive),
19858            type_definition___2__0__0__5(B, C, D, E)
19859        ;   true
19860        )
19861    ;   type_definition___2__0__0__5(B, C, D, E)
19862    ).
19863type_definition___2__0(A, B, C) :-
19864    (   var(C)
19865    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
19866        'chr gen_id'(D)
19867    ;   true
19868    ),
19869    type_definition___2__1(A, B, C).
19870type_definition___2__1(A, B, C) :-
19871    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
19872              D),
19873    !,
19874    type_definition___2__1__0__7(D, A, B, C).
19875type_definition___2__1__0__7([], A, B, C) :-
19876    type_definition___2__2(A, B, C).
19877type_definition___2__1__0__7([A|B], C, D, E) :-
19878    (   A=suspension(_, active, _, _),
19879        F=t(235, E, A),
19880        '$novel_production'(E, F),
19881        '$novel_production'(A, F)
19882    ->  '$extend_history'(E, F),
19883        arg(2, E, G),
19884        setarg(2, E, active),
19885        ( arg(4, E, H),
19886          I is H+1,
19887          setarg(4, E, I)
19888        ),
19889        (   G==not_stored_yet
19890        ->  E=suspension(_, _, _, _, _, J, K),
19891            term_variables(term(J, K), L),
19892            nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19893                      M),
19894            N=[E|M],
19895            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19896                     N),
19897            (   M=[O|_]
19898            ->  setarg(5, O, N)
19899            ;   true
19900            ),
19901            attach_type_definition___2(L, E)
19902        ;   true
19903        ),
19904        copy_term_nat(C-D, P-Q),
19905        maplist(dynamic_type_check_clause(P), Q, R),
19906        dynamic_type_check_clauses(R),
19907        (   E=suspension(_, active, _, I, _, _, _)
19908        ->  setarg(2, E, inactive),
19909            type_definition___2__1__0__7(B, C, D, E)
19910        ;   true
19911        )
19912    ;   type_definition___2__1__0__7(B, C, D, E)
19913    ).
19914type_definition___2__1(A, B, C) :-
19915    type_definition___2__2(A, B, C).
19916type_definition___2__2(A, B, C) :-
19917    nb_getval('$chr_store_global_list_chr_translate____atomic_type___1', D),
19918    !,
19919    type_definition___2__2__0__8(D, A, B, C).
19920type_definition___2__2__0__8([], A, B, C) :-
19921    type_definition___2__3(A, B, C).
19922type_definition___2__2__0__8([A|B], C, D, E) :-
19923    (   A=suspension(_, active, _, F),
19924        functor(F, G, H),
19925        functor(C, G, H)
19926    ->  A=suspension(_, _, _, I),
19927        setarg(2, A, removed),
19928        term_variables(I, J),
19929        ( arg(3, A, K),
19930          (   var(K)
19931          ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
19932                        L),
19933              L=[_|M],
19934              b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
19935                       M),
19936              (   M=[N|_]
19937              ->  setarg(3, N, _)
19938              ;   true
19939              )
19940          ;   K=[_, _|M],
19941              setarg(2, K, M),
19942              (   M=[N|_]
19943              ->  setarg(3, N, K)
19944              ;   true
19945              )
19946          )
19947        ),
19948        detach_atomic_type___1(J, A),
19949        arg(2, E, O),
19950        setarg(2, E, active),
19951        ( arg(4, E, P),
19952          Q is P+1,
19953          setarg(4, E, Q)
19954        ),
19955        (   O==not_stored_yet
19956        ->  E=suspension(_, _, _, _, _, R, S),
19957            term_variables(term(R, S), T),
19958            nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19959                      U),
19960            V=[E|U],
19961            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19962                     V),
19963            (   U=[W|_]
19964            ->  setarg(5, W, V)
19965            ;   true
19966            ),
19967            attach_type_definition___2(T, E)
19968        ;   true
19969        ),
19970        maplist(atomic, D),
19971        (   E=suspension(_, active, _, Q, _, _, _)
19972        ->  setarg(2, E, inactive),
19973            type_definition___2__2__0__8(B, C, D, E)
19974        ;   true
19975        )
19976    ;   type_definition___2__2__0__8(B, C, D, E)
19977    ).
19978type_definition___2__2(A, B, C) :-
19979    type_definition___2__3(A, B, C).
19980type_definition___2__3(_, _, A) :-
19981    arg(2, A, B),
19982    setarg(2, A, active),
19983    arg(4, A, C),
19984    D is C+1,
19985    setarg(4, A, D),
19986    (   B==not_stored_yet
19987    ->  A=suspension(_, _, _, _, _, E, F),
19988        term_variables(term(E, F), G),
19989        nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19990                  H),
19991        I=[A|H],
19992        b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19993                 I),
19994        (   H=[J|_]
19995        ->  setarg(5, J, I)
19996        ;   true
19997        ),
19998        attach_type_definition___2(G, A)
19999    ;   true
20000    ).
20001type_alias(A, B) :-
20002    type_alias___2__0(A, B, _).
20003type_alias___2__0(A, B, C) :-
20004    var(A),
20005    !,
20006    (   var(C)
20007    ->  true
20008    ;   C=suspension(_, D, _, _, _, E, F),
20009        setarg(2, C, removed),
20010        (   D==not_stored_yet
20011        ->  G=[]
20012        ;   term_variables(term(E, F), G),
20013            arg(5, C, H),
20014            (   var(H)
20015            ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20016                          I),
20017                I=[_|J],
20018                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20019                         J),
20020                (   J=[K|_]
20021                ->  setarg(5, K, _)
20022                ;   true
20023                )
20024            ;   H=[_, _|J],
20025                setarg(2, H, J),
20026                (   J=[K|_]
20027                ->  setarg(5, K, H)
20028                ;   true
20029                )
20030            ),
20031            detach_type_alias___2(G, C)
20032        )
20033    ),
20034    chr_error(type_error,
20035              'Variable alias definition: "~w".\n',
20036              [(:-chr_type A==B)]).
20037type_alias___2__0(A, B, C) :-
20038    var(B),
20039    !,
20040    (   var(C)
20041    ->  true
20042    ;   C=suspension(_, D, _, _, _, E, F),
20043        setarg(2, C, removed),
20044        (   D==not_stored_yet
20045        ->  G=[]
20046        ;   term_variables(term(E, F), G),
20047            arg(5, C, H),
20048            (   var(H)
20049            ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20050                          I),
20051                I=[_|J],
20052                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20053                         J),
20054                (   J=[K|_]
20055                ->  setarg(5, K, _)
20056                ;   true
20057                )
20058            ;   H=[_, _|J],
20059                setarg(2, H, J),
20060                (   J=[K|_]
20061                ->  setarg(5, K, H)
20062                ;   true
20063                )
20064            ),
20065            detach_type_alias___2(G, C)
20066        )
20067    ),
20068    chr_error(type_error,
20069              'Variable alias definition: "~w".\n',
20070              [(:-chr_type A==B)]).
20071type_alias___2__0(A, B, C) :-
20072    subsumes_term(A, B),
20073    !,
20074    (   var(C)
20075    ->  true
20076    ;   C=suspension(_, D, _, _, _, E, F),
20077        setarg(2, C, removed),
20078        (   D==not_stored_yet
20079        ->  G=[]
20080        ;   term_variables(term(E, F), G),
20081            arg(5, C, H),
20082            (   var(H)
20083            ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20084                          I),
20085                I=[_|J],
20086                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20087                         J),
20088                (   J=[K|_]
20089                ->  setarg(5, K, _)
20090                ;   true
20091                )
20092            ;   H=[_, _|J],
20093                setarg(2, H, J),
20094                (   J=[K|_]
20095                ->  setarg(5, K, H)
20096                ;   true
20097                )
20098            ),
20099            detach_type_alias___2(G, C)
20100        )
20101    ),
20102    chr_error(type_error, 'Cyclic alias definition: "~w".\n', [A==B]).
20103type_alias___2__0(A, B, C) :-
20104    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', D),
20105    (   member(E, D),
20106        E=suspension(_, active, _, _, _, F, G),
20107        (   (   functor(A, H, I),
20108                functor(F, H, I),
20109                \+ A\=F,
20110                !,
20111                E=suspension(_, _, _, _, _, J, K),
20112                setarg(2, E, removed),
20113                term_variables(term(J, K), L),
20114                arg(5, E, M),
20115                (   var(M)
20116                ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20117                              N),
20118                    N=[_|O],
20119                    b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20120                             O),
20121                    (   O=[P|_]
20122                    ->  setarg(5, P, _)
20123                    ;   true
20124                    )
20125                ;   M=[_, _|O],
20126                    setarg(2, M, O),
20127                    (   O=[P|_]
20128                    ->  setarg(5, P, M)
20129                    ;   true
20130                    )
20131                ),
20132                detach_type_alias___2(L, E),
20133                (   var(C)
20134                ->  true
20135                ;   C=suspension(_, Q, _, _, _, R, S),
20136                    setarg(2, C, removed),
20137                    (   Q==not_stored_yet
20138                    ->  T=[]
20139                    ;   term_variables(term(R, S), T),
20140                        arg(5, C, U),
20141                        (   var(U)
20142                        ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20143                                      V),
20144                            V=[_|W],
20145                            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20146                                     W),
20147                            (   W=[X|_]
20148                            ->  setarg(5, X, _)
20149                            ;   true
20150                            )
20151                        ;   U=[_, _|W],
20152                            setarg(2, U, W),
20153                            (   W=[X|_]
20154                            ->  setarg(5, X, U)
20155                            ;   true
20156                            )
20157                        ),
20158                        detach_type_alias___2(T, C)
20159                    )
20160                ),
20161                copy_term_nat(A, Y),
20162                copy_term_nat(F, Z),
20163                Y=Z,
20164                chr_error(type_error,
20165                          'Ambiguous type aliases: you have defined \n\t`~w\'\n\t`~w\'\n\tresulting in two definitions for "~w".\n',
20166                          [A==B, F==G, Y])
20167            ;   functor(F, A1, B1),
20168                functor(A, A1, B1),
20169                \+ F\=A,
20170                !,
20171                E=suspension(_, _, _, _, _, C1, D1),
20172                setarg(2, E, removed),
20173                term_variables(term(C1, D1), E1),
20174                arg(5, E, F1),
20175                (   var(F1)
20176                ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20177                              G1),
20178                    G1=[_|H1],
20179                    b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20180                             H1),
20181                    (   H1=[I1|_]
20182                    ->  setarg(5, I1, _)
20183                    ;   true
20184                    )
20185                ;   F1=[_, _|H1],
20186                    setarg(2, F1, H1),
20187                    (   H1=[I1|_]
20188                    ->  setarg(5, I1, F1)
20189                    ;   true
20190                    )
20191                ),
20192                detach_type_alias___2(E1, E),
20193                (   var(C)
20194                ->  true
20195                ;   C=suspension(_, J1, _, _, _, K1, L1),
20196                    setarg(2, C, removed),
20197                    (   J1==not_stored_yet
20198                    ->  M1=[]
20199                    ;   term_variables(term(K1, L1), M1),
20200                        arg(5, C, N1),
20201                        (   var(N1)
20202                        ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20203                                      O1),
20204                            O1=[_|P1],
20205                            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20206                                     P1),
20207                            (   P1=[Q1|_]
20208                            ->  setarg(5, Q1, _)
20209                            ;   true
20210                            )
20211                        ;   N1=[_, _|P1],
20212                            setarg(2, N1, P1),
20213                            (   P1=[Q1|_]
20214                            ->  setarg(5, Q1, N1)
20215                            ;   true
20216                            )
20217                        ),
20218                        detach_type_alias___2(M1, C)
20219                    )
20220                ),
20221                copy_term_nat(F, R1),
20222                copy_term_nat(A, S1),
20223                R1=S1,
20224                chr_error(type_error,
20225                          'Ambiguous type aliases: you have defined \n\t`~w\'\n\t`~w\'\n\tresulting in two definitions for "~w".\n',
20226                          [F==G, A==B, R1])
20227            )
20228        ;   functor(F, T1, U1),
20229            functor(B, T1, U1),
20230            copy_term_nat((A, B, F, G),
20231                          (V1, W1, X1, Y1)),
20232            subsumes_term(X1, W1),
20233            !,
20234            (   var(C)
20235            ->  true
20236            ;   C=suspension(_, Z1, _, _, _, A2, B2),
20237                setarg(2, C, removed),
20238                (   Z1==not_stored_yet
20239                ->  C2=[]
20240                ;   term_variables(term(A2, B2), C2),
20241                    arg(5, C, D2),
20242                    (   var(D2)
20243                    ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20244                                  E2),
20245                        E2=[_|F2],
20246                        b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20247                                 F2),
20248                        (   F2=[G2|_]
20249                        ->  setarg(5, G2, _)
20250                        ;   true
20251                        )
20252                    ;   D2=[_, _|F2],
20253                        setarg(2, D2, F2),
20254                        (   F2=[G2|_]
20255                        ->  setarg(5, G2, D2)
20256                        ;   true
20257                        )
20258                    ),
20259                    detach_type_alias___2(C2, C)
20260                )
20261            ),
20262            type_alias(V1, Y1)
20263        )
20264    ;   !,
20265        (   var(C)
20266        ->  C=suspension(H2, not_stored_yet, t, 0, _, A, B),
20267            'chr gen_id'(H2)
20268        ;   true
20269        ),
20270        type_alias___2__0__0__7(D, A, B, C)
20271    ).
20272type_alias___2__0__0__7([], A, B, C) :-
20273    type_alias___2__1(A, B, C).
20274type_alias___2__0__0__7([A|B], C, D, E) :-
20275    (   A=suspension(_, active, _, _, _, F, G),
20276        functor(C, H, I),
20277        functor(G, H, I),
20278        copy_term_nat((F, G, C, D),
20279                      (J, K, L, M)),
20280        subsumes_term(L, K)
20281    ->  A=suspension(_, _, _, _, _, N, O),
20282        setarg(2, A, removed),
20283        term_variables(term(N, O), P),
20284        ( arg(5, A, Q),
20285          (   var(Q)
20286          ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20287                        R),
20288              R=[_|S],
20289              b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20290                       S),
20291              (   S=[T|_]
20292              ->  setarg(5, T, _)
20293              ;   true
20294              )
20295          ;   Q=[_, _|S],
20296              setarg(2, Q, S),
20297              (   S=[T|_]
20298              ->  setarg(5, T, Q)
20299              ;   true
20300              )
20301          )
20302        ),
20303        detach_type_alias___2(P, A),
20304        arg(2, E, U),
20305        setarg(2, E, active),
20306        ( arg(4, E, V),
20307          W is V+1,
20308          setarg(4, E, W)
20309        ),
20310        (   U==not_stored_yet
20311        ->  E=suspension(_, _, _, _, _, X, Y),
20312            term_variables(term(X, Y), Z),
20313            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20314                      A1),
20315            B1=[E|A1],
20316            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20317                     B1),
20318            (   A1=[C1|_]
20319            ->  setarg(5, C1, B1)
20320            ;   true
20321            ),
20322            attach_type_alias___2(Z, E)
20323        ;   true
20324        ),
20325        type_alias(J, M),
20326        (   E=suspension(_, active, _, W, _, _, _)
20327        ->  setarg(2, E, inactive),
20328            type_alias___2__0__0__7(B, C, D, E)
20329        ;   true
20330        )
20331    ;   type_alias___2__0__0__7(B, C, D, E)
20332    ).
20333type_alias___2__0(A, B, C) :-
20334    (   var(C)
20335    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
20336        'chr gen_id'(D)
20337    ;   true
20338    ),
20339    type_alias___2__1(A, B, C).
20340type_alias___2__1(A, _, B) :-
20341    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20342              C),
20343    member(D, C),
20344    D=suspension(_, active, _, _, _, E, _),
20345    functor(E, F, G),
20346    functor(A, F, G),
20347    !,
20348    D=suspension(_, _, _, _, _, H, I),
20349    setarg(2, D, removed),
20350    term_variables(term(H, I), J),
20351    arg(5, D, K),
20352    (   var(K)
20353    ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20354                  L),
20355        L=[_|M],
20356        b_setval('$chr_store_global_list_chr_translate____type_definition___2',
20357                 M),
20358        (   M=[N|_]
20359        ->  setarg(5, N, _)
20360        ;   true
20361        )
20362    ;   K=[_, _|M],
20363        setarg(2, K, M),
20364        (   M=[N|_]
20365        ->  setarg(5, N, K)
20366        ;   true
20367        )
20368    ),
20369    detach_type_definition___2(J, D),
20370    (   var(B)
20371    ->  true
20372    ;   B=suspension(_, O, _, _, _, P, Q),
20373        setarg(2, B, removed),
20374        (   O==not_stored_yet
20375        ->  R=[]
20376        ;   term_variables(term(P, Q), R),
20377            arg(5, B, S),
20378            (   var(S)
20379            ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20380                          T),
20381                T=[_|U],
20382                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20383                         U),
20384                (   U=[V|_]
20385                ->  setarg(5, V, _)
20386                ;   true
20387                )
20388            ;   S=[_, _|U],
20389                setarg(2, S, U),
20390                (   U=[V|_]
20391                ->  setarg(5, V, S)
20392                ;   true
20393                )
20394            ),
20395            detach_type_alias___2(R, B)
20396        )
20397    ),
20398    chr_error(type_error,
20399              'Multiple definitions for type, once in a type definition and once as a type alias: ~w/~w.\n',
20400              [F, G]).
20401type_alias___2__1(A, B, C) :-
20402    nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20403              D),
20404    !,
20405    type_alias___2__1__0__10(D, A, B, C).
20406type_alias___2__1__0__10([], A, B, C) :-
20407    type_alias___2__2(A, B, C).
20408type_alias___2__1__0__10([A|B], C, D, E) :-
20409    (   A=suspension(_, active, _, F, G),
20410        functor(C, H, I),
20411        functor(F, H, I),
20412        copy_term_nat((C, D), (J, K)),
20413        F=J
20414    ->  A=suspension(_, _, _, L, _),
20415        setarg(2, A, removed),
20416        term_variables(L, M),
20417        ( arg(3, A, N),
20418          (   var(N)
20419          ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20420                        O),
20421              O=[_|P],
20422              b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20423                       P),
20424              (   P=[Q|_]
20425              ->  setarg(3, Q, _)
20426              ;   true
20427              )
20428          ;   N=[_, _|P],
20429              setarg(2, N, P),
20430              (   P=[Q|_]
20431              ->  setarg(3, Q, N)
20432              ;   true
20433              )
20434          )
20435        ),
20436        detach_unalias_type___2(M, A),
20437        arg(2, E, R),
20438        setarg(2, E, active),
20439        ( arg(4, E, S),
20440          T is S+1,
20441          setarg(4, E, T)
20442        ),
20443        (   R==not_stored_yet
20444        ->  E=suspension(_, _, _, _, _, U, V),
20445            term_variables(term(U, V), W),
20446            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20447                      X),
20448            Y=[E|X],
20449            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20450                     Y),
20451            (   X=[Z|_]
20452            ->  setarg(5, Z, Y)
20453            ;   true
20454            ),
20455            attach_type_alias___2(W, E)
20456        ;   true
20457        ),
20458        unalias_type(K, G),
20459        (   E=suspension(_, active, _, T, _, _, _)
20460        ->  setarg(2, E, inactive),
20461            type_alias___2__1__0__10(B, C, D, E)
20462        ;   true
20463        )
20464    ;   type_alias___2__1__0__10(B, C, D, E)
20465    ).
20466type_alias___2__1(A, B, C) :-
20467    type_alias___2__2(A, B, C).
20468type_alias___2__2(A, B, C) :-
20469    nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
20470              D),
20471    !,
20472    type_alias___2__2__0__12(D, A, B, C).
20473type_alias___2__2__0__12([], A, B, C) :-
20474    type_alias___2__3(A, B, C).
20475type_alias___2__2__0__12([A|B], C, D, E) :-
20476    (   A=suspension(_, active, _, F, G, H, I),
20477        functor(C, J, K),
20478        functor(H, J, K)
20479    ->  A=suspension(_, _, _, _, _, L, _),
20480        setarg(2, A, removed),
20481        term_variables(L, M),
20482        ( arg(3, A, N),
20483          (   var(N)
20484          ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
20485                        O),
20486              O=[_|P],
20487              b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
20488                       P),
20489              (   P=[Q|_]
20490              ->  setarg(3, Q, _)
20491              ;   true
20492              )
20493          ;   N=[_, _|P],
20494              setarg(2, N, P),
20495              (   P=[Q|_]
20496              ->  setarg(3, Q, N)
20497              ;   true
20498              )
20499          )
20500        ),
20501        detach_ast_static_type_check_var___4(M, A),
20502        arg(2, E, R),
20503        setarg(2, E, active),
20504        ( arg(4, E, S),
20505          T is S+1,
20506          setarg(4, E, T)
20507        ),
20508        (   R==not_stored_yet
20509        ->  E=suspension(_, _, _, _, _, U, V),
20510            term_variables(term(U, V), W),
20511            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20512                      X),
20513            Y=[E|X],
20514            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20515                     Y),
20516            (   X=[Z|_]
20517            ->  setarg(5, Z, Y)
20518            ;   true
20519            ),
20520            attach_type_alias___2(W, E)
20521        ;   true
20522        ),
20523        copy_term_nat(C-D, H-A1),
20524        ast_static_type_check_var(F, G, A1, I),
20525        (   E=suspension(_, active, _, T, _, _, _)
20526        ->  setarg(2, E, inactive),
20527            type_alias___2__2__0__12(B, C, D, E)
20528        ;   true
20529        )
20530    ;   type_alias___2__2__0__12(B, C, D, E)
20531    ).
20532type_alias___2__2(A, B, C) :-
20533    type_alias___2__3(A, B, C).
20534type_alias___2__3(A, B, C) :-
20535    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
20536              D),
20537    !,
20538    type_alias___2__3__0__13(D, A, B, C).
20539type_alias___2__3__0__13([], A, B, C) :-
20540    type_alias___2__4(A, B, C).
20541type_alias___2__3__0__13([A|B], C, D, E) :-
20542    (   A=suspension(_, active, _, _),
20543        F=t(236, E, A),
20544        '$novel_production'(E, F),
20545        '$novel_production'(A, F)
20546    ->  '$extend_history'(E, F),
20547        arg(2, E, G),
20548        setarg(2, E, active),
20549        ( arg(4, E, H),
20550          I is H+1,
20551          setarg(4, E, I)
20552        ),
20553        (   G==not_stored_yet
20554        ->  E=suspension(_, _, _, _, _, J, K),
20555            term_variables(term(J, K), L),
20556            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20557                      M),
20558            N=[E|M],
20559            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20560                     N),
20561            (   M=[O|_]
20562            ->  setarg(5, O, N)
20563            ;   true
20564            ),
20565            attach_type_alias___2(L, E)
20566        ;   true
20567        ),
20568        copy_term_nat(C-D, P-Q),
20569        dynamic_type_check_alias_clause(P, Q, R),
20570        dynamic_type_check_clauses([R]),
20571        (   E=suspension(_, active, _, I, _, _, _)
20572        ->  setarg(2, E, inactive),
20573            type_alias___2__3__0__13(B, C, D, E)
20574        ;   true
20575        )
20576    ;   type_alias___2__3__0__13(B, C, D, E)
20577    ).
20578type_alias___2__3(A, B, C) :-
20579    type_alias___2__4(A, B, C).
20580type_alias___2__4(A, B, C) :-
20581    nb_getval('$chr_store_global_list_chr_translate____atomic_type___1', D),
20582    !,
20583    type_alias___2__4__0__14(D, A, B, C).
20584type_alias___2__4__0__14([], A, B, C) :-
20585    type_alias___2__5(A, B, C).
20586type_alias___2__4__0__14([A|B], C, D, E) :-
20587    (   A=suspension(_, active, _, F),
20588        functor(F, G, H),
20589        functor(C, G, H)
20590    ->  A=suspension(_, _, _, I),
20591        setarg(2, A, removed),
20592        term_variables(I, J),
20593        ( arg(3, A, K),
20594          (   var(K)
20595          ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
20596                        L),
20597              L=[_|M],
20598              b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
20599                       M),
20600              (   M=[N|_]
20601              ->  setarg(3, N, _)
20602              ;   true
20603              )
20604          ;   K=[_, _|M],
20605              setarg(2, K, M),
20606              (   M=[N|_]
20607              ->  setarg(3, N, K)
20608              ;   true
20609              )
20610          )
20611        ),
20612        detach_atomic_type___1(J, A),
20613        arg(2, E, O),
20614        setarg(2, E, active),
20615        ( arg(4, E, P),
20616          Q is P+1,
20617          setarg(4, E, Q)
20618        ),
20619        (   O==not_stored_yet
20620        ->  E=suspension(_, _, _, _, _, R, S),
20621            term_variables(term(R, S), T),
20622            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20623                      U),
20624            V=[E|U],
20625            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20626                     V),
20627            (   U=[W|_]
20628            ->  setarg(5, W, V)
20629            ;   true
20630            ),
20631            attach_type_alias___2(T, E)
20632        ;   true
20633        ),
20634        atomic(D),
20635        copy_term_nat(C-D, F-X),
20636        atomic_type(X),
20637        (   E=suspension(_, active, _, Q, _, _, _)
20638        ->  setarg(2, E, inactive),
20639            type_alias___2__4__0__14(B, C, D, E)
20640        ;   true
20641        )
20642    ;   type_alias___2__4__0__14(B, C, D, E)
20643    ).
20644type_alias___2__4(A, B, C) :-
20645    type_alias___2__5(A, B, C).
20646type_alias___2__5(_, _, A) :-
20647    arg(2, A, B),
20648    setarg(2, A, active),
20649    arg(4, A, C),
20650    D is C+1,
20651    setarg(4, A, D),
20652    (   B==not_stored_yet
20653    ->  A=suspension(_, _, _, _, _, E, F),
20654        term_variables(term(E, F), G),
20655        nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20656                  H),
20657        I=[A|H],
20658        b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20659                 I),
20660        (   H=[J|_]
20661        ->  setarg(5, J, I)
20662        ;   true
20663        ),
20664        attach_type_alias___2(G, A)
20665    ;   true
20666    ).
20667constraint_type(A, B) :-
20668    constraint_type___2__0(A, B, _).
20669constraint_type___2__0(A, B, C) :-
20670    nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
20671              D),
20672    !,
20673    C=suspension(E, not_stored_yet, _, A, B),
20674    'chr gen_id'(E),
20675    constraint_type___2__0__0__2(D, A, B, C).
20676constraint_type___2__0__0__2([], A, B, C) :-
20677    constraint_type___2__1(A, B, C).
20678constraint_type___2__0__0__2([A|B], C, D, E) :-
20679    (   A=suspension(_, active, _, _, _)
20680    ->  arg(2, E, F),
20681        setarg(2, E, active),
20682        (   F==not_stored_yet
20683        ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
20684                      G),
20685            H=[E|G],
20686            b_setval('$chr_store_global_ground_chr_translate____constraint_type___2',
20687                     H),
20688            (   G=[I|_]
20689            ->  setarg(3, I, H)
20690            ;   true
20691            ),
20692            nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
20693                      J),
20694            insert_ht(J, C, E)
20695        ;   true
20696        ),
20697        forall(( member(K, D),
20698                 sub_term(K, L)
20699               ),
20700               (   get_type_definition(L, _)
20701               ->  true
20702               ;   chr_error(type_error,
20703                             'Undefined type "~w" used in type declaration of "~w".\n',
20704                             [L, C])
20705               )),
20706        (   E=suspension(_, active, _, _, _)
20707        ->  setarg(2, E, inactive),
20708            constraint_type___2__0__0__2(B, C, D, E)
20709        ;   true
20710        )
20711    ;   constraint_type___2__0__0__2(B, C, D, E)
20712    ).
20713constraint_type___2__0(A, B, C) :-
20714    C=suspension(D, not_stored_yet, _, A, B),
20715    'chr gen_id'(D),
20716    constraint_type___2__1(A, B, C).
20717constraint_type___2__1(A, _, B) :-
20718    arg(2, B, C),
20719    setarg(2, B, active),
20720    (   C==not_stored_yet
20721    ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
20722                  D),
20723        E=[B|D],
20724        b_setval('$chr_store_global_ground_chr_translate____constraint_type___2',
20725                 E),
20726        (   D=[F|_]
20727        ->  setarg(3, F, E)
20728        ;   true
20729        ),
20730        nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
20731                  G),
20732        insert_ht(G, A, B)
20733    ;   true
20734    ).
20735get_type_definition(A, _) :-
20736    \+ ground(A),
20737    !,
20738    chr_error(type_error,
20739              'Non-ground type in constraint definition: "~w".\n',
20740              [A]).
20741get_type_definition(A, B) :-
20742    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', C),
20743    member(D, C),
20744    D=suspension(_, active, _, _, _, E, F),
20745    functor(E, G, H),
20746    functor(A, G, H),
20747    copy_term_nat((E, F), (I, J)),
20748    I=A,
20749    !,
20750    (   get_type_definition(J, B)
20751    ->  true
20752    ;   chr_error(type_error,
20753                  'Could not find type definition for "~w" (accessed via alias "~w").\n',
20754                  [J, I]),
20755        fail
20756    ).
20757get_type_definition(A, B) :-
20758    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20759              C),
20760    member(D, C),
20761    D=suspension(_, active, _, _, _, E, F),
20762    nonvar(E),
20763    functor(E, G, H),
20764    functor(A, G, H),
20765    copy_term_nat((E, F), (I, J)),
20766    I=A,
20767    !,
20768    B=J.
20769get_type_definition(A, B) :-
20770    atomic_builtin_type(A, _, _),
20771    !,
20772    B=[A].
20773get_type_definition(A, B) :-
20774    compound_builtin_type(A, _, _, _),
20775    !,
20776    B=[A].
20777get_type_definition(_, _) :-
20778    fail.
20779get_constraint_type(A, B) :-
20780    nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
20781              C),
20782    lookup_ht(C, A, D),
20783    member(E, D),
20784    E=suspension(_, active, _, _, F),
20785    !,
20786    B=F.
20787get_constraint_type(_, _) :-
20788    fail.
20789unalias_type(A, B) :-
20790    unalias_type___2__0(A, B, _).
20791unalias_type___2__0(A, B, C) :-
20792    var(A),
20793    !,
20794    (   var(C)
20795    ->  true
20796    ;   C=suspension(_, _, _, D, _),
20797        setarg(2, C, removed),
20798        term_variables(D, E),
20799        arg(3, C, F),
20800        (   var(F)
20801        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20802                      G),
20803            G=[_|H],
20804            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20805                     H),
20806            (   H=[I|_]
20807            ->  setarg(3, I, _)
20808            ;   true
20809            )
20810        ;   F=[_, _|H],
20811            setarg(2, F, H),
20812            (   H=[I|_]
20813            ->  setarg(3, I, F)
20814            ;   true
20815            )
20816        ),
20817        detach_unalias_type___2(E, C)
20818    ),
20819    B=A.
20820unalias_type___2__0(A, B, C) :-
20821    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', D),
20822    member(E, D),
20823    E=suspension(_, active, _, _, _, F, G),
20824    functor(F, H, I),
20825    functor(A, H, I),
20826    copy_term_nat((F, G), (J, K)),
20827    A=J,
20828    !,
20829    (   var(C)
20830    ->  true
20831    ;   C=suspension(_, _, _, L, _),
20832        setarg(2, C, removed),
20833        term_variables(L, M),
20834        arg(3, C, N),
20835        (   var(N)
20836        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20837                      O),
20838            O=[_|P],
20839            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20840                     P),
20841            (   P=[Q|_]
20842            ->  setarg(3, Q, _)
20843            ;   true
20844            )
20845        ;   N=[_, _|P],
20846            setarg(2, N, P),
20847            (   P=[Q|_]
20848            ->  setarg(3, Q, N)
20849            ;   true
20850            )
20851        ),
20852        detach_unalias_type___2(M, C)
20853    ),
20854    unalias_type(K, B).
20855unalias_type___2__0(A, B, C) :-
20856    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20857              D),
20858    member(E, D),
20859    E=suspension(_, active, _, _, _, F, _),
20860    nonvar(F),
20861    functor(F, G, H),
20862    functor(A, G, H),
20863    !,
20864    (   var(C)
20865    ->  true
20866    ;   C=suspension(_, _, _, I, _),
20867        setarg(2, C, removed),
20868        term_variables(I, J),
20869        arg(3, C, K),
20870        (   var(K)
20871        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20872                      L),
20873            L=[_|M],
20874            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20875                     M),
20876            (   M=[N|_]
20877            ->  setarg(3, N, _)
20878            ;   true
20879            )
20880        ;   K=[_, _|M],
20881            setarg(2, K, M),
20882            (   M=[N|_]
20883            ->  setarg(3, N, K)
20884            ;   true
20885            )
20886        ),
20887        detach_unalias_type___2(J, C)
20888    ),
20889    B=A.
20890unalias_type___2__0(A, B, C) :-
20891    atomic_builtin_type(A, _, _),
20892    !,
20893    (   var(C)
20894    ->  true
20895    ;   C=suspension(_, _, _, D, _),
20896        setarg(2, C, removed),
20897        term_variables(D, E),
20898        arg(3, C, F),
20899        (   var(F)
20900        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20901                      G),
20902            G=[_|H],
20903            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20904                     H),
20905            (   H=[I|_]
20906            ->  setarg(3, I, _)
20907            ;   true
20908            )
20909        ;   F=[_, _|H],
20910            setarg(2, F, H),
20911            (   H=[I|_]
20912            ->  setarg(3, I, F)
20913            ;   true
20914            )
20915        ),
20916        detach_unalias_type___2(E, C)
20917    ),
20918    B=A.
20919unalias_type___2__0(A, B, C) :-
20920    compound_builtin_type(A, _, _, _),
20921    !,
20922    (   var(C)
20923    ->  true
20924    ;   C=suspension(_, _, _, D, _),
20925        setarg(2, C, removed),
20926        term_variables(D, E),
20927        arg(3, C, F),
20928        (   var(F)
20929        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20930                      G),
20931            G=[_|H],
20932            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20933                     H),
20934            (   H=[I|_]
20935            ->  setarg(3, I, _)
20936            ;   true
20937            )
20938        ;   F=[_, _|H],
20939            setarg(2, F, H),
20940            (   H=[I|_]
20941            ->  setarg(3, I, F)
20942            ;   true
20943            )
20944        ),
20945        detach_unalias_type___2(E, C)
20946    ),
20947    B=A.
20948unalias_type___2__0(A, B, C) :-
20949    (   var(C)
20950    ->  C=suspension(D, active, _, A, B),
20951        term_variables(A, E),
20952        'chr gen_id'(D),
20953        nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20954                  F),
20955        G=[C|F],
20956        b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20957                 G),
20958        (   F=[H|_]
20959        ->  setarg(3, H, G)
20960        ;   true
20961        ),
20962        attach_unalias_type___2(E, C)
20963    ;   setarg(2, C, active)
20964    ).
20965types_modes_condition([], [], A) :-
20966    !,
20967    A=true.
20968types_modes_condition([A|B], [C|D], E) :-
20969    nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
20970              F),
20971    member(G, F),
20972    G=suspension(_, active, _, _, H, I),
20973    H=J/K,
20974    functor(A, J, K),
20975    !,
20976    A=..[_|L],
20977    E=(M, N, O),
20978    modes_condition(I, L, M),
20979    get_constraint_type_det(J/K, P),
20980    C=..[_|Q],
20981    types_condition(P, L, Q, I, N),
20982    types_modes_condition(B, D, O).
20983types_modes_condition([A|_], _, _) :-
20984    !,
20985    functor(A, B, C),
20986    chr_error(internal, 'Mode information missing for ~w.\n', [B/C]).
20987types_modes_condition(A, B, C) :-
20988    D=suspension(E, active, _, A, B, C),
20989    'chr gen_id'(E),
20990    nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
20991              F),
20992    G=[D|F],
20993    b_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
20994             G),
20995    (   F=[H|_]
20996    ->  setarg(3, H, G)
20997    ;   true
20998    ).
20999static_type_check(A, B) :-
21000    static_type_check___2__0(A, B, _).
21001static_type_check___2__0(A, B, C) :-
21002    nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
21003              D),
21004    !,
21005    C=suspension(E, not_stored_yet, _, A, B),
21006    'chr gen_id'(E),
21007    static_type_check___2__0__0__1(D, A, B, C).
21008static_type_check___2__0__0__1([], A, B, C) :-
21009    static_type_check___2__1(A, B, C).
21010static_type_check___2__0__0__1([A|B], C, D, E) :-
21011    (   A=suspension(_, active, _, F, G)
21012    ->  arg(2, E, H),
21013        setarg(2, E, active),
21014        (   H==not_stored_yet
21015        ->  nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
21016                      I),
21017            J=[E|I],
21018            b_setval('$chr_store_global_ground_chr_translate____static_type_check___2',
21019                     J),
21020            (   I=[K|_]
21021            ->  setarg(3, K, J)
21022            ;   true
21023            )
21024        ;   true
21025        ),
21026        forall(( member(L, G),
21027                 sub_term(L, M)
21028               ),
21029               (   get_type_definition(M, _)
21030               ->  true
21031               ;   chr_error(type_error,
21032                             'Undefined type "~w" used in type declaration of "~w".\n',
21033                             [M, F])
21034               )),
21035        (   E=suspension(_, active, _, _, _)
21036        ->  setarg(2, E, inactive),
21037            static_type_check___2__0__0__1(B, C, D, E)
21038        ;   true
21039        )
21040    ;   static_type_check___2__0__0__1(B, C, D, E)
21041    ).
21042static_type_check___2__0(A, B, C) :-
21043    C=suspension(D, not_stored_yet, _, A, B),
21044    'chr gen_id'(D),
21045    static_type_check___2__1(A, B, C).
21046static_type_check___2__1(A, B, C) :-
21047    (   var(C)
21048    ->  true
21049    ;   arg(2, C, D),
21050        setarg(2, C, removed),
21051        (   D==not_stored_yet
21052        ->  true
21053        ;   arg(3, C, E),
21054            (   var(E)
21055            ->  nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
21056                          F),
21057                F=[_|G],
21058                b_setval('$chr_store_global_ground_chr_translate____static_type_check___2',
21059                         G),
21060                (   G=[H|_]
21061                ->  setarg(3, H, _)
21062                ;   true
21063                )
21064            ;   E=[_, _|G],
21065                setarg(2, E, G),
21066                (   G=[H|_]
21067                ->  setarg(3, H, E)
21068                ;   true
21069                )
21070            )
21071        )
21072    ),
21073    maplist(static_type_check_rule, A, B).
21074ast_static_type_check_term(_, _, A) :-
21075    A==any,
21076    !.
21077ast_static_type_check_term(A, B, C) :-
21078    nonvar(B),
21079    B=var(D, E),
21080    !,
21081    ast_static_type_check_var(D, var(D, E), C, A).
21082ast_static_type_check_term(A, B, C) :-
21083    ast_atomic_builtin_type(C, B, D),
21084    !,
21085    (   call(D)
21086    ->  true
21087    ;   throw(type_error(invalid_functor(A, B, C)))
21088    ).
21089ast_static_type_check_term(A, B, C) :-
21090    ast_compound_builtin_type(C, B, D),
21091    !,
21092    (   call(D)
21093    ->  true
21094    ;   throw(type_error(invalid_functor(A, B, C)))
21095    ).
21096ast_static_type_check_term(A, B, C) :-
21097    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', D),
21098    member(E, D),
21099    E=suspension(_, active, _, _, _, F, G),
21100    functor(C, H, I),
21101    functor(F, H, I),
21102    !,
21103    copy_term_nat(F-G, C-J),
21104    ast_static_type_check_term(A, B, J).
21105ast_static_type_check_term(A, B, C) :-
21106    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
21107              D),
21108    member(E, D),
21109    E=suspension(_, active, _, _, _, F, G),
21110    functor(C, H, I),
21111    functor(F, H, I),
21112    !,
21113    copy_term_nat(F-G, C-J),
21114    ast_functor(B, K, L),
21115    (   member(M, J),
21116        functor(M, K, L)
21117    ->  ast_args(B, N),
21118        M=..[_|O],
21119        maplist(ast_static_type_check_term(A), N, O)
21120    ;   throw(type_error(invalid_functor(A, B, C)))
21121    ).
21122ast_static_type_check_term(A, B, C) :-
21123    chr_error(internal,
21124              'Undefined type ~w while type checking term ~w in ~@.\n',
21125              [C, B, chr_translate:format_src(A)]).
21126ast_static_type_check_var(A, B, C, D) :-
21127    ast_static_type_check_var___4__0(A, B, C, D, _).
21128ast_static_type_check_var___4__0(A, B, C, D, E) :-
21129    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', F),
21130    member(G, F),
21131    G=suspension(_, active, _, _, _, H, I),
21132    functor(H, J, K),
21133    functor(C, J, K),
21134    !,
21135    (   var(E)
21136    ->  true
21137    ;   E=suspension(_, _, _, _, _, L, _),
21138        setarg(2, E, removed),
21139        term_variables(L, M),
21140        arg(3, E, N),
21141        (   var(N)
21142        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21143                      O),
21144            O=[_|P],
21145            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21146                     P),
21147            (   P=[Q|_]
21148            ->  setarg(3, Q, _)
21149            ;   true
21150            )
21151        ;   N=[_, _|P],
21152            setarg(2, N, P),
21153            (   P=[Q|_]
21154            ->  setarg(3, Q, N)
21155            ;   true
21156            )
21157        ),
21158        detach_ast_static_type_check_var___4(M, E)
21159    ),
21160    copy_term_nat(H-I, C-R),
21161    ast_static_type_check_var(A, B, R, D).
21162ast_static_type_check_var___4__0(A, B, C, D, E) :-
21163    atomic_builtin_type(C, _, _),
21164    !,
21165    (   var(E)
21166    ->  true
21167    ;   E=suspension(_, _, _, _, _, F, _),
21168        setarg(2, E, removed),
21169        term_variables(F, G),
21170        arg(3, E, H),
21171        (   var(H)
21172        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21173                      I),
21174            I=[_|J],
21175            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21176                     J),
21177            (   J=[K|_]
21178            ->  setarg(3, K, _)
21179            ;   true
21180            )
21181        ;   H=[_, _|J],
21182            setarg(2, H, J),
21183            (   J=[K|_]
21184            ->  setarg(3, K, H)
21185            ;   true
21186            )
21187        ),
21188        detach_ast_static_type_check_var___4(G, E)
21189    ),
21190    ast_static_atomic_builtin_type_check_var(A, B, C, D).
21191ast_static_type_check_var___4__0(_, _, A, _, B) :-
21192    compound_builtin_type(A, _, _, _),
21193    !,
21194    (   var(B)
21195    ->  true
21196    ;   B=suspension(_, _, _, _, _, C, _),
21197        setarg(2, B, removed),
21198        term_variables(C, D),
21199        arg(3, B, E),
21200        (   var(E)
21201        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21202                      F),
21203            F=[_|G],
21204            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21205                     G),
21206            (   G=[H|_]
21207            ->  setarg(3, H, _)
21208            ;   true
21209            )
21210        ;   E=[_, _|G],
21211            setarg(2, E, G),
21212            (   G=[H|_]
21213            ->  setarg(3, H, E)
21214            ;   true
21215            )
21216        ),
21217        detach_ast_static_type_check_var___4(D, B)
21218    ).
21219ast_static_type_check_var___4__0(A, B, C, D, E) :-
21220    nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21221              F),
21222    member(G, F),
21223    G=suspension(_, active, _, H, I, J, K),
21224    H=A,
21225    (   C\==J,
21226        !,
21227        G=suspension(_, _, _, _, _, L, _),
21228        setarg(2, G, removed),
21229        term_variables(L, M),
21230        arg(3, G, N),
21231        (   var(N)
21232        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21233                      O),
21234            O=[_|P],
21235            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21236                     P),
21237            (   P=[Q|_]
21238            ->  setarg(3, Q, _)
21239            ;   true
21240            )
21241        ;   N=[_, _|P],
21242            setarg(2, N, P),
21243            (   P=[Q|_]
21244            ->  setarg(3, Q, N)
21245            ;   true
21246            )
21247        ),
21248        detach_ast_static_type_check_var___4(M, G),
21249        (   var(E)
21250        ->  true
21251        ;   E=suspension(_, _, _, _, _, R, _),
21252            setarg(2, E, removed),
21253            term_variables(R, S),
21254            arg(3, E, T),
21255            (   var(T)
21256            ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21257                          U),
21258                U=[_|V],
21259                b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21260                         V),
21261                (   V=[W|_]
21262                ->  setarg(3, W, _)
21263                ;   true
21264                )
21265            ;   T=[_, _|V],
21266                setarg(2, T, V),
21267                (   V=[W|_]
21268                ->  setarg(3, W, T)
21269                ;   true
21270                )
21271            ),
21272            detach_ast_static_type_check_var___4(S, E)
21273        ),
21274        throw(type_error(type_clash(B, D, K, C, J)))
21275    ;   J\==C,
21276        !,
21277        G=suspension(_, _, _, _, _, X, _),
21278        setarg(2, G, removed),
21279        term_variables(X, Y),
21280        arg(3, G, Z),
21281        (   var(Z)
21282        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21283                      A1),
21284            A1=[_|B1],
21285            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21286                     B1),
21287            (   B1=[C1|_]
21288            ->  setarg(3, C1, _)
21289            ;   true
21290            )
21291        ;   Z=[_, _|B1],
21292            setarg(2, Z, B1),
21293            (   B1=[C1|_]
21294            ->  setarg(3, C1, Z)
21295            ;   true
21296            )
21297        ),
21298        detach_ast_static_type_check_var___4(Y, G),
21299        (   var(E)
21300        ->  true
21301        ;   E=suspension(_, _, _, _, _, D1, _),
21302            setarg(2, E, removed),
21303            term_variables(D1, E1),
21304            arg(3, E, F1),
21305            (   var(F1)
21306            ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21307                          G1),
21308                G1=[_|H1],
21309                b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21310                         H1),
21311                (   H1=[I1|_]
21312                ->  setarg(3, I1, _)
21313                ;   true
21314                )
21315            ;   F1=[_, _|H1],
21316                setarg(2, F1, H1),
21317                (   H1=[I1|_]
21318                ->  setarg(3, I1, F1)
21319                ;   true
21320                )
21321            ),
21322            detach_ast_static_type_check_var___4(E1, E)
21323        ),
21324        throw(type_error(type_clash(I, K, D, J, C)))
21325    ).
21326ast_static_type_check_var___4__0(A, B, C, D, E) :-
21327    (   var(E)
21328    ->  E=suspension(F, active, _, A, B, C, D),
21329        term_variables(C, G),
21330        'chr gen_id'(F),
21331        nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21332                  H),
21333        I=[E|H],
21334        b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21335                 I),
21336        (   H=[J|_]
21337        ->  setarg(3, J, I)
21338        ;   true
21339        ),
21340        attach_ast_static_type_check_var___4(G, E)
21341    ;   setarg(2, E, active)
21342    ).
21343ast_static_atomic_builtin_type_check_var(_, _, any, _) :-
21344    !.
21345ast_static_atomic_builtin_type_check_var(A, B, C, D) :-
21346    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21347              E),
21348    lookup_ht(E, k(A, C), F),
21349    (   member(G, F),
21350        G=suspension(_, active, _, _, _, _),
21351        !
21352    ;   !,
21353        ast_static_atomic_builtin_type_check_var___4__0__0__3(F,
21354                                                              A,
21355                                                              B,
21356                                                              C,
21357                                                              D)
21358    ).
21359ast_static_atomic_builtin_type_check_var___4__0__0__3([], A, B, C, D) :-
21360    ast_static_atomic_builtin_type_check_var___4__1(A,
21361                                                    B,
21362                                                    C,
21363                                                    D).
21364ast_static_atomic_builtin_type_check_var___4__0__0__3([A|B], C, D, E, F) :-
21365    (   A=suspension(_, active, G, _, H, _),
21366        G==C,
21367        H==E
21368    ->  setarg(2, A, removed),
21369        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21370                    I),
21371          delete_ht(I, C, A)
21372        ),
21373        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21374                  J),
21375        delete_ht(J, k(C, E), A),
21376        ast_static_atomic_builtin_type_check_var___4__0__0__3(B,
21377                                                              C,
21378                                                              D,
21379                                                              E,
21380                                                              F)
21381    ;   ast_static_atomic_builtin_type_check_var___4__0__0__3(B,
21382                                                              C,
21383                                                              D,
21384                                                              E,
21385                                                              F)
21386    ).
21387ast_static_atomic_builtin_type_check_var(A, B, C, D) :-
21388    ast_static_atomic_builtin_type_check_var___4__1(A,
21389                                                    B,
21390                                                    C,
21391                                                    D).
21392ast_static_atomic_builtin_type_check_var___4__1(A, _, number, _) :-
21393    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21394              B),
21395    lookup_ht(B, k(A, float), C),
21396    member(D, C),
21397    D=suspension(_, active, _, _, _, _),
21398    !.
21399ast_static_atomic_builtin_type_check_var___4__1(A, B, float, C) :-
21400    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21401              D),
21402    lookup_ht(D, k(A, number), E),
21403    !,
21404    ast_static_atomic_builtin_type_check_var___4__1__0__5(E,
21405                                                          A,
21406                                                          B,
21407                                                          float,
21408                                                          C).
21409ast_static_atomic_builtin_type_check_var___4__1__0__5([], A, B, C, D) :-
21410    ast_static_atomic_builtin_type_check_var___4__8(A,
21411                                                    B,
21412                                                    C,
21413                                                    D).
21414ast_static_atomic_builtin_type_check_var___4__1__0__5([A|B], C, D, E, F) :-
21415    (   A=suspension(_, active, G, _, H, _),
21416        G==C,
21417        H=number
21418    ->  setarg(2, A, removed),
21419        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21420                    I),
21421          delete_ht(I, C, A)
21422        ),
21423        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21424                  J),
21425        delete_ht(J, k(C, number), A),
21426        ast_static_atomic_builtin_type_check_var___4__1__0__5(B,
21427                                                              C,
21428                                                              D,
21429                                                              E,
21430                                                              F)
21431    ;   ast_static_atomic_builtin_type_check_var___4__1__0__5(B,
21432                                                              C,
21433                                                              D,
21434                                                              E,
21435                                                              F)
21436    ).
21437ast_static_atomic_builtin_type_check_var___4__1(A, B, C, D) :-
21438    ast_static_atomic_builtin_type_check_var___4__2(A,
21439                                                    B,
21440                                                    C,
21441                                                    D).
21442ast_static_atomic_builtin_type_check_var___4__2(A, _, number, _) :-
21443    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21444              B),
21445    lookup_ht(B, k(A, int), C),
21446    member(D, C),
21447    D=suspension(_, active, _, _, _, _),
21448    !.
21449ast_static_atomic_builtin_type_check_var___4__2(A, B, int, C) :-
21450    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21451              D),
21452    lookup_ht(D, k(A, number), E),
21453    !,
21454    ast_static_atomic_builtin_type_check_var___4__2__0__7(E,
21455                                                          A,
21456                                                          B,
21457                                                          int,
21458                                                          C).
21459ast_static_atomic_builtin_type_check_var___4__2__0__7([], A, B, C, D) :-
21460    ast_static_atomic_builtin_type_check_var___4__5(A,
21461                                                    B,
21462                                                    C,
21463                                                    D).
21464ast_static_atomic_builtin_type_check_var___4__2__0__7([A|B], C, D, E, F) :-
21465    (   A=suspension(_, active, G, _, H, _),
21466        G==C,
21467        H=number
21468    ->  setarg(2, A, removed),
21469        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21470                    I),
21471          delete_ht(I, C, A)
21472        ),
21473        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21474                  J),
21475        delete_ht(J, k(C, number), A),
21476        ast_static_atomic_builtin_type_check_var___4__2__0__7(B,
21477                                                              C,
21478                                                              D,
21479                                                              E,
21480                                                              F)
21481    ;   ast_static_atomic_builtin_type_check_var___4__2__0__7(B,
21482                                                              C,
21483                                                              D,
21484                                                              E,
21485                                                              F)
21486    ).
21487ast_static_atomic_builtin_type_check_var___4__2(A, B, C, D) :-
21488    ast_static_atomic_builtin_type_check_var___4__3(A,
21489                                                    B,
21490                                                    C,
21491                                                    D).
21492ast_static_atomic_builtin_type_check_var___4__3(A, _, number, _) :-
21493    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21494              B),
21495    lookup_ht(B, k(A, natural), C),
21496    member(D, C),
21497    D=suspension(_, active, _, _, _, _),
21498    !.
21499ast_static_atomic_builtin_type_check_var___4__3(A, B, natural, C) :-
21500    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21501              D),
21502    lookup_ht(D, k(A, number), E),
21503    !,
21504    ast_static_atomic_builtin_type_check_var___4__3__0__9(E,
21505                                                          A,
21506                                                          B,
21507                                                          natural,
21508                                                          C).
21509ast_static_atomic_builtin_type_check_var___4__3__0__9([], A, B, C, D) :-
21510    ast_static_atomic_builtin_type_check_var___4__5(A,
21511                                                    B,
21512                                                    C,
21513                                                    D).
21514ast_static_atomic_builtin_type_check_var___4__3__0__9([A|B], C, D, E, F) :-
21515    (   A=suspension(_, active, G, _, H, _),
21516        G==C,
21517        H=number
21518    ->  setarg(2, A, removed),
21519        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21520                    I),
21521          delete_ht(I, C, A)
21522        ),
21523        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21524                  J),
21525        delete_ht(J, k(C, number), A),
21526        ast_static_atomic_builtin_type_check_var___4__3__0__9(B,
21527                                                              C,
21528                                                              D,
21529                                                              E,
21530                                                              F)
21531    ;   ast_static_atomic_builtin_type_check_var___4__3__0__9(B,
21532                                                              C,
21533                                                              D,
21534                                                              E,
21535                                                              F)
21536    ).
21537ast_static_atomic_builtin_type_check_var___4__3(A, B, C, D) :-
21538    ast_static_atomic_builtin_type_check_var___4__4(A,
21539                                                    B,
21540                                                    C,
21541                                                    D).
21542ast_static_atomic_builtin_type_check_var___4__4(A, _, number, _) :-
21543    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21544              B),
21545    lookup_ht(B, k(A, dense_int), C),
21546    member(D, C),
21547    D=suspension(_, active, _, _, _, _),
21548    !.
21549ast_static_atomic_builtin_type_check_var___4__4(A, B, dense_int, C) :-
21550    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21551              D),
21552    lookup_ht(D, k(A, number), E),
21553    !,
21554    ast_static_atomic_builtin_type_check_var___4__4__0__11(E,
21555                                                           A,
21556                                                           B,
21557                                                           dense_int,
21558                                                           C).
21559ast_static_atomic_builtin_type_check_var___4__4__0__11([], A, B, C, D) :-
21560    ast_static_atomic_builtin_type_check_var___4__6(A,
21561                                                    B,
21562                                                    C,
21563                                                    D).
21564ast_static_atomic_builtin_type_check_var___4__4__0__11([A|B], C, D, E, F) :-
21565    (   A=suspension(_, active, G, _, H, _),
21566        G==C,
21567        H=number
21568    ->  setarg(2, A, removed),
21569        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21570                    I),
21571          delete_ht(I, C, A)
21572        ),
21573        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21574                  J),
21575        delete_ht(J, k(C, number), A),
21576        ast_static_atomic_builtin_type_check_var___4__4__0__11(B,
21577                                                               C,
21578                                                               D,
21579                                                               E,
21580                                                               F)
21581    ;   ast_static_atomic_builtin_type_check_var___4__4__0__11(B,
21582                                                               C,
21583                                                               D,
21584                                                               E,
21585                                                               F)
21586    ).
21587ast_static_atomic_builtin_type_check_var___4__4(A, B, C, D) :-
21588    ast_static_atomic_builtin_type_check_var___4__5(A,
21589                                                    B,
21590                                                    C,
21591                                                    D).
21592ast_static_atomic_builtin_type_check_var___4__5(A, _, int, _) :-
21593    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21594              B),
21595    lookup_ht(B, k(A, natural), C),
21596    member(D, C),
21597    D=suspension(_, active, _, _, _, _),
21598    !.
21599ast_static_atomic_builtin_type_check_var___4__5(A, B, natural, C) :-
21600    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21601              D),
21602    lookup_ht(D, k(A, int), E),
21603    !,
21604    ast_static_atomic_builtin_type_check_var___4__5__0__13(E,
21605                                                           A,
21606                                                           B,
21607                                                           natural,
21608                                                           C).
21609ast_static_atomic_builtin_type_check_var___4__5__0__13([], A, B, C, D) :-
21610    ast_static_atomic_builtin_type_check_var___4__7(A,
21611                                                    B,
21612                                                    C,
21613                                                    D).
21614ast_static_atomic_builtin_type_check_var___4__5__0__13([A|B], C, D, E, F) :-
21615    (   A=suspension(_, active, G, _, H, _),
21616        G==C,
21617        H=int
21618    ->  setarg(2, A, removed),
21619        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21620                    I),
21621          delete_ht(I, C, A)
21622        ),
21623        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21624                  J),
21625        delete_ht(J, k(C, int), A),
21626        ast_static_atomic_builtin_type_check_var___4__5__0__13(B,
21627                                                               C,
21628                                                               D,
21629                                                               E,
21630                                                               F)
21631    ;   ast_static_atomic_builtin_type_check_var___4__5__0__13(B,
21632                                                               C,
21633                                                               D,
21634                                                               E,
21635                                                               F)
21636    ).
21637ast_static_atomic_builtin_type_check_var___4__5(A, B, C, D) :-
21638    ast_static_atomic_builtin_type_check_var___4__6(A,
21639                                                    B,
21640                                                    C,
21641                                                    D).
21642ast_static_atomic_builtin_type_check_var___4__6(A, _, int, _) :-
21643    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21644              B),
21645    lookup_ht(B, k(A, dense_int), C),
21646    member(D, C),
21647    D=suspension(_, active, _, _, _, _),
21648    !.
21649ast_static_atomic_builtin_type_check_var___4__6(A, B, dense_int, C) :-
21650    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21651              D),
21652    lookup_ht(D, k(A, int), E),
21653    !,
21654    ast_static_atomic_builtin_type_check_var___4__6__0__15(E,
21655                                                           A,
21656                                                           B,
21657                                                           dense_int,
21658                                                           C).
21659ast_static_atomic_builtin_type_check_var___4__6__0__15([], A, B, C, D) :-
21660    ast_static_atomic_builtin_type_check_var___4__7(A,
21661                                                    B,
21662                                                    C,
21663                                                    D).
21664ast_static_atomic_builtin_type_check_var___4__6__0__15([A|B], C, D, E, F) :-
21665    (   A=suspension(_, active, G, _, H, _),
21666        G==C,
21667        H=int
21668    ->  setarg(2, A, removed),
21669        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21670                    I),
21671          delete_ht(I, C, A)
21672        ),
21673        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21674                  J),
21675        delete_ht(J, k(C, int), A),
21676        ast_static_atomic_builtin_type_check_var___4__6__0__15(B,
21677                                                               C,
21678                                                               D,
21679                                                               E,
21680                                                               F)
21681    ;   ast_static_atomic_builtin_type_check_var___4__6__0__15(B,
21682                                                               C,
21683                                                               D,
21684                                                               E,
21685                                                               F)
21686    ).
21687ast_static_atomic_builtin_type_check_var___4__6(A, B, C, D) :-
21688    ast_static_atomic_builtin_type_check_var___4__7(A,
21689                                                    B,
21690                                                    C,
21691                                                    D).
21692ast_static_atomic_builtin_type_check_var___4__7(A, _, natural, _) :-
21693    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21694              B),
21695    lookup_ht(B, k(A, dense_int), C),
21696    member(D, C),
21697    D=suspension(_, active, _, _, _, _),
21698    !.
21699ast_static_atomic_builtin_type_check_var___4__7(A, B, dense_int, C) :-
21700    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21701              D),
21702    lookup_ht(D, k(A, natural), E),
21703    !,
21704    ast_static_atomic_builtin_type_check_var___4__7__0__17(E,
21705                                                           A,
21706                                                           B,
21707                                                           dense_int,
21708                                                           C).
21709ast_static_atomic_builtin_type_check_var___4__7__0__17([], A, B, C, D) :-
21710    ast_static_atomic_builtin_type_check_var___4__8(A,
21711                                                    B,
21712                                                    C,
21713                                                    D).
21714ast_static_atomic_builtin_type_check_var___4__7__0__17([A|B], C, D, E, F) :-
21715    (   A=suspension(_, active, G, _, H, _),
21716        G==C,
21717        H=natural
21718    ->  setarg(2, A, removed),
21719        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21720                    I),
21721          delete_ht(I, C, A)
21722        ),
21723        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21724                  J),
21725        delete_ht(J, k(C, natural), A),
21726        ast_static_atomic_builtin_type_check_var___4__7__0__17(B,
21727                                                               C,
21728                                                               D,
21729                                                               E,
21730                                                               F)
21731    ;   ast_static_atomic_builtin_type_check_var___4__7__0__17(B,
21732                                                               C,
21733                                                               D,
21734                                                               E,
21735                                                               F)
21736    ).
21737ast_static_atomic_builtin_type_check_var___4__7(A, B, C, D) :-
21738    ast_static_atomic_builtin_type_check_var___4__8(A,
21739                                                    B,
21740                                                    C,
21741                                                    D).
21742ast_static_atomic_builtin_type_check_var___4__8(A, B, C, D) :-
21743    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21744              E),
21745    lookup_ht(E, A, F),
21746    member(G, F),
21747    G=suspension(_, active, _, _, H, I),
21748    !,
21749    setarg(2, G, removed),
21750    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21751              J),
21752    delete_ht(J, A, G),
21753    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21754              K),
21755    delete_ht(K, k(A, H), G),
21756    throw(type_error(type_clash(B, D, I, C, H))).
21757ast_static_atomic_builtin_type_check_var___4__8(A, B, C, D) :-
21758    E=suspension(F, active, A, B, C, D),
21759    'chr gen_id'(F),
21760    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21761              G),
21762    insert_ht(G, A, E),
21763    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21764              H),
21765    insert_ht(H, k(A, C), E).
21766dynamic_type_check :-
21767    dynamic_type_check___0__0(_).
21768dynamic_type_check___0__0(A) :-
21769    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
21770              B),
21771    !,
21772    A=suspension(C, not_stored_yet, t, _),
21773    'chr gen_id'(C),
21774    dynamic_type_check___0__0__0__1(B, A).
21775dynamic_type_check___0__0__0__1([], A) :-
21776    dynamic_type_check___0__1(A).
21777dynamic_type_check___0__0__0__1([A|B], C) :-
21778    (   A=suspension(_, active, _, _, _, D, E),
21779        F=t(235, A, C),
21780        '$novel_production'(A, F),
21781        '$novel_production'(C, F)
21782    ->  '$extend_history'(C, F),
21783        arg(2, C, G),
21784        setarg(2, C, active),
21785        (   G==not_stored_yet
21786        ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21787                      H),
21788            I=[C|H],
21789            b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21790                     I),
21791            (   H=[J|_]
21792            ->  setarg(4, J, I)
21793            ;   true
21794            )
21795        ;   true
21796        ),
21797        copy_term_nat(D-E, K-L),
21798        maplist(dynamic_type_check_clause(K), L, M),
21799        dynamic_type_check_clauses(M),
21800        (   C=suspension(_, active, _, _)
21801        ->  setarg(2, C, inactive),
21802            dynamic_type_check___0__0__0__1(B, C)
21803        ;   true
21804        )
21805    ;   dynamic_type_check___0__0__0__1(B, C)
21806    ).
21807dynamic_type_check___0__0(A) :-
21808    A=suspension(B, not_stored_yet, t, _),
21809    'chr gen_id'(B),
21810    dynamic_type_check___0__1(A).
21811dynamic_type_check___0__1(A) :-
21812    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', B),
21813    !,
21814    dynamic_type_check___0__1__0__2(B, A).
21815dynamic_type_check___0__1__0__2([], A) :-
21816    dynamic_type_check___0__2(A).
21817dynamic_type_check___0__1__0__2([A|B], C) :-
21818    (   A=suspension(_, active, _, _, _, D, E),
21819        F=t(236, A, C),
21820        '$novel_production'(A, F),
21821        '$novel_production'(C, F)
21822    ->  '$extend_history'(C, F),
21823        arg(2, C, G),
21824        setarg(2, C, active),
21825        (   G==not_stored_yet
21826        ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21827                      H),
21828            I=[C|H],
21829            b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21830                     I),
21831            (   H=[J|_]
21832            ->  setarg(4, J, I)
21833            ;   true
21834            )
21835        ;   true
21836        ),
21837        copy_term_nat(D-E, K-L),
21838        dynamic_type_check_alias_clause(K, L, M),
21839        dynamic_type_check_clauses([M]),
21840        (   C=suspension(_, active, _, _)
21841        ->  setarg(2, C, inactive),
21842            dynamic_type_check___0__1__0__2(B, C)
21843        ;   true
21844        )
21845    ;   dynamic_type_check___0__1__0__2(B, C)
21846    ).
21847dynamic_type_check___0__1(A) :-
21848    dynamic_type_check___0__2(A).
21849dynamic_type_check___0__2(A) :-
21850    (   var(A)
21851    ->  true
21852    ;   arg(2, A, B),
21853        setarg(2, A, removed),
21854        (   B==not_stored_yet
21855        ->  true
21856        ;   arg(4, A, C),
21857            (   var(C)
21858            ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21859                          D),
21860                D=[_|E],
21861                b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21862                         E),
21863                (   E=[F|_]
21864                ->  setarg(4, F, _)
21865                ;   true
21866                )
21867            ;   C=[_, _|E],
21868                setarg(2, C, E),
21869                (   E=[F|_]
21870                ->  setarg(4, F, C)
21871                ;   true
21872                )
21873            )
21874        )
21875    ),
21876    findall(('$dynamic_type_check'(G, H):-I),
21877            (   atomic_builtin_type(G, H, I)
21878            ;   compound_builtin_type(G, H, I, _)
21879            ),
21880            J),
21881    dynamic_type_check_clauses(J).
21882dynamic_type_check_clauses(A) :-
21883    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21884              B),
21885    member(C, B),
21886    C=suspension(_, active, _, D),
21887    !,
21888    setarg(2, C, removed),
21889    arg(3, C, E),
21890    (   var(E)
21891    ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21892                  F),
21893        F=[_|G],
21894        b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21895                 G),
21896        (   G=[H|_]
21897        ->  setarg(3, H, _)
21898        ;   true
21899        )
21900    ;   E=[_, _|G],
21901        setarg(2, E, G),
21902        (   G=[H|_]
21903        ->  setarg(3, H, E)
21904        ;   true
21905        )
21906    ),
21907    append(A, D, I),
21908    dynamic_type_check_clauses(I).
21909dynamic_type_check_clauses(A) :-
21910    B=suspension(C, active, _, A),
21911    'chr gen_id'(C),
21912    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21913              D),
21914    E=[B|D],
21915    b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21916             E),
21917    (   D=[F|_]
21918    ->  setarg(3, F, E)
21919    ;   true
21920    ).
21921get_dynamic_type_check_clauses(A) :-
21922    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21923              B),
21924    member(C, B),
21925    C=suspension(_, active, _, D),
21926    !,
21927    setarg(2, C, removed),
21928    arg(3, C, E),
21929    (   var(E)
21930    ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21931                  F),
21932        F=[_|G],
21933        b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21934                 G),
21935        (   G=[H|_]
21936        ->  setarg(3, H, _)
21937        ;   true
21938        )
21939    ;   E=[_, _|G],
21940        setarg(2, E, G),
21941        (   G=[H|_]
21942        ->  setarg(3, H, E)
21943        ;   true
21944        )
21945    ),
21946    A=D.
21947get_dynamic_type_check_clauses([]).
21948atomic_type(A) :-
21949    atomic_type___1__0(A, _).
21950atomic_type___1__0(A, B) :-
21951    atomic_builtin_type(A, _, _),
21952    !,
21953    (   var(B)
21954    ->  true
21955    ;   B=suspension(_, _, _, C),
21956        setarg(2, B, removed),
21957        term_variables(C, D),
21958        arg(3, B, E),
21959        (   var(E)
21960        ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
21961                      F),
21962            F=[_|G],
21963            b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
21964                     G),
21965            (   G=[H|_]
21966            ->  setarg(3, H, _)
21967            ;   true
21968            )
21969        ;   E=[_, _|G],
21970            setarg(2, E, G),
21971            (   G=[H|_]
21972            ->  setarg(3, H, E)
21973            ;   true
21974            )
21975        ),
21976        detach_atomic_type___1(D, B)
21977    ),
21978    A\==any.
21979atomic_type___1__0(A, B) :-
21980    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
21981              C),
21982    member(D, C),
21983    D=suspension(_, active, _, _, _, E, F),
21984    functor(A, G, H),
21985    functor(E, G, H),
21986    !,
21987    (   var(B)
21988    ->  true
21989    ;   B=suspension(_, _, _, I),
21990        setarg(2, B, removed),
21991        term_variables(I, J),
21992        arg(3, B, K),
21993        (   var(K)
21994        ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
21995                      L),
21996            L=[_|M],
21997            b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
21998                     M),
21999            (   M=[N|_]
22000            ->  setarg(3, N, _)
22001            ;   true
22002            )
22003        ;   K=[_, _|M],
22004            setarg(2, K, M),
22005            (   M=[N|_]
22006            ->  setarg(3, N, K)
22007            ;   true
22008            )
22009        ),
22010        detach_atomic_type___1(J, B)
22011    ),
22012    maplist(atomic, F).
22013atomic_type___1__0(A, B) :-
22014    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', C),
22015    member(D, C),
22016    D=suspension(_, active, _, _, _, E, F),
22017    functor(A, G, H),
22018    functor(E, G, H),
22019    !,
22020    (   var(B)
22021    ->  true
22022    ;   B=suspension(_, _, _, I),
22023        setarg(2, B, removed),
22024        term_variables(I, J),
22025        arg(3, B, K),
22026        (   var(K)
22027        ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
22028                      L),
22029            L=[_|M],
22030            b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
22031                     M),
22032            (   M=[N|_]
22033            ->  setarg(3, N, _)
22034            ;   true
22035            )
22036        ;   K=[_, _|M],
22037            setarg(2, K, M),
22038            (   M=[N|_]
22039            ->  setarg(3, N, K)
22040            ;   true
22041            )
22042        ),
22043        detach_atomic_type___1(J, B)
22044    ),
22045    atomic(F),
22046    copy_term_nat(E-F, A-O),
22047    atomic_type(O).
22048atomic_type___1__0(A, B) :-
22049    (   var(B)
22050    ->  B=suspension(C, active, _, A),
22051        term_variables(A, D),
22052        'chr gen_id'(C),
22053        nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
22054                  E),
22055        F=[B|E],
22056        b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
22057                 F),
22058        (   E=[G|_]
22059        ->  setarg(3, G, F)
22060        ;   true
22061        ),
22062        attach_atomic_type___1(D, B)
22063    ;   setarg(2, B, active)
22064    ).
22065enumerated_atomic_type(A, _) :-
22066    atomic_builtin_type(A, _, _),
22067    !,
22068    fail.
22069enumerated_atomic_type(A, B) :-
22070    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
22071              C),
22072    member(D, C),
22073    D=suspension(_, active, _, _, _, E, F),
22074    functor(A, G, H),
22075    functor(E, G, H),
22076    !,
22077    maplist(atomic, F),
22078    B=F.
22079enumerated_atomic_type(A, B) :-
22080    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', C),
22081    member(D, C),
22082    D=suspension(_, active, _, _, _, E, F),
22083    functor(A, G, H),
22084    functor(E, G, H),
22085    !,
22086    atomic(F),
22087    copy_term_nat(E-F, A-I),
22088    enumerated_atomic_type(I, B).
22089enumerated_atomic_type(_, _) :-
22090    fail.
22091stored(A, B, yes) :-
22092    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
22093              C),
22094    lookup_ht(C, k(A, B), D),
22095    member(E, D),
22096    E=suspension(_, active, _, _, _, _, F, G, _),
22097    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', H),
22098    lookup_ht(H, k(F, G), I),
22099    member(J, I),
22100    J=suspension(_, active, _, _, _),
22101    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22102              K),
22103    lookup_ht(K, A, L),
22104    member(M, L),
22105    M=suspension(_, active, _, _, N, O),
22106    B<N,
22107    !,
22108    setarg(2, M, removed),
22109    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22110              P),
22111    delete_ht(P, k(A, O), M),
22112    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22113              Q),
22114    delete_ht(Q, A, M),
22115    R is O-1,
22116    stored(A, B, maybe),
22117    stored_complete(A, N, R).
22118stored(A, B, yes) :-
22119    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22120              C),
22121    lookup_ht(C, A, D),
22122    member(E, D),
22123    E=suspension(_, active, _, _, F, G),
22124    B<F,
22125    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
22126              H),
22127    lookup_ht(H, k(A, B), I),
22128    member(J, I),
22129    J=suspension(_, active, _, _),
22130    !,
22131    setarg(2, E, removed),
22132    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22133              K),
22134    delete_ht(K, k(A, G), E),
22135    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22136              L),
22137    delete_ht(L, A, E),
22138    M is G-1,
22139    stored(A, B, maybe),
22140    stored_complete(A, F, M).
22141stored(A, B, C) :-
22142    D=suspension(E, active, A, B, C),
22143    'chr gen_id'(E),
22144    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', F),
22145    insert_ht(F, k(A, C), D),
22146    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', G),
22147    insert_ht(G, k(A, B, C), D).
22148stored_completing(A, B, C) :-
22149    ground(A),
22150    ground(B),
22151    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', D),
22152    (   (   lookup_ht(D, k(A, B, yes), E),
22153            member(F, E),
22154            F=suspension(_, active, _, _, _),
22155            !,
22156            G is B+1,
22157            H is C+1,
22158            stored_completing(A, G, H)
22159        ;   lookup_ht(D, k(A, B, maybe), I),
22160            member(J, I),
22161            J=suspension(_, active, _, _, _),
22162            !,
22163            K is B+1,
22164            stored_completing(A, K, C)
22165        )
22166    ;   lookup_ht(D, k(A, B, no), L),
22167        member(M, L),
22168        M=suspension(_, active, _, _, _),
22169        !,
22170        stored_complete(A, B, C)
22171    ).
22172stored_completing(A, B, C) :-
22173    stored_complete(A, B, C).
22174stored_complete(A, B, C) :-
22175    stored_complete___3__0(A, B, C, _).
22176stored_complete___3__0(A, B, C, _) :-
22177    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', D),
22178    lookup_ht(D, A, E),
22179    member(F, E),
22180    F=suspension(_, active, _, _, _, G, H, I, _),
22181    G<B,
22182    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', J),
22183    lookup_ht(J, k(H, I), K),
22184    member(L, K),
22185    L=suspension(_, active, _, _, _),
22186    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', M),
22187    lookup_ht(M, k(A, G, yes), N),
22188    member(O, N),
22189    O=suspension(_, active, _, _, _),
22190    !,
22191    setarg(2, O, removed),
22192    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', P),
22193    delete_ht(P, k(A, yes), O),
22194    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', Q),
22195    delete_ht(Q, k(A, G, yes), O),
22196    R is C-1,
22197    stored(A, G, maybe),
22198    stored_complete(A, B, R).
22199stored_complete___3__0(A, B, C, _) :-
22200    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', D),
22201    lookup_ht(D, k(A, yes), E),
22202    member(F, E),
22203    F=suspension(_, active, _, G, _),
22204    G<B,
22205    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
22206              H),
22207    lookup_ht(H, k(A, G), I),
22208    member(J, I),
22209    J=suspension(_, active, _, _),
22210    !,
22211    setarg(2, F, removed),
22212    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', K),
22213    delete_ht(K, k(A, yes), F),
22214    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', L),
22215    delete_ht(L, k(A, G, yes), F),
22216    M is C-1,
22217    stored(A, G, maybe),
22218    stored_complete(A, B, M).
22219stored_complete___3__0(A, B, 0, C) :-
22220    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22221              D),
22222    lookup_ht(D, A, E),
22223    !,
22224    C=suspension(F, not_stored_yet, t, A, B, 0),
22225    'chr gen_id'(F),
22226    stored_complete___3__0__0__3(E, A, B, 0, C).
22227stored_complete___3__0__0__3([], A, B, C, D) :-
22228    stored_complete___3__1(A, B, C, D).
22229stored_complete___3__0__0__3([A|B], C, D, E, F) :-
22230    (   A=suspension(_, active, _, G, H),
22231        G==C,
22232        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
22233                  I),
22234        lookup_ht(I, C, J)
22235    ->  stored_complete___3__0__1__3(J,
22236                                     H,
22237                                     A,
22238                                     B,
22239                                     C,
22240                                     D,
22241                                     E,
22242                                     F)
22243    ;   stored_complete___3__0__0__3(B, C, D, E, F)
22244    ).
22245stored_complete___3__0__1__3([], _, _, A, B, C, D, E) :-
22246    stored_complete___3__0__0__3(A, B, C, D, E).
22247stored_complete___3__0__1__3([A|B], C, D, E, F, G, H, I) :-
22248    (   A=suspension(_, active, _, _, J, _, K, _, _),
22249        J==F,
22250        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
22251                  L),
22252        lookup_ht(L, K, M)
22253    ->  stored_complete___3__0__2__3(M,
22254                                     K,
22255                                     A,
22256                                     B,
22257                                     C,
22258                                     D,
22259                                     E,
22260                                     F,
22261                                     G,
22262                                     H,
22263                                     I)
22264    ;   stored_complete___3__0__1__3(B,
22265                                     C,
22266                                     D,
22267                                     E,
22268                                     F,
22269                                     G,
22270                                     H,
22271                                     I)
22272    ).
22273stored_complete___3__0__2__3([], _, _, A, B, C, D, E, F, G, H) :-
22274    stored_complete___3__0__1__3(A,
22275                                 B,
22276                                 C,
22277                                 D,
22278                                 E,
22279                                 F,
22280                                 G,
22281                                 H).
22282stored_complete___3__0__2__3([A|B], C, D, E, F, G, H, I, J, K, L) :-
22283    (   A=suspension(_, active, _, _, _, _, M, N, _),
22284        A\==D,
22285        M==C,
22286        O=t(250, A, D, L, G),
22287        '$novel_production'(A, O),
22288        '$novel_production'(D, O),
22289        '$novel_production'(L, O),
22290        '$novel_production'(G, O),
22291        J=<F
22292    ->  '$extend_history'(L, O),
22293        arg(2, L, P),
22294        setarg(2, L, active),
22295        (   P==not_stored_yet
22296        ->  nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22297                      Q),
22298            insert_ht(Q, k(I, K), L),
22299            nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22300                      R),
22301            insert_ht(R, I, L)
22302        ;   true
22303        ),
22304        passive(C, N),
22305        (   L=suspension(_, active, _, _, _, _)
22306        ->  setarg(2, L, inactive),
22307            stored_complete___3__0__2__3(B,
22308                                         C,
22309                                         D,
22310                                         E,
22311                                         F,
22312                                         G,
22313                                         H,
22314                                         I,
22315                                         J,
22316                                         K,
22317                                         L)
22318        ;   true
22319        )
22320    ;   stored_complete___3__0__2__3(B,
22321                                     C,
22322                                     D,
22323                                     E,
22324                                     F,
22325                                     G,
22326                                     H,
22327                                     I,
22328                                     J,
22329                                     K,
22330                                     L)
22331    ).
22332stored_complete___3__0(A, B, C, D) :-
22333    D=suspension(E, not_stored_yet, t, A, B, C),
22334    'chr gen_id'(E),
22335    stored_complete___3__1(A, B, C, D).
22336stored_complete___3__1(A, B, C, D) :-
22337    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', E),
22338    lookup_ht(E, A, F),
22339    !,
22340    stored_complete___3__1__0__4(F, A, B, C, D).
22341stored_complete___3__1__0__4([], A, B, C, D) :-
22342    stored_complete___3__2(A, B, C, D).
22343stored_complete___3__1__0__4([A|B], C, D, E, F) :-
22344    (   A=suspension(_, active, _, _, G, H, I, J, _),
22345        G==C,
22346        K=t(259, F, A),
22347        '$novel_production'(F, K),
22348        '$novel_production'(A, K),
22349        H>D
22350    ->  '$extend_history'(F, K),
22351        arg(2, F, L),
22352        setarg(2, F, active),
22353        (   L==not_stored_yet
22354        ->  nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22355                      M),
22356            insert_ht(M, k(C, E), F),
22357            nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22358                      N),
22359            insert_ht(N, C, F)
22360        ;   true
22361        ),
22362        passive(I, J),
22363        (   F=suspension(_, active, _, _, _, _)
22364        ->  setarg(2, F, inactive),
22365            stored_complete___3__1__0__4(B,
22366                                         C,
22367                                         D,
22368                                         E,
22369                                         F)
22370        ;   true
22371        )
22372    ;   stored_complete___3__1__0__4(B, C, D, E, F)
22373    ).
22374stored_complete___3__1(A, B, C, D) :-
22375    stored_complete___3__2(A, B, C, D).
22376stored_complete___3__2(A, _, B, C) :-
22377    arg(2, C, D),
22378    setarg(2, C, active),
22379    (   D==not_stored_yet
22380    ->  nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22381                  E),
22382        insert_ht(E, k(A, B), C),
22383        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22384                  F),
22385        insert_ht(F, A, C)
22386    ;   true
22387    ).
22388is_stored(A) :-
22389    ground(A),
22390    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22391              B),
22392    lookup_ht(B, A, C),
22393    member(D, C),
22394    D=suspension(_, active, _, _, E),
22395    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22396              F),
22397    lookup_ht(F, k(A, 0), G),
22398    member(H, G),
22399    H=suspension(_, active, _, _, I, _),
22400    I=<E,
22401    !,
22402    fail.
22403is_stored(_).
22404is_finally_stored(A) :-
22405    ground(A),
22406    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22407              B),
22408    lookup_ht(B, A, C),
22409    member(D, C),
22410    D=suspension(_, active, _, _, E),
22411    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22412              F),
22413    lookup_ht(F, A, G),
22414    member(H, G),
22415    H=suspension(_, active, _, _, I, _),
22416    I=<E,
22417    !,
22418    fail.
22419is_finally_stored(_).
22420check_all_passive(A, [B|C]) :-
22421    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', D),
22422    lookup_ht(D, k(A, B), E),
22423    member(F, E),
22424    F=suspension(_, active, _, _, _),
22425    !,
22426    check_all_passive(A, C).
22427check_all_passive(A, []) :-
22428    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', B),
22429    lookup_ht(B, A, C),
22430    member(D, C),
22431    D=suspension(_, active, _, _, _, E),
22432    !,
22433    chr_warning(weird_program,
22434                'All heads passive in ~@.\n\tThis rule never fires. Please check your program.\n',
22435                [format_rule(E)]).
22436check_all_passive(A, B) :-
22437    C=suspension(D, active, A, B),
22438    'chr gen_id'(D),
22439    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
22440              E),
22441    insert_ht(E, k(A, B), C),
22442    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
22443              F),
22444    insert_ht(F, A, C).
22445constraints_code1([], A, B) :-
22446    !,
22447    A=B.
22448constraints_code1([A|B], C, D) :-
22449    !,
22450    constraint_code(A, C, E),
22451    constraints_code1(B, E, D).
22452constraints_code1(A, B, C) :-
22453    D=suspension(E, active, _, A, B, C),
22454    'chr gen_id'(E),
22455    nb_getval('$chr_store_global_ground_chr_translate____constraints_code1___3',
22456              F),
22457    G=[D|F],
22458    b_setval('$chr_store_global_ground_chr_translate____constraints_code1___3',
22459             G),
22460    (   F=[H|_]
22461    ->  setarg(3, H, G)
22462    ;   true
22463    ).
22464constraint_code(A, B, C) :-
22465    (   (   chr_pp_flag(debugable, on)
22466        ;   is_stored(A),
22467            (   has_active_occurrence(A)
22468            ;   chr_pp_flag(late_allocation, off)
22469            ),
22470            (   may_trigger(A)
22471            ;   get_allocation_occurrence(A, D),
22472                get_max_occurrence(A, E),
22473                E>=D
22474            )
22475        )
22476    ->  constraint_prelude(A, F),
22477        add_dummy_location(F, G),
22478        B=[G|H]
22479    ;   B=H
22480    ),
22481    I=[0],
22482    occurrences_code(A, 1, I, J, H, K),
22483    gen_cond_attach_clause(A, J, K, C).
22484has_active_occurrence(A) :-
22485    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
22486              B),
22487    lookup_ht(B, A, C),
22488    member(D, C),
22489    D=suspension(_, active, _),
22490    !.
22491has_active_occurrence(A) :-
22492    has_active_occurrence(A, 1),
22493    memo_has_active_occurrence(A).
22494has_active_occurrence(A, B) :-
22495    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22496              C),
22497    lookup_ht(C, A, D),
22498    member(E, D),
22499    E=suspension(_, active, _, _, F),
22500    B>F,
22501    !,
22502    fail.
22503has_active_occurrence(A, B) :-
22504    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
22505              C),
22506    lookup_ht(C, k(A, B), D),
22507    member(E, D),
22508    E=suspension(_, active, _, _, _, _, F, G, _),
22509    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', H),
22510    lookup_ht(H, k(F, G), I),
22511    member(J, I),
22512    J=suspension(_, active, _, _, _),
22513    !,
22514    K is B+1,
22515    has_active_occurrence(A, K).
22516has_active_occurrence(_, _).
22517memo_has_active_occurrence(A) :-
22518    B=suspension(C, active, A),
22519    'chr gen_id'(C),
22520    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
22521              D),
22522    insert_ht(D, A, B).
22523use_auxiliary_predicate(A) :-
22524    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
22525              B),
22526    lookup_ht(B, A, C),
22527    member(D, C),
22528    D=suspension(_, active, _),
22529    !.
22530use_auxiliary_predicate(A) :-
22531    B=suspension(C, active, A),
22532    'chr gen_id'(C),
22533    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
22534              D),
22535    insert_ht(D, A, B).
22536use_auxiliary_predicate(A, B) :-
22537    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
22538              C),
22539    lookup_ht(C, k(A, B), D),
22540    member(E, D),
22541    E=suspension(_, active, _, _),
22542    !.
22543use_auxiliary_predicate(A, B) :-
22544    C=suspension(D, active, A, B),
22545    'chr gen_id'(D),
22546    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
22547              E),
22548    insert_ht(E, A, C),
22549    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
22550              F),
22551    insert_ht(F, k(A, B), C).
22552is_used_auxiliary_predicate(A) :-
22553    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
22554              B),
22555    lookup_ht(B, A, C),
22556    member(D, C),
22557    D=suspension(_, active, _),
22558    !.
22559is_used_auxiliary_predicate(A) :-
22560    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
22561              B),
22562    lookup_ht(B, A, C),
22563    member(D, C),
22564    D=suspension(_, active, _, _),
22565    !.
22566is_used_auxiliary_predicate(_) :-
22567    fail.
22568is_used_auxiliary_predicate(A, _) :-
22569    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
22570              B),
22571    lookup_ht(B, A, C),
22572    member(D, C),
22573    D=suspension(_, active, _),
22574    !.
22575is_used_auxiliary_predicate(A, B) :-
22576    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
22577              C),
22578    lookup_ht(C, k(A, B), D),
22579    member(E, D),
22580    E=suspension(_, active, _, _),
22581    !.
22582is_used_auxiliary_predicate(_, _) :-
22583    fail.
22584use_auxiliary_module(A) :-
22585    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
22586              B),
22587    lookup_ht(B, A, C),
22588    member(D, C),
22589    D=suspension(_, active, _),
22590    !.
22591use_auxiliary_module(A) :-
22592    B=suspension(C, active, A),
22593    'chr gen_id'(C),
22594    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
22595              D),
22596    insert_ht(D, A, B).
22597is_used_auxiliary_module(A) :-
22598    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
22599              B),
22600    lookup_ht(B, A, C),
22601    member(D, C),
22602    D=suspension(_, active, _),
22603    !.
22604is_used_auxiliary_module(_) :-
22605    fail.
22606occurrences_code(A, B, C, D, E, F) :-
22607    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22608              G),
22609    lookup_ht(G, A, H),
22610    member(I, H),
22611    I=suspension(_, active, _, _, J),
22612    B>J,
22613    !,
22614    D=C,
22615    E=F.
22616occurrences_code(A, B, C, D, E, F) :-
22617    occurrence_code(A, B, C, G, E, H),
22618    I is B+1,
22619    occurrences_code(A, I, G, D, H, F).
22620occurrence_code(A, B, C, D, E, F) :-
22621    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
22622              G),
22623    lookup_ht(G, k(A, B), H),
22624    member(I, H),
22625    I=suspension(_, active, _, _, _, _, J, K, _),
22626    (   nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
22627                  L),
22628        lookup_ht(L, k(J, K), M),
22629        member(N, M),
22630        N=suspension(_, active, _, _, _),
22631        !,
22632        (   named_history(J, _, _)
22633        ->  does_use_history(A, B)
22634        ;   true
22635        ),
22636        D=C,
22637        E=F
22638    ;   nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', O),
22639        lookup_ht(O, J, P),
22640        member(Q, P),
22641        Q=suspension(_, active, _, _, _, R),
22642        !,
22643        R=pragma(rule(S, T, _, _), ids(U, V), _, _, _),
22644        (   select2(K, W, U, S, X, Y)
22645        ->  D=C,
22646            head1_code(W,
22647                       K,
22648                       Y,
22649                       X,
22650                       R,
22651                       A,
22652                       B,
22653                       C,
22654                       E,
22655                       F)
22656        ;   select2(K, Z, V, T, A1, B1)
22657        ->  head2_code(Z,
22658                       K,
22659                       B1,
22660                       A1,
22661                       R,
22662                       A,
22663                       B,
22664                       C,
22665                       E,
22666                       C1),
22667            (   should_skip_to_next_id(A, B)
22668            ->  inc_id(C, D),
22669                (   unconditional_occurrence(A, B)
22670                ->  C1=F
22671                ;   gen_alloc_inc_clause(A,
22672                                         B,
22673                                         C,
22674                                         C1,
22675                                         F)
22676                )
22677            ;   D=C,
22678                C1=F
22679            )
22680        )
22681    ).
22682occurrence_code(A, B, _, _, _, _) :-
22683    chr_error(internal,
22684              'occurrence_code/6: missing information to compile ~w:~w\n',
22685              [A, B]).
22686functional_dependency(A, B, C, D) :-
22687    B>1,
22688    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
22689              E),
22690    lookup_ht(E, A, F),
22691    member(G, F),
22692    G=suspension(_, active, _, _, H),
22693    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
22694              I),
22695    lookup_ht(I, k(A, B), J),
22696    member(K, J),
22697    K=suspension(_, active, _, _, _, L, _, _, _),
22698    H>L,
22699    !,
22700    functional_dependency(A, 1, C, D).
22701functional_dependency(A, B, C, D) :-
22702    E=suspension(F, active, A, B, C, D),
22703    'chr gen_id'(F),
22704    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
22705              G),
22706    insert_ht(G, A, E),
22707    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
22708              H),
22709    insert_ht(H, k(A, B), E).
22710get_functional_dependency(A, B, C, D) :-
22711    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
22712              E),
22713    lookup_ht(E, A, F),
22714    member(G, F),
22715    G=suspension(_, active, _, H, I, J),
22716    B>=H,
22717    !,
22718    C=I,
22719    D=J.
22720get_functional_dependency(_, _, _, _) :-
22721    fail.
22722initial_call_pattern(A) :-
22723    initial_call_pattern___1__0(A, _).
22724initial_call_pattern___1__0(A, _) :-
22725    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
22726              B),
22727    lookup_ht(B, A, C),
22728    member(D, C),
22729    D=suspension(_, active, _, _),
22730    !.
22731initial_call_pattern___1__0(A, B) :-
22732    B=suspension(C, active, t, A),
22733    'chr gen_id'(C),
22734    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
22735              D),
22736    insert_ht(D, A, B),
22737    call_pattern(A),
22738    (   B=suspension(_, active, _, _)
22739    ->  setarg(2, B, inactive),
22740        initial_call_pattern___1__1(A, B)
22741    ;   true
22742    ).
22743initial_call_pattern___1__1(A, B) :-
22744    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
22745              C),
22746    lookup_ht(C, A, D),
22747    !,
22748    initial_call_pattern___1__1__0__4(D, A, B).
22749initial_call_pattern___1__1__0__4([], A, B) :-
22750    initial_call_pattern___1__2(A, B).
22751initial_call_pattern___1__1__0__4([A|B], C, D) :-
22752    (   A=suspension(_, active, _, E, F),
22753        E==C,
22754        nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
22755                  G)
22756    ->  initial_call_pattern___1__1__1__4(G,
22757                                          F,
22758                                          A,
22759                                          B,
22760                                          C,
22761                                          D)
22762    ;   initial_call_pattern___1__1__0__4(B, C, D)
22763    ).
22764initial_call_pattern___1__1__1__4([], _, _, A, B, C) :-
22765    initial_call_pattern___1__1__0__4(A, B, C).
22766initial_call_pattern___1__1__1__4([A|B], C, D, E, F, G) :-
22767    (   A=suspension(_, active, _, H),
22768        I=t(303, G, D, A),
22769        '$novel_production'(G, I),
22770        '$novel_production'(D, I)
22771    ->  '$extend_history'(G, I),
22772        setarg(2, G, active),
22773        ai_observation_schedule_new_calls(H, C),
22774        (   G=suspension(_, active, _, _)
22775        ->  setarg(2, G, inactive),
22776            initial_call_pattern___1__1__1__4(B,
22777                                              C,
22778                                              D,
22779                                              E,
22780                                              F,
22781                                              G)
22782        ;   true
22783        )
22784    ;   initial_call_pattern___1__1__1__4(B,
22785                                          C,
22786                                          D,
22787                                          E,
22788                                          F,
22789                                          G)
22790    ).
22791initial_call_pattern___1__1(A, B) :-
22792    initial_call_pattern___1__2(A, B).
22793initial_call_pattern___1__2(_, A) :-
22794    setarg(2, A, active).
22795call_pattern(A) :-
22796    call_pattern___1__0(A, _).
22797call_pattern___1__0(A, _) :-
22798    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
22799              B),
22800    lookup_ht(B, A, C),
22801    member(D, C),
22802    D=suspension(_, active, _),
22803    !.
22804call_pattern___1__0(A, B) :-
22805    B=suspension(C, active, A),
22806    'chr gen_id'(C),
22807    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
22808              D),
22809    insert_ht(D, A, B),
22810    call_pattern_worker(A),
22811    (   B=suspension(_, active, _)
22812    ->  setarg(2, B, inactive),
22813        call_pattern___1__1(A, B)
22814    ;   true
22815    ).
22816call_pattern___1__1(_, A) :-
22817    setarg(2, A, active).
22818call_pattern_worker(odom([], A)) :-
22819    !,
22820    final_answer_pattern(odom([], A), odom([], A)).
22821call_pattern_worker(odom([A|B], C)) :-
22822    !,
22823    D=odom(A, C),
22824    depends_on_goal(odom([A|B], C), D),
22825    call_pattern(D).
22826call_pattern_worker(odom((A;B), C)) :-
22827    !,
22828    D=odom((A;B), C),
22829    E=odom([], C),
22830    final_answer_pattern(D, E),
22831    F=odom(A, C),
22832    G=odom(B, C),
22833    call_pattern(F),
22834    call_pattern(G),
22835    depends_on_as(D, F, G).
22836call_pattern_worker(odom(builtin, A)) :-
22837    !,
22838    ord_empty(B),
22839    final_answer_pattern(odom(builtin, A), odom([], B)).
22840call_pattern_worker(odom(occ(A, B), C)) :-
22841    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22842              D),
22843    lookup_ht(D, A, E),
22844    member(F, E),
22845    F=suspension(_, active, _, _, G),
22846    B>G,
22847    !,
22848    final_answer_pattern(odom(occ(A, B), C), odom([], C)).
22849call_pattern_worker(odom(A, B)) :-
22850    A=_/_,
22851    !,
22852    C=odom(occ(A, 1), B),
22853    call_pattern(C),
22854    depends_on(odom(A, B), C).
22855call_pattern_worker(odom(occ(A, B), C)) :-
22856    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
22857              D),
22858    lookup_ht(D, k(A, B), E),
22859    member(F, E),
22860    F=suspension(_, active, _, _, _, _, G, H, _),
22861    is_passive(G, H),
22862    !,
22863    I is B+1,
22864    J=odom(occ(A, I), C),
22865    call_pattern(J),
22866    final_answer_pattern(odom(occ(A, B), C), odom([], C)),
22867    depends_on(odom(occ(A, B), C), J).
22868call_pattern_worker(odom(occ(A, B), C)) :-
22869    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
22870              D),
22871    (   lookup_ht(D, k(A, B, simplification), E),
22872        member(F, E),
22873        F=suspension(_, active, _, _, _, _, G, H, _),
22874        \+ is_passive(G, H),
22875        !,
22876        ai_observation_memo_simplification_rest_heads(A, B, I),
22877        ai_observation_observe_set(C, I, J),
22878        ai_observation_memo_abstract_goal(G, K),
22879        call_pattern(odom(K, J)),
22880        L is B+1,
22881        M=odom(occ(A, L), C),
22882        call_pattern(M),
22883        depends_on_as(odom(occ(A, B), C),
22884                      odom(K, J),
22885                      M),
22886        final_answer_pattern(odom(occ(A, B), C),
22887                             odom([], C))
22888    ;   lookup_ht(D, k(A, B, propagation), N),
22889        member(O, N),
22890        O=suspension(_, active, _, _, _, _, P, Q, _),
22891        \+ is_passive(P, Q),
22892        !,
22893        ai_observation_memo_propagation_rest_heads(A, B, R),
22894        ai_observation_observe_set(C, R, S),
22895        ord_add_element(S, A, T),
22896        ai_observation_memo_abstract_goal(P, U),
22897        call_pattern(odom(U, T)),
22898        (   ord_memberchk(A, S)
22899        ->  V=no
22900        ;   V=yes
22901        ),
22902        W is B+1,
22903        X=odom(occ(A, W), C),
22904        call_pattern(X),
22905        depends_on_ap(odom(occ(A, B), C),
22906                      odom(U, T),
22907                      X,
22908                      V)
22909    ).
22910call_pattern_worker(A) :-
22911    chr_error(internal,
22912              'AI observation analysis: unexpected abstract state ~w\n',
22913              [A]).
22914final_answer_pattern(A, B) :-
22915    final_answer_pattern___2__0(A, B, _).
22916final_answer_pattern___2__0(A, B, C) :-
22917    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
22918              D),
22919    lookup_ht(D, A, E),
22920    (   member(F, E),
22921        F=suspension(_, active, _, _, G),
22922        ai_observation_leq(B, G),
22923        !
22924    ;   !,
22925        final_answer_pattern___2__0__0__2(E, A, B, C)
22926    ).
22927final_answer_pattern___2__0__0__2([], A, B, C) :-
22928    final_answer_pattern___2__1(A, B, C).
22929final_answer_pattern___2__0__0__2([A|B], C, D, E) :-
22930    (   A=suspension(_, active, _, F, G),
22931        F==C,
22932        ai_observation_leq(G, D)
22933    ->  setarg(2, A, removed),
22934        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
22935                  H),
22936        delete_ht(H, C, A),
22937        final_answer_pattern___2__0__0__2(B, C, D, E)
22938    ;   final_answer_pattern___2__0__0__2(B, C, D, E)
22939    ).
22940final_answer_pattern___2__0(A, B, C) :-
22941    final_answer_pattern___2__1(A, B, C).
22942final_answer_pattern___2__1(A, B, C) :-
22943    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
22944              D),
22945    lookup_ht(D, A, E),
22946    !,
22947    C=suspension(F, not_stored_yet, t, A, B),
22948    'chr gen_id'(F),
22949    final_answer_pattern___2__1__0__3(E, A, B, C).
22950final_answer_pattern___2__1__0__3([], A, B, C) :-
22951    final_answer_pattern___2__2(A, B, C).
22952final_answer_pattern___2__1__0__3([A|B], C, D, E) :-
22953    (   A=suspension(_, active, _, F),
22954        F==C,
22955        nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
22956                  G)
22957    ->  final_answer_pattern___2__1__1__3(G,
22958                                          A,
22959                                          B,
22960                                          C,
22961                                          D,
22962                                          E)
22963    ;   final_answer_pattern___2__1__0__3(B, C, D, E)
22964    ).
22965final_answer_pattern___2__1__1__3([], _, A, B, C, D) :-
22966    final_answer_pattern___2__1__0__3(A, B, C, D).
22967final_answer_pattern___2__1__1__3([A|B], C, D, E, F, G) :-
22968    (   A=suspension(_, active, _, H),
22969        I=t(303, C, G, A),
22970        '$novel_production'(C, I),
22971        '$novel_production'(G, I)
22972    ->  '$extend_history'(G, I),
22973        arg(2, G, J),
22974        setarg(2, G, active),
22975        (   J==not_stored_yet
22976        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
22977                      K),
22978            insert_ht(K, E, G)
22979        ;   true
22980        ),
22981        ai_observation_schedule_new_calls(H, F),
22982        (   G=suspension(_, active, _, _, _)
22983        ->  setarg(2, G, inactive),
22984            final_answer_pattern___2__1__1__3(B,
22985                                              C,
22986                                              D,
22987                                              E,
22988                                              F,
22989                                              G)
22990        ;   true
22991        )
22992    ;   final_answer_pattern___2__1__1__3(B,
22993                                          C,
22994                                          D,
22995                                          E,
22996                                          F,
22997                                          G)
22998    ).
22999final_answer_pattern___2__1(A, B, C) :-
23000    C=suspension(D, not_stored_yet, t, A, B),
23001    'chr gen_id'(D),
23002    final_answer_pattern___2__2(A, B, C).
23003final_answer_pattern___2__2(A, B, C) :-
23004    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2', D),
23005    lookup_ht(D, A, E),
23006    !,
23007    final_answer_pattern___2__2__0__4(E, A, B, C).
23008final_answer_pattern___2__2__0__4([], A, B, C) :-
23009    final_answer_pattern___2__3(A, B, C).
23010final_answer_pattern___2__2__0__4([A|B], C, D, E) :-
23011    (   A=suspension(_, active, _, F, G),
23012        G==C,
23013        H=t(305, A, E),
23014        '$novel_production'(A, H),
23015        '$novel_production'(E, H)
23016    ->  '$extend_history'(E, H),
23017        arg(2, E, I),
23018        setarg(2, E, active),
23019        (   I==not_stored_yet
23020        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23021                      J),
23022            insert_ht(J, C, E)
23023        ;   true
23024        ),
23025        final_answer_pattern(F, D),
23026        (   E=suspension(_, active, _, _, _)
23027        ->  setarg(2, E, inactive),
23028            final_answer_pattern___2__2__0__4(B, C, D, E)
23029        ;   true
23030        )
23031    ;   final_answer_pattern___2__2__0__4(B, C, D, E)
23032    ).
23033final_answer_pattern___2__2(A, B, C) :-
23034    final_answer_pattern___2__3(A, B, C).
23035final_answer_pattern___2__3(A, B, C) :-
23036    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23037              D),
23038    lookup_ht(D, A, E),
23039    !,
23040    final_answer_pattern___2__3__0__5(E, A, B, C).
23041final_answer_pattern___2__3__0__5([], A, B, C) :-
23042    final_answer_pattern___2__4(A, B, C).
23043final_answer_pattern___2__3__0__5([A|B], C, D, E) :-
23044    (   A=suspension(_, active, _, F, G),
23045        G==C,
23046        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23047                  H),
23048        lookup_ht(H, F, I)
23049    ->  final_answer_pattern___2__3__1__5(I,
23050                                          F,
23051                                          A,
23052                                          B,
23053                                          C,
23054                                          D,
23055                                          E)
23056    ;   final_answer_pattern___2__3__0__5(B, C, D, E)
23057    ).
23058final_answer_pattern___2__3__1__5([], _, _, A, B, C, D) :-
23059    final_answer_pattern___2__3__0__5(A, B, C, D).
23060final_answer_pattern___2__3__1__5([A|B], C, D, E, F, G, H) :-
23061    (   A=suspension(_, active, _, I, J),
23062        I==C
23063    ->  setarg(2, A, removed),
23064        ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23065                    K),
23066          delete_ht(K, C, A)
23067        ),
23068        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
23069                  L),
23070        delete_ht(L, J, A),
23071        final_answer_pattern___2__3__1__5(B,
23072                                          C,
23073                                          D,
23074                                          E,
23075                                          F,
23076                                          G,
23077                                          H)
23078    ;   final_answer_pattern___2__3__1__5(B,
23079                                          C,
23080                                          D,
23081                                          E,
23082                                          F,
23083                                          G,
23084                                          H)
23085    ).
23086final_answer_pattern___2__3(A, B, C) :-
23087    final_answer_pattern___2__4(A, B, C).
23088final_answer_pattern___2__4(A, B, C) :-
23089    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23090              D),
23091    lookup_ht(D, A, E),
23092    !,
23093    final_answer_pattern___2__4__0__6(E, A, B, C).
23094final_answer_pattern___2__4__0__6([], A, B, C) :-
23095    final_answer_pattern___2__5(A, B, C).
23096final_answer_pattern___2__4__0__6([A|B], C, D, E) :-
23097    (   A=suspension(_, active, _, F, G),
23098        G==C,
23099        H=t(310, A, E),
23100        '$novel_production'(A, H),
23101        '$novel_production'(E, H)
23102    ->  '$extend_history'(E, H),
23103        arg(2, E, I),
23104        setarg(2, E, active),
23105        (   I==not_stored_yet
23106        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23107                      J),
23108            insert_ht(J, C, E)
23109        ;   true
23110        ),
23111        F=odom([_|K], _),
23112        D=odom([], L),
23113        M=odom(K, L),
23114        call_pattern(M),
23115        depends_on(F, M),
23116        (   E=suspension(_, active, _, _, _)
23117        ->  setarg(2, E, inactive),
23118            final_answer_pattern___2__4__0__6(B, C, D, E)
23119        ;   true
23120        )
23121    ;   final_answer_pattern___2__4__0__6(B, C, D, E)
23122    ).
23123final_answer_pattern___2__4(A, B, C) :-
23124    final_answer_pattern___2__5(A, B, C).
23125final_answer_pattern___2__5(A, B, C) :-
23126    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
23127              D),
23128    lookup_ht(D, A, E),
23129    !,
23130    final_answer_pattern___2__5__0__7(E, A, B, C).
23131final_answer_pattern___2__5__0__7([], A, B, C) :-
23132    final_answer_pattern___2__6(A, B, C).
23133final_answer_pattern___2__5__0__7([A|B], C, D, E) :-
23134    (   A=suspension(_, active, _, F, G, H),
23135        G==C,
23136        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23137                  I),
23138        lookup_ht(I, H, J)
23139    ->  final_answer_pattern___2__5__1__7(J,
23140                                          F,
23141                                          H,
23142                                          A,
23143                                          B,
23144                                          C,
23145                                          D,
23146                                          E)
23147    ;   final_answer_pattern___2__5__0__7(B, C, D, E)
23148    ).
23149final_answer_pattern___2__5__1__7([], _, _, _, A, B, C, D) :-
23150    final_answer_pattern___2__5__0__7(A, B, C, D).
23151final_answer_pattern___2__5__1__7([A|B], C, D, E, F, G, H, I) :-
23152    (   A=suspension(_, active, _, J, K),
23153        J==D,
23154        L=t(317, E, I, A),
23155        '$novel_production'(E, L),
23156        '$novel_production'(I, L),
23157        '$novel_production'(A, L)
23158    ->  '$extend_history'(I, L),
23159        arg(2, I, M),
23160        setarg(2, I, active),
23161        (   M==not_stored_yet
23162        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23163                      N),
23164            insert_ht(N, G, I)
23165        ;   true
23166        ),
23167        ai_observation_lub(H, K, O),
23168        final_answer_pattern(C, O),
23169        (   I=suspension(_, active, _, _, _)
23170        ->  setarg(2, I, inactive),
23171            final_answer_pattern___2__5__1__7(B,
23172                                              C,
23173                                              D,
23174                                              E,
23175                                              F,
23176                                              G,
23177                                              H,
23178                                              I)
23179        ;   true
23180        )
23181    ;   final_answer_pattern___2__5__1__7(B,
23182                                          C,
23183                                          D,
23184                                          E,
23185                                          F,
23186                                          G,
23187                                          H,
23188                                          I)
23189    ).
23190final_answer_pattern___2__5(A, B, C) :-
23191    final_answer_pattern___2__6(A, B, C).
23192final_answer_pattern___2__6(A, B, C) :-
23193    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
23194              D),
23195    lookup_ht(D, A, E),
23196    !,
23197    final_answer_pattern___2__6__0__8(E, A, B, C).
23198final_answer_pattern___2__6__0__8([], A, B, C) :-
23199    final_answer_pattern___2__7(A, B, C).
23200final_answer_pattern___2__6__0__8([A|B], C, D, E) :-
23201    (   A=suspension(_, active, _, F, G, H),
23202        H==C,
23203        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23204                  I),
23205        lookup_ht(I, G, J)
23206    ->  final_answer_pattern___2__6__1__8(J,
23207                                          F,
23208                                          G,
23209                                          A,
23210                                          B,
23211                                          C,
23212                                          D,
23213                                          E)
23214    ;   final_answer_pattern___2__6__0__8(B, C, D, E)
23215    ).
23216final_answer_pattern___2__6__1__8([], _, _, _, A, B, C, D) :-
23217    final_answer_pattern___2__6__0__8(A, B, C, D).
23218final_answer_pattern___2__6__1__8([A|B], C, D, E, F, G, H, I) :-
23219    (   A=suspension(_, active, _, J, K),
23220        J==D,
23221        L=t(317, E, A, I),
23222        '$novel_production'(E, L),
23223        '$novel_production'(A, L),
23224        '$novel_production'(I, L)
23225    ->  '$extend_history'(I, L),
23226        arg(2, I, M),
23227        setarg(2, I, active),
23228        (   M==not_stored_yet
23229        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23230                      N),
23231            insert_ht(N, G, I)
23232        ;   true
23233        ),
23234        ai_observation_lub(K, H, O),
23235        final_answer_pattern(C, O),
23236        (   I=suspension(_, active, _, _, _)
23237        ->  setarg(2, I, inactive),
23238            final_answer_pattern___2__6__1__8(B,
23239                                              C,
23240                                              D,
23241                                              E,
23242                                              F,
23243                                              G,
23244                                              H,
23245                                              I)
23246        ;   true
23247        )
23248    ;   final_answer_pattern___2__6__1__8(B,
23249                                          C,
23250                                          D,
23251                                          E,
23252                                          F,
23253                                          G,
23254                                          H,
23255                                          I)
23256    ).
23257final_answer_pattern___2__6(A, B, C) :-
23258    final_answer_pattern___2__7(A, B, C).
23259final_answer_pattern___2__7(A, B, C) :-
23260    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23261              D),
23262    lookup_ht(D, A, E),
23263    !,
23264    final_answer_pattern___2__7__0__9(E, A, B, C).
23265final_answer_pattern___2__7__0__9([], A, B, C) :-
23266    final_answer_pattern___2__8(A, B, C).
23267final_answer_pattern___2__7__0__9([A|B], C, D, E) :-
23268    (   A=suspension(_, active, _, F, _, G, _),
23269        G==C,
23270        H=t(325, A, E),
23271        '$novel_production'(A, H),
23272        '$novel_production'(E, H)
23273    ->  '$extend_history'(E, H),
23274        arg(2, E, I),
23275        setarg(2, E, active),
23276        (   I==not_stored_yet
23277        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23278                      J),
23279            insert_ht(J, C, E)
23280        ;   true
23281        ),
23282        final_answer_pattern(F, D),
23283        (   E=suspension(_, active, _, _, _)
23284        ->  setarg(2, E, inactive),
23285            final_answer_pattern___2__7__0__9(B, C, D, E)
23286        ;   true
23287        )
23288    ;   final_answer_pattern___2__7__0__9(B, C, D, E)
23289    ).
23290final_answer_pattern___2__7(A, B, C) :-
23291    final_answer_pattern___2__8(A, B, C).
23292final_answer_pattern___2__8(A, B, C) :-
23293    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
23294              D),
23295    lookup_ht(D, A, E),
23296    !,
23297    final_answer_pattern___2__8__0__10(E, A, B, C).
23298final_answer_pattern___2__8__0__10([], A, B, C) :-
23299    final_answer_pattern___2__9(A, B, C).
23300final_answer_pattern___2__8__0__10([A|B], C, D, E) :-
23301    (   A=suspension(_, active, _, F, G, H, I),
23302        G==C,
23303        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23304                  J),
23305        lookup_ht(J, H, K)
23306    ->  final_answer_pattern___2__8__1__10(K,
23307                                           F,
23308                                           H,
23309                                           I,
23310                                           A,
23311                                           B,
23312                                           C,
23313                                           D,
23314                                           E)
23315    ;   final_answer_pattern___2__8__0__10(B, C, D, E)
23316    ).
23317final_answer_pattern___2__8__1__10([], _, _, _, _, A, B, C, D) :-
23318    final_answer_pattern___2__8__0__10(A, B, C, D).
23319final_answer_pattern___2__8__1__10([A|B], C, D, E, F, G, H, I, J) :-
23320    (   A=suspension(_, active, _, K, L),
23321        K==D,
23322        M=t(326, F, J, A),
23323        '$novel_production'(F, M),
23324        '$novel_production'(J, M),
23325        '$novel_production'(A, M)
23326    ->  '$extend_history'(J, M),
23327        arg(2, J, N),
23328        setarg(2, J, active),
23329        (   N==not_stored_yet
23330        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23331                      O),
23332            insert_ht(O, H, J)
23333        ;   true
23334        ),
23335        C=odom(occ(P, Q), _),
23336        (   ai_observation_is_observed(I, P)
23337        ->  ai_observed_internal(P, Q)
23338        ;   ai_not_observed_internal(P, Q)
23339        ),
23340        (   E==yes
23341        ->  I=odom([], R),
23342            ord_del_element(R, P, S),
23343            T=odom([], S)
23344        ;   T=I
23345        ),
23346        ai_observation_lub(T, L, U),
23347        final_answer_pattern(C, U),
23348        (   J=suspension(_, active, _, _, _)
23349        ->  setarg(2, J, inactive),
23350            final_answer_pattern___2__8__1__10(B,
23351                                               C,
23352                                               D,
23353                                               E,
23354                                               F,
23355                                               G,
23356                                               H,
23357                                               I,
23358                                               J)
23359        ;   true
23360        )
23361    ;   final_answer_pattern___2__8__1__10(B,
23362                                           C,
23363                                           D,
23364                                           E,
23365                                           F,
23366                                           G,
23367                                           H,
23368                                           I,
23369                                           J)
23370    ).
23371final_answer_pattern___2__8(A, B, C) :-
23372    final_answer_pattern___2__9(A, B, C).
23373final_answer_pattern___2__9(A, B, C) :-
23374    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23375              D),
23376    lookup_ht(D, A, E),
23377    !,
23378    final_answer_pattern___2__9__0__11(E, A, B, C).
23379final_answer_pattern___2__9__0__11([], A, B, C) :-
23380    final_answer_pattern___2__10(A, B, C).
23381final_answer_pattern___2__9__0__11([A|B], C, D, E) :-
23382    (   A=suspension(_, active, _, F, G, H, I),
23383        H==C,
23384        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23385                  J),
23386        lookup_ht(J, G, K)
23387    ->  final_answer_pattern___2__9__1__11(K,
23388                                           F,
23389                                           G,
23390                                           I,
23391                                           A,
23392                                           B,
23393                                           C,
23394                                           D,
23395                                           E)
23396    ;   final_answer_pattern___2__9__0__11(B, C, D, E)
23397    ).
23398final_answer_pattern___2__9__1__11([], _, _, _, _, A, B, C, D) :-
23399    final_answer_pattern___2__9__0__11(A, B, C, D).
23400final_answer_pattern___2__9__1__11([A|B], C, D, E, F, G, H, I, J) :-
23401    (   A=suspension(_, active, _, K, L),
23402        K==D,
23403        M=t(326, F, A, J),
23404        '$novel_production'(F, M),
23405        '$novel_production'(A, M),
23406        '$novel_production'(J, M)
23407    ->  '$extend_history'(J, M),
23408        arg(2, J, N),
23409        setarg(2, J, active),
23410        (   N==not_stored_yet
23411        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23412                      O),
23413            insert_ht(O, H, J)
23414        ;   true
23415        ),
23416        C=odom(occ(P, Q), _),
23417        (   ai_observation_is_observed(L, P)
23418        ->  ai_observed_internal(P, Q)
23419        ;   ai_not_observed_internal(P, Q)
23420        ),
23421        (   E==yes
23422        ->  L=odom([], R),
23423            ord_del_element(R, P, S),
23424            T=odom([], S)
23425        ;   T=L
23426        ),
23427        ai_observation_lub(T, I, U),
23428        final_answer_pattern(C, U),
23429        (   J=suspension(_, active, _, _, _)
23430        ->  setarg(2, J, inactive),
23431            final_answer_pattern___2__9__1__11(B,
23432                                               C,
23433                                               D,
23434                                               E,
23435                                               F,
23436                                               G,
23437                                               H,
23438                                               I,
23439                                               J)
23440        ;   true
23441        )
23442    ;   final_answer_pattern___2__9__1__11(B,
23443                                           C,
23444                                           D,
23445                                           E,
23446                                           F,
23447                                           G,
23448                                           H,
23449                                           I,
23450                                           J)
23451    ).
23452final_answer_pattern___2__9(A, B, C) :-
23453    final_answer_pattern___2__10(A, B, C).
23454final_answer_pattern___2__10(A, _, B) :-
23455    arg(2, B, C),
23456    setarg(2, B, active),
23457    (   C==not_stored_yet
23458    ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23459                  D),
23460        insert_ht(D, A, B)
23461    ;   true
23462    ).
23463abstract_constraints(A) :-
23464    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23465              B),
23466    (   member(C, B),
23467        C=suspension(_, active, _, _),
23468        !
23469    ;   !,
23470        abstract_constraints___1__0__0__2(B, A)
23471    ).
23472abstract_constraints___1__0__0__2([], A) :-
23473    abstract_constraints___1__1(A).
23474abstract_constraints___1__0__0__2([A|B], C) :-
23475    (   A=suspension(_, active, _, _)
23476    ->  setarg(2, A, removed),
23477        arg(3, A, D),
23478        (   var(D)
23479        ->  nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23480                      E),
23481            E=[_|F],
23482            b_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23483                     F),
23484            (   F=[G|_]
23485            ->  setarg(3, G, _)
23486            ;   true
23487            )
23488        ;   D=[_, _|F],
23489            setarg(2, D, F),
23490            (   F=[G|_]
23491            ->  setarg(3, G, D)
23492            ;   true
23493            )
23494        ),
23495        abstract_constraints___1__0__0__2(B, C)
23496    ;   abstract_constraints___1__0__0__2(B, C)
23497    ).
23498abstract_constraints(A) :-
23499    abstract_constraints___1__1(A).
23500abstract_constraints___1__1(A) :-
23501    B=suspension(C, active, _, A),
23502    'chr gen_id'(C),
23503    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23504              D),
23505    E=[B|D],
23506    b_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23507             E),
23508    (   D=[F|_]
23509    ->  setarg(3, F, E)
23510    ;   true
23511    ).
23512depends_on(A, B) :-
23513    depends_on___2__0(A, B, _).
23514depends_on___2__0(A, B, C) :-
23515    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23516              D),
23517    lookup_ht(D, B, E),
23518    !,
23519    C=suspension(F, not_stored_yet, t, A, B),
23520    'chr gen_id'(F),
23521    depends_on___2__0__0__1(E, A, B, C).
23522depends_on___2__0__0__1([], A, B, C) :-
23523    depends_on___2__1(A, B, C).
23524depends_on___2__0__0__1([A|B], C, D, E) :-
23525    (   A=suspension(_, active, _, F, G),
23526        F==D,
23527        H=t(305, E, A),
23528        '$novel_production'(E, H),
23529        '$novel_production'(A, H)
23530    ->  '$extend_history'(E, H),
23531        arg(2, E, I),
23532        setarg(2, E, active),
23533        (   I==not_stored_yet
23534        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23535                      J),
23536            insert_ht(J, C, E),
23537            nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
23538                      K),
23539            insert_ht(K, D, E)
23540        ;   true
23541        ),
23542        final_answer_pattern(C, G),
23543        (   E=suspension(_, active, _, _, _)
23544        ->  setarg(2, E, inactive),
23545            depends_on___2__0__0__1(B, C, D, E)
23546        ;   true
23547        )
23548    ;   depends_on___2__0__0__1(B, C, D, E)
23549    ).
23550depends_on___2__0(A, B, C) :-
23551    C=suspension(D, not_stored_yet, t, A, B),
23552    'chr gen_id'(D),
23553    depends_on___2__1(A, B, C).
23554depends_on___2__1(A, B, C) :-
23555    arg(2, C, D),
23556    setarg(2, C, active),
23557    (   D==not_stored_yet
23558    ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23559                  E),
23560        insert_ht(E, A, C),
23561        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
23562                  F),
23563        insert_ht(F, B, C)
23564    ;   true
23565    ).
23566depends_on_ap(A, B, C, D) :-
23567    depends_on_ap___4__0(A, B, C, D, _).
23568depends_on_ap___4__0(A, B, C, D, E) :-
23569    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23570              F),
23571    lookup_ht(F, C, G),
23572    !,
23573    E=suspension(H, not_stored_yet, t, A, B, C, D),
23574    'chr gen_id'(H),
23575    depends_on_ap___4__0__0__1(G,
23576                               A,
23577                               B,
23578                               C,
23579                               D,
23580                               E).
23581depends_on_ap___4__0__0__1([], A, B, C, D, E) :-
23582    depends_on_ap___4__1(A, B, C, D, E).
23583depends_on_ap___4__0__0__1([A|B], C, D, E, F, G) :-
23584    (   A=suspension(_, active, _, H, I),
23585        H==E,
23586        J=t(325, G, A),
23587        '$novel_production'(G, J),
23588        '$novel_production'(A, J)
23589    ->  '$extend_history'(G, J),
23590        arg(2, G, K),
23591        setarg(2, G, active),
23592        (   K==not_stored_yet
23593        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
23594                      L),
23595            insert_ht(L, D, G),
23596            nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23597                      M),
23598            insert_ht(M, E, G)
23599        ;   true
23600        ),
23601        final_answer_pattern(C, I),
23602        (   G=suspension(_, active, _, _, _, _, _)
23603        ->  setarg(2, G, inactive),
23604            depends_on_ap___4__0__0__1(B,
23605                                       C,
23606                                       D,
23607                                       E,
23608                                       F,
23609                                       G)
23610        ;   true
23611        )
23612    ;   depends_on_ap___4__0__0__1(B,
23613                                   C,
23614                                   D,
23615                                   E,
23616                                   F,
23617                                   G)
23618    ).
23619depends_on_ap___4__0(A, B, C, D, E) :-
23620    E=suspension(F, not_stored_yet, t, A, B, C, D),
23621    'chr gen_id'(F),
23622    depends_on_ap___4__1(A, B, C, D, E).
23623depends_on_ap___4__1(A, B, C, D, E) :-
23624    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23625              F),
23626    lookup_ht(F, B, G),
23627    !,
23628    depends_on_ap___4__1__0__2(G,
23629                               A,
23630                               B,
23631                               C,
23632                               D,
23633                               E).
23634depends_on_ap___4__1__0__2([], A, B, C, D, E) :-
23635    depends_on_ap___4__2(A, B, C, D, E).
23636depends_on_ap___4__1__0__2([A|B], C, D, E, F, G) :-
23637    (   A=suspension(_, active, _, H, I),
23638        H==D,
23639        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23640                  J),
23641        lookup_ht(J, E, K)
23642    ->  depends_on_ap___4__1__1__2(K,
23643                                   I,
23644                                   A,
23645                                   B,
23646                                   C,
23647                                   D,
23648                                   E,
23649                                   F,
23650                                   G)
23651    ;   depends_on_ap___4__1__0__2(B,
23652                                   C,
23653                                   D,
23654                                   E,
23655                                   F,
23656                                   G)
23657    ).
23658depends_on_ap___4__1__1__2([], _, _, A, B, C, D, E, F) :-
23659    depends_on_ap___4__1__0__2(A,
23660                               B,
23661                               C,
23662                               D,
23663                               E,
23664                               F).
23665depends_on_ap___4__1__1__2([A|B], C, D, E, F, G, H, I, J) :-
23666    (   A=suspension(_, active, _, K, L),
23667        A\==D,
23668        K==H,
23669        M=t(326, J, D, A),
23670        '$novel_production'(J, M),
23671        '$novel_production'(D, M),
23672        '$novel_production'(A, M)
23673    ->  '$extend_history'(J, M),
23674        arg(2, J, N),
23675        setarg(2, J, active),
23676        (   N==not_stored_yet
23677        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
23678                      O),
23679            insert_ht(O, G, J),
23680            nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23681                      P),
23682            insert_ht(P, H, J)
23683        ;   true
23684        ),
23685        F=odom(occ(Q, R), _),
23686        (   ai_observation_is_observed(C, Q)
23687        ->  ai_observed_internal(Q, R)
23688        ;   ai_not_observed_internal(Q, R)
23689        ),
23690        (   I==yes
23691        ->  C=odom([], S),
23692            ord_del_element(S, Q, T),
23693            U=odom([], T)
23694        ;   U=C
23695        ),
23696        ai_observation_lub(U, L, V),
23697        final_answer_pattern(F, V),
23698        (   J=suspension(_, active, _, _, _, _, _)
23699        ->  setarg(2, J, inactive),
23700            depends_on_ap___4__1__1__2(B,
23701                                       C,
23702                                       D,
23703                                       E,
23704                                       F,
23705                                       G,
23706                                       H,
23707                                       I,
23708                                       J)
23709        ;   true
23710        )
23711    ;   depends_on_ap___4__1__1__2(B,
23712                                   C,
23713                                   D,
23714                                   E,
23715                                   F,
23716                                   G,
23717                                   H,
23718                                   I,
23719                                   J)
23720    ).
23721depends_on_ap___4__1(A, B, C, D, E) :-
23722    depends_on_ap___4__2(A, B, C, D, E).
23723depends_on_ap___4__2(_, A, B, _, C) :-
23724    arg(2, C, D),
23725    setarg(2, C, active),
23726    (   D==not_stored_yet
23727    ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
23728                  E),
23729        insert_ht(E, A, C),
23730        nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23731                  F),
23732        insert_ht(F, B, C)
23733    ;   true
23734    ).
23735depends_on_goal(A, B) :-
23736    depends_on_goal___2__0(A, B, _).
23737depends_on_goal___2__0(A, B, C) :-
23738    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1', D),
23739    lookup_ht(D, A, E),
23740    !,
23741    depends_on_goal___2__0__0__1(E, A, B, C).
23742depends_on_goal___2__0__0__1([], A, B, C) :-
23743    depends_on_goal___2__1(A, B, C).
23744depends_on_goal___2__0__0__1([A|B], C, D, E) :-
23745    (   A=suspension(_, active, _, F, G),
23746        F==C,
23747        ground(D),
23748        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23749                  H),
23750        lookup_ht(H, D, I),
23751        member(J, I),
23752        J=suspension(_, active, _, _, _)
23753    ->  setarg(2, A, removed),
23754        ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23755                    K),
23756          delete_ht(K, C, A)
23757        ),
23758        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
23759                  L),
23760        delete_ht(L, G, A),
23761        depends_on_goal___2__0__0__1(B, C, D, E)
23762    ;   depends_on_goal___2__0__0__1(B, C, D, E)
23763    ).
23764depends_on_goal___2__0(A, B, C) :-
23765    depends_on_goal___2__1(A, B, C).
23766depends_on_goal___2__1(A, B, C) :-
23767    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23768              D),
23769    lookup_ht(D, B, E),
23770    !,
23771    C=suspension(F, not_stored_yet, t, A, B),
23772    'chr gen_id'(F),
23773    depends_on_goal___2__1__0__2(E, A, B, C).
23774depends_on_goal___2__1__0__2([], A, B, C) :-
23775    depends_on_goal___2__2(A, B, C).
23776depends_on_goal___2__1__0__2([A|B], C, D, E) :-
23777    (   A=suspension(_, active, _, F, G),
23778        F==D,
23779        H=t(310, E, A),
23780        '$novel_production'(E, H),
23781        '$novel_production'(A, H)
23782    ->  '$extend_history'(E, H),
23783        arg(2, E, I),
23784        setarg(2, E, active),
23785        (   I==not_stored_yet
23786        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23787                      J),
23788            insert_ht(J, D, E)
23789        ;   true
23790        ),
23791        C=odom([_|K], _),
23792        G=odom([], L),
23793        M=odom(K, L),
23794        call_pattern(M),
23795        depends_on(C, M),
23796        (   E=suspension(_, active, _, _, _)
23797        ->  setarg(2, E, inactive),
23798            depends_on_goal___2__1__0__2(B, C, D, E)
23799        ;   true
23800        )
23801    ;   depends_on_goal___2__1__0__2(B, C, D, E)
23802    ).
23803depends_on_goal___2__1(A, B, C) :-
23804    C=suspension(D, not_stored_yet, t, A, B),
23805    'chr gen_id'(D),
23806    depends_on_goal___2__2(A, B, C).
23807depends_on_goal___2__2(_, A, B) :-
23808    arg(2, B, C),
23809    setarg(2, B, active),
23810    (   C==not_stored_yet
23811    ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23812                  D),
23813        insert_ht(D, A, B)
23814    ;   true
23815    ).
23816ai_observed_internal(A, B) :-
23817    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
23818              C),
23819    lookup_ht(C, k(A, B), D),
23820    !,
23821    ai_observed_internal___2__0__0__1(D, A, B).
23822ai_observed_internal___2__0__0__1([], A, B) :-
23823    ai_observed_internal___2__1(A, B).
23824ai_observed_internal___2__0__0__1([A|B], C, D) :-
23825    (   A=suspension(_, active, _, E, F),
23826        E==C,
23827        F==D
23828    ->  setarg(2, A, removed),
23829        ( arg(3, A, G),
23830          (   var(G)
23831          ->  nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
23832                        H),
23833              H=[_|I],
23834              b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
23835                       I),
23836              (   I=[J|_]
23837              ->  setarg(3, J, _)
23838              ;   true
23839              )
23840          ;   G=[_, _|I],
23841              setarg(2, G, I),
23842              (   I=[J|_]
23843              ->  setarg(3, J, G)
23844              ;   true
23845              )
23846          )
23847        ),
23848        nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
23849                  K),
23850        delete_ht(K, k(C, D), A),
23851        ai_observed_internal___2__0__0__1(B, C, D)
23852    ;   ai_observed_internal___2__0__0__1(B, C, D)
23853    ).
23854ai_observed_internal(A, B) :-
23855    ai_observed_internal___2__1(A, B).
23856ai_observed_internal___2__1(A, B) :-
23857    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
23858              C),
23859    lookup_ht(C, k(A, B), D),
23860    member(E, D),
23861    E=suspension(_, active, _, _, _),
23862    !.
23863ai_observed_internal___2__1(_, _) :-
23864    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
23865              A),
23866    member(B, A),
23867    B=suspension(_, active, _),
23868    !.
23869ai_observed_internal___2__1(A, B) :-
23870    C=suspension(D, active, _, A, B),
23871    'chr gen_id'(D),
23872    nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
23873              E),
23874    F=[C|E],
23875    b_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
23876             F),
23877    (   E=[G|_]
23878    ->  setarg(3, G, F)
23879    ;   true
23880    ),
23881    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
23882              H),
23883    insert_ht(H, k(A, B), C).
23884ai_not_observed_internal(A, B) :-
23885    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
23886              C),
23887    lookup_ht(C, k(A, B), D),
23888    member(E, D),
23889    E=suspension(_, active, _, _, _),
23890    !.
23891ai_not_observed_internal(A, B) :-
23892    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
23893              C),
23894    lookup_ht(C, k(A, B), D),
23895    member(E, D),
23896    E=suspension(_, active, _, _, _),
23897    !.
23898ai_not_observed_internal(A, B) :-
23899    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
23900              C),
23901    member(D, C),
23902    D=suspension(_, active, _),
23903    !,
23904    ai_not_observed(A, B).
23905ai_not_observed_internal(A, B) :-
23906    C=suspension(D, active, _, A, B),
23907    'chr gen_id'(D),
23908    nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
23909              E),
23910    F=[C|E],
23911    b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
23912             F),
23913    (   E=[G|_]
23914    ->  setarg(3, G, F)
23915    ;   true
23916    ),
23917    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
23918              H),
23919    insert_ht(H, k(A, B), C).
23920ai_not_observed(A, B) :-
23921    ai_not_observed___2__0(A, B, _).
23922ai_not_observed___2__0(A, B, C) :-
23923    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', D),
23924    lookup_ht(D, k(A, B, yes), E),
23925    !,
23926    C=suspension(F, not_stored_yet, A, B),
23927    'chr gen_id'(F),
23928    ai_not_observed___2__0__0__1(E, A, B, C).
23929ai_not_observed___2__0__0__1([], A, B, C) :-
23930    ai_not_observed___2__1(A, B, C).
23931ai_not_observed___2__0__0__1([A|B], C, D, E) :-
23932    (   A=suspension(_, active, F, G, H),
23933        F==C,
23934        G==D,
23935        H=yes,
23936        ( ground(C),
23937          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
23938                    I),
23939          lookup_ht(I, C, J)
23940        ),
23941        member(K, J),
23942        K=suspension(_, active, _, _, L, M),
23943        D<L
23944    ->  ( setarg(2, A, removed),
23945          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13',
23946                    N),
23947          delete_ht(N, k(C, yes), A),
23948          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
23949                    O),
23950          delete_ht(O, k(C, D, yes), A)
23951        ),
23952        setarg(2, K, removed),
23953        ( nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
23954                    P),
23955          delete_ht(P, k(C, M), K)
23956        ),
23957        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
23958                  Q),
23959        delete_ht(Q, C, K),
23960        arg(2, E, R),
23961        setarg(2, E, active),
23962        (   R==not_stored_yet
23963        ->  nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
23964                      S),
23965            insert_ht(S, k(C, D), E)
23966        ;   true
23967        ),
23968        T is M-1,
23969        stored(C, D, maybe),
23970        stored_complete(C, L, T),
23971        (   E=suspension(_, active, _, _)
23972        ->  setarg(2, E, inactive),
23973            ai_not_observed___2__0__0__1(B, C, D, E)
23974        ;   true
23975        )
23976    ;   ai_not_observed___2__0__0__1(B, C, D, E)
23977    ).
23978ai_not_observed___2__0(A, B, C) :-
23979    C=suspension(D, not_stored_yet, A, B),
23980    'chr gen_id'(D),
23981    ai_not_observed___2__1(A, B, C).
23982ai_not_observed___2__1(A, B, C) :-
23983    arg(2, C, D),
23984    setarg(2, C, active),
23985    (   D==not_stored_yet
23986    ->  nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
23987                  E),
23988        insert_ht(E, k(A, B), C)
23989    ;   true
23990    ).
23991ai_is_observed(A, B) :-
23992    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
23993              C),
23994    lookup_ht(C, k(A, B), D),
23995    member(E, D),
23996    E=suspension(_, active, _, _),
23997    !,
23998    fail.
23999ai_is_observed(_, _).
24000depends_on_as(A, B, C) :-
24001    depends_on_as___3__0(A, B, C, _).
24002depends_on_as___3__0(A, B, C, D) :-
24003    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24004              E),
24005    lookup_ht(E, B, F),
24006    !,
24007    D=suspension(G, not_stored_yet, t, A, B, C),
24008    'chr gen_id'(G),
24009    depends_on_as___3__0__0__1(F, A, B, C, D).
24010depends_on_as___3__0__0__1([], A, B, C, D) :-
24011    depends_on_as___3__1(A, B, C, D).
24012depends_on_as___3__0__0__1([A|B], C, D, E, F) :-
24013    (   A=suspension(_, active, _, G, H),
24014        G==D,
24015        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24016                  I),
24017        lookup_ht(I, E, J)
24018    ->  depends_on_as___3__0__1__1(J,
24019                                   H,
24020                                   A,
24021                                   B,
24022                                   C,
24023                                   D,
24024                                   E,
24025                                   F)
24026    ;   depends_on_as___3__0__0__1(B, C, D, E, F)
24027    ).
24028depends_on_as___3__0__1__1([], _, _, A, B, C, D, E) :-
24029    depends_on_as___3__0__0__1(A, B, C, D, E).
24030depends_on_as___3__0__1__1([A|B], C, D, E, F, G, H, I) :-
24031    (   A=suspension(_, active, _, J, K),
24032        A\==D,
24033        J==H,
24034        L=t(317, I, D, A),
24035        '$novel_production'(I, L),
24036        '$novel_production'(D, L),
24037        '$novel_production'(A, L)
24038    ->  '$extend_history'(I, L),
24039        arg(2, I, M),
24040        setarg(2, I, active),
24041        (   M==not_stored_yet
24042        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
24043                      N),
24044            insert_ht(N, H, I),
24045            nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
24046                      O),
24047            insert_ht(O, G, I)
24048        ;   true
24049        ),
24050        ai_observation_lub(C, K, P),
24051        final_answer_pattern(F, P),
24052        (   I=suspension(_, active, _, _, _, _)
24053        ->  setarg(2, I, inactive),
24054            depends_on_as___3__0__1__1(B,
24055                                       C,
24056                                       D,
24057                                       E,
24058                                       F,
24059                                       G,
24060                                       H,
24061                                       I)
24062        ;   true
24063        )
24064    ;   depends_on_as___3__0__1__1(B,
24065                                   C,
24066                                   D,
24067                                   E,
24068                                   F,
24069                                   G,
24070                                   H,
24071                                   I)
24072    ).
24073depends_on_as___3__0(A, B, C, D) :-
24074    D=suspension(E, not_stored_yet, t, A, B, C),
24075    'chr gen_id'(E),
24076    depends_on_as___3__1(A, B, C, D).
24077depends_on_as___3__1(_, A, B, C) :-
24078    arg(2, C, D),
24079    setarg(2, C, active),
24080    (   D==not_stored_yet
24081    ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
24082                  E),
24083        insert_ht(E, B, C),
24084        nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
24085                  F),
24086        insert_ht(F, A, C)
24087    ;   true
24088    ).
24089ai_observation_gather_results :-
24090    ai_observation_gather_results___0__0(_).
24091ai_observation_gather_results___0__0(A) :-
24092    nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24093              B),
24094    !,
24095    ai_observation_gather_results___0__0__0__1(B, A).
24096ai_observation_gather_results___0__0__0__1([], A) :-
24097    ai_observation_gather_results___0__1(A).
24098ai_observation_gather_results___0__0__0__1([A|B], C) :-
24099    (   A=suspension(_, active, _, D, E)
24100    ->  setarg(2, A, removed),
24101        ( arg(3, A, F),
24102          (   var(F)
24103          ->  nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24104                        G),
24105              G=[_|H],
24106              b_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24107                       H),
24108              (   H=[I|_]
24109              ->  setarg(3, I, _)
24110              ;   true
24111              )
24112          ;   F=[_, _|H],
24113              setarg(2, F, H),
24114              (   H=[I|_]
24115              ->  setarg(3, I, F)
24116              ;   true
24117              )
24118          )
24119        ),
24120        nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
24121                  J),
24122        delete_ht(J, k(D, E), A),
24123        ai_observation_gather_results___0__0__0__1(B, C)
24124    ;   ai_observation_gather_results___0__0__0__1(B, C)
24125    ).
24126ai_observation_gather_results___0__0(A) :-
24127    ai_observation_gather_results___0__1(A).
24128ai_observation_gather_results___0__1(A) :-
24129    nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24130              B),
24131    !,
24132    A=suspension(C, not_stored_yet, _),
24133    'chr gen_id'(C),
24134    ai_observation_gather_results___0__1__0__2(B, A).
24135ai_observation_gather_results___0__1__0__2([], A) :-
24136    ai_observation_gather_results___0__2(A).
24137ai_observation_gather_results___0__1__0__2([A|B], C) :-
24138    (   A=suspension(_, active, _, D, E)
24139    ->  setarg(2, A, removed),
24140        ( arg(3, A, F),
24141          (   var(F)
24142          ->  nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24143                        G),
24144              G=[_|H],
24145              b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24146                       H),
24147              (   H=[I|_]
24148              ->  setarg(3, I, _)
24149              ;   true
24150              )
24151          ;   F=[_, _|H],
24152              setarg(2, F, H),
24153              (   H=[I|_]
24154              ->  setarg(3, I, F)
24155              ;   true
24156              )
24157          )
24158        ),
24159        nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
24160                  J),
24161        delete_ht(J, k(D, E), A),
24162        arg(2, C, K),
24163        setarg(2, C, active),
24164        (   K==not_stored_yet
24165        ->  nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24166                      L),
24167            M=[C|L],
24168            b_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24169                     M),
24170            (   L=[N|_]
24171            ->  setarg(3, N, M)
24172            ;   true
24173            )
24174        ;   true
24175        ),
24176        ai_not_observed(D, E),
24177        (   C=suspension(_, active, _)
24178        ->  setarg(2, C, inactive),
24179            ai_observation_gather_results___0__1__0__2(B, C)
24180        ;   true
24181        )
24182    ;   ai_observation_gather_results___0__1__0__2(B, C)
24183    ).
24184ai_observation_gather_results___0__1(A) :-
24185    A=suspension(B, not_stored_yet, _),
24186    'chr gen_id'(B),
24187    ai_observation_gather_results___0__2(A).
24188ai_observation_gather_results___0__2(A) :-
24189    (   var(A)
24190    ->  true
24191    ;   arg(2, A, B),
24192        setarg(2, A, removed),
24193        (   B==not_stored_yet
24194        ->  true
24195        ;   arg(3, A, C),
24196            (   var(C)
24197            ->  nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24198                          D),
24199                D=[_|E],
24200                b_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24201                         E),
24202                (   E=[F|_]
24203                ->  setarg(3, F, _)
24204                ;   true
24205                )
24206            ;   C=[_, _|E],
24207                setarg(2, C, E),
24208                (   E=[F|_]
24209                ->  setarg(3, F, C)
24210                ;   true
24211                )
24212            )
24213        )
24214    ).
24215ai_observation_memo_simplification_rest_heads(A, B, C) :-
24216    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
24217              D),
24218    lookup_ht(D, k(A, B), E),
24219    member(F, E),
24220    F=suspension(_, active, _, _, G),
24221    !,
24222    C=G.
24223ai_observation_memo_simplification_rest_heads(A, B, C) :-
24224    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
24225              D),
24226    lookup_ht(D, k(A, B), E),
24227    member(F, E),
24228    F=suspension(_, active, _, _, _, _, G, H, _),
24229    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I),
24230    lookup_ht(I, G, J),
24231    member(K, J),
24232    K=suspension(_, active, _, _, _, L),
24233    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24234              M),
24235    member(N, M),
24236    N=suspension(_, active, _, O),
24237    !,
24238    L=pragma(rule(P, Q, _, _), ids(R, _), _, _, _),
24239    once(select2(H, _, R, P, _, S)),
24240    ai_observation_abstract_constraints(S, O, T),
24241    ai_observation_abstract_constraints(Q, O, U),
24242    append(T, U, V),
24243    sort(V, C),
24244    ai_observation_memoed_simplification_rest_heads(A, B, C).
24245ai_observation_memo_simplification_rest_heads(_, _, _) :-
24246    fail.
24247ai_observation_memoed_simplification_rest_heads(A, B, C) :-
24248    D=suspension(E, active, A, B, C),
24249    'chr gen_id'(E),
24250    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
24251              F),
24252    insert_ht(F, k(A, B), D).
24253ai_observation_memo_propagation_rest_heads(A, B, C) :-
24254    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
24255              D),
24256    lookup_ht(D, k(A, B), E),
24257    member(F, E),
24258    F=suspension(_, active, _, _, G),
24259    !,
24260    C=G.
24261ai_observation_memo_propagation_rest_heads(A, B, C) :-
24262    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
24263              D),
24264    lookup_ht(D, k(A, B), E),
24265    member(F, E),
24266    F=suspension(_, active, _, _, _, _, G, H, _),
24267    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I),
24268    lookup_ht(I, G, J),
24269    member(K, J),
24270    K=suspension(_, active, _, _, _, L),
24271    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24272              M),
24273    member(N, M),
24274    N=suspension(_, active, _, O),
24275    !,
24276    L=pragma(rule(P, Q, _, _), ids(_, R), _, _, _),
24277    once(select2(H, _, R, Q, _, S)),
24278    ai_observation_abstract_constraints(S, O, T),
24279    ai_observation_abstract_constraints(P, O, U),
24280    append(T, U, V),
24281    sort(V, C),
24282    ai_observation_memoed_propagation_rest_heads(A, B, C).
24283ai_observation_memo_propagation_rest_heads(_, _, _) :-
24284    fail.
24285ai_observation_memoed_propagation_rest_heads(A, B, C) :-
24286    D=suspension(E, active, A, B, C),
24287    'chr gen_id'(E),
24288    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
24289              F),
24290    insert_ht(F, k(A, B), D).
24291ai_observation_memoed_abstract_goal(A, B) :-
24292    C=suspension(D, active, A, B),
24293    'chr gen_id'(D),
24294    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
24295              E),
24296    insert_ht(E, A, C).
24297ai_observation_memo_abstract_goal(A, B) :-
24298    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
24299              C),
24300    lookup_ht(C, A, D),
24301    member(E, D),
24302    E=suspension(_, active, _, F),
24303    !,
24304    B=F.
24305ai_observation_memo_abstract_goal(A, B) :-
24306    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', C),
24307    lookup_ht(C, A, D),
24308    member(E, D),
24309    E=suspension(_, active, _, _, _, F),
24310    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24311              G),
24312    member(H, G),
24313    H=suspension(_, active, _, I),
24314    !,
24315    F=pragma(rule(J, K, L, M), _, _, _, _),
24316    ai_observation_abstract_goal_(J,
24317                                  K,
24318                                  L,
24319                                  M,
24320                                  I,
24321                                  N),
24322    B=N,
24323    ai_observation_memoed_abstract_goal(A, N).
24324ai_observation_memo_abstract_goal(A, B) :-
24325    C=suspension(D, active, _, A, B),
24326    'chr gen_id'(D),
24327    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
24328              E),
24329    F=[C|E],
24330    b_setval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
24331             F),
24332    (   E=[G|_]
24333    ->  setarg(3, G, F)
24334    ;   true
24335    ).
24336partial_wake_analysis :-
24337    partial_wake_analysis___0__0(_).
24338partial_wake_analysis___0__0(A) :-
24339    nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
24340              B),
24341    !,
24342    A=suspension(C, not_stored_yet, t, _),
24343    'chr gen_id'(C),
24344    partial_wake_analysis___0__0__0__1(B, A).
24345partial_wake_analysis___0__0__0__1([], A) :-
24346    partial_wake_analysis___0__1(A).
24347partial_wake_analysis___0__0__0__1([A|B], C) :-
24348    (   A=suspension(_, active, _, _, D, _, E, F, G),
24349        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
24350                  H),
24351        lookup_ht(H, D, I)
24352    ->  partial_wake_analysis___0__0__1__1(I,
24353                                           D,
24354                                           E,
24355                                           F,
24356                                           G,
24357                                           A,
24358                                           B,
24359                                           C)
24360    ;   partial_wake_analysis___0__0__0__1(B, C)
24361    ).
24362partial_wake_analysis___0__0__1__1([], _, _, _, _, _, A, B) :-
24363    partial_wake_analysis___0__0__0__1(A, B).
24364partial_wake_analysis___0__0__1__1([A|B], C, D, E, F, G, H, I) :-
24365    (   A=suspension(_, active, _, _, J, K),
24366        J==C,
24367        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', L),
24368        lookup_ht(L, D, M)
24369    ->  partial_wake_analysis___0__0__2__1(M,
24370                                           K,
24371                                           A,
24372                                           B,
24373                                           C,
24374                                           D,
24375                                           E,
24376                                           F,
24377                                           G,
24378                                           H,
24379                                           I)
24380    ;   partial_wake_analysis___0__0__1__1(B,
24381                                           C,
24382                                           D,
24383                                           E,
24384                                           F,
24385                                           G,
24386                                           H,
24387                                           I)
24388    ).
24389partial_wake_analysis___0__0__2__1([], _, _, A, B, C, D, E, F, G, H) :-
24390    partial_wake_analysis___0__0__1__1(A,
24391                                       B,
24392                                       C,
24393                                       D,
24394                                       E,
24395                                       F,
24396                                       G,
24397                                       H).
24398partial_wake_analysis___0__0__2__1([A|B], C, D, E, F, G, H, I, J, K, L) :-
24399    (   A=suspension(_, active, _, _, M, N),
24400        M==G,
24401        O=t(330, L, J, A, D),
24402        '$novel_production'(L, O),
24403        '$novel_production'(J, O),
24404        '$novel_production'(A, O),
24405        '$novel_production'(D, O)
24406    ->  '$extend_history'(L, O),
24407        arg(2, L, P),
24408        setarg(2, L, active),
24409        (   P==not_stored_yet
24410        ->  nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
24411                      Q),
24412            R=[L|Q],
24413            b_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
24414                     R),
24415            (   Q=[S|_]
24416            ->  setarg(4, S, R)
24417            ;   true
24418            )
24419        ;   true
24420        ),
24421        N=pragma(rule(T, U, V, _), _, _, _, _),
24422        (   is_passive(G, H)
24423        ->  true
24424        ;   I==simplification
24425        ->  select(W, T, _),
24426            W=..[_|X],
24427            term_variables(V, Y),
24428            partial_wake_args(X, C, Y, F)
24429        ;   select(W, U, _),
24430            W=..[_|X],
24431            term_variables(V, Y),
24432            partial_wake_args(X, C, Y, F)
24433        ),
24434        (   L=suspension(_, active, _, _)
24435        ->  setarg(2, L, inactive),
24436            partial_wake_analysis___0__0__2__1(B,
24437                                               C,
24438                                               D,
24439                                               E,
24440                                               F,
24441                                               G,
24442                                               H,
24443                                               I,
24444                                               J,
24445                                               K,
24446                                               L)
24447        ;   true
24448        )
24449    ;   partial_wake_analysis___0__0__2__1(B,
24450                                           C,
24451                                           D,
24452                                           E,
24453                                           F,
24454                                           G,
24455                                           H,
24456                                           I,
24457                                           J,
24458                                           K,
24459                                           L)
24460    ).
24461partial_wake_analysis___0__0(A) :-
24462    A=suspension(B, not_stored_yet, t, _),
24463    'chr gen_id'(B),
24464    partial_wake_analysis___0__1(A).
24465partial_wake_analysis___0__1(A) :-
24466    arg(2, A, B),
24467    setarg(2, A, active),
24468    (   B==not_stored_yet
24469    ->  nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
24470                  C),
24471        D=[A|C],
24472        b_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
24473                 D),
24474        (   C=[E|_]
24475        ->  setarg(4, E, D)
24476        ;   true
24477        )
24478    ;   true
24479    ).
24480no_partial_wake(A) :-
24481    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
24482              B),
24483    lookup_ht(B, A, C),
24484    member(D, C),
24485    D=suspension(_, active, _),
24486    !.
24487no_partial_wake(A) :-
24488    B=suspension(C, active, A),
24489    'chr gen_id'(C),
24490    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
24491              D),
24492    insert_ht(D, A, B).
24493wakes_partially(A) :-
24494    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
24495              B),
24496    lookup_ht(B, A, C),
24497    member(D, C),
24498    D=suspension(_, active, _),
24499    !,
24500    fail.
24501wakes_partially(_).
24502phase_end(A) :-
24503    phase_end___1__0(A, _).
24504phase_end___1__0(A, B) :-
24505    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
24506              C),
24507    lookup_ht(C, A, D),
24508    !,
24509    B=suspension(E, not_stored_yet, A),
24510    'chr gen_id'(E),
24511    phase_end___1__0__0__1(D, A, B).
24512phase_end___1__0__0__1([], A, B) :-
24513    phase_end___1__1(A, B).
24514phase_end___1__0__0__1([A|B], C, D) :-
24515    (   A=suspension(_, active, E, F),
24516        E==C
24517    ->  setarg(2, A, removed),
24518        nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
24519                  G),
24520        delete_ht(G, C, A),
24521        arg(2, D, H),
24522        setarg(2, D, active),
24523        (   H==not_stored_yet
24524        ->  nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1',
24525                      I),
24526            insert_ht(I, C, D)
24527        ;   true
24528        ),
24529        call(F),
24530        (   D=suspension(_, active, _)
24531        ->  setarg(2, D, inactive),
24532            phase_end___1__0__0__1(B, C, D)
24533        ;   true
24534        )
24535    ;   phase_end___1__0__0__1(B, C, D)
24536    ).
24537phase_end___1__0(A, B) :-
24538    B=suspension(C, not_stored_yet, A),
24539    'chr gen_id'(C),
24540    phase_end___1__1(A, B).
24541phase_end___1__1(A, B) :-
24542    arg(2, B, C),
24543    setarg(2, B, active),
24544    (   C==not_stored_yet
24545    ->  nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1',
24546                  D),
24547        insert_ht(D, A, B)
24548    ;   true
24549    ).
24550delay_phase_end(A, B) :-
24551    nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1', C),
24552    lookup_ht(C, A, D),
24553    member(E, D),
24554    E=suspension(_, active, _),
24555    !,
24556    call(B).
24557delay_phase_end(A, B) :-
24558    C=suspension(D, active, A, B),
24559    'chr gen_id'(D),
24560    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
24561              E),
24562    insert_ht(E, A, C).
24563does_use_history(A, B) :-
24564    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
24565              C),
24566    lookup_ht(C, k(A, B), D),
24567    member(E, D),
24568    E=suspension(_, active, _, _),
24569    !.
24570does_use_history(A, B) :-
24571    C=suspension(D, active, A, B),
24572    'chr gen_id'(D),
24573    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
24574              E),
24575    insert_ht(E, A, C),
24576    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
24577              F),
24578    insert_ht(F, k(A, B), C).
24579uses_history(A) :-
24580    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
24581              B),
24582    lookup_ht(B, A, C),
24583    member(D, C),
24584    D=suspension(_, active, _, _),
24585    !.
24586uses_history(_) :-
24587    fail.
24588novel_production_call(A, B, C, D) :-
24589    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
24590              E),
24591    lookup_ht(E, k(A, B), F),
24592    member(G, F),
24593    G=suspension(_, active, _, _),
24594    !,
24595    D=C.
24596novel_production_call(_, _, _, true).
24597does_use_field(A, B) :-
24598    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
24599              C),
24600    lookup_ht(C, k(A, B), D),
24601    member(E, D),
24602    E=suspension(_, active, _, _),
24603    !.
24604does_use_field(A, B) :-
24605    C=suspension(D, active, A, B),
24606    'chr gen_id'(D),
24607    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
24608              E),
24609    insert_ht(E, k(A, B), C).
24610uses_field(A, B) :-
24611    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
24612              C),
24613    lookup_ht(C, k(A, B), D),
24614    member(E, D),
24615    E=suspension(_, active, _, _),
24616    !.
24617uses_field(_, _) :-
24618    fail.
24619uses_state(A, B) :-
24620    uses_state___2__0(A, B, _).
24621uses_state___2__0(A, B, _) :-
24622    nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24623              C),
24624    lookup_ht(C, k(A, B), D),
24625    member(E, D),
24626    E=suspension(_, active, _, _),
24627    !.
24628uses_state___2__0(A, B, C) :-
24629    nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24630              D),
24631    !,
24632    C=suspension(E, not_stored_yet, A, B),
24633    'chr gen_id'(E),
24634    uses_state___2__0__0__3(D, A, B, C).
24635uses_state___2__0__0__3([], A, B, C) :-
24636    uses_state___2__1(A, B, C).
24637uses_state___2__0__0__3([A|B], C, D, E) :-
24638    (   A=suspension(_, active, _),
24639        nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24640                  F),
24641        lookup_ht(F, k(C, D), G)
24642    ->  uses_state___2__0__1__3(G,
24643                                A,
24644                                B,
24645                                C,
24646                                D,
24647                                E)
24648    ;   uses_state___2__0__0__3(B, C, D, E)
24649    ).
24650uses_state___2__0__1__3([], _, A, B, C, D) :-
24651    uses_state___2__0__0__3(A, B, C, D).
24652uses_state___2__0__1__3([A|B], C, D, E, F, G) :-
24653    (   A=suspension(_, active, _, H, I, J, _, K),
24654        H==E,
24655        I==F
24656    ->  setarg(2, A, removed),
24657        ( arg(3, A, L),
24658          (   var(L)
24659          ->  nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24660                        M),
24661              M=[_|N],
24662              b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
24663                       N),
24664              (   N=[O|_]
24665              ->  setarg(3, O, _)
24666              ;   true
24667              )
24668          ;   L=[_, _|N],
24669              setarg(2, L, N),
24670              (   N=[O|_]
24671              ->  setarg(3, O, L)
24672              ;   true
24673              )
24674          )
24675        ),
24676        nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24677                  P),
24678        delete_ht(P, k(E, F), A),
24679        arg(2, G, Q),
24680        setarg(2, G, active),
24681        (   Q==not_stored_yet
24682        ->  nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24683                      R),
24684            insert_ht(R, k(E, F), G)
24685        ;   true
24686        ),
24687        K=J,
24688        (   G=suspension(_, active, _, _)
24689        ->  setarg(2, G, inactive),
24690            uses_state___2__0__1__3(B,
24691                                    C,
24692                                    D,
24693                                    E,
24694                                    F,
24695                                    G)
24696        ;   true
24697        )
24698    ;   uses_state___2__0__1__3(B,
24699                                C,
24700                                D,
24701                                E,
24702                                F,
24703                                G)
24704    ).
24705uses_state___2__0(A, B, C) :-
24706    C=suspension(D, not_stored_yet, A, B),
24707    'chr gen_id'(D),
24708    uses_state___2__1(A, B, C).
24709uses_state___2__1(A, B, C) :-
24710    arg(2, C, D),
24711    setarg(2, C, active),
24712    (   D==not_stored_yet
24713    ->  nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24714                  E),
24715        insert_ht(E, k(A, B), C)
24716    ;   true
24717    ).
24718if_used_state(A, B, C, D, E) :-
24719    nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24720              F),
24721    member(G, F),
24722    G=suspension(_, active, _),
24723    (   nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24724                  H),
24725        lookup_ht(H, k(A, B), I),
24726        member(J, I),
24727        J=suspension(_, active, _, _),
24728        !,
24729        E=C
24730    ;   !,
24731        E=D
24732    ).
24733if_used_state(A, B, C, D, E) :-
24734    F=suspension(G, active, _, A, B, C, D, E),
24735    'chr gen_id'(G),
24736    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24737              H),
24738    I=[F|H],
24739    b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
24740             I),
24741    (   H=[J|_]
24742    ->  setarg(3, J, I)
24743    ;   true
24744    ),
24745    nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24746              K),
24747    insert_ht(K, k(A, B), F).
24748used_states_known :-
24749    used_states_known___0__0(_).
24750used_states_known___0__0(A) :-
24751    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24752              B),
24753    !,
24754    A=suspension(C, not_stored_yet, _),
24755    'chr gen_id'(C),
24756    used_states_known___0__0__0__1(B, A).
24757used_states_known___0__0__0__1([], A) :-
24758    used_states_known___0__1(A).
24759used_states_known___0__0__0__1([A|B], C) :-
24760    (   A=suspension(_, active, _, D, E, F, _, G),
24761        ( ground(D),
24762          ground(E)
24763        ),
24764        nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24765                  H),
24766        lookup_ht(H, k(D, E), I),
24767        member(J, I),
24768        J=suspension(_, active, _, _)
24769    ->  setarg(2, A, removed),
24770        ( arg(3, A, K),
24771          (   var(K)
24772          ->  nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24773                        L),
24774              L=[_|M],
24775              b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
24776                       M),
24777              (   M=[N|_]
24778              ->  setarg(3, N, _)
24779              ;   true
24780              )
24781          ;   K=[_, _|M],
24782              setarg(2, K, M),
24783              (   M=[N|_]
24784              ->  setarg(3, N, K)
24785              ;   true
24786              )
24787          )
24788        ),
24789        nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24790                  O),
24791        delete_ht(O, k(D, E), A),
24792        arg(2, C, P),
24793        setarg(2, C, active),
24794        (   P==not_stored_yet
24795        ->  nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24796                      Q),
24797            R=[C|Q],
24798            b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
24799                     R),
24800            (   Q=[S|_]
24801            ->  setarg(3, S, R)
24802            ;   true
24803            )
24804        ;   true
24805        ),
24806        G=F,
24807        (   C=suspension(_, active, _)
24808        ->  setarg(2, C, inactive),
24809            used_states_known___0__0__0__1(B, C)
24810        ;   true
24811        )
24812    ;   used_states_known___0__0__0__1(B, C)
24813    ).
24814used_states_known___0__0(A) :-
24815    A=suspension(B, not_stored_yet, _),
24816    'chr gen_id'(B),
24817    used_states_known___0__1(A).
24818used_states_known___0__1(A) :-
24819    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24820              B),
24821    !,
24822    used_states_known___0__1__0__2(B, A).
24823used_states_known___0__1__0__2([], A) :-
24824    used_states_known___0__2(A).
24825used_states_known___0__1__0__2([A|B], C) :-
24826    (   A=suspension(_, active, _, D, E, _, F, G)
24827    ->  setarg(2, A, removed),
24828        ( arg(3, A, H),
24829          (   var(H)
24830          ->  nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24831                        I),
24832              I=[_|J],
24833              b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
24834                       J),
24835              (   J=[K|_]
24836              ->  setarg(3, K, _)
24837              ;   true
24838              )
24839          ;   H=[_, _|J],
24840              setarg(2, H, J),
24841              (   J=[K|_]
24842              ->  setarg(3, K, H)
24843              ;   true
24844              )
24845          )
24846        ),
24847        nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24848                  L),
24849        delete_ht(L, k(D, E), A),
24850        arg(2, C, M),
24851        setarg(2, C, active),
24852        (   M==not_stored_yet
24853        ->  nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24854                      N),
24855            O=[C|N],
24856            b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
24857                     O),
24858            (   N=[P|_]
24859            ->  setarg(3, P, O)
24860            ;   true
24861            )
24862        ;   true
24863        ),
24864        G=F,
24865        (   C=suspension(_, active, _)
24866        ->  setarg(2, C, inactive),
24867            used_states_known___0__1__0__2(B, C)
24868        ;   true
24869        )
24870    ;   used_states_known___0__1__0__2(B, C)
24871    ).
24872used_states_known___0__1(A) :-
24873    used_states_known___0__2(A).
24874used_states_known___0__2(A) :-
24875    arg(2, A, B),
24876    setarg(2, A, active),
24877    (   B==not_stored_yet
24878    ->  nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24879                  C),
24880        D=[A|C],
24881        b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
24882                 D),
24883        (   C=[E|_]
24884        ->  setarg(3, E, D)
24885        ;   true
24886        )
24887    ;   true
24888    ).
24889stored_assertion(A) :-
24890    B=suspension(C, active, A),
24891    'chr gen_id'(C),
24892    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
24893              D),
24894    insert_ht(D, A, B).
24895never_stored_default(A, B) :-
24896    never_stored_default___2__0(A, B, _).
24897never_stored_default___2__0(A, B, C) :-
24898    nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24899              D),
24900    !,
24901    C=suspension(E, not_stored_yet, A, B),
24902    'chr gen_id'(E),
24903    never_stored_default___2__0__0__1(D, A, B, C).
24904never_stored_default___2__0__0__1([], A, B, C) :-
24905    never_stored_default___2__1(A, B, C).
24906never_stored_default___2__0__0__1([A|B], C, D, E) :-
24907    (   A=suspension(_, active, _, F, G),
24908        F=[H|I],
24909        H==C
24910    ->  setarg(2, A, removed),
24911        arg(3, A, J),
24912        (   var(J)
24913        ->  nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24914                      K),
24915            K=[_|L],
24916            b_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24917                     L),
24918            (   L=[M|_]
24919            ->  setarg(3, M, _)
24920            ;   true
24921            )
24922        ;   J=[_, _|L],
24923            setarg(2, J, L),
24924            (   L=[M|_]
24925            ->  setarg(3, M, J)
24926            ;   true
24927            )
24928        ),
24929        arg(2, E, N),
24930        setarg(2, E, active),
24931        (   N==not_stored_yet
24932        ->  nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
24933                      O),
24934            insert_ht(O, C, E)
24935        ;   true
24936        ),
24937        C=P/Q,
24938        functor(R, P, Q),
24939        inc_rule_count(S),
24940        T=pragma(rule([R], [], true, D), ids([0], []), [], no, S),
24941        G=[T|U],
24942        never_stored_rules(I, U),
24943        (   E=suspension(_, active, _, _)
24944        ->  setarg(2, E, inactive),
24945            never_stored_default___2__0__0__1(B, C, D, E)
24946        ;   true
24947        )
24948    ;   never_stored_default___2__0__0__1(B, C, D, E)
24949    ).
24950never_stored_default___2__0(A, B, C) :-
24951    C=suspension(D, not_stored_yet, A, B),
24952    'chr gen_id'(D),
24953    never_stored_default___2__1(A, B, C).
24954never_stored_default___2__1(A, _, B) :-
24955    arg(2, B, C),
24956    setarg(2, B, active),
24957    (   C==not_stored_yet
24958    ->  nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
24959                  D),
24960        insert_ht(D, A, B)
24961    ;   true
24962    ).
24963never_stored_rules([], A) :-
24964    !,
24965    A=[].
24966never_stored_rules([A|B], C) :-
24967    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
24968              D),
24969    lookup_ht(D, A, E),
24970    member(F, E),
24971    F=suspension(_, active, _, G),
24972    !,
24973    A=H/I,
24974    functor(J, H, I),
24975    inc_rule_count(K),
24976    L=pragma(rule([J], [], true, G), ids([0], []), [], no, K),
24977    C=[L|M],
24978    never_stored_rules(B, M).
24979never_stored_rules([_|A], B) :-
24980    !,
24981    never_stored_rules(A, B).
24982never_stored_rules(A, B) :-
24983    C=suspension(D, active, _, A, B),
24984    'chr gen_id'(D),
24985    nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24986              E),
24987    F=[C|E],
24988    b_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24989             F),
24990    (   E=[G|_]
24991    ->  setarg(3, G, F)
24992    ;   true
24993    ).
24994check_storedness_assertion(A) :-
24995    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
24996              B),
24997    lookup_ht(B, A, C),
24998    member(D, C),
24999    D=suspension(_, active, _),
25000    !,
25001    setarg(2, D, removed),
25002    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
25003              E),
25004    delete_ht(E, A, D),
25005    (   is_stored(A)
25006    ->  true
25007    ;   chr_warning(assertion_failed,
25008                    'Constraint ~w is not stored. However, it was asserted to be stored.\n',
25009                    [A])
25010    ).
25011check_storedness_assertion(A) :-
25012    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
25013              B),
25014    lookup_ht(B, A, C),
25015    member(D, C),
25016    D=suspension(_, active, _, _),
25017    !,
25018    (   is_finally_stored(A)
25019    ->  chr_warning(assertion_failed,
25020                    'Constraint ~w is stored. However, it was asserted not to be stored.\n',
25021                    [A])
25022    ;   is_stored(A)
25023    ->  chr_warning(assertion_failed,
25024                    'Constraint ~w is temporarily stored. However, it was asserted not to be stored.\n',
25025                    [A])
25026    ;   true
25027    ).
25028check_storedness_assertion(A) :-
25029    (   is_finally_stored(A)
25030    ->  chr_warning(assertion_failed,
25031                    'Constraint ~w is stored. However, it was asserted not to be stored.\n',
25032                    [A])
25033    ;   is_stored(A)
25034    ->  chr_warning(assertion_failed,
25035                    'Constraint ~w is temporarily stored. However, it was asserted not to be stored.\n',
25036                    [A])
25037    ;   true
25038    ).
25039continuation_occurrence(A, B, C) :-
25040    D=suspension(E, active, A, B, C),
25041    'chr gen_id'(E),
25042    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
25043              F),
25044    insert_ht(F, k(A, B), D).
25045get_success_continuation_occurrence(A, B, C) :-
25046    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
25047              D),
25048    lookup_ht(D, k(A, B), E),
25049    member(F, E),
25050    F=suspension(_, active, _, _, G),
25051    !,
25052    C=G.
25053get_success_continuation_occurrence(A, B, _) :-
25054    chr_error(internal,
25055              'Success continuation not found for ~w.\n',
25056              [A:B]).
25057skip_to_next_id(A, B) :-
25058    skip_to_next_id___2__0(A, B, _).
25059skip_to_next_id___2__0(A, B, _) :-
25060    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25061              C),
25062    lookup_ht(C, k(A, B), D),
25063    member(E, D),
25064    E=suspension(_, active, _, _, _),
25065    !.
25066skip_to_next_id___2__0(A, B, C) :-
25067    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
25068              D),
25069    lookup_ht(D, k(A, B), E),
25070    !,
25071    C=suspension(F, not_stored_yet, t, A, B),
25072    'chr gen_id'(F),
25073    skip_to_next_id___2__0__0__4(E, A, B, C).
25074skip_to_next_id___2__0__0__4([], A, B, C) :-
25075    skip_to_next_id___2__1(A, B, C).
25076skip_to_next_id___2__0__0__4([A|B], C, D, E) :-
25077    (   A=suspension(_, active, _, _, F, G, H, I, _),
25078        F==C,
25079        G==D,
25080        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
25081                  J),
25082        lookup_ht(J, k(H, I), K)
25083    ->  skip_to_next_id___2__0__1__4(K,
25084                                     H,
25085                                     I,
25086                                     A,
25087                                     B,
25088                                     C,
25089                                     D,
25090                                     E)
25091    ;   skip_to_next_id___2__0__0__4(B, C, D, E)
25092    ).
25093skip_to_next_id___2__0__1__4([], _, _, _, A, B, C, D) :-
25094    skip_to_next_id___2__0__0__4(A, B, C, D).
25095skip_to_next_id___2__0__1__4([A|B], C, D, E, F, G, H, I) :-
25096    (   A=suspension(_, active, _, J, K),
25097        J==C,
25098        K==D,
25099        L=t(362, E, A, I),
25100        '$novel_production'(E, L),
25101        '$novel_production'(A, L),
25102        '$novel_production'(I, L),
25103        H>1
25104    ->  '$extend_history'(I, L),
25105        arg(2, I, M),
25106        setarg(2, I, active),
25107        (   M==not_stored_yet
25108        ->  nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25109                      N),
25110            insert_ht(N, k(G, H), I)
25111        ;   true
25112        ),
25113        O is H-1,
25114        skip_to_next_id(G, O),
25115        (   I=suspension(_, active, _, _, _)
25116        ->  setarg(2, I, inactive),
25117            skip_to_next_id___2__0__1__4(B,
25118                                         C,
25119                                         D,
25120                                         E,
25121                                         F,
25122                                         G,
25123                                         H,
25124                                         I)
25125        ;   true
25126        )
25127    ;   skip_to_next_id___2__0__1__4(B,
25128                                     C,
25129                                     D,
25130                                     E,
25131                                     F,
25132                                     G,
25133                                     H,
25134                                     I)
25135    ).
25136skip_to_next_id___2__0(A, B, C) :-
25137    C=suspension(D, not_stored_yet, t, A, B),
25138    'chr gen_id'(D),
25139    skip_to_next_id___2__1(A, B, C).
25140skip_to_next_id___2__1(A, B, C) :-
25141    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
25142              D),
25143    lookup_ht(D, k(A, B), E),
25144    !,
25145    skip_to_next_id___2__1__0__5(E, A, B, C).
25146skip_to_next_id___2__1__0__5([], A, B, C) :-
25147    skip_to_next_id___2__2(A, B, C).
25148skip_to_next_id___2__1__0__5([A|B], C, D, E) :-
25149    (   A=suspension(_, active, F, G, H),
25150        F==C,
25151        G==D,
25152        ( ground(C),
25153          ground(D)
25154        ),
25155        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
25156                  I),
25157        lookup_ht(I, k(C, D, propagation), J),
25158        member(K, J),
25159        K=suspension(_, active, _, _, _, _, _, _, _)
25160    ->  setarg(2, A, removed),
25161        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
25162                  L),
25163        delete_ht(L, k(C, D), A),
25164        arg(2, E, M),
25165        setarg(2, E, active),
25166        (   M==not_stored_yet
25167        ->  nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25168                      N),
25169            insert_ht(N, k(C, D), E)
25170        ;   true
25171        ),
25172        occurrence_code_id(C, D, H),
25173        O is D+1,
25174        P is H+1,
25175        set_occurrence_code_id(C, O, P),
25176        (   E=suspension(_, active, _, _, _)
25177        ->  setarg(2, E, inactive),
25178            skip_to_next_id___2__1__0__5(B, C, D, E)
25179        ;   true
25180        )
25181    ;   skip_to_next_id___2__1__0__5(B, C, D, E)
25182    ).
25183skip_to_next_id___2__1(A, B, C) :-
25184    skip_to_next_id___2__2(A, B, C).
25185skip_to_next_id___2__2(A, B, C) :-
25186    arg(2, C, D),
25187    setarg(2, C, active),
25188    (   D==not_stored_yet
25189    ->  nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25190                  E),
25191        insert_ht(E, k(A, B), C)
25192    ;   true
25193    ).
25194should_skip_to_next_id(A, B) :-
25195    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25196              C),
25197    lookup_ht(C, k(A, B), D),
25198    member(E, D),
25199    E=suspension(_, active, _, _, _),
25200    !.
25201should_skip_to_next_id(_, _) :-
25202    fail.
25203bulk_propagation(A, B, _) :-
25204    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
25205              C),
25206    lookup_ht(C, A, D),
25207    member(E, D),
25208    E=suspension(_, active, _, _, F),
25209    B>=F,
25210    !,
25211    skip_to_next_id(A, B).
25212bulk_propagation(A, B, C) :-
25213    C=:=B+1,
25214    !,
25215    skip_to_next_id(A, B),
25216    get_max_occurrence(A, D),
25217    E is D+1,
25218    bulk_propagation(A, C, E).
25219bulk_propagation(A, B, _) :-
25220    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
25221              C),
25222    lookup_ht(C, k(A, simplification), D),
25223    member(E, D),
25224    E=suspension(_, active, _, _, _, F, _, _, _),
25225    F=:=B+1,
25226    !,
25227    skip_to_next_id(A, B),
25228    get_max_occurrence(A, G),
25229    H is G+1,
25230    bulk_propagation(A, F, H).
25231bulk_propagation(A, B, C) :-
25232    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
25233              D),
25234    lookup_ht(D, k(A, B), E),
25235    member(F, E),
25236    F=suspension(_, active, _, _, G),
25237    G>B+1,
25238    !,
25239    H is min(C, G),
25240    I is B+1,
25241    bulk_propagation(A, I, H).
25242bulk_propagation(A, B, _) :-
25243    skip_to_next_id(A, B),
25244    get_max_occurrence(A, C),
25245    D is C+1,
25246    E is B+1,
25247    bulk_propagation(A, E, D).
25248set_occurrence_code_id(A, B, C) :-
25249    get_max_occurrence(A, D),
25250    B>D,
25251    !,
25252    occurrence_code_id(A, B, C).
25253set_occurrence_code_id(A, B, C) :-
25254    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
25255              D),
25256    lookup_ht(D, k(A, B), E),
25257    member(F, E),
25258    F=suspension(_, active, _, _, _, _, G, H, _),
25259    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', I),
25260    lookup_ht(I, k(G, H), J),
25261    member(K, J),
25262    K=suspension(_, active, _, _, _),
25263    !,
25264    occurrence_code_id(A, B, C),
25265    L is B+1,
25266    set_occurrence_code_id(A, L, C).
25267set_occurrence_code_id(A, B, C) :-
25268    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
25269              D),
25270    (   (   lookup_ht(D, k(A, B, simplification), E),
25271            member(F, E),
25272            F=suspension(_, active, _, _, _, _, _, _, _),
25273            !,
25274            occurrence_code_id(A, B, C),
25275            G is B+1,
25276            set_occurrence_code_id(A, G, C)
25277        ;   lookup_ht(D, k(A, B, propagation), H),
25278            member(I, H),
25279            I=suspension(_, active, _, _, _, _, _, _, _),
25280            nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25281                      J),
25282            lookup_ht(J, k(A, B), K),
25283            member(L, K),
25284            L=suspension(_, active, _, _, _),
25285            !,
25286            occurrence_code_id(A, B, C),
25287            M is B+1,
25288            N is C+1,
25289            set_occurrence_code_id(A, M, N)
25290        )
25291    ;   lookup_ht(D, k(A, B, propagation), O),
25292        member(P, O),
25293        P=suspension(_, active, _, _, _, _, _, _, _),
25294        !,
25295        occurrence_code_id(A, B, C),
25296        Q is B+1,
25297        set_occurrence_code_id(A, Q, C)
25298    ).
25299set_occurrence_code_id(A, B, C) :-
25300    D=suspension(E, active, A, B, C),
25301    'chr gen_id'(E),
25302    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
25303              F),
25304    insert_ht(F, k(A, B), D).
25305occurrence_code_id(A, B, C) :-
25306    D=suspension(E, active, A, B, C),
25307    'chr gen_id'(E),
25308    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
25309              F),
25310    insert_ht(F, k(A, B), D).
25311get_occurrence_code_id(A, B, C) :-
25312    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
25313              D),
25314    lookup_ht(D, k(A, B), E),
25315    member(F, E),
25316    F=suspension(_, active, _, _, G),
25317    !,
25318    C=G.
25319get_occurrence_code_id(A, B, _) :-
25320    (   B==0
25321    ->  true
25322    ;   format('no occurrence code for ~w!\n', [A:B])
25323    ).
25324chr_constants(A) :-
25325    B=suspension(C, active, _, A),
25326    'chr gen_id'(C),
25327    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25328              D),
25329    E=[B|D],
25330    b_setval('$chr_store_global_ground_chr_translate____chr_constants___1',
25331             E),
25332    (   D=[F|_]
25333    ->  setarg(3, F, E)
25334    ;   true
25335    ).
25336get_chr_constants(A) :-
25337    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25338              B),
25339    member(C, B),
25340    C=suspension(_, active, _, D),
25341    !,
25342    A=D.
25343get_chr_constants(A) :-
25344    chr_warning(internal, 'No constants found for key ~w.\n', [_]),
25345    A=[].
25346add_chr_constants_(A) :-
25347    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25348              B),
25349    member(C, B),
25350    C=suspension(_, active, _, D),
25351    !,
25352    setarg(2, C, removed),
25353    arg(3, C, E),
25354    (   var(E)
25355    ->  nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25356                  F),
25357        F=[_|G],
25358        b_setval('$chr_store_global_ground_chr_translate____chr_constants___1',
25359                 G),
25360        (   G=[H|_]
25361        ->  setarg(3, H, _)
25362        ;   true
25363        )
25364    ;   E=[_, _|G],
25365        setarg(2, E, G),
25366        (   G=[H|_]
25367        ->  setarg(3, H, E)
25368        ;   true
25369        )
25370    ),
25371    sort([A|D], I),
25372    chr_constants(I).
25373add_chr_constants_(A) :-
25374    chr_constants([A]).
25375print_chr_constants :-
25376    print_chr_constants___0__0(_).
25377print_chr_constants___0__0(A) :-
25378    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25379              B),
25380    !,
25381    A=suspension(C, not_stored_yet, _),
25382    'chr gen_id'(C),
25383    print_chr_constants___0__0__0__1(B, A).
25384print_chr_constants___0__0__0__1([], A) :-
25385    print_chr_constants___0__1(A).
25386print_chr_constants___0__0__0__1([A|B], C) :-
25387    (   A=suspension(_, active, _, D)
25388    ->  format('\t* chr_constants : ~w.\n', [D]),
25389        print_chr_constants___0__0__0__1(B, C)
25390    ;   print_chr_constants___0__0__0__1(B, C)
25391    ).
25392print_chr_constants___0__0(A) :-
25393    A=suspension(B, not_stored_yet, _),
25394    'chr gen_id'(B),
25395    print_chr_constants___0__1(A).
25396print_chr_constants___0__1(A) :-
25397    (   var(A)
25398    ->  true
25399    ;   arg(2, A, B),
25400        setarg(2, A, removed),
25401        (   B==not_stored_yet
25402        ->  true
25403        ;   arg(3, A, C),
25404            (   var(C)
25405            ->  nb_getval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
25406                          D),
25407                D=[_|E],
25408                b_setval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
25409                         E),
25410                (   E=[F|_]
25411                ->  setarg(3, F, _)
25412                ;   true
25413                )
25414            ;   C=[_, _|E],
25415                setarg(2, C, E),
25416                (   E=[F|_]
25417                ->  setarg(3, F, C)
25418                ;   true
25419                )
25420            )
25421        )
25422    )