View source with raw comments or as raw
    1/*  Generated by CHR bootstrap compiler
    2    From: /usr/local/src/swipl-devel/packages/chr/chr_translate.chr
    3    Date: Sun Feb 11 16:51:36 2024
    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)).   21:- use_module(library(apply_macros)).   22:- use_module(library(occurs)).   23:- use_module(library(assoc)).   24:- use_module(library(dialect/hprolog)).   25:- use_module(chr(pairlist)).   26:- use_module(chr(a_star)).   27:- use_module(chr(listmap)).   28:- use_module(chr(clean_code)).   29:- use_module(chr(builtins)).   30:- use_module(chr(find)).   31:- use_module(chr(binomialheap)).   32:- use_module(chr(guard_entailment)).   33:- use_module(chr(chr_compiler_options)).   34:- use_module(chr(chr_compiler_utility)).   35:- use_module(chr(chr_compiler_errors)).   36:- include(chr(chr_op)).   37:- op(1150, fx, chr_type).   38:- op(1150, fx, chr_declaration).   39:- op(1130, xfx, --->).   40:- op(980, fx, +).   41:- op(980, fx, -).   42:- op(980, fx, ?).   43:- op(1150, fx, constraints).   44:- op(1150, fx, chr_constraint).   45format_storetype(multi_store(A)) :-
   46    !,
   47    maplist(format_storetype, A).
   48format_storetype(atomic_constants(A, B, _)) :-
   49    format('\t* a trie index on the argument(s) ~w for the ground terms ~w\n',
   50           [A, B]).
   51format_storetype(ground_constants(A, B, _)) :-
   52    format('\t* a trie index on the argument(s) ~w for the ground terms ~w\n',
   53           [A, B]).
   54format_storetype(A) :-
   55    format('\t* ~w\n', [A]).
   56get_constraint_arg_type(A, B, C) :-
   57    get_constraint_type(A, D),
   58    nth1(B, D, E),
   59    unalias_type(E, C).
   60partial_store(ground_constants(_, _, incomplete)).
   61partial_store(atomic_constants(_, _, incomplete)).
   62late_allocation_analysis(A) :-
   63    (   chr_pp_flag(late_allocation, on)
   64    ->  maplist(late_allocation, A)
   65    ;   true
   66    ).
   67late_allocation(A) :-
   68    late_allocation(A, 0).
   69late_allocation(A, B) :-
   70    allocation_occurrence(A, B),
   71    !.
   72late_allocation(A, B) :-
   73    C is B+1,
   74    late_allocation(A, C).
   75stored_in_guard_before_next_kept_occurrence(A, B) :-
   76    chr_pp_flag(store_in_guards, on),
   77    C is B+1,
   78    stored_in_guard_lookahead(A, C).
   79set_constraint_indices(A) :-
   80    set_constraint_indices(A, 1).
   81set_constraint_indices([], A) :-
   82    B is A-1,
   83    max_constraint_index(B).
   84set_constraint_indices([A|B], C) :-
   85    (   (   chr_pp_flag(debugable, on)
   86        ;   \+ only_ground_indexed_arguments(A),
   87            is_stored(A)
   88        ;   is_stored(A),
   89            get_store_type(A, default)
   90        ;   get_store_type(A, var_assoc_store(_, _))
   91        )
   92    ->  constraint_index(A, C),
   93        D is C+1,
   94        set_constraint_indices(B, D)
   95    ;   set_constraint_indices(B, C)
   96    ).
   97type_indexed_identifier_structure(A, B) :-
   98    type_indexed_identifier_name(A,
   99                                 type_indexed_identifier_struct,
  100                                 C),
  101    get_type_indexed_identifier_size(A, D),
  102    functor(B, C, D).
  103type_indexed_identifier_name(A, B, C) :-
  104    (   atom(A)
  105    ->  D=A
  106    ;   term_to_atom(A, D)
  107    ),
  108    atom_concat_list([B, '_', D], C).
  109chr_translate(A, B) :-
  110    chr_translate_line_info(A, bootstrap, B).
  111chr_translate_line_info(A, B, C) :-
  112    chr_banner,
  113    restart_after_flattening(A, D),
  114    init_chr_pp_flags,
  115    chr_source_file(B),
  116    partition_clauses(D, E, F, G),
  117    chr_compiler_options:sanity_check,
  118    dump_code(D),
  119    check_declared_constraints(E),
  120    generate_show_constraint(E, H, F, I),
  121    add_constraints(H),
  122    add_rules(I),
  123    generate_never_stored_rules(H, J),
  124    add_rules(J),
  125    append(I, J, K),
  126    chr_analysis(K, H, D),
  127    time('constraint code generation',
  128         chr_translate:constraints_code(H, L)),
  129    time('validate store assumptions',
  130         chr_translate:validate_store_type_assumptions(H)),
  131    phase_end(validate_store_type_assumptions),
  132    used_states_known,
  133    time('store code generation',
  134         chr_translate:store_management_preds(H, M)),
  135    insert_declarations(G, N),
  136    chr_module_declaration(O),
  137    append([M, L, O, [end_of_file]], P),
  138    clean_clauses(P, Q),
  139    append([N, Q], C),
  140    dump_code(C),
  141    !.
  142chr_analysis(A, B, C) :-
  143    maplist(pragma_rule_to_ast_rule, A, D),
  144    check_rules(A, D, B),
  145    time('type checking', chr_translate:static_type_check(A, D)),
  146    collect_constants(A, D, B, C),
  147    add_occurrences(A, D),
  148    time('functional dependency',
  149         chr_translate:functional_dependency_analysis(A)),
  150    time('set semantics', chr_translate:set_semantics_rules(A)),
  151    time('symmetry analysis', chr_translate:symmetry_analysis(A)),
  152    time('guard simplification', chr_translate:guard_simplification),
  153    time('late storage', chr_translate:storage_analysis(B)),
  154    time(observation, chr_translate:observation_analysis(B)),
  155    time('ai observation', chr_translate:ai_observation_analysis(B)),
  156    time('late allocation', chr_translate:late_allocation_analysis(B)),
  157    partial_wake_analysis,
  158    time('assume constraint stores',
  159         chr_translate:assume_constraint_stores(B)),
  160    time('default constraint indices',
  161         chr_translate:set_constraint_indices(B)),
  162    time('check storedness assertions',
  163         chr_translate:check_storedness_assertions(B)),
  164    time('continuation analysis', chr_translate:continuation_analysis(B)).
  165store_management_preds(A, B) :-
  166    generate_attach_detach_a_constraint_all(A, C),
  167    generate_attr_unify_hook(D),
  168    generate_attach_increment(E),
  169    generate_extra_clauses(A, F),
  170    generate_insert_delete_constraints(A, G),
  171    generate_attach_code(A, H),
  172    generate_counter_code(I),
  173    generate_dynamic_type_check_clauses(J),
  174    append([C, E, D, F, G, H, I, J],
  175           B).
  176insert_declarations(A, B) :-
  177    findall((:-use_module(chr(C))),
  178            ( auxiliary_module(C),
  179              is_used_auxiliary_module(C)
  180            ),
  181            D),
  182    append(A, [(:-use_module(chr(chr_runtime)))|D], B).
  183auxiliary_module(chr_hashtable_store).
  184auxiliary_module(chr_integertable_store).
  185auxiliary_module(chr_assoc_store).
  186generate_counter_code(A) :-
  187    (   chr_pp_flag(store_counter, on)
  188    ->  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))]
  189    ;   A=[]
  190    ).
  191chr_module_declaration([]) :-
  192    tmp_module,
  193    !.
  194chr_module_declaration(A) :-
  195    get_target_module(B),
  196    (   B\==chr_translate,
  197        chr_pp_flag(toplevel_show_store, on)
  198    ->  A=[(:-multifile chr:'$chr_module'/1), chr:'$chr_module'(B)]
  199    ;   A=[]
  200    ).
  201partition_clauses([], [], [], []).
  202partition_clauses([A|B], C, D, E) :-
  203    (   parse_rule(A, F)
  204    ->  C=G,
  205        D=[F|H],
  206        E=I
  207    ;   is_declaration(A, J)
  208    ->  append(J, G, C),
  209        D=H,
  210        E=I
  211    ;   is_module_declaration(A, K)
  212    ->  target_module(K),
  213        C=G,
  214        D=H,
  215        E=[A|I]
  216    ;   is_type_definition(A)
  217    ->  C=G,
  218        D=H,
  219        E=I
  220    ;   is_chr_declaration(A)
  221    ->  C=G,
  222        D=H,
  223        E=I
  224    ;   A=handler(_)
  225    ->  chr_warning(deprecated(A),
  226                    'Backward compatibility: ignoring handler/1 declaration.\n',
  227                    []),
  228        C=G,
  229        D=H,
  230        E=I
  231    ;   A=rules(_)
  232    ->  chr_warning(deprecated(A),
  233                    'Backward compatibility: ignoring rules/1 declaration.\n',
  234                    []),
  235        C=G,
  236        D=H,
  237        E=I
  238    ;   A=option(L, M)
  239    ->  chr_warning(deprecated(A),
  240                    'Instead use `:-chr_option(~w,~w).\'\n',
  241                    [L, M]),
  242        handle_option(L, M),
  243        C=G,
  244        D=H,
  245        E=I
  246    ;   A=(:-chr_option(L, M))
  247    ->  handle_option(L, M),
  248        C=G,
  249        D=H,
  250        E=I
  251    ;   A='$chr_compiled_with_version'(_)
  252    ->  C=G,
  253        D=H,
  254        E=['$chr_compiled_with_version'(3)|I]
  255    ;   C=G,
  256        D=H,
  257        E=[A|I]
  258    ),
  259    partition_clauses(B, G, H, I).
  260'$chr_compiled_with_version'(3).
  261is_declaration(A, B) :-
  262    (   A=(:-C),
  263        C=..[D, E],
  264        D==(chr_constraint)
  265    ->  conj2list(E, F)
  266    ;   (   A=(:-C)
  267        ->  C=..[constraints, E]
  268        ;   A=..[constraints, E]
  269        ),
  270        conj2list(E, F),
  271        chr_warning(deprecated(A),
  272                    'Instead use :- chr_constraint ~w.\n',
  273                    [E])
  274    ),
  275    extract_type_mode(F, B).
  276extract_type_mode([], []).
  277extract_type_mode([A/B|C], [A/B|D]) :-
  278    !,
  279    extract_type_mode(C, D).
  280extract_type_mode([A|B], [C|D]) :-
  281    (   A= #(E, F)
  282    ->  functor(E, G, H),
  283        extract_annotation(F, G/H)
  284    ;   A=E,
  285        functor(E, G, H)
  286    ),
  287    C=G/H,
  288    E=..[_|I],
  289    extract_types_and_modes(I, J, K),
  290    assert_constraint_type(C, J),
  291    constraint_mode(C, K),
  292    extract_type_mode(B, D).
  293extract_annotation(stored, A) :-
  294    stored_assertion(A).
  295extract_annotation(default(A), B) :-
  296    never_stored_default(B, A).
  297extract_types_and_modes([], [], []).
  298extract_types_and_modes([A|B], [C|D], [E|F]) :-
  299    extract_type_and_mode(A, C, E),
  300    extract_types_and_modes(B, D, F).
  301extract_type_and_mode(+A, A, +) :-
  302    !.
  303extract_type_and_mode(?A, A, ?) :-
  304    !.
  305extract_type_and_mode(-A, A, -) :-
  306    !.
  307extract_type_and_mode(+, any, +) :-
  308    !.
  309extract_type_and_mode(?, any, ?) :-
  310    !.
  311extract_type_and_mode(-, any, -) :-
  312    !.
  313extract_type_and_mode(A, _, _) :-
  314    chr_error(syntax(A),
  315              'Illegal mode/type declaration.\n\tCorrect syntax is +type, -type or ?type\n\tor +, - or ?.\n',
  316              []).
  317is_chr_declaration(A) :-
  318    A=(:-chr_declaration B),
  319    (   B=(C--->D)
  320    ->  background_info(C, D)
  321    ;   B=D
  322    ->  background_info([D])
  323    ).
  324is_type_definition(A) :-
  325    is_type_definition(A, B),
  326    assert_type_definition(B).
  327assert_type_definition(typedef(A, B)) :-
  328    type_definition(A, B).
  329assert_type_definition(alias(A, B)) :-
  330    type_alias(A, B).
  331is_type_definition(A, B) :-
  332    (   A=(:-C)
  333    ->  true
  334    ;   A=C
  335    ),
  336    C=..[chr_type, D],
  337    (   D=(E--->F)
  338    ->  tdisj2list(F, G),
  339        B=typedef(E, G)
  340    ;   D=(H==E)
  341    ->  B=alias(H, E)
  342    ;   B=typedef(D, []),
  343        chr_warning(syntax,
  344                    'Empty type definition `~w\'.\nAre you sure you want to declare a phantom type?\n',
  345                    [A])
  346    ).
  347tdisj2list(A, B) :-
  348    tdisj2list(A, B, []).
  349tdisj2list(A, B, C) :-
  350    A=(D;E),
  351    !,
  352    tdisj2list(D, B, F),
  353    tdisj2list(E, F, C).
  354tdisj2list(A, [A|B], B).
  355parse_rule(A, B) :-
  356    A= @(C, D),
  357    !,
  358    rule(D, yes(C), B).
  359parse_rule(A, B) :-
  360    rule(A, no, B).
  361rule(A, B, C) :-
  362    A=pragma(D, E),
  363    !,
  364    (   var(E)
  365    ->  F=[_]
  366    ;   conj2list(E, F)
  367    ),
  368    inc_rule_count(G),
  369    C=pragma(H, I, F, B, G),
  370    is_rule(D, H, I, C).
  371rule(A, B, C) :-
  372    inc_rule_count(D),
  373    C=pragma(E, F, [], B, D),
  374    is_rule(A, E, F, C).
  375is_rule(A, B, C, D) :-
  376    A= ==>(E, F),
  377    !,
  378    conj2list(E, G),
  379    get_ids(G, H, I, D),
  380    C=ids([], H),
  381    (   F=(J| K)
  382    ->  B=rule([], I, J, K)
  383    ;   B=rule([], I, true, F)
  384    ).
  385is_rule(A, B, C, D) :-
  386    A= <=>(E, F),
  387    !,
  388    (   F=(G| H)
  389    ->  I=G,
  390        J=H
  391    ;   I=true,
  392        J=F
  393    ),
  394    (   E= \(K, L)
  395    ->  conj2list(K, M),
  396        conj2list(L, N),
  397        get_ids(M, O, P, 0, Q, D),
  398        get_ids(N, R, S, Q, _, D),
  399        C=ids(R, O)
  400    ;   conj2list(E, N),
  401        P=[],
  402        get_ids(N, R, S, D),
  403        C=ids(R, [])
  404    ),
  405    B=rule(S, P, I, J).
  406get_ids(A, B, C, D) :-
  407    get_ids(A, B, C, 0, _, D).
  408get_ids([], [], [], A, A, _).
  409get_ids([A|B], [C|D], [E|F], C, G, H) :-
  410    (   A= #(E, I)
  411    ->  (   var(I)
  412        ->  I=C
  413        ;   check_direct_pragma(I, C, H)
  414        )
  415    ;   E=A
  416    ),
  417    J is C+1,
  418    get_ids(B, D, F, J, G, H).
  419check_direct_pragma(passive, A, B) :-
  420    !,
  421    B=pragma(_, _, _, _, C),
  422    passive(C, A).
  423check_direct_pragma(A, _, B) :-
  424    (   direct_pragma(C),
  425        atom_concat(A, _, C)
  426    ->  chr_warning(problem_pragma(A, B),
  427                    'completed `~w\' to `~w\'\n',
  428                    [A, C])
  429    ;   chr_warning(unsupported_pragma(A, B), '', [])
  430    ).
  431direct_pragma(passive).
  432is_module_declaration((:-module(A)), A).
  433is_module_declaration((:-module(A, _)), A).
  434add_constraints([]).
  435add_constraints([A|B]) :-
  436    max_occurrence(A, 0),
  437    A=_/C,
  438    length(D, C),
  439    set_elems(D, ?),
  440    constraint_mode(A, D),
  441    add_constraints(B).
  442add_rules([]).
  443add_rules([A|B]) :-
  444    A=pragma(_, _, _, _, C),
  445    rule(C, A),
  446    add_rules(B).
  447check_declared_constraints(A) :-
  448    tree_set_empty(B),
  449    check_declared_constraints(A, B).
  450check_declared_constraints([], _).
  451check_declared_constraints([A|B], C) :-
  452    (   tree_set_memberchk(A, C)
  453    ->  chr_error(syntax(A),
  454                  'Constraint multiply defined: ~w.\n\tRemove redundant declaration!\n',
  455                  [A])
  456    ;   true
  457    ),
  458    tree_set_add(C, A, D),
  459    check_declared_constraints(B, D).
  460check_rules(A, B, C) :-
  461    maplist(check_rule(C), A, B).
  462check_rule(A, B, C) :-
  463    B=pragma(_, _, D, _, _),
  464    check_ast_rule_indexing(C, B),
  465    check_ast_trivial_propagation_rule(C, B),
  466    check_ast_head_constraints(C, A, B),
  467    check_pragmas(D, B).
  468check_ast_trivial_propagation_rule(A, B) :-
  469    A=ast_rule(C, _, _, D, _),
  470    (   C=propagation(_),
  471        D==[]
  472    ->  chr_warning(weird_program,
  473                    'Ignoring propagation rule with empty body: ~@.\n\t\n',
  474                    [format_rule(B)]),
  475        set_rule_passive(B)
  476    ;   true
  477    ).
  478set_rule_passive(A) :-
  479    A=pragma(_, _, _, _, B),
  480    set_all_passive(B).
  481check_trivial_propagation_rule(A) :-
  482    A=pragma(B, _, _, _, C),
  483    (   B=rule([], _, _, true)
  484    ->  chr_warning(weird_program,
  485                    'Ignoring propagation rule with empty body: ~@.\n\t\n',
  486                    [format_rule(A)]),
  487        set_all_passive(C)
  488    ;   true
  489    ).
  490check_ast_head_constraints(ast_rule(A, _, _, _, _), B, C) :-
  491    check_ast_head_constraints_(A, B, C).
  492check_ast_head_constraints_(simplification(A), B, C) :-
  493    maplist(check_ast_head_constraint(B, C), A).
  494check_ast_head_constraints_(propagation(A), B, C) :-
  495    maplist(check_ast_head_constraint(B, C), A).
  496check_ast_head_constraints_(simpagation(A, B), C, D) :-
  497    maplist(check_ast_head_constraint(C, D), A),
  498    maplist(check_ast_head_constraint(C, D), B).
  499check_ast_head_constraint(A, B, chr_constraint(C, _, D)) :-
  500    (   memberchk(C, A)
  501    ->  true
  502    ;   chr_error(syntax(D),
  503                  'Undeclared constraint ~w in head of ~@.\n\tConstraint should be one of ~w.\n',
  504                  [_/_, format_rule(B), A])
  505    ).
  506check_head_constraints([], _, _).
  507check_head_constraints([A|B], C, D) :-
  508    functor(A, E, F),
  509    (   memberchk(E/F, C)
  510    ->  check_head_constraints(B, C, D)
  511    ;   chr_error(syntax(A),
  512                  'Undeclared constraint ~w in head of ~@.\n\tConstraint should be one of ~w.\n',
  513                  [E/F, format_rule(D), C])
  514    ).
  515check_pragmas([], _).
  516check_pragmas([A|B], C) :-
  517    check_pragma(A, C),
  518    check_pragmas(B, C).
  519check_pragma(A, B) :-
  520    var(A),
  521    !,
  522    chr_error(syntax(A),
  523              'Invalid pragma ~w in ~@.\n\tPragma should not be a variable!\n',
  524              [A, format_rule(B)]).
  525check_pragma(passive(A), B) :-
  526    !,
  527    B=pragma(_, ids(C, D), _, _, E),
  528    (   memberchk_eq(A, C)
  529    ->  true
  530    ;   memberchk_eq(A, D)
  531    ->  true
  532    ;   chr_error(syntax(A),
  533                  'Invalid identifier ~w in pragma passive in ~@.\n',
  534                  [A, format_rule(B)])
  535    ),
  536    passive(E, A).
  537check_pragma(mpassive(A), B) :-
  538    !,
  539    B=pragma(_, _, _, _, C),
  540    chr_warning(experimental,
  541                'Experimental pragma ~w. Use with care!\n',
  542                [mpassive(A)]),
  543    maplist(passive(C), A).
  544check_pragma(A, B) :-
  545    A=already_in_heads,
  546    !,
  547    chr_warning(unsupported_pragma(A, B),
  548                'Termination and correctness may be affected.\n',
  549                []).
  550check_pragma(A, B) :-
  551    A=already_in_head(_),
  552    !,
  553    chr_warning(unsupported_pragma(A, B),
  554                'Termination and correctness may be affected.\n',
  555                []).
  556check_pragma(A, B) :-
  557    A=no_history,
  558    !,
  559    chr_warning(experimental,
  560                'Experimental pragma no_history. Use with care!\n',
  561                []),
  562    B=pragma(_, _, _, _, C),
  563    no_history(C).
  564check_pragma(A, B) :-
  565    A=history(C, D),
  566    !,
  567    B=pragma(_, ids(E, F), _, _, G),
  568    chr_warning(experimental,
  569                'Experimental pragma ~w. Use with care!\n',
  570                [A]),
  571    (   E\==[]
  572    ->  chr_error(syntax(A),
  573                  'Pragma history only implemented for propagation rules.\n',
  574                  [])
  575    ;   \+ atom(C)
  576    ->  chr_error(syntax(A),
  577                  'Illegal argument for pragma history: ~w is not an atom (rule number ~w).\n',
  578                  [C, G])
  579    ;   \+ is_set(D)
  580    ->  chr_error(syntax(A),
  581                  'Illegal argument for pragma history: ~w is not a set (rule number ~w).\n',
  582                  [D, G])
  583    ;   check_history_pragma_ids(D, E, F)
  584    ->  history(G, C, D)
  585    ;   chr_error(syntax(A),
  586                  'Invalid identifier(s) in pragma ~w of rule number ~w.\n',
  587                  [A, G])
  588    ).
  589check_pragma(A, B) :-
  590    A=source_location(C),
  591    !,
  592    B=pragma(_, _, _, _, D),
  593    source_location(D, C).
  594check_history_pragma_ids([], _, _).
  595check_history_pragma_ids([A|B], C, D) :-
  596    (   memberchk_eq(A, D)
  597    ;   memberchk_eq(A, C)
  598    ),
  599    check_history_pragma_ids(B, C, D).
  600check_pragma(A, B) :-
  601    chr_error(syntax(A),
  602              'Unknown pragma ~w in ~@.\n',
  603              [A, format_rule(B)]).
  604test_named_history_id_pairs(_, [], _, []).
  605test_named_history_id_pairs(A, [B|C], D, [E|F]) :-
  606    test_named_history_id_pair(A, B, D, E),
  607    test_named_history_id_pairs(A, C, D, F).
  608format_rule(A) :-
  609    A=pragma(_, _, _, B, C),
  610    (   B=yes(D)
  611    ->  write('rule '),
  612        write(D)
  613    ;   write('rule number '),
  614        write(C)
  615    ),
  616    get_line_number(C, E),
  617    write(' at '),
  618    write(E).
  619check_ast_rule_indexing(A, B) :-
  620    A=ast_rule(C, D, _, _, _),
  621    tree_set_empty(E),
  622    ast_head_variables(C, E, F),
  623    ast_remove_anti_monotonic_guards(D, F, G),
  624    ast_term_list_variables(G, E, H),
  625    check_ast_head_indexing(C, H),
  626    (   chr_pp_flag(term_indexing, on)
  627    ->  B=pragma(I, _, _, _, _),
  628        I=rule(J, K, L, _),
  629        term_variables(J-K, M),
  630        remove_anti_monotonic_guards(L, M, N),
  631        term_variables(N, O),
  632        append(J, K, P),
  633        check_specs_indexing(P, O, _)
  634    ;   true
  635    ).
  636check_ast_head_indexing(simplification(A), B) :-
  637    check_ast_indexing(A, B).
  638check_ast_head_indexing(propagation(A), B) :-
  639    check_ast_indexing(A, B).
  640check_ast_head_indexing(simpagation(A, B), C) :-
  641    ast_constraint_list_variables(B, C, D),
  642    check_ast_indexing(A, D),
  643    ast_constraint_list_variables(A, C, E),
  644    check_ast_indexing(B, E).
  645check_rule_indexing(A) :-
  646    A=pragma(B, _, _, _, _),
  647    B=rule(C, D, E, _),
  648    term_variables(C-D, F),
  649    remove_anti_monotonic_guards(E, F, G),
  650    check_indexing(C, G-D),
  651    check_indexing(D, G-C),
  652    (   chr_pp_flag(term_indexing, on)
  653    ->  term_variables(G, H),
  654        append(C, D, I),
  655        check_specs_indexing(I, H, _)
  656    ;   true
  657    ).
  658remove_anti_monotonic_guards(A, B, C) :-
  659    conj2list(A, D),
  660    remove_anti_monotonic_guard_list(D, B, E),
  661    list2conj(E, C).
  662remove_anti_monotonic_guard_list([], _, []).
  663remove_anti_monotonic_guard_list([A|B], C, D) :-
  664    (   A=var(E),
  665        memberchk_eq(E, C)
  666    ->  D=F
  667    ;   D=[A|F]
  668    ),
  669    remove_anti_monotonic_guard_list(B, C, F).
  670ast_remove_anti_monotonic_guards([], _, []).
  671ast_remove_anti_monotonic_guards([A|B], C, D) :-
  672    (   A=compound(var, 1, [E], _),
  673        ast_var_memberchk(E, C)
  674    ->  D=F
  675    ;   D=[A|F]
  676    ),
  677    ast_remove_anti_monotonic_guards(B, C, F).
  678check_ast_indexing([], _).
  679check_ast_indexing([A|B], C) :-
  680    A=chr_constraint(D, E, _),
  681    ast_constraint_list_variables(B, C, F),
  682    check_ast_indexing(E, 1, D, F),
  683    ast_constraint_variables(A, C, G),
  684    check_ast_indexing(B, G).
  685check_ast_indexing([], _, _, _).
  686check_ast_indexing([A|B], C, D, E) :-
  687    (   is_indexed_argument(D, C)
  688    ->  true
  689    ;   ast_nonvar(A)
  690    ->  indexed_argument(D, C)
  691    ;   ast_term_list_variables(B, E, F),
  692        (   ast_var_memberchk(A, F)
  693        ->  indexed_argument(D, C)
  694        ;   true
  695        )
  696    ),
  697    G is C+1,
  698    ast_term_variables(A, E, H),
  699    check_ast_indexing(B, G, D, H).
  700check_indexing([], _).
  701check_indexing([A|B], C) :-
  702    functor(A, D, E),
  703    A=..[_|F],
  704    term_variables(B-C, G),
  705    check_indexing(F, 1, D/E, G),
  706    check_indexing(B, [A|C]).
  707check_indexing([], _, _, _).
  708check_indexing([A|B], C, D, E) :-
  709    (   is_indexed_argument(D, C)
  710    ->  true
  711    ;   nonvar(A)
  712    ->  indexed_argument(D, C)
  713    ;   term_variables(B, F),
  714        append(F, E, G),
  715        (   memberchk_eq(A, G)
  716        ->  indexed_argument(D, C)
  717        ;   true
  718        )
  719    ),
  720    H is C+1,
  721    term_variables(A, I),
  722    append(I, E, J),
  723    check_indexing(B, H, D, J).
  724check_specs_indexing([], _, []).
  725check_specs_indexing([A|B], C, D) :-
  726    D=[E|F],
  727    term_variables(B, G, C),
  728    check_spec_indexing(A, G, E),
  729    term_variables(A, H, C),
  730    check_specs_indexing(B, H, F).
  731check_spec_indexing(A, B, C) :-
  732    functor(A, D, E),
  733    C=spec(D, E, F),
  734    A=..[_|G],
  735    check_args_spec_indexing(G, 1, B, F),
  736    indexing_spec(D/E, [F]).
  737check_args_spec_indexing([], _, _, []).
  738check_args_spec_indexing([A|B], C, D, E) :-
  739    term_variables(B, F, D),
  740    (   check_arg_spec_indexing(A, C, F, G)
  741    ->  E=[G|H]
  742    ;   E=H
  743    ),
  744    I is C+1,
  745    term_variables(A, J, D),
  746    check_args_spec_indexing(B, I, J, H).
  747check_arg_spec_indexing(A, B, C, D) :-
  748    (   var(A)
  749    ->  memberchk_eq(A, C),
  750        D=specinfo(B, any, [])
  751    ;   functor(A, E, F),
  752        D=specinfo(B, E/F, [G]),
  753        A=..[_|H],
  754        check_args_spec_indexing(H, 1, C, G)
  755    ).
  756add_occurrences(A, B) :-
  757    maplist(add_rule_occurrences, A, B).
  758add_rule_occurrences(A, B) :-
  759    A=pragma(_, C, _, _, D),
  760    B=ast_rule(E, _, _, _, _),
  761    add_head_occurrences(E, C, D).
  762add_head_occurrences(simplification(A), ids(B, _), C) :-
  763    maplist(add_constraint_occurrence(C, simplification), A, B).
  764add_head_occurrences(propagation(A), ids(_, B), C) :-
  765    maplist(add_constraint_occurrence(C, propagation), A, B).
  766add_head_occurrences(simpagation(A, B), ids(C, D), E) :-
  767    maplist(add_constraint_occurrence(E, simplification), A, C),
  768    maplist(add_constraint_occurrence(E, propagation), B, D).
  769add_constraint_occurrence(A, B, C, D) :-
  770    C=chr_constraint(E, _, _),
  771    new_occurrence(E, A, D, B).
  772observation_analysis(A, B, C, D) :-
  773    (   all_spawned(A, C)
  774    ->  true
  775    ;   var(B)
  776    ->  spawns_all(A, C)
  777    ;   B=true
  778    ->  true
  779    ;   B=fail
  780    ->  true
  781    ;   B=!
  782    ->  true
  783    ;   B=(E, F)
  784    ->  observation_analysis(A, E, C, D),
  785        observation_analysis(A, F, C, D)
  786    ;   B=(E;F)
  787    ->  observation_analysis(A, E, C, D),
  788        observation_analysis(A, F, C, D)
  789    ;   B=(E->F)
  790    ->  observation_analysis(A, E, C, D),
  791        observation_analysis(A, F, C, D)
  792    ;   B=(\+G)
  793    ->  observation_analysis(A, G, C, D)
  794    ;   functor(B, H, I),
  795        memberchk(H/I, D)
  796    ->  spawns(A, C, H/I)
  797    ;   B=(_=_)
  798    ->  spawns_all_triggers(A, C)
  799    ;   B=(_ is _)
  800    ->  spawns_all_triggers(A, C)
  801    ;   builtin_binds_b(B, J)
  802    ->  (   J==[]
  803        ->  true
  804        ;   spawns_all_triggers(A, C)
  805        )
  806    ;   spawns_all(A, C)
  807    ).
  808is_observed(A, B) :-
  809    is_observed(A, B, _),
  810    ai_is_observed(A, B).
  811is_stored_in_guard(A, B) :-
  812    chr_pp_flag(store_in_guards, on),
  813    do_is_observed(A, B, guard).
  814generate_attach_detach_a_constraint_all([], []).
  815generate_attach_detach_a_constraint_all([A|B], C) :-
  816    (   (   chr_pp_flag(debugable, on)
  817        ;   is_stored(A),
  818            \+ only_ground_indexed_arguments(A),
  819            \+ get_store_type(A, var_assoc_store(_, _))
  820        )
  821    ->  generate_attach_a_constraint(A, D),
  822        generate_detach_a_constraint(A, E)
  823    ;   D=[],
  824        E=[]
  825    ),
  826    generate_attach_detach_a_constraint_all(B, F),
  827    append([D, E, F], C).
  828generate_attach_a_constraint(A, [B, C]) :-
  829    generate_attach_a_constraint_nil(A, B),
  830    generate_attach_a_constraint_cons(A, C).
  831attach_constraint_atom(A, B, C, D) :-
  832    make_name(attach_, A, E),
  833    D=..[E, B, C].
  834generate_attach_a_constraint_nil(A, B) :-
  835    B=(C:-true),
  836    attach_constraint_atom(A, [], _, C).
  837generate_attach_a_constraint_cons(A, B) :-
  838    B=(C:-D),
  839    attach_constraint_atom(A, [E|F], G, C),
  840    attach_constraint_atom(A, F, G, H),
  841    D=(I, J, H),
  842    get_max_constraint_index(K),
  843    (   K==1
  844    ->  generate_attach_body_1(A, E, G, I)
  845    ;   generate_attach_body_n(A, E, G, I)
  846    ),
  847    chr_pp_flag(solver_events, L),
  848    (   L\==none
  849    ->  _=[[E|_], G],
  850        get_target_module(M),
  851        use_auxiliary_predicate(run_suspensions),
  852        J=clp_events:subscribe(E, L, M, M:'$run_suspensions'([G]))
  853    ;   J=true
  854    ).
  855generate_attach_body_1(_, A, B, C) :-
  856    get_target_module(D),
  857    C=(get_attr(A, D, E)->put_attr(A, D, [B|E]);put_attr(A, D, [B])).
  858generate_attach_body_n(A/B, C, D, E) :-
  859    chr_pp_flag(experiment, off),
  860    !,
  861    get_constraint_index(A/B, F),
  862    get_max_constraint_index(G),
  863    get_target_module(H),
  864    add_attr(G, D, F, I, J, K),
  865    singleton_attr(G, D, F, L),
  866    E=(get_attr(C, H, I)->J, put_attr(C, H, K);put_attr(C, H, L)),
  867    !.
  868generate_attach_body_n(A/B, C, D, E) :-
  869    chr_pp_flag(experiment, on),
  870    !,
  871    get_constraint_index(A/B, F),
  872    or_pattern(F, G),
  873    H is F+1,
  874    get_max_constraint_index(I),
  875    get_target_module(J),
  876    singleton_attr(I, D, F, K),
  877    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)),
  878    !.
  879generate_detach_a_constraint(A, [B, C]) :-
  880    generate_detach_a_constraint_nil(A, B),
  881    generate_detach_a_constraint_cons(A, C).
  882detach_constraint_atom(A, B, C, D) :-
  883    make_name(detach_, A, E),
  884    D=..[E, B, C].
  885generate_detach_a_constraint_nil(A, B) :-
  886    B=(C:-true),
  887    detach_constraint_atom(A, [], _, C).
  888generate_detach_a_constraint_cons(A, B) :-
  889    B=(C:-D),
  890    detach_constraint_atom(A, [E|F], G, C),
  891    detach_constraint_atom(A, F, G, H),
  892    D=(I, H),
  893    get_max_constraint_index(J),
  894    (   J==1
  895    ->  generate_detach_body_1(A, E, G, I)
  896    ;   generate_detach_body_n(A, E, G, I)
  897    ).
  898generate_detach_body_1(_, A, B, C) :-
  899    get_target_module(D),
  900    C=(get_attr(A, D, E)->'chr sbag_del_element'(E, B, F), (F==[]->del_attr(A, D);put_attr(A, D, F));true).
  901generate_detach_body_n(A/B, C, D, E) :-
  902    get_constraint_index(A/B, F),
  903    get_max_constraint_index(G),
  904    rem_attr(G, C, D, F, H, I),
  905    get_target_module(J),
  906    E=(get_attr(C, J, H)->I;true),
  907    !.
  908create_indexed_variables_body([], [], [], _, _, _, empty, 0).
  909create_indexed_variables_body([A|B], [C|D], [E|F], G, H, I, J, K) :-
  910    L is H+1,
  911    create_indexed_variables_body(B,
  912                                  D,
  913                                  F,
  914                                  M,
  915                                  L,
  916                                  I,
  917                                  N,
  918                                  O),
  919    (   C==(?),
  920        is_indexed_argument(I, H)
  921    ->  (   atomic_type(E)
  922        ->  J=((var(A)->G=[A|M];G=M), P),
  923            (   N==empty
  924            ->  P=true,
  925                M=[]
  926            ;   P=N
  927            )
  928        ;   N==empty
  929        ->  J=term_variables(A, G)
  930        ;   J=(term_variables(A, G, M), N)
  931        ),
  932        K=O
  933    ;   C==(-),
  934        is_indexed_argument(I, H)
  935    ->  (   N==empty
  936        ->  J=(G=[A])
  937        ;   J=(G=[A|M], N)
  938        ),
  939        K is O+1
  940    ;   G=M,
  941        J=N,
  942        K is O+1
  943    ).
  944spectermvars(A, B, C, D, E, F) :-
  945    spectermvars(B, 1, A, C, D, F, [], E).
  946spectermvars([], A, _, _, B, C, C, true) :-
  947    A>B,
  948    !.
  949spectermvars([A|B], C, D, E, F, G, H, I) :-
  950    I=(J, K),
  951    argspecs(D, C, L, M),
  952    merge_argspecs(L, N),
  953    arggoal(N, A, J, G, O),
  954    P is C+1,
  955    spectermvars(B,
  956                 P,
  957                 M,
  958                 E,
  959                 F,
  960                 O,
  961                 H,
  962                 K).
  963argspecs([], _, [], []).
  964argspecs([[]|A], B, C, D) :-
  965    argspecs(A, B, C, D).
  966argspecs([[specinfo(A, B, C)|D]|E], F, G, H) :-
  967    (   F==A
  968    ->  G=[specinfo(A, B, C)|I],
  969        (   D=[]
  970        ->  J=H
  971        ;   H=[D|J]
  972        )
  973    ;   G=I,
  974        H=[[specinfo(A, B, C)|D]|J]
  975    ),
  976    argspecs(E, F, I, J).
  977merge_argspecs(A, B) :-
  978    sort(A, C),
  979    merge_argspecs_(C, B).
  980merge_argspecs_([], []).
  981merge_argspecs_([A], B) :-
  982    !,
  983    B=[A].
  984merge_argspecs_([specinfo(A, B, C), specinfo(A, D, E)|F], G) :-
  985    (   (   B==any
  986        ;   D==any
  987        )
  988    ->  merge_argspecs_([specinfo(A, any, [])|F], G)
  989    ;   B==D
  990    ->  append(C, E, H),
  991        merge_argspecs_([specinfo(A, B, H)|F], G)
  992    ;   G=[specinfo(A, B, C)|I],
  993        merge_argspecs_([specinfo(A, D, E)|F], I)
  994    ).
  995arggoal(A, B, C, D, E) :-
  996    (   A==[]
  997    ->  D=E,
  998        C=true
  999    ;   A=[specinfo(_, any, _)]
 1000    ->  C=term_variables(B, D, E)
 1001    ;   C=(var(B)->D=[B|E];F),
 1002        arggoal_cases(A, B, D, E, F)
 1003    ).
 1004arggoal_cases([], _, A, B, A=B).
 1005arggoal_cases([specinfo(_, A, B)|C], D, E, F, G) :-
 1006    (   B==[]
 1007    ->  G=H
 1008    ;   B==[[]]
 1009    ->  G=H
 1010    ;   A=I/J
 1011    ->  G=(K;H),
 1012        functor(L, I, J),
 1013        L=..[_|M],
 1014        K=(D=L->N),
 1015        spectermvars(M,
 1016                     1,
 1017                     B,
 1018                     I,
 1019                     J,
 1020                     E,
 1021                     F,
 1022                     N)
 1023    ),
 1024    arggoal_cases(C, D, E, F, H).
 1025generate_extra_clauses(A, B) :-
 1026    generate_activate_clauses(A, B, C),
 1027    generate_remove_clauses(A, C, D),
 1028    generate_allocate_clauses(A, D, E),
 1029    generate_insert_constraint_internal_clauses(A, E, F),
 1030    generate_novel_production(F, G),
 1031    generate_extend_history(G, H),
 1032    generate_run_suspensions_clauses(A, H, I),
 1033    generate_empty_named_history_initialisations(I, J),
 1034    J=[].
 1035generate_remove_clauses([], A, A).
 1036generate_remove_clauses([A|B], C, D) :-
 1037    generate_remove_clause(A, C, E),
 1038    generate_remove_clauses(B, E, D).
 1039remove_constraint_goal(A, B, C, D, E, F, G) :-
 1040    uses_state(A, removed),
 1041    (   chr_pp_flag(inline_insertremove, off)
 1042    ->  use_auxiliary_predicate(remove_constraint_internal, A),
 1043        G=(H, (I==yes->E;D)),
 1044        remove_constraint_atom(A, B, C, I, H)
 1045    ;   delay_phase_end(validate_store_type_assumptions,
 1046                        generate_remove_body(A,
 1047                                             B,
 1048                                             C,
 1049                                             D,
 1050                                             E,
 1051                                             F,
 1052                                             G))
 1053    ).
 1054remove_constraint_atom(A, B, C, D, E) :-
 1055    make_name('$remove_constraint_internal_', A, F),
 1056    (   chr_pp_flag(debugable, off),
 1057        (   only_ground_indexed_arguments(A)
 1058        ;   get_store_type(A, var_assoc_store(_, _))
 1059        )
 1060    ->  E=..[F, B, D]
 1061    ;   E=..[F, B, C, D]
 1062    ).
 1063generate_remove_clause(A, B, C) :-
 1064    (   is_used_auxiliary_predicate(remove_constraint_internal, A)
 1065    ->  B=[D|C],
 1066        D=(E:-F),
 1067        remove_constraint_atom(A, G, H, I, E),
 1068        generate_remove_body(A,
 1069                             G,
 1070                             H,
 1071                             I=no,
 1072                             I=yes,
 1073                             active,
 1074                             F)
 1075    ;   B=C
 1076    ).
 1077generate_remove_body(A, B, C, D, E, F, G) :-
 1078    (   chr_pp_flag(debugable, off),
 1079        (   only_ground_indexed_arguments(A)
 1080        ;   get_store_type(A, var_assoc_store(_, _))
 1081        )
 1082    ->  (   F==active
 1083        ->  get_update_suspension_field(A,
 1084                                        B,
 1085                                        state,
 1086                                        H,
 1087                                        removed,
 1088                                        I,
 1089                                        J,
 1090                                        K),
 1091            if_used_state(A, not_stored_yet, J, true, L),
 1092            if_used_state(A,
 1093                          not_stored_yet,
 1094                          (H==not_stored_yet->D;E),
 1095                          E,
 1096                          M)
 1097        ;   F==partner
 1098        ->  get_update_suspension_field(A,
 1099                                        B,
 1100                                        state,
 1101                                        H,
 1102                                        removed,
 1103                                        I,
 1104                                        _,
 1105                                        K),
 1106            L=true,
 1107            M=E
 1108        ),
 1109        G=(I, L, K, M)
 1110    ;   static_suspension_term(A, N),
 1111        get_static_suspension_term_field(arguments, A, N, O),
 1112        generate_indexed_variables_body(A, O, P, C),
 1113        (   chr_pp_flag(debugable, on)
 1114        ->  A=Q/_,
 1115            get_static_suspension_term_field(functor,
 1116                                             A,
 1117                                             N,
 1118                                             Q)
 1119        ;   true
 1120        ),
 1121        (   F==active
 1122        ->  get_update_static_suspension_field(A,
 1123                                               B,
 1124                                               N,
 1125                                               state,
 1126                                               H,
 1127                                               removed,
 1128                                               J,
 1129                                               K),
 1130            if_used_state(A, not_stored_yet, J, true, L),
 1131            if_used_state(A,
 1132                          not_stored_yet,
 1133                          (H==not_stored_yet->C=[], D;P, E),
 1134                          (P, E),
 1135                          M)
 1136        ;   F==partner
 1137        ->  get_update_static_suspension_field(A,
 1138                                               B,
 1139                                               N,
 1140                                               state,
 1141                                               H,
 1142                                               removed,
 1143                                               _,
 1144                                               K),
 1145            L=true,
 1146            M=(P, E)
 1147        ),
 1148        G=(B=N, L, K, M)
 1149    ).
 1150generate_activate_clauses([], A, A).
 1151generate_activate_clauses([A|B], C, D) :-
 1152    generate_activate_clause(A, C, E),
 1153    generate_activate_clauses(B, E, D).
 1154activate_constraint_goal(A, B, C, D, E, F) :-
 1155    (   chr_pp_flag(inline_insertremove, off)
 1156    ->  use_auxiliary_predicate(activate_constraint, A),
 1157        F=(G, (H==yes->B;true)),
 1158        activate_constraint_atom(A,
 1159                                 H,
 1160                                 C,
 1161                                 D,
 1162                                 E,
 1163                                 G)
 1164    ;   delay_phase_end(validate_store_type_assumptions,
 1165                        activate_constraint_body(A,
 1166                                                 B,
 1167                                                 true,
 1168                                                 C,
 1169                                                 D,
 1170                                                 E,
 1171                                                 F))
 1172    ).
 1173activate_constraint_atom(A, B, C, D, E, F) :-
 1174    make_name('$activate_constraint_', A, G),
 1175    (   chr_pp_flag(debugable, off),
 1176        only_ground_indexed_arguments(A)
 1177    ->  F=..[G, B, D]
 1178    ;   chr_pp_flag(debugable, off),
 1179        may_trigger(A),
 1180        get_store_type(A, var_assoc_store(_, _))
 1181    ->  F=..[G, B, D, E]
 1182    ;   chr_pp_flag(debugable, off),
 1183        may_trigger(A),
 1184        get_store_type(A, var_assoc_store(_, _))
 1185    ->  F=..[G, B, C, D, E]
 1186    ;   F=..[G, B, C, D]
 1187    ).
 1188generate_activate_clause(A, B, C) :-
 1189    (   is_used_auxiliary_predicate(activate_constraint, A)
 1190    ->  B=[D|C],
 1191        D=(E:-F),
 1192        activate_constraint_atom(A,
 1193                                 G,
 1194                                 H,
 1195                                 I,
 1196                                 J,
 1197                                 E),
 1198        activate_constraint_body(A,
 1199                                 G=yes,
 1200                                 G=no,
 1201                                 H,
 1202                                 I,
 1203                                 J,
 1204                                 F)
 1205    ;   B=C
 1206    ).
 1207activate_constraint_body(A, B, C, D, E, F, G) :-
 1208    (   chr_pp_flag(debugable, off),
 1209        may_trigger(A),
 1210        uses_field(A, generation)
 1211    ->  get_update_suspension_field(A,
 1212                                    E,
 1213                                    generation,
 1214                                    H,
 1215                                    F,
 1216                                    I,
 1217                                    J,
 1218                                    K),
 1219        L=(I, J, F is H+1, K)
 1220    ;   L=true
 1221    ),
 1222    get_update_suspension_field(A,
 1223                                E,
 1224                                state,
 1225                                M,
 1226                                active,
 1227                                N,
 1228                                O,
 1229                                P),
 1230    if_used_state(A, not_stored_yet, O, true, Q),
 1231    (   chr_pp_flag(debugable, off),
 1232        (   only_ground_indexed_arguments(A)
 1233        ;   get_store_type(A, var_assoc_store(_, _))
 1234        )
 1235    ->  if_used_state(A,
 1236                      not_stored_yet,
 1237                      (M==not_stored_yet->B;C),
 1238                      C,
 1239                      R)
 1240    ;   get_dynamic_suspension_term_field(arguments,
 1241                                          A,
 1242                                          E,
 1243                                          S,
 1244                                          T),
 1245        generate_indexed_variables_body(A, S, U, D),
 1246        chr_none_locked(D, V),
 1247        if_used_state(A,
 1248                      not_stored_yet,
 1249                      (M==not_stored_yet->T, U, V, B;C),
 1250                      C,
 1251                      R)
 1252    ),
 1253    G=(N, Q, P, L, R).
 1254generate_allocate_clauses([], A, A).
 1255generate_allocate_clauses([A|B], C, D) :-
 1256    generate_allocate_clause(A, C, E),
 1257    generate_allocate_clauses(B, E, D).
 1258allocate_constraint_goal(A, B, C, D) :-
 1259    uses_state(A, not_stored_yet),
 1260    (   chr_pp_flag(inline_insertremove, off)
 1261    ->  use_auxiliary_predicate(allocate_constraint, A),
 1262        allocate_constraint_atom(A, B, C, D)
 1263    ;   D=(B=E, F),
 1264        delay_phase_end(validate_store_type_assumptions,
 1265                        allocate_constraint_body(A,
 1266                                                 E,
 1267                                                 C,
 1268                                                 F))
 1269    ).
 1270allocate_constraint_atom(A, B, C, D) :-
 1271    make_name('$allocate_constraint_', A, E),
 1272    D=..[E, B|C].
 1273generate_allocate_clause(A, B, C) :-
 1274    (   is_used_auxiliary_predicate(allocate_constraint, A)
 1275    ->  B=[D|C],
 1276        D=(E:-F),
 1277        A=_/G,
 1278        length(H, G),
 1279        allocate_constraint_atom(A, I, H, E),
 1280        allocate_constraint_body(A, I, H, F)
 1281    ;   B=C
 1282    ).
 1283allocate_constraint_body(A, B, C, D) :-
 1284    static_suspension_term(A, E),
 1285    get_static_suspension_term_field(arguments, A, E, C),
 1286    (   chr_pp_flag(debugable, on)
 1287    ->  A=F/_,
 1288        get_static_suspension_term_field(functor, A, E, F)
 1289    ;   true
 1290    ),
 1291    (   chr_pp_flag(debugable, on)
 1292    ->  (   may_trigger(A)
 1293        ->  append(C, [B], G),
 1294            build_head(_, _, [0], G, H),
 1295            get_target_module(I),
 1296            J=I:H
 1297        ;   J=true
 1298        ),
 1299        K=(B=E),
 1300        create_static_suspension_field(A,
 1301                                       E,
 1302                                       continuation,
 1303                                       J,
 1304                                       L),
 1305        create_static_suspension_field(A, E, generation, 0, M)
 1306    ;   may_trigger(A),
 1307        uses_field(A, generation)
 1308    ->  create_static_suspension_field(A, E, generation, 0, M),
 1309        B=E,
 1310        K=true,
 1311        L=true
 1312    ;   M=true,
 1313        B=E,
 1314        K=true,
 1315        L=true
 1316    ),
 1317    (   uses_history(A)
 1318    ->  create_static_suspension_field(A, E, history, t, N)
 1319    ;   N=true
 1320    ),
 1321    create_static_suspension_field(A,
 1322                                   E,
 1323                                   state,
 1324                                   not_stored_yet,
 1325                                   O),
 1326    (   has_suspension_field(A, id)
 1327    ->  get_static_suspension_term_field(id, A, E, P),
 1328        gen_id(P, Q)
 1329    ;   Q=true
 1330    ),
 1331    D=(K, L, M, N, O, Q).
 1332gen_id(A, 'chr gen_id'(A)).
 1333generate_insert_constraint_internal_clauses([], A, A).
 1334generate_insert_constraint_internal_clauses([A|B], C, D) :-
 1335    generate_insert_constraint_internal_clause(A, C, E),
 1336    generate_insert_constraint_internal_clauses(B, E, D).
 1337insert_constraint_internal_constraint_goal(A, B, C, D, E, F) :-
 1338    (   chr_pp_flag(inline_insertremove, off)
 1339    ->  use_auxiliary_predicate(remove_constraint_internal, A),
 1340        insert_constraint_internal_constraint_atom(A,
 1341                                                   B,
 1342                                                   C,
 1343                                                   D,
 1344                                                   E,
 1345                                                   F)
 1346    ;   delay_phase_end(validate_store_type_assumptions,
 1347                        generate_insert_constraint_internal_body(A,
 1348                                                                 C,
 1349                                                                 D,
 1350                                                                 E,
 1351                                                                 B,
 1352                                                                 F))
 1353    ).
 1354insert_constraint_internal_constraint_atom(A, B, C, D, E, F) :-
 1355    insert_constraint_internal_constraint_name(A, G),
 1356    (   chr_pp_flag(debugable, on)
 1357    ->  F=..[G, B, C, D|E]
 1358    ;   (   only_ground_indexed_arguments(A)
 1359        ;   get_store_type(A, var_assoc_store(_, _))
 1360        )
 1361    ->  F=..[G, C|E]
 1362    ;   F=..[G, B, C|E]
 1363    ).
 1364insert_constraint_internal_constraint_name(A, B) :-
 1365    make_name('$insert_constraint_internal_', A, B).
 1366generate_insert_constraint_internal_clause(A, B, C) :-
 1367    (   is_used_auxiliary_predicate(insert_constraint_internal, A)
 1368    ->  B=[D|C],
 1369        D=(E:-F),
 1370        A=_/G,
 1371        length(H, G),
 1372        insert_constraint_internal_constraint_atom(A,
 1373                                                   I,
 1374                                                   J,
 1375                                                   K,
 1376                                                   H,
 1377                                                   E),
 1378        generate_insert_constraint_internal_body(A,
 1379                                                 J,
 1380                                                 K,
 1381                                                 H,
 1382                                                 I,
 1383                                                 F)
 1384    ;   B=C
 1385    ).
 1386generate_insert_constraint_internal_body(A, B, C, D, E, F) :-
 1387    static_suspension_term(A, G),
 1388    create_static_suspension_field(A, G, state, active, H),
 1389    (   chr_pp_flag(debugable, on)
 1390    ->  get_static_suspension_term_field(continuation, A, G, C),
 1391        create_static_suspension_field(A, G, generation, 0, I)
 1392    ;   may_trigger(A),
 1393        uses_field(A, generation)
 1394    ->  create_static_suspension_field(A, G, generation, 0, I)
 1395    ;   I=true
 1396    ),
 1397    (   chr_pp_flag(debugable, on)
 1398    ->  A=J/_,
 1399        get_static_suspension_term_field(functor, A, G, J)
 1400    ;   true
 1401    ),
 1402    (   uses_history(A)
 1403    ->  create_static_suspension_field(A, G, history, t, K)
 1404    ;   K=true
 1405    ),
 1406    get_static_suspension_term_field(arguments, A, G, D),
 1407    _=[_|_],
 1408    (   chr_pp_flag(debugable, off),
 1409        (   only_ground_indexed_arguments(A)
 1410        ;   get_store_type(A, var_assoc_store(_, _))
 1411        )
 1412    ->  suspension_term_base_fields(A, _),
 1413        (   has_suspension_field(A, id)
 1414        ->  get_static_suspension_term_field(id, A, G, L),
 1415            gen_id(L, M)
 1416        ;   M=true
 1417        ),
 1418        F=(B=G, H, I, K, M)
 1419    ;   (   has_suspension_field(A, id)
 1420        ->  get_static_suspension_term_field(id, A, G, L),
 1421            gen_id(L, M)
 1422        ;   M=true
 1423        ),
 1424        generate_indexed_variables_body(A, D, N, E),
 1425        chr_none_locked(E, O),
 1426        F=(B=G, N, O, H, I, K, M)
 1427    ).
 1428generate_novel_production(A, B) :-
 1429    (   is_used_auxiliary_predicate(novel_production)
 1430    ->  A=[C|B],
 1431        C=('$novel_production'(D, E):-arg(3, D, F), (hprolog:get_ds(E, F, _)->fail;true))
 1432    ;   A=B
 1433    ).
 1434generate_extend_history(A, B) :-
 1435    (   is_used_auxiliary_predicate(extend_history)
 1436    ->  A=[C|B],
 1437        C=('$extend_history'(D, E):-arg(3, D, F), hprolog:put_ds(E, F, x, G), setarg(3, D, G))
 1438    ;   A=B
 1439    ).
 1440generate_empty_named_history_initialisations(A, B) :-
 1441    empty_named_history_initialisations(A, B),
 1442    find_empty_named_histories.
 1443empty_named_history_global_variable(A, B) :-
 1444    atom_concat('chr empty named history ', A, B).
 1445empty_named_history_novel_production(A, nb_getval(B, 0)) :-
 1446    empty_named_history_global_variable(A, B).
 1447empty_named_history_extend_history(A, b_setval(B, 1)) :-
 1448    empty_named_history_global_variable(A, B).
 1449generate_run_suspensions_clauses([], A, A).
 1450generate_run_suspensions_clauses([A|B], C, D) :-
 1451    generate_run_suspensions_clause(A, C, E),
 1452    generate_run_suspensions_clauses(B, E, D).
 1453run_suspensions_goal(A, B, C) :-
 1454    make_name('$run_suspensions_', A, D),
 1455    C=..[D, B].
 1456generate_run_suspensions_clause(A, B, C) :-
 1457    (   is_used_auxiliary_predicate(run_suspensions, A)
 1458    ->  B=[D, E|C],
 1459        run_suspensions_goal(A, [], D),
 1460        (   chr_pp_flag(debugable, on)
 1461        ->  run_suspensions_goal(A, [F|G], H),
 1462            get_update_suspension_field(A,
 1463                                        F,
 1464                                        state,
 1465                                        I,
 1466                                        triggered,
 1467                                        J,
 1468                                        K,
 1469                                        L),
 1470            get_update_suspension_field(A,
 1471                                        F,
 1472                                        state,
 1473                                        M,
 1474                                        active,
 1475                                        N,
 1476                                        O,
 1477                                        P),
 1478            get_update_suspension_field(A,
 1479                                        F,
 1480                                        generation,
 1481                                        Q,
 1482                                        R,
 1483                                        S,
 1484                                        T,
 1485                                        U),
 1486            get_dynamic_suspension_term_field(continuation,
 1487                                              A,
 1488                                              F,
 1489                                              V,
 1490                                              W),
 1491            run_suspensions_goal(A, G, X),
 1492            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)
 1493        ;   run_suspensions_goal(A, [F|G], H),
 1494            static_suspension_term(A, Y),
 1495            get_static_suspension_term_field(arguments,
 1496                                             A,
 1497                                             Y,
 1498                                             Z),
 1499            append(Z, [F], A1),
 1500            make_suspension_continuation_goal(A, A1, V),
 1501            run_suspensions_goal(A, G, X),
 1502            (   uses_field(A, generation)
 1503            ->  get_update_static_suspension_field(A,
 1504                                                   F,
 1505                                                   Y,
 1506                                                   generation,
 1507                                                   Q,
 1508                                                   R,
 1509                                                   S,
 1510                                                   U),
 1511                B1=(S, R is Q+1, U)
 1512            ;   B1=true
 1513            ),
 1514            get_update_static_suspension_field(A,
 1515                                               F,
 1516                                               Y,
 1517                                               state,
 1518                                               I,
 1519                                               triggered,
 1520                                               J,
 1521                                               L),
 1522            get_update_static_suspension_field(A,
 1523                                               F,
 1524                                               Y,
 1525                                               state,
 1526                                               M,
 1527                                               active,
 1528                                               C1,
 1529                                               D1),
 1530            if_used_state(A,
 1531                          removed,
 1532                          (J, (I==active->E1;true)),
 1533                          E1,
 1534                          F1),
 1535            E1=(L, B1, V, C1, (M==triggered->D1;true)),
 1536            E=(H:-F=Y, F1, X)
 1537        )
 1538    ;   B=C
 1539    ).
 1540generate_attach_increment(A) :-
 1541    get_max_constraint_index(B),
 1542    (   is_used_auxiliary_predicate(attach_increment),
 1543        B>0
 1544    ->  A=[C, D],
 1545        generate_attach_increment_empty(C),
 1546        (   B==1
 1547        ->  generate_attach_increment_one(D)
 1548        ;   generate_attach_increment_many(B, D)
 1549        )
 1550    ;   A=[]
 1551    ).
 1552generate_attach_increment_empty((attach_increment([], _):-true)).
 1553generate_attach_increment_one(A) :-
 1554    B=attach_increment([C|D], E),
 1555    get_target_module(F),
 1556    chr_not_locked(C, G),
 1557    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)),
 1558    A=(B:-H).
 1559generate_attach_increment_many(A, B) :-
 1560    C=attach_increment([D|E], F),
 1561    merge_attributes(A, F, G, H, I),
 1562    get_target_module(J),
 1563    chr_not_locked(D, K),
 1564    L=(K, (get_attr(D, J, G)->H, put_attr(D, J, I);put_attr(D, J, F)), attach_increment(E, F)),
 1565    B=(C:-L).
 1566generate_attr_unify_hook(A) :-
 1567    get_max_constraint_index(B),
 1568    (   B==0
 1569    ->  A=[]
 1570    ;   A=[C|D],
 1571        C=attribute_goals(_, E, E),
 1572        (   B==1
 1573        ->  generate_attr_unify_hook_one(D)
 1574        ;   generate_attr_unify_hook_many(B, D)
 1575        )
 1576    ).
 1577generate_attr_unify_hook_one([A]) :-
 1578    B=attr_unify_hook(C, D),
 1579    get_target_module(E),
 1580    get_indexed_constraint(1, F),
 1581    (   get_store_type(F, G),
 1582        (   G=default
 1583        ;   G=multi_store(H),
 1584            memberchk(default, H)
 1585        )
 1586    ->  make_run_suspensions(I, J, K),
 1587        make_run_suspensions(J, J, L),
 1588        (   atomic_types_suspended_constraint(F)
 1589        ->  M=true,
 1590            J=C,
 1591            N=true,
 1592            O=P,
 1593            Q=(append(C, P, R), sort(R, I)),
 1594            S=true
 1595        ;   M=sort(C, J),
 1596            N=sort(P, O),
 1597            Q='chr merge_attributes'(J, O, I),
 1598            use_auxiliary_predicate(attach_increment),
 1599            S=(compound(D)->term_variables(D, T), attach_increment(T, J);true)
 1600        ),
 1601        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)),
 1602        A=(B:-U)
 1603    ;   get_store_type(F, var_assoc_store(_, _))
 1604    ->  make_run_suspensions(R, R, K),
 1605        Q=merge_into_assoc_store(C, P, R),
 1606        U=(get_attr(D, E, P)->Q, K;put_attr(D, E, C)),
 1607        A=(B:-U)
 1608    ).
 1609generate_attr_unify_hook_many(A, [B]) :-
 1610    chr_pp_flag(dynattr, off),
 1611    !,
 1612    C=attr_unify_hook(D, E),
 1613    get_target_module(F),
 1614    make_attr(A, G, H, D),
 1615    bagof(I,
 1616          J^K^(member(J, H), I=sort(J, K)),
 1617          L),
 1618    list2conj(L, M),
 1619    bagof(K, J^member(sort(J, K), L), N),
 1620    merge_attributes2(A, G, N, O, P, Q),
 1621    get_all_suspensions2(A, Q, R),
 1622    make_attr(A, G, N, S),
 1623    make_run_suspensions_loop(R, N, T),
 1624    make_run_suspensions_loop(N, N, U),
 1625    (   forall(( between(1, A, V),
 1626                 get_indexed_constraint(V, W)
 1627               ),
 1628               atomic_types_suspended_constraint(W))
 1629    ->  X=true
 1630    ;   use_auxiliary_predicate(attach_increment),
 1631        X=(compound(E)->term_variables(E, Y), attach_increment(Y, S);true)
 1632    ),
 1633    Z=(M, (var(E)->(get_attr(E, F, O)->P, put_attr(E, F, Q), T;put_attr(E, F, S), U);X, U)),
 1634    B=(C:-Z).
 1635generate_attr_unify_hook_many(A, B) :-
 1636    C=attr_unify_hook(D, E),
 1637    get_target_module(F),
 1638    normalize_attr(D, G, H),
 1639    normalize_attr(I, J, K),
 1640    merge_attributes(A, H, K, L, M),
 1641    make_run_suspensions(A),
 1642    (   forall(( between(1, A, N),
 1643                 get_indexed_constraint(N, O)
 1644               ),
 1645               atomic_types_suspended_constraint(O))
 1646    ->  P=true
 1647    ;   use_auxiliary_predicate(attach_increment),
 1648        P=(compound(E)->term_variables(E, Q), attach_increment(Q, H);true)
 1649    ),
 1650    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))),
 1651    S=(C:-R),
 1652    B=[S, T, U|V],
 1653    T='$dispatch_run_suspensions'([]),
 1654    U=('$dispatch_run_suspensions'([W-X|Y]):-'$dispatch_run_suspensions'(W, X), '$dispatch_run_suspensions'(Y)),
 1655    run_suspensions_dispatchers(A, [], V).
 1656run_suspensions_dispatchers(A, B, C) :-
 1657    (   A>0
 1658    ->  get_indexed_constraint(A, D),
 1659        E=[('$dispatch_run_suspensions'(A, F):-G)|B],
 1660        (   may_trigger(D)
 1661        ->  run_suspensions_goal(D, F, G)
 1662        ;   G=true
 1663        ),
 1664        H is A-1,
 1665        run_suspensions_dispatchers(H, E, C)
 1666    ;   C=B
 1667    ).
 1668make_run_suspensions(A) :-
 1669    (   A>0
 1670    ->  (   get_indexed_constraint(A, B),
 1671            may_trigger(B)
 1672        ->  use_auxiliary_predicate(run_suspensions, B)
 1673        ;   true
 1674        ),
 1675        C is A-1,
 1676        make_run_suspensions(C)
 1677    ;   true
 1678    ).
 1679make_run_suspensions(A, B, C) :-
 1680    make_run_suspensions(1, A, B, C).
 1681make_run_suspensions(A, B, C, D) :-
 1682    (   get_indexed_constraint(A, E),
 1683        may_trigger(E)
 1684    ->  use_auxiliary_predicate(run_suspensions, E),
 1685        (   wakes_partially(E)
 1686        ->  run_suspensions_goal(E, C, D)
 1687        ;   run_suspensions_goal(E, B, D)
 1688        )
 1689    ;   D=true
 1690    ).
 1691make_run_suspensions_loop(A, B, C) :-
 1692    make_run_suspensions_loop(A, B, 1, C).
 1693make_run_suspensions_loop([], [], _, true).
 1694make_run_suspensions_loop([A|B], [C|D], E, (F, G)) :-
 1695    make_run_suspensions(E, A, C, F),
 1696    H is E+1,
 1697    make_run_suspensions_loop(B, D, H, G).
 1698generate_insert_delete_constraints([], []).
 1699generate_insert_delete_constraints([A|B], C) :-
 1700    (   is_stored(A)
 1701    ->  generate_insert_delete_constraint(A, C, D)
 1702    ;   C=D
 1703    ),
 1704    generate_insert_delete_constraints(B, D).
 1705generate_insert_delete_constraint(A, B, C) :-
 1706    insert_constraint_clause(A, B, D),
 1707    delete_constraint_clause(A, D, C).
 1708insert_constraint_goal(A, B, C, D) :-
 1709    (   chr_pp_flag(inline_insertremove, off)
 1710    ->  use_auxiliary_predicate(insert_in_store, A),
 1711        insert_constraint_atom(A, B, D)
 1712    ;   delay_phase_end(validate_store_type_assumptions,
 1713                        (insert_constraint_body(A, B, E, D), insert_constraint_direct_used_vars(E, C)))
 1714    ).
 1715insert_constraint_direct_used_vars([], _).
 1716insert_constraint_direct_used_vars([A-B|C], D) :-
 1717    nth1(A, D, B),
 1718    insert_constraint_direct_used_vars(C, D).
 1719insert_constraint_atom(A, B, C) :-
 1720    make_name('$insert_in_store_', A, D),
 1721    C=..[D, B].
 1722insert_constraint_clause(A, B, C) :-
 1723    (   is_used_auxiliary_predicate(insert_in_store, A)
 1724    ->  B=[D|C],
 1725        D=(E:-F, G, H),
 1726        insert_constraint_atom(A, I, E),
 1727        insert_constraint_body(A, I, J, H),
 1728        insert_constraint_used_vars(J, A, I, G),
 1729        (   chr_pp_flag(store_counter, on)
 1730        ->  F='$insert_counter_inc'
 1731        ;   F=true
 1732        )
 1733    ;   B=C
 1734    ).
 1735insert_constraint_used_vars([], _, _, true).
 1736insert_constraint_used_vars([A-B|C], D, E, (F, G)) :-
 1737    get_dynamic_suspension_term_field(argument(A),
 1738                                      D,
 1739                                      E,
 1740                                      B,
 1741                                      F),
 1742    insert_constraint_used_vars(C, D, E, G).
 1743insert_constraint_body(A, B, C, D) :-
 1744    get_store_type(A, E),
 1745    insert_constraint_body(E, A, B, C, D).
 1746insert_constraint_body(default, A, B, [], C) :-
 1747    global_list_store_name(A, D),
 1748    make_get_store_goal(D, E, F),
 1749    make_update_store_goal(D, G, H),
 1750    (   chr_pp_flag(debugable, on)
 1751    ->  G=[B|E],
 1752        C=(F, H)
 1753    ;   set_dynamic_suspension_term_field(global_list_prev,
 1754                                          A,
 1755                                          I,
 1756                                          G,
 1757                                          J),
 1758        C=(F, G=[B|E], H, (E=[I|_]->J;true))
 1759    ).
 1760insert_constraint_body(multi_inthash(A), B, C, [], D) :-
 1761    generate_multi_inthash_insert_constraint_bodies(A,
 1762                                                    B,
 1763                                                    C,
 1764                                                    D).
 1765insert_constraint_body(multi_hash(A), B, C, D, E) :-
 1766    generate_multi_hash_insert_constraint_bodies(A,
 1767                                                 B,
 1768                                                 C,
 1769                                                 E,
 1770                                                 D),
 1771    sort_out_used_vars(D, _).
 1772insert_constraint_body(atomic_constants(A, _, _), B, C, D, E) :-
 1773    multi_hash_key_direct(B, A, C, F, D),
 1774    constants_store_index_name(B, A, G),
 1775    H=..[G, F, I],
 1776    E=(H->nb_getval(I, J), b_setval(I, [C|J]);true).
 1777insert_constraint_body(ground_constants(A, _, _), B, C, D, E) :-
 1778    multi_hash_key_direct(B, A, C, F, D),
 1779    constants_store_index_name(B, A, G),
 1780    H=..[G, F, I],
 1781    E=(H->nb_getval(I, J), b_setval(I, [C|J]);true).
 1782insert_constraint_body(global_ground, A, B, [], C) :-
 1783    global_ground_store_name(A, D),
 1784    make_get_store_goal(D, E, F),
 1785    make_update_store_goal(D, G, H),
 1786    (   chr_pp_flag(debugable, on)
 1787    ->  G=[B|E],
 1788        C=(F, H)
 1789    ;   set_dynamic_suspension_term_field(global_list_prev,
 1790                                          A,
 1791                                          I,
 1792                                          G,
 1793                                          J),
 1794        C=(F, G=[B|E], H, (E=[I|_]->J;true))
 1795    ).
 1796insert_constraint_body(var_assoc_store(A, B), _, C, [A-D, B-E], F) :-
 1797    get_target_module(G),
 1798    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)).
 1799insert_constraint_body(global_singleton, A, B, [], C) :-
 1800    global_singleton_store_name(A, D),
 1801    make_update_store_goal(D, B, E),
 1802    C=E.
 1803insert_constraint_body(multi_store(A), B, C, D, E) :-
 1804    maplist(insert_constraint_body1(B, C), A, F, G),
 1805    list2conj(G, E),
 1806    sort_out_used_vars(F, D).
 1807insert_constraint_body1(A, B, C, D, E) :-
 1808    insert_constraint_body(C, A, B, D, E).
 1809insert_constraint_body(identifier_store(A), B, C, D, E) :-
 1810    D=[A-F],
 1811    get_identifier_size(G),
 1812    functor(H, struct, G),
 1813    get_identifier_index(B, A, I),
 1814    arg(I, H, J),
 1815    E=(F=H, setarg(I, F, [C|J])).
 1816insert_constraint_body(type_indexed_identifier_store(A, B), C, D, E, F) :-
 1817    E=[A-G],
 1818    type_indexed_identifier_structure(B, H),
 1819    get_type_indexed_identifier_index(B, C, A, I),
 1820    arg(I, H, J),
 1821    F=(G=H, setarg(I, G, [D|J])).
 1822sort_out_used_vars(A, B) :-
 1823    flatten(A, C),
 1824    sort(C, D),
 1825    sort_out_used_vars1(D, B).
 1826sort_out_used_vars1([], []).
 1827sort_out_used_vars1([A-B], C) :-
 1828    !,
 1829    C=[A-B].
 1830sort_out_used_vars1([A-B, C-D|E], F) :-
 1831    (   A==C
 1832    ->  B=D,
 1833        sort_out_used_vars1([A-B|E], F)
 1834    ;   F=[A-B|G],
 1835        sort_out_used_vars1([C-D|E], G)
 1836    ).
 1837generate_multi_inthash_insert_constraint_bodies([], _, _, true).
 1838generate_multi_inthash_insert_constraint_bodies([A|B], C, D, (E, F)) :-
 1839    multi_hash_store_name(C, A, G),
 1840    multi_hash_key(C, A, D, H, I),
 1841    E=(H, nb_getval(G, J), insert_iht(J, I, D)),
 1842    generate_multi_inthash_insert_constraint_bodies(B,
 1843                                                    C,
 1844                                                    D,
 1845                                                    F).
 1846generate_multi_hash_insert_constraint_bodies([], _, _, true, []).
 1847generate_multi_hash_insert_constraint_bodies([A|B], C, D, (E, F), [G|H]) :-
 1848    multi_hash_store_name(C, A, I),
 1849    multi_hash_key_direct(C, A, D, J, G),
 1850    make_get_store_goal(I, K, L),
 1851    (   chr_pp_flag(ht_removal, on)
 1852    ->  ht_prev_field(A, M),
 1853        set_dynamic_suspension_term_field(M,
 1854                                          C,
 1855                                          N,
 1856                                          O,
 1857                                          P),
 1858        E=(L, insert_ht(K, J, D, O), (O=[_, N|_]->P;true))
 1859    ;   E=(L, insert_ht(K, J, D))
 1860    ),
 1861    generate_multi_hash_insert_constraint_bodies(B,
 1862                                                 C,
 1863                                                 D,
 1864                                                 F,
 1865                                                 H).
 1866delete_constraint_clause(A, B, C) :-
 1867    (   is_used_auxiliary_predicate(delete_from_store, A)
 1868    ->  B=[D|C],
 1869        D=(E:-F),
 1870        delete_constraint_atom(A, G, E),
 1871        A=H/I,
 1872        functor(E, H, I),
 1873        delete_constraint_body(A, E, G, [], F)
 1874    ;   B=C
 1875    ).
 1876delete_constraint_goal(A, B, C, D) :-
 1877    functor(A, E, F),
 1878    G=E/F,
 1879    (   chr_pp_flag(inline_insertremove, off)
 1880    ->  use_auxiliary_predicate(delete_from_store, G),
 1881        delete_constraint_atom(G, B, D)
 1882    ;   delay_phase_end(validate_store_type_assumptions,
 1883                        delete_constraint_body(G,
 1884                                               A,
 1885                                               B,
 1886                                               C,
 1887                                               D))
 1888    ).
 1889delete_constraint_atom(A, B, C) :-
 1890    make_name('$delete_from_store_', A, D),
 1891    C=..[D, B].
 1892delete_constraint_body(A, B, C, D, E) :-
 1893    E=(F, G),
 1894    (   chr_pp_flag(store_counter, on)
 1895    ->  F='$delete_counter_inc'
 1896    ;   F=true
 1897    ),
 1898    get_store_type(A, H),
 1899    delete_constraint_body(H, A, B, C, D, G).
 1900delete_constraint_body(default, A, _, B, _, C) :-
 1901    (   chr_pp_flag(debugable, on)
 1902    ->  global_list_store_name(A, D),
 1903        make_get_store_goal(D, E, F),
 1904        make_update_store_goal(D, G, H),
 1905        C=(F, 'chr sbag_del_element'(E, B, G), H)
 1906    ;   get_dynamic_suspension_term_field(global_list_prev,
 1907                                          A,
 1908                                          B,
 1909                                          I,
 1910                                          J),
 1911        global_list_store_name(A, D),
 1912        make_get_store_goal(D, E, F),
 1913        make_update_store_goal(D, K, H),
 1914        set_dynamic_suspension_term_field(global_list_prev,
 1915                                          A,
 1916                                          L,
 1917                                          _,
 1918                                          M),
 1919        set_dynamic_suspension_term_field(global_list_prev,
 1920                                          A,
 1921                                          L,
 1922                                          I,
 1923                                          N),
 1924        C=(J, (var(I)->F, E=[_|K], H, (K=[L|_]->M;true);I=[_, _|K], setarg(2, I, K), (K=[L|_]->N;true)))
 1925    ).
 1926delete_constraint_body(multi_inthash(A), B, _, C, _, D) :-
 1927    generate_multi_inthash_delete_constraint_bodies(A,
 1928                                                    B,
 1929                                                    C,
 1930                                                    D).
 1931delete_constraint_body(multi_hash(A), B, C, D, E, F) :-
 1932    generate_multi_hash_delete_constraint_bodies(A,
 1933                                                 B,
 1934                                                 C,
 1935                                                 D,
 1936                                                 E,
 1937                                                 F).
 1938delete_constraint_body(atomic_constants(A, _, _), B, C, D, E, F) :-
 1939    multi_hash_key(B, C, A, D, E, G, H),
 1940    constants_store_index_name(B, A, I),
 1941    J=..[I, H, K],
 1942    F=(G, (J->nb_getval(K, L), 'chr sbag_del_element'(L, D, M), b_setval(K, M);true)).
 1943delete_constraint_body(ground_constants(A, _, _), B, C, D, E, F) :-
 1944    multi_hash_key(B, C, A, D, E, G, H),
 1945    constants_store_index_name(B, A, I),
 1946    J=..[I, H, K],
 1947    F=(G, (J->nb_getval(K, L), 'chr sbag_del_element'(L, D, M), b_setval(K, M);true)).
 1948delete_constraint_body(global_ground, A, _, B, _, C) :-
 1949    (   chr_pp_flag(debugable, on)
 1950    ->  global_ground_store_name(A, D),
 1951        make_get_store_goal(D, E, F),
 1952        make_update_store_goal(D, G, H),
 1953        C=(F, 'chr sbag_del_element'(E, B, G), H)
 1954    ;   get_dynamic_suspension_term_field(global_list_prev,
 1955                                          A,
 1956                                          B,
 1957                                          I,
 1958                                          J),
 1959        global_ground_store_name(A, D),
 1960        make_get_store_goal(D, E, F),
 1961        make_update_store_goal(D, K, H),
 1962        set_dynamic_suspension_term_field(global_list_prev,
 1963                                          A,
 1964                                          L,
 1965                                          _,
 1966                                          M),
 1967        set_dynamic_suspension_term_field(global_list_prev,
 1968                                          A,
 1969                                          L,
 1970                                          I,
 1971                                          N),
 1972        C=(J, (var(I)->F, E=[_|K], H, (K=[L|_]->M;true);I=[_, _|K], setarg(2, I, K), (K=[L|_]->N;true)))
 1973    ).
 1974delete_constraint_body(var_assoc_store(A, B), C, _, D, _, E) :-
 1975    get_target_module(F),
 1976    get_dynamic_suspension_term_field(argument(A),
 1977                                      C,
 1978                                      D,
 1979                                      G,
 1980                                      H),
 1981    get_dynamic_suspension_term_field(argument(B),
 1982                                      C,
 1983                                      D,
 1984                                      I,
 1985                                      J),
 1986    E=(H, get_attr(G, F, K), J, delete_assoc_store(K, I, D)).
 1987delete_constraint_body(global_singleton, A, _, _, _, B) :-
 1988    global_singleton_store_name(A, C),
 1989    make_update_store_goal(C, [], D),
 1990    B=D.
 1991delete_constraint_body(multi_store(A), B, C, D, E, F) :-
 1992    maplist(delete_constraint_body1(B, C, D, E),
 1993            A,
 1994            G),
 1995    list2conj(G, F).
 1996delete_constraint_body1(A, B, C, D, E, F) :-
 1997    delete_constraint_body(E, A, B, C, D, F).
 1998delete_constraint_body(identifier_store(A), B, C, D, E, F) :-
 1999    get_suspension_argument_possibly_in_scope(C,
 2000                                              E,
 2001                                              D,
 2002                                              A,
 2003                                              G,
 2004                                              H),
 2005    get_identifier_size(I),
 2006    functor(J, struct, I),
 2007    get_identifier_index(B, A, K),
 2008    arg(K, J, L),
 2009    F=(H, G=J, 'chr sbag_del_element'(L, D, M), setarg(K, G, M)).
 2010delete_constraint_body(type_indexed_identifier_store(A, B), C, D, E, F, G) :-
 2011    get_suspension_argument_possibly_in_scope(D,
 2012                                              F,
 2013                                              E,
 2014                                              A,
 2015                                              H,
 2016                                              I),
 2017    type_indexed_identifier_structure(B, J),
 2018    get_type_indexed_identifier_index(B, C, A, K),
 2019    arg(K, J, L),
 2020    G=(I, H=J, 'chr sbag_del_element'(L, E, M), setarg(K, H, M)).
 2021generate_multi_inthash_delete_constraint_bodies([], _, _, true).
 2022generate_multi_inthash_delete_constraint_bodies([A|B], C, D, (E, F)) :-
 2023    multi_hash_store_name(C, A, G),
 2024    multi_hash_key(C, A, D, H, I),
 2025    E=(H, nb_getval(G, J), delete_iht(J, I, D)),
 2026    generate_multi_inthash_delete_constraint_bodies(B,
 2027                                                    C,
 2028                                                    D,
 2029                                                    F).
 2030generate_multi_hash_delete_constraint_bodies([], _, _, _, _, true).
 2031generate_multi_hash_delete_constraint_bodies([A|B], C, D, E, F, (G, H)) :-
 2032    multi_hash_store_name(C, A, I),
 2033    multi_hash_key(C, D, A, E, F, J, K),
 2034    make_get_store_goal(I, L, M),
 2035    (   chr_pp_flag(ht_removal, on)
 2036    ->  ht_prev_field(A, N),
 2037        get_dynamic_suspension_term_field(N,
 2038                                          C,
 2039                                          E,
 2040                                          O,
 2041                                          P),
 2042        set_dynamic_suspension_term_field(N,
 2043                                          C,
 2044                                          Q,
 2045                                          _,
 2046                                          R),
 2047        set_dynamic_suspension_term_field(N,
 2048                                          C,
 2049                                          Q,
 2050                                          O,
 2051                                          S),
 2052        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)))
 2053    ;   G=(J, M, delete_ht(L, K, E))
 2054    ),
 2055    generate_multi_hash_delete_constraint_bodies(B,
 2056                                                 _,
 2057                                                 D,
 2058                                                 E,
 2059                                                 F,
 2060                                                 H).
 2061generate_attach_code(A, B) :-
 2062    enumerate_stores_code(A, C),
 2063    append(C, D, B),
 2064    generate_attach_code(A, D, E),
 2065    module_initializers(F),
 2066    prolog_global_variables_code(G),
 2067    E=[('$chr_initialization':-F), (:-initialization'$chr_initialization')|G].
 2068generate_attach_code([], A, A).
 2069generate_attach_code([A|B], C, D) :-
 2070    get_store_type(A, E),
 2071    generate_attach_code(E, A, C, F),
 2072    generate_attach_code(B, F, D).
 2073generate_attach_code(default, A, B, C) :-
 2074    global_list_store_initialisation(A, B, C).
 2075generate_attach_code(multi_inthash(A), B, C, D) :-
 2076    multi_inthash_store_initialisations(A, B, C, E),
 2077    multi_inthash_via_lookups(A, B, E, D).
 2078generate_attach_code(multi_hash(A), B, C, D) :-
 2079    multi_hash_store_initialisations(A, B, C, E),
 2080    multi_hash_lookups(A, B, E, D).
 2081generate_attach_code(atomic_constants(A, B, _), C, D, E) :-
 2082    constants_initializers(C, A, B),
 2083    atomic_constants_code(C, A, B, D, E).
 2084generate_attach_code(ground_constants(A, B, _), C, D, E) :-
 2085    constants_initializers(C, A, B),
 2086    ground_constants_code(C, A, B, D, E).
 2087generate_attach_code(global_ground, A, B, C) :-
 2088    global_ground_store_initialisation(A, B, C).
 2089generate_attach_code(var_assoc_store(_, _), _, A, A) :-
 2090    use_auxiliary_module(chr_assoc_store).
 2091generate_attach_code(global_singleton, A, B, C) :-
 2092    global_singleton_store_initialisation(A, B, C).
 2093generate_attach_code(multi_store(A), B, C, D) :-
 2094    multi_store_generate_attach_code(A, B, C, D).
 2095generate_attach_code(identifier_store(A), B, C, D) :-
 2096    get_identifier_index(B, A, E),
 2097    (   E==2
 2098    ->  get_identifier_size(F),
 2099        functor(G, struct, F),
 2100        G=..[_, H|I],
 2101        set_elems(I, []),
 2102        J=new_identifier(H, G),
 2103        functor(K, struct, F),
 2104        arg(1, K, L),
 2105        M=(user:portray(K):-write('<id:'), print(L), write(>)),
 2106        functor(N, struct, F),
 2107        arg(1, N, O),
 2108        P=identifier_label(N, O),
 2109        C=[J, M, P|D]
 2110    ;   C=D
 2111    ).
 2112generate_attach_code(type_indexed_identifier_store(A, B), C, D, E) :-
 2113    get_type_indexed_identifier_index(B, C, A, F),
 2114    (   F==2
 2115    ->  identifier_store_initialization(B, D, G),
 2116        get_type_indexed_identifier_size(B, _),
 2117        type_indexed_identifier_structure(B, H),
 2118        H=..[_, I|J],
 2119        set_elems(J, []),
 2120        type_indexed_identifier_name(B, new_identifier, K),
 2121        L=..[K, I, H],
 2122        M=..[K, N, O],
 2123        type_indexed_identifier_structure(B, P),
 2124        P=..[_, N|Q],
 2125        set_elems(Q, []),
 2126        R=(O=P),
 2127        S=user:goal_expansion(M, R),
 2128        type_indexed_identifier_structure(B, T),
 2129        arg(1, T, U),
 2130        V=(user:portray(T):-write('<id:'), print(U), write(>)),
 2131        type_indexed_identifier_structure(B, W),
 2132        arg(1, W, X),
 2133        type_indexed_identifier_name(B, identifier_label, Y),
 2134        Z=..[Y, W, X],
 2135        A1=..[Y, B1, C1],
 2136        type_indexed_identifier_structure(B, D1),
 2137        arg(1, D1, C1),
 2138        E1=(B1=D1),
 2139        F1=(user:goal_expansion(A1, E1):-writeln(expanding)),
 2140        identifier_store_name(B, G1),
 2141        lookup_identifier_atom(B, H1, I1, J1),
 2142        type_indexed_identifier_name(B, new_identifier, K1),
 2143        L1=..[K1, H1, I1],
 2144        M1=(J1:-nb_getval(G1, N1), (lookup_ht(N1, H1, [I1])->true;L1, insert_ht(N1, H1, I1))),
 2145        lookup_only_identifier_atom(B, O1, P1, Q1),
 2146        R1=(Q1:-nb_getval(G1, S1), lookup_ht(S1, O1, [P1])),
 2147        G=[(:-multifile goal_expansion/2), (:-dynamic goal_expansion/2), L, S, V, Z, F1, M1, R1|E]
 2148    ;   D=E
 2149    ).
 2150constants_initializers(A, B, C) :-
 2151    maplist(constant_initializer(A, B), C).
 2152constant_initializer(A, B, C) :-
 2153    constants_store_name(A, B, C, D),
 2154    prolog_global_variable(D),
 2155    module_initializer(nb_setval(D, [])).
 2156lookup_identifier_atom(A, B, C, D) :-
 2157    atom_concat(lookup_identifier_, A, E),
 2158    D=..[E, B, C].
 2159lookup_only_identifier_atom(A, B, C, D) :-
 2160    atom_concat(lookup_only_identifier_, A, E),
 2161    D=..[E, B, C].
 2162identifier_label_atom(A, B, C, D) :-
 2163    type_indexed_identifier_name(A, identifier_label, E),
 2164    D=..[E, B, C].
 2165multi_store_generate_attach_code([], _, A, A).
 2166multi_store_generate_attach_code([A|B], C, D, E) :-
 2167    generate_attach_code(A, C, D, F),
 2168    multi_store_generate_attach_code(B, C, F, E).
 2169multi_inthash_store_initialisations([], _, A, A).
 2170multi_inthash_store_initialisations([A|B], C, D, E) :-
 2171    use_auxiliary_module(chr_integertable_store),
 2172    multi_hash_store_name(C, A, F),
 2173    module_initializer((new_iht(G), nb_setval(F, G))),
 2174    H=D,
 2175    multi_inthash_store_initialisations(B, C, H, E).
 2176multi_hash_store_initialisations([], _, A, A).
 2177multi_hash_store_initialisations([A|B], C, D, E) :-
 2178    use_auxiliary_module(chr_hashtable_store),
 2179    multi_hash_store_name(C, A, F),
 2180    prolog_global_variable(F),
 2181    make_init_store_goal(F, G, H),
 2182    module_initializer((new_ht(G), H)),
 2183    I=D,
 2184    multi_hash_store_initialisations(B, C, I, E).
 2185global_list_store_initialisation(A, B, C) :-
 2186    (   is_stored(A)
 2187    ->  global_list_store_name(A, D),
 2188        prolog_global_variable(D),
 2189        make_init_store_goal(D, [], E),
 2190        module_initializer(E)
 2191    ;   true
 2192    ),
 2193    B=C.
 2194global_ground_store_initialisation(A, B, C) :-
 2195    global_ground_store_name(A, D),
 2196    prolog_global_variable(D),
 2197    make_init_store_goal(D, [], E),
 2198    module_initializer(E),
 2199    B=C.
 2200global_singleton_store_initialisation(A, B, C) :-
 2201    global_singleton_store_name(A, D),
 2202    prolog_global_variable(D),
 2203    make_init_store_goal(D, [], E),
 2204    module_initializer(E),
 2205    B=C.
 2206identifier_store_initialization(A, B, C) :-
 2207    use_auxiliary_module(chr_hashtable_store),
 2208    identifier_store_name(A, D),
 2209    prolog_global_variable(D),
 2210    make_init_store_goal(D, E, F),
 2211    module_initializer((new_ht(E), F)),
 2212    B=C.
 2213multi_inthash_via_lookups([], _, A, A).
 2214multi_inthash_via_lookups([A|B], C, D, E) :-
 2215    multi_hash_lookup_head(C, A, F, G, H),
 2216    multi_hash_lookup_body(C, inthash, A, F, G, I),
 2217    D=[(H:-I)|J],
 2218    multi_inthash_via_lookups(B, C, J, E).
 2219multi_hash_lookups([], _, A, A).
 2220multi_hash_lookups([A|B], C, D, E) :-
 2221    multi_hash_lookup_head(C, A, F, G, H),
 2222    multi_hash_lookup_body(C, hash, A, F, G, I),
 2223    D=[(H:-I)|J],
 2224    multi_hash_lookups(B, C, J, E).
 2225multi_hash_lookup_head(A, B, C, D, E) :-
 2226    multi_hash_lookup_name(A, B, F),
 2227    E=..[F, C, D].
 2228multi_hash_lookup_body(A, B, C, D, E, F) :-
 2229    get_store_type(A, multi_store(G)),
 2230    (   memberchk(atomic_constants(C, H, _), G)
 2231    ->  (   ground(D)
 2232        ->  constants_store_name(A, C, D, I),
 2233            F=nb_getval(I, E)
 2234        ;   constants_store_index_name(A, C, J),
 2235            K=..[J, D, I],
 2236            F=(K, nb_getval(I, E))
 2237        )
 2238    ;   memberchk(ground_constants(C, H, _), G)
 2239    ->  (   ground(D)
 2240        ->  constants_store_name(A, C, D, I),
 2241            F=nb_getval(I, E)
 2242        ;   constants_store_index_name(A, C, J),
 2243            K=..[J, D, I],
 2244            F=(K, nb_getval(I, E))
 2245        )
 2246    ;   memberchk(multi_hash([C]), G)
 2247    ->  multi_hash_store_name(A, C, I),
 2248        make_get_store_goal(I, L, M),
 2249        (   B==hash,
 2250            specialized_hash_term_call(A,
 2251                                       C,
 2252                                       D,
 2253                                       N,
 2254                                       O)
 2255        ->  F=(M, O, lookup_ht1(L, N, D, E))
 2256        ;   lookup_hash_call(B, L, D, E, K),
 2257            F=(M, K)
 2258        )
 2259    ;   B==inthash
 2260    ->  multi_hash_store_name(A, C, I),
 2261        make_get_store_goal(I, L, M),
 2262        lookup_hash_call(B, L, D, E, K),
 2263        F=(M, K)
 2264    ).
 2265lookup_hash_call(hash, A, B, C, lookup_ht(A, B, C)).
 2266lookup_hash_call(inthash, A, B, C, lookup_iht(A, B, C)).
 2267specialized_hash_term_call(_, _, A, B, C) :-
 2268    (   ground(A)
 2269    ->  term_hash(A, B),
 2270        C=true
 2271    ).
 2272multi_hash_lookup_goal(A, B, C, D, E, F) :-
 2273    (   atomic(D)
 2274    ->  actual_atomic_multi_hash_keys(A, C, [D])
 2275    ;   ground(D)
 2276    ->  actual_ground_multi_hash_keys(A, C, [D])
 2277    ;   C=[G],
 2278        get_constraint_arg_type(A, G, H),
 2279        is_chr_constants_type(H, _, _)
 2280    ->  true
 2281    ;   actual_non_ground_multi_hash_key(A, C)
 2282    ),
 2283    delay_phase_end(validate_store_type_assumptions,
 2284                    multi_hash_lookup_body(A,
 2285                                           B,
 2286                                           C,
 2287                                           D,
 2288                                           E,
 2289                                           F)).
 2290multi_hash_lookup_name(A/B, C, D) :-
 2291    atom_concat_list(C, E),
 2292    atom_concat_list(['$via1_multi_hash_', A, '___', B, -, E],
 2293                     D).
 2294multi_hash_store_name(A/B, C, D) :-
 2295    get_target_module(E),
 2296    atom_concat_list(C, F),
 2297    atom_concat_list([ '$chr_store_multi_hash_',
 2298                       E,
 2299                       '____',
 2300                       A,
 2301                       '___',
 2302                       B,
 2303                       -,
 2304                       F
 2305                     ],
 2306                     D).
 2307multi_hash_key(A, B, C, D, E) :-
 2308    (   B=[F]
 2309    ->  get_dynamic_suspension_term_field(argument(F),
 2310                                          A,
 2311                                          C,
 2312                                          E,
 2313                                          D)
 2314    ;   maplist(get_dynamic_suspension_term_field1(A, C),
 2315                B,
 2316                G,
 2317                H),
 2318        E=..[k|G],
 2319        list2conj(H, D)
 2320    ).
 2321get_dynamic_suspension_term_field1(A, B, C, D, E) :-
 2322    get_dynamic_suspension_term_field(argument(C),
 2323                                      A,
 2324                                      B,
 2325                                      D,
 2326                                      E).
 2327multi_hash_key(_, A, B, C, D, E, F) :-
 2328    (   B=[G]
 2329    ->  get_suspension_argument_possibly_in_scope(A,
 2330                                                  D,
 2331                                                  C,
 2332                                                  G,
 2333                                                  F,
 2334                                                  E)
 2335    ;   maplist(get_suspension_argument_possibly_in_scope(A,
 2336                                                          D,
 2337                                                          C),
 2338                B,
 2339                H,
 2340                I),
 2341        F=..[k|H],
 2342        list2conj(I, E)
 2343    ).
 2344get_suspension_argument_possibly_in_scope(A, B, C, D, E, F) :-
 2345    arg(D, A, G),
 2346    (   ground(G),
 2347        G='$chr_identifier_match'(H, I)
 2348    ->  functor(A, J, K),
 2349        lookup_identifier_atom(I, H, E, F)
 2350    ;   term_variables(G, L),
 2351        copy_term_nat(G-L, E-M),
 2352        translate(L, B, M)
 2353    ->  F=true
 2354    ;   functor(A, J, K),
 2355        N=J/K,
 2356        get_dynamic_suspension_term_field(argument(D),
 2357                                          N,
 2358                                          C,
 2359                                          E,
 2360                                          F)
 2361    ).
 2362multi_hash_key_direct(_, A, _, B, C) :-
 2363    (   A=[D]
 2364    ->  C=[D-B]
 2365    ;   pairup(A, E, C),
 2366        B=..[k|E]
 2367    ).
 2368args(A, B, C) :-
 2369    maplist(arg1(B), A, C).
 2370split_args(A, B, C, D) :-
 2371    split_args(A, B, 1, C, D).
 2372split_args([], A, _, [], A).
 2373split_args([A|B], [C|D], E, F, G) :-
 2374    H is E+1,
 2375    (   A==E
 2376    ->  F=[C|I],
 2377        split_args(B, D, H, I, G)
 2378    ;   G=[C|I],
 2379        split_args([A|B], D, H, F, I)
 2380    ).
 2381atomic_constants_code(A, B, C, D, E) :-
 2382    constants_store_index_name(A, B, F),
 2383    maplist(atomic_constant_code(A, B, F), C, G),
 2384    append(G, E, D).
 2385atomic_constant_code(A, B, C, D, E) :-
 2386    constants_store_name(A, B, D, F),
 2387    E=..[C, D, F].
 2388ground_constants_code(A, B, C, D, E) :-
 2389    constants_store_index_name(A, B, F),
 2390    maplist(constants_store_name(A, B), C, G),
 2391    length(C, H),
 2392    replicate(H, [], I),
 2393    trie_index([C|I], G, F, D, E).
 2394constants_store_name(A/B, C, D, E) :-
 2395    get_target_module(F),
 2396    term_to_atom(D, G),
 2397    term_to_atom(C, H),
 2398    atom_concat_list([ '$chr_store_constants_',
 2399                       F,
 2400                       '____',
 2401                       A,
 2402                       '___',
 2403                       B,
 2404                       '___',
 2405                       H,
 2406                       '___',
 2407                       G
 2408                     ],
 2409                     E).
 2410constants_store_index_name(A/B, C, D) :-
 2411    get_target_module(E),
 2412    term_to_atom(C, F),
 2413    atom_concat_list([ '$chr_store_constants_',
 2414                       E,
 2415                       '____',
 2416                       A,
 2417                       '___',
 2418                       B,
 2419                       '___',
 2420                       F
 2421                     ],
 2422                     D).
 2423trie_index([A|B], C, D, E, F) :-
 2424    trie_step(A, D, D, B, C, E, F).
 2425trie_step([], _, _, [], [], A, A) :-
 2426    !.
 2427trie_step(A, B, C, D, E, F, G) :-
 2428    D=[H|_],
 2429    length(H, I),
 2430    aggregate_all(set(J/K),
 2431                  ( member(L, A),
 2432                    functor(L, J, K)
 2433                  ),
 2434                  M),
 2435    N is I+1,
 2436    trie_step_cases(M,
 2437                    N,
 2438                    A,
 2439                    D,
 2440                    E,
 2441                    B,
 2442                    C,
 2443                    F,
 2444                    G).
 2445trie_step_cases([], _, _, _, _, _, _, A, A).
 2446trie_step_cases([A|B], C, D, E, F, G, H, I, J) :-
 2447    trie_step_case(A,
 2448                   C,
 2449                   D,
 2450                   E,
 2451                   F,
 2452                   G,
 2453                   H,
 2454                   I,
 2455                   K),
 2456    trie_step_cases(B,
 2457                    C,
 2458                    D,
 2459                    E,
 2460                    F,
 2461                    G,
 2462                    H,
 2463                    K,
 2464                    J).
 2465trie_step_case(A/B, C, D, E, F, G, H, [I|J], K) :-
 2466    I=(L:-M),
 2467    N is C+1,
 2468    functor(L, G, N),
 2469    arg(1, L, O),
 2470    L=..[_, _|P],
 2471    once(append(Q, [R], P)),
 2472    functor(O, A, B),
 2473    O=..[_|S],
 2474    append(S, P, T),
 2475    (   T==[R]
 2476    ->  J=K,
 2477        M=true,
 2478        rec_cases(D,
 2479                  _,
 2480                  F,
 2481                  A/B,
 2482                  _,
 2483                  _,
 2484                  U),
 2485        U=[R]
 2486    ;   rec_cases(D,
 2487                  E,
 2488                  F,
 2489                  A/B,
 2490                  V,
 2491                  W,
 2492                  U),
 2493        (   W=[X]
 2494        ->  J=K,
 2495            M=true,
 2496            append([V, X, U], T)
 2497        ;   pairup(V, W, Y),
 2498            common_pattern(Y, Z, A1, B1),
 2499            append(S, Q, [C1|D1]),
 2500            C1-D1=Z,
 2501            fresh_symbol(H, E1),
 2502            append(A1, [R], F1),
 2503            M=..[E1|F1],
 2504            maplist(head_tail, B1, G1, H1),
 2505            trie_step(G1,
 2506                      E1,
 2507                      H,
 2508                      H1,
 2509                      U,
 2510                      J,
 2511                      K)
 2512        )
 2513    ).
 2514head_tail([A|B], A, B).
 2515rec_cases([], [], [], _, [], [], []).
 2516rec_cases([A|B], [C|D], [E|F], G/H, I, J, K) :-
 2517    (   functor(A, G, H),
 2518        A=..[_|L],
 2519        append(L, C, [M|N])
 2520    ->  I=[M|O],
 2521        J=[N|P],
 2522        K=[E|Q],
 2523        rec_cases(B,
 2524                  D,
 2525                  F,
 2526                  G/H,
 2527                  O,
 2528                  P,
 2529                  Q)
 2530    ;   rec_cases(B,
 2531                  D,
 2532                  F,
 2533                  G/H,
 2534                  I,
 2535                  J,
 2536                  K)
 2537    ).
 2538common_pattern(A, B, C, D) :-
 2539    fold1(chr_translate:gct, A, B),
 2540    term_variables(B, C),
 2541    findall(C, member(B, A), D).
 2542gct(A, B, C) :-
 2543    gct_(A, B, C, [], _).
 2544gct_(A, B, C, D, E) :-
 2545    (   nonvar(A),
 2546        nonvar(B),
 2547        functor(A, F, G),
 2548        functor(B, H, I),
 2549        F==H,
 2550        G==I
 2551    ->  functor(C, F, G),
 2552        A=..[_|J],
 2553        B=..[_|K],
 2554        C=..[_|L],
 2555        maplist_dcg(chr_translate:gct_,
 2556                    J,
 2557                    K,
 2558                    L,
 2559                    D,
 2560                    E)
 2561    ;   lookup_eq(D, A+B, C)
 2562    ->  E=D
 2563    ;   E=[A+B-C|D]
 2564    ).
 2565global_list_store_name(A/B, C) :-
 2566    get_target_module(D),
 2567    atom_concat_list([ '$chr_store_global_list_',
 2568                       D,
 2569                       '____',
 2570                       A,
 2571                       '___',
 2572                       B
 2573                     ],
 2574                     C).
 2575global_ground_store_name(A/B, C) :-
 2576    get_target_module(D),
 2577    atom_concat_list([ '$chr_store_global_ground_',
 2578                       D,
 2579                       '____',
 2580                       A,
 2581                       '___',
 2582                       B
 2583                     ],
 2584                     C).
 2585global_singleton_store_name(A/B, C) :-
 2586    get_target_module(D),
 2587    atom_concat_list([ '$chr_store_global_singleton_',
 2588                       D,
 2589                       '____',
 2590                       A,
 2591                       '___',
 2592                       B
 2593                     ],
 2594                     C).
 2595identifier_store_name(A, B) :-
 2596    get_target_module(C),
 2597    atom_concat_list(['$chr_identifier_lookup_', C, '____', A], B).
 2598:- if(current_predicate(user:exception/3)). 2599prolog_global_variables_code([]) :-
 2600    tmp_module,
 2601    !.
 2602prolog_global_variables_code(A) :-
 2603    prolog_global_variables(B),
 2604    (   B==[]
 2605    ->  A=[]
 2606    ;   maplist(wrap_in_functor('$chr_prolog_global_variable'), B, C),
 2607        A=[(:-dynamic user:exception/3), (:-multifile user:exception/3), (user:exception(undefined_global_variable, D, retry):-'$chr_prolog_global_variable'(D), '$chr_initialization')|C]
 2608    ).
 2609tmp_module :-
 2610    prolog_load_context(module, A),
 2611    module_property(A, class(temporary)).
 2612:- else. 2613prolog_global_variables_code([]).
 2614:- endif. 2615sbag_member_call(A, B, member(A, B)).
 2616update_mutable_call(A, B, 'chr update_mutable'(A, B)).
 2617create_mutable_call(A, B, true) :-
 2618    B=mutable(A).
 2619get_suspension_field(A, B, C, D, E) :-
 2620    get_dynamic_suspension_term_field(C, A, B, D, E).
 2621update_suspension_field(A, B, C, D, E) :-
 2622    set_dynamic_suspension_term_field(C, A, B, D, E).
 2623get_update_suspension_field(A, B, C, D, E, true, F, G) :-
 2624    get_dynamic_suspension_term_field(C, A, B, D, F),
 2625    set_dynamic_suspension_term_field(C, A, B, E, G).
 2626create_static_suspension_field(A, B, C, D, true) :-
 2627    get_static_suspension_term_field(C, A, B, D).
 2628get_static_suspension_field(A, B, C, D, true) :-
 2629    get_static_suspension_term_field(C, A, B, D).
 2630get_update_static_suspension_field(A, B, C, D, E, F, true, G) :-
 2631    get_static_suspension_term_field(D, A, C, E),
 2632    set_dynamic_suspension_term_field(D, A, B, F, G).
 2633enumerate_stores_code(A, [B|C]) :-
 2634    D='$enumerate_constraints'(E),
 2635    B=(D:-F),
 2636    enumerate_store_bodies(A, E, C),
 2637    (   C=[]
 2638    ->  F=fail
 2639    ;   F=(nonvar(E)->functor(E, G, _), '$enumerate_constraints'(G, E);'$enumerate_constraints'(_, E))
 2640    ).
 2641enumerate_store_bodies([], _, []).
 2642enumerate_store_bodies([A|B], C, D) :-
 2643    (   is_stored(A)
 2644    ->  get_store_type(A, E),
 2645        (   enumerate_store_body(E, A, F, G)
 2646        ->  true
 2647        ;   chr_error(internal,
 2648                      'Could not generate enumeration code for constraint ~w.\n',
 2649                      [A])
 2650        ),
 2651        get_dynamic_suspension_term_field(arguments,
 2652                                          A,
 2653                                          F,
 2654                                          H,
 2655                                          I),
 2656        A=J/_,
 2657        K=..[J|H],
 2658        L='$enumerate_constraints'(J, C),
 2659        M=(G, I, C=K),
 2660        D=[(L:-M)|N]
 2661    ;   D=N
 2662    ),
 2663    enumerate_store_bodies(B, C, N).
 2664enumerate_store_body(default, A, B, C) :-
 2665    global_list_store_name(A, D),
 2666    sbag_member_call(B, E, F),
 2667    make_get_store_goal_no_error(D, E, G),
 2668    C=(G, F).
 2669enumerate_store_body(multi_inthash([A|_]), B, C, D) :-
 2670    multi_inthash_enumerate_store_body(A, B, C, D).
 2671enumerate_store_body(multi_hash([A|_]), B, C, D) :-
 2672    multi_hash_enumerate_store_body(A, B, C, D).
 2673enumerate_store_body(atomic_constants(A, B, C), D, E, F) :-
 2674    C==complete,
 2675    maplist(enumerate_constant_store_body(D, A, G),
 2676            B,
 2677            H),
 2678    list2disj(H, I),
 2679    F=(I, member(E, G)).
 2680enumerate_constant_store_body(A, B, C, D, nb_getval(E, C)) :-
 2681    constants_store_name(A, B, D, E).
 2682enumerate_store_body(ground_constants(A, B, C), D, E, F) :-
 2683    enumerate_store_body(atomic_constants(A, B, C),
 2684                         D,
 2685                         E,
 2686                         F).
 2687enumerate_store_body(global_ground, A, B, C) :-
 2688    global_ground_store_name(A, D),
 2689    sbag_member_call(B, E, F),
 2690    make_get_store_goal(D, E, G),
 2691    C=(G, F).
 2692enumerate_store_body(var_assoc_store(_, _), _, _, A) :-
 2693    A=fail.
 2694enumerate_store_body(global_singleton, A, B, C) :-
 2695    global_singleton_store_name(A, D),
 2696    make_get_store_goal(D, B, E),
 2697    C=(E, B\==[]).
 2698enumerate_store_body(multi_store(A), B, C, D) :-
 2699    (   memberchk(global_ground, A)
 2700    ->  enumerate_store_body(global_ground, B, C, D)
 2701    ;   once(( member(E, A),
 2702               enumerate_store_body(E, B, C, D)
 2703             ))
 2704    ).
 2705enumerate_store_body(identifier_store(_), _, _, A) :-
 2706    A=fail.
 2707enumerate_store_body(type_indexed_identifier_store(_, _), _, _, A) :-
 2708    A=fail.
 2709multi_inthash_enumerate_store_body(A, B, C, D) :-
 2710    multi_hash_store_name(B, A, E),
 2711    D=(nb_getval(E, F), value_iht(F, C)).
 2712multi_hash_enumerate_store_body(A, B, C, D) :-
 2713    multi_hash_store_name(B, A, E),
 2714    make_get_store_goal(E, F, G),
 2715    D=(G, value_ht(F, C)).
 2716guard_simplification :-
 2717    (   chr_pp_flag(guard_simplification, on)
 2718    ->  precompute_head_matchings,
 2719        simplify_guards(1)
 2720    ;   true
 2721    ).
 2722next_prev_rule(A, B, C) :-
 2723    (   find_min_q(A, _-D)
 2724    ->  D=(-B),
 2725        normalize_heap(A, D, C)
 2726    ;   B=0,
 2727        C=A
 2728    ).
 2729normalize_heap(A, B, C) :-
 2730    (   find_min_q(A, _-B)
 2731    ->  delete_min_q(A, D, tuple(E, F, _)-_),
 2732        (   F>1
 2733        ->  G is F-1,
 2734            get_occurrence(E, G, H, _),
 2735            insert_q(D,
 2736                     tuple(E, G, H)-(-H),
 2737                     I)
 2738        ;   I=D
 2739        ),
 2740        normalize_heap(I, B, C)
 2741    ;   C=A
 2742    ).
 2743head_types_modes_condition([], _, true).
 2744head_types_modes_condition([A|B], C, (D, E)) :-
 2745    types_modes_condition(C, A, D),
 2746    head_types_modes_condition(B, C, E).
 2747add_background_info(A, B) :-
 2748    get_bg_info(C),
 2749    add_background_info2(A, D),
 2750    append(C, D, B).
 2751add_background_info2(A, []) :-
 2752    var(A),
 2753    !.
 2754add_background_info2([], []) :-
 2755    !.
 2756add_background_info2([A|B], C) :-
 2757    !,
 2758    add_background_info2(A, D),
 2759    add_background_info2(B, E),
 2760    append(D, E, C).
 2761add_background_info2(A, B) :-
 2762    (   functor(A, _, C),
 2763        C>0
 2764    ->  A=..[_|D],
 2765        add_background_info2(D, E)
 2766    ;   E=[]
 2767    ),
 2768    get_bg_info(A, F),
 2769    append(F, E, B).
 2770normalize_conj_list(A, B) :-
 2771    list2conj(A, C),
 2772    conj2list(C, B).
 2773compute_derived_info([], _, _, _, _, _, _, _, [], []).
 2774compute_derived_info([A|B], C, D, E, F, G, H, I, [J|K], [L|M]) :-
 2775    copy_term(C-F, N),
 2776    variable_replacement(C-F, N, O),
 2777    append(A, O, P),
 2778    list2conj(C, Q),
 2779    negate_b(Q, R),
 2780    make_head_matchings_explicit_not_negated2(E, D, S),
 2781    list2conj(S, T),
 2782    term_variables(P, U),
 2783    term_variables(C-F-S, V),
 2784    new_vars(V, U, W),
 2785    append(P, W, X),
 2786    (   F==true
 2787    ->  Y=R
 2788    ;   negate_b(F, Z),
 2789        Y=(R;T, Z)
 2790    ),
 2791    copy_with_variable_replacement(Y, J, X),
 2792    copy_with_variable_replacement(F, A1, X),
 2793    copy_with_variable_replacement(C, B1, X),
 2794    list2conj(B1, C1),
 2795    apply_guard_wrt_term(H, A1, D1),
 2796    apply_guard_wrt_term(D1, C1, L),
 2797    compute_derived_info(B,
 2798                         C,
 2799                         D,
 2800                         E,
 2801                         F,
 2802                         G,
 2803                         H,
 2804                         I,
 2805                         K,
 2806                         M).
 2807simplify_guard(A, B, C, D, E) :-
 2808    conj2list(A, F),
 2809    guard_entailment:simplify_guards(C, B, F, G, E),
 2810    list2conj(G, D).
 2811new_vars([], _, []).
 2812new_vars([A|B], C, D) :-
 2813    (   memberchk_eq(A, C)
 2814    ->  new_vars(B, C, D)
 2815    ;   D=[A-E, E-A|F],
 2816        new_vars(B, C, F)
 2817    ).
 2818head_subset(A, B, C) :-
 2819    head_subset(A, B, C, [], _).
 2820head_subset([], A, B, B, A).
 2821head_subset([A|B], C, D, E, F) :-
 2822    head_member(C, A, G, E, H),
 2823    head_subset(B, H, D, G, F).
 2824head_member([A|B], C, D, E, F) :-
 2825    (   variable_replacement(C, A, E, D),
 2826        F=B
 2827    ;   F=[A|G],
 2828        head_member(B, C, D, E, G)
 2829    ).
 2830make_head_matchings_explicit(A, B, C) :-
 2831    make_head_matchings_explicit_memo_lookup(A, D, E),
 2832    copy_term_nat(D-E, B-C).
 2833make_head_matchings_explicit_(A, B, C) :-
 2834    extract_arguments(A, D),
 2835    make_matchings_explicit(D, E, [], [], _, C),
 2836    substitute_arguments(A, E, B).
 2837make_head_matchings_explicit_not_negated(A, B, C) :-
 2838    extract_arguments(A, D),
 2839    make_matchings_explicit_not_negated(D, E, C),
 2840    substitute_arguments(A, E, B).
 2841make_head_matchings_explicit_not_negated2(A, B, C) :-
 2842    extract_arguments(A, D),
 2843    extract_arguments(B, E),
 2844    make_matchings_explicit_not_negated(D, E, C).
 2845extract_arguments([], []).
 2846extract_arguments([A|B], C) :-
 2847    A=..[_|D],
 2848    append(D, E, C),
 2849    extract_arguments(B, E).
 2850substitute_arguments([], [], []).
 2851substitute_arguments([A|B], C, [D|E]) :-
 2852    functor(A, F, G),
 2853    split_at(G, C, H, I),
 2854    D=..[F|H],
 2855    substitute_arguments(B, I, E).
 2856make_matchings_explicit([], [], _, A, A, []).
 2857make_matchings_explicit([A|B], [C|D], E, F, G, H) :-
 2858    (   var(A)
 2859    ->  (   memberchk_eq(A, E)
 2860        ->  list2disj(F, I),
 2861            H=[(I;C==A)|J],
 2862            K=E
 2863        ;   H=J,
 2864            C=A,
 2865            K=[A|E]
 2866        ),
 2867        L=F
 2868    ;   functor(A, M, N),
 2869        A=..[M|O],
 2870        make_matchings_explicit(O,
 2871                                P,
 2872                                E,
 2873                                F,
 2874                                Q,
 2875                                R),
 2876        S=..[M|P],
 2877        (   R==[]
 2878        ->  H=[functor(C, M, N)|J]
 2879        ;   list2conj(R, T),
 2880            list2disj(F, I),
 2881            U=(C\=S;I;T),
 2882            H=[functor(C, M, N), U|J]
 2883        ),
 2884        L=[C\=S|Q],
 2885        term_variables(B, V),
 2886        append(V, E, K)
 2887    ),
 2888    make_matchings_explicit(B, D, K, L, G, J).
 2889make_matchings_explicit_not_negated([], [], []).
 2890make_matchings_explicit_not_negated([A|B], [C|D], E) :-
 2891    E=[C=A|F],
 2892    make_matchings_explicit_not_negated(B, D, F).
 2893apply_guard_wrt_term([], _, []).
 2894apply_guard_wrt_term([A|B], C, [D|E]) :-
 2895    (   var(A)
 2896    ->  apply_guard_wrt_variable(C, A, D)
 2897    ;   A=..[F|G],
 2898        apply_guard_wrt_term(G, C, H),
 2899        D=..[F|H]
 2900    ),
 2901    apply_guard_wrt_term(B, C, E).
 2902apply_guard_wrt_variable((A, B), C, D) :-
 2903    !,
 2904    apply_guard_wrt_variable(A, C, E),
 2905    apply_guard_wrt_variable(B, E, D).
 2906apply_guard_wrt_variable(A, B, C) :-
 2907    (   A=(D=E),
 2908        B==D
 2909    ->  C=E
 2910    ;   A=functor(F, G, H),
 2911        B==F,
 2912        ground(G),
 2913        ground(H)
 2914    ->  functor(C, G, H)
 2915    ;   C=B
 2916    ).
 2917replace_some_heads(A, B, _, [], A, B, _, _, []) :-
 2918    !.
 2919replace_some_heads([], [A|B], [C|D], [E|F], [], [G|H], I, J, K) :-
 2920    !,
 2921    (   C==E
 2922    ->  G=E,
 2923        replace_some_heads([],
 2924                           B,
 2925                           D,
 2926                           F,
 2927                           [],
 2928                           H,
 2929                           I,
 2930                           J,
 2931                           K)
 2932    ;   E=functor(L, M, N),
 2933        C==L
 2934    ->  length(O, N),
 2935        (   var(A)
 2936        ->  P=[],
 2937            G=..[M|O]
 2938        ;   A=..[M|Q],
 2939            use_same_args(Q, O, R, I, J, P),
 2940            G=..[M|R]
 2941        ),
 2942        replace_some_heads([],
 2943                           B,
 2944                           D,
 2945                           F,
 2946                           [],
 2947                           H,
 2948                           I,
 2949                           J,
 2950                           S),
 2951        append(P, S, K)
 2952    ;   G=A,
 2953        replace_some_heads([],
 2954                           B,
 2955                           D,
 2956                           [E|F],
 2957                           [],
 2958                           H,
 2959                           I,
 2960                           J,
 2961                           K)
 2962    ).
 2963replace_some_heads([A|B], C, [D|E], [F|G], [H|I], J, K, L, M) :-
 2964    !,
 2965    (   D==F
 2966    ->  H=F,
 2967        replace_some_heads(B,
 2968                           C,
 2969                           E,
 2970                           G,
 2971                           I,
 2972                           J,
 2973                           K,
 2974                           L,
 2975                           M)
 2976    ;   F=functor(N, O, P),
 2977        D==N
 2978    ->  length(Q, P),
 2979        (   var(A)
 2980        ->  R=[],
 2981            H=..[O|Q]
 2982        ;   A=..[O|S],
 2983            use_same_args(S,
 2984                          Q,
 2985                          T,
 2986                          K,
 2987                          L,
 2988                          R),
 2989            H=..[O|T]
 2990        ),
 2991        replace_some_heads(B,
 2992                           C,
 2993                           E,
 2994                           G,
 2995                           I,
 2996                           J,
 2997                           K,
 2998                           L,
 2999                           U),
 3000        append(R, U, M)
 3001    ;   H=A,
 3002        replace_some_heads(B,
 3003                           C,
 3004                           E,
 3005                           [F|G],
 3006                           I,
 3007                           J,
 3008                           K,
 3009                           L,
 3010                           M)
 3011    ).
 3012use_same_args([], [], [], _, _, []).
 3013use_same_args([A|B], [_|C], [D|E], F, G, H) :-
 3014    var(A),
 3015    !,
 3016    D=A,
 3017    use_same_args(B, C, E, F, G, H).
 3018use_same_args([A|B], [C|D], [E|F], G, H, I) :-
 3019    nonvar(A),
 3020    !,
 3021    (   common_variables(A, H)
 3022    ->  I=[C=A|J]
 3023    ;   I=J
 3024    ),
 3025    E=C,
 3026    use_same_args(B, D, F, G, H, J).
 3027simplify_heads([], _, _, _, [], []).
 3028simplify_heads([A|B], C, D, E, F, G) :-
 3029    A=(H=I),
 3030    (   (   nonvar(I)
 3031        ;   common_variables(I, B-C)
 3032        ),
 3033        guard_entailment:entails_guard(C, H=I)
 3034    ->  (   common_variables(I, D-B-C)
 3035        ->  G=J,
 3036            F=K
 3037        ;   (   common_variables(I, E)
 3038            ->  G=[H=I|J]
 3039            ;   G=J
 3040            ),
 3041            F=[H|K]
 3042        )
 3043    ;   nonvar(I),
 3044        functor(I, L, M),
 3045        guard_entailment:entails_guard([functor(H, L, M)|C], H=I)
 3046    ->  G=J,
 3047        (   common_variables(I, D-B-C)
 3048        ->  F=K
 3049        ;   F=[functor(H, L, M)|K]
 3050        )
 3051    ;   F=K,
 3052        G=J
 3053    ),
 3054    simplify_heads(B, [A|C], D, E, K, J).
 3055common_variables(A, B) :-
 3056    term_variables(A, C),
 3057    term_variables(B, D),
 3058    intersect_eq(C, D, E),
 3059    E\==[].
 3060add_failing_occ(A, B, C, D, E, F, _, G, H) :-
 3061    A=pragma(rule(_, _, I, _), ids(J, K), _, _, _),
 3062    append(K, J, L),
 3063    missing_partner_cond(B,
 3064                         C,
 3065                         L,
 3066                         D,
 3067                         M,
 3068                         N,
 3069                         G),
 3070    copy_term((N, B, C), (O, P, Q)),
 3071    variable_replacement((N, B, C),
 3072                         (O, P, Q),
 3073                         H),
 3074    copy_with_variable_replacement(I, R, H),
 3075    extract_explicit_matchings(R, S),
 3076    negate_b(S, T),
 3077    copy_with_variable_replacement(M, U, H),
 3078    (   subsumes_term(F, O),
 3079        F=O
 3080    ->  E=[(T;U)]
 3081    ;   E=[chr_pp_void_info]
 3082    ).
 3083missing_partner_cond([], [], [], _, fail, _, _).
 3084missing_partner_cond([A|B], [_|C], [D|E], D, F, A, G) :-
 3085    !,
 3086    missing_partner_cond(B,
 3087                         C,
 3088                         E,
 3089                         D,
 3090                         F,
 3091                         A,
 3092                         G).
 3093missing_partner_cond([A|B], [_|C], [_|D], E, F, G, H/I) :-
 3094    F=(chr_pp_not_in_store(A);J),
 3095    missing_partner_cond(B,
 3096                         C,
 3097                         D,
 3098                         E,
 3099                         J,
 3100                         G,
 3101                         H/I).
 3102extract_explicit_matchings((A, B), C) :-
 3103    !,
 3104    (   extract_explicit_matchings(A)
 3105    ->  extract_explicit_matchings(B, C)
 3106    ;   C=(A, D),
 3107        extract_explicit_matchings(B, D)
 3108    ).
 3109extract_explicit_matchings(A, B) :-
 3110    !,
 3111    (   extract_explicit_matchings(A)
 3112    ->  B=true
 3113    ;   B=A
 3114    ).
 3115extract_explicit_matchings(A=B) :-
 3116    var(A),
 3117    var(B),
 3118    !,
 3119    A=B.
 3120extract_explicit_matchings(A==B) :-
 3121    var(A),
 3122    var(B),
 3123    !,
 3124    A=B.
 3125assert_constraint_type(A, B) :-
 3126    (   ground(B)
 3127    ->  constraint_type(A, B)
 3128    ;   chr_error(type_error,
 3129                  'Declared argument types "~w" for constraint "~w" must be ground!\n',
 3130                  [B, A])
 3131    ).
 3132get_type_definition_det(A, B) :-
 3133    (   get_type_definition(A, B)
 3134    ->  true
 3135    ;   chr_error(type,
 3136                  'Could not find type definition for type `~w\'.\n',
 3137                  [A])
 3138    ).
 3139get_constraint_type_det(A, B) :-
 3140    (   get_constraint_type(A, B)
 3141    ->  true
 3142    ;   A=_/C,
 3143        replicate(C, any, B)
 3144    ).
 3145modes_condition([], [], true).
 3146modes_condition([A|B], [C|D], E) :-
 3147    (   A==(+)
 3148    ->  E=(ground(C), F)
 3149    ;   A==(-)
 3150    ->  E=(var(C), F)
 3151    ;   E=F
 3152    ),
 3153    modes_condition(B, D, F).
 3154types_condition([], [], [], [], true).
 3155types_condition([A|B], [C|D], [E|F], [G|H], (I, J)) :-
 3156    (   G==(-)
 3157    ->  K=[true]
 3158    ;   get_type_definition_det(A, L),
 3159        type_condition(L, C, E, G, M),
 3160        (   G==(+)
 3161        ->  K=M
 3162        ;   K=[\+ground(C)|M]
 3163        )
 3164    ),
 3165    list2disj(K, I),
 3166    types_condition(B, D, F, H, J).
 3167type_condition([], _, _, _, []).
 3168type_condition([A|B], C, D, E, [F|G]) :-
 3169    (   var(A)
 3170    ->  chr_error(type, 'Unexpected variable type in type definition!\n', [])
 3171    ;   atomic_builtin_type(A, C, F)
 3172    ->  true
 3173    ;   compound_builtin_type(A, C, F, _)
 3174    ->  true
 3175    ;   type_def_case_condition(A, C, D, E, F)
 3176    ),
 3177    type_condition(B, C, D, E, G).
 3178ast_atomic_builtin_type(A, B, C) :-
 3179    ast_term_to_term(B, D),
 3180    atomic_builtin_type(A, D, C).
 3181ast_compound_builtin_type(A, B, C) :-
 3182    ast_term_to_term(B, D),
 3183    compound_builtin_type(A, D, _, C).
 3184atomic_builtin_type(any, _, true).
 3185atomic_builtin_type(dense_int, A, (integer(A), A>=0)).
 3186atomic_builtin_type(int, A, integer(A)).
 3187atomic_builtin_type(number, A, number(A)).
 3188atomic_builtin_type(float, A, float(A)).
 3189atomic_builtin_type(natural, A, (integer(A), A>=0)).
 3190atomic_builtin_type(chr_identifier, _, true).
 3191compound_builtin_type(chr_constants(_), _, true, true).
 3192compound_builtin_type(chr_constants(_, _), _, true, true).
 3193compound_builtin_type(chr_identifier(_), _, true, true).
 3194compound_builtin_type(chr_enum(A), B, (ground(B), memberchk(B, A)), once((member(C, A), unifiable(B, C, _)))).
 3195compound_builtin_type(chr_enum(_, _), _, true, true).
 3196is_chr_constants_type(chr_constants(A), A, no).
 3197is_chr_constants_type(chr_constants(A, B), A, yes(B)).
 3198is_chr_enum_type(chr_enum(A), A, no).
 3199is_chr_enum_type(chr_enum(A, B), A, yes(B)).
 3200type_def_case_condition(A, B, C, D, E) :-
 3201    (   nonvar(A)
 3202    ->  functor(A, F, G),
 3203        (   G==0
 3204        ->  E=(B=A)
 3205        ;   var(C)
 3206        ->  E=functor(B, F, G)
 3207        ;   functor(C, F, G)
 3208        ->  E=(functor(B, F, G), B=H, I),
 3209            A=..[_|J],
 3210            C=..[_|K],
 3211            functor(H, F, G),
 3212            H=..[_|L],
 3213            replicate(G, D, M),
 3214            types_condition(J, L, K, M, I)
 3215        ;   E=functor(B, F, G)
 3216        )
 3217    ;   chr_error(internal, 'Illegal type definition (must be nonvar).\n', [])
 3218    ).
 3219static_type_check_rule(A, B) :-
 3220    B=ast_rule(C, _, _, D, _),
 3221    (   catch(( ast_static_type_check_head(C),
 3222                ast_static_type_check_body(D)
 3223              ),
 3224              type_error(E),
 3225              (   E=invalid_functor(F, G, H)
 3226              ->  chr_error(type_error,
 3227                            'Invalid functor in ~@ of ~@:\n\t\tfound `~w\',\n\t\texpected type `~w\'!\n',
 3228                            [ chr_translate:format_src(F),
 3229                              format_rule(A),
 3230                              G,
 3231                              H
 3232                            ])
 3233              ;   E=type_clash(I, J, K, L, M)
 3234              ->  chr_error(type_error,
 3235                            'Type clash for variable ~w in ~@:\n\t\texpected type ~w in ~@\n\t\texpected type ~w in ~@\n',
 3236                            [ I,
 3237                              format_rule(A),
 3238                              L,
 3239                              chr_translate:format_src(J),
 3240                              M,
 3241                              chr_translate:format_src(K)
 3242                            ])
 3243              )),
 3244        fail
 3245    ;   true
 3246    ).
 3247ast_static_type_check_head(simplification(A)) :-
 3248    maplist(ast_static_type_check_head_constraint, A).
 3249ast_static_type_check_head(propagation(A)) :-
 3250    maplist(ast_static_type_check_head_constraint, A).
 3251ast_static_type_check_head(simpagation(A, B)) :-
 3252    maplist(ast_static_type_check_head_constraint, A),
 3253    maplist(ast_static_type_check_head_constraint, B).
 3254ast_static_type_check_head_constraint(A) :-
 3255    A=chr_constraint(B, C, _),
 3256    get_constraint_type_det(B, D),
 3257    maplist(ast_static_type_check_term(head(_)), C, D).
 3258ast_static_type_check_body([]).
 3259ast_static_type_check_body([A|B]) :-
 3260    ast_symbol(A, C),
 3261    get_constraint_type_det(C, D),
 3262    ast_args(A, E),
 3263    maplist(ast_static_type_check_term(body(A)), E, D),
 3264    ast_static_type_check_body(B).
 3265format_src(head(A)) :-
 3266    format('head ~w', [A]).
 3267format_src(body(A)) :-
 3268    format('body goal ~w', [A]).
 3269generate_dynamic_type_check_clauses(A) :-
 3270    (   chr_pp_flag(debugable, on)
 3271    ->  dynamic_type_check,
 3272        get_dynamic_type_check_clauses(B),
 3273        append(B,
 3274               [ ('$dynamic_type_check'(C, D):-throw(error(type_error(C, D), context(_, 'CHR Runtime Type Error'))))
 3275               ],
 3276               A)
 3277    ;   A=[]
 3278    ).
 3279dynamic_type_check_clause(A, B, C) :-
 3280    copy_term(A-B, D-E),
 3281    functor(E, F, G),
 3282    functor(H, F, G),
 3283    E=..[_|I],
 3284    H=..[_|J],
 3285    maplist(dynamic_type_check_call, I, J, K),
 3286    list2conj(K, L),
 3287    C=('$dynamic_type_check'(D, H):-L).
 3288dynamic_type_check_alias_clause(A, B, C) :-
 3289    C=('$dynamic_type_check'(A, D):-'$dynamic_type_check'(B, D)).
 3290dynamic_type_check_call(A, B, C) :-
 3291    (   A==any
 3292    ->  C=true
 3293    ;   C=when(nonvar(B), once('$dynamic_type_check'(A, B)))
 3294    ).
 3295atomic_types_suspended_constraint(A) :-
 3296    A=_/B,
 3297    get_constraint_type(A, C),
 3298    get_constraint_mode(A, D),
 3299    numlist(1, B, E),
 3300    maplist(atomic_types_suspended_constraint(A),
 3301            C,
 3302            D,
 3303            E).
 3304atomic_types_suspended_constraint(A, B, C, D) :-
 3305    (   is_indexed_argument(A, D)
 3306    ->  (   C==(?)
 3307        ->  atomic_type(B)
 3308        ;   true
 3309        )
 3310    ;   true
 3311    ).
 3312storage_analysis(A) :-
 3313    (   chr_pp_flag(storage_analysis, on)
 3314    ->  check_constraint_storages(A)
 3315    ;   true
 3316    ).
 3317check_constraint_storages(A) :-
 3318    maplist(check_constraint_storage, A).
 3319check_constraint_storage(A) :-
 3320    get_max_occurrence(A, B),
 3321    check_occurrences_storage(A, 1, B).
 3322check_occurrences_storage(A, B, C) :-
 3323    (   B>C
 3324    ->  stored_completing(A, 1, 0)
 3325    ;   check_occurrence_storage(A, B),
 3326        D is B+1,
 3327        check_occurrences_storage(A, D, C)
 3328    ).
 3329check_occurrence_storage(A, B) :-
 3330    get_occurrence(A, B, C, D, E),
 3331    (   is_passive(C, D)
 3332    ->  stored(A, B, maybe)
 3333    ;   get_rule(C, F),
 3334        F=pragma(rule(G, H, I, J), ids(K, L), _, _, _),
 3335        (   E==simplification,
 3336            select2(D, M, K, G, _, _)
 3337        ->  check_storage_head1(M, B, G, H, I)
 3338        ;   E==propagation,
 3339            select2(D, N, L, H, _, _)
 3340        ->  check_storage_head2(N, B, G, J)
 3341        )
 3342    ).
 3343check_storage_head1(A, B, C, D, E) :-
 3344    functor(A, F, G),
 3345    H=F/G,
 3346    (   C==[A],
 3347        D==[],
 3348        guard_entailment:entails_guard([chr_pp_headvariables(A)], E),
 3349        A=..[_|I],
 3350        no_matching(I, [])
 3351    ->  stored(H, B, no)
 3352    ;   stored(H, B, maybe)
 3353    ).
 3354no_matching([], _).
 3355no_matching([A|B], C) :-
 3356    var(A),
 3357    \+ memberchk_eq(A, C),
 3358    no_matching(B, [A|C]).
 3359check_storage_head2(A, B, C, D) :-
 3360    functor(A, E, F),
 3361    G=E/F,
 3362    (   C\==[],
 3363        D==true
 3364    ->  stored(G, B, maybe)
 3365    ;   stored(G, B, yes)
 3366    ).
 3367constraints_code(A, B) :-
 3368    (   chr_pp_flag(reduced_indexing, on),
 3369        forall(C,
 3370               A,
 3371               chr_translate:only_ground_indexed_arguments(C))
 3372    ->  none_suspended_on_variables
 3373    ;   true
 3374    ),
 3375    constraints_code1(A, B, []).
 3376constraint_prelude(A/B, C) :-
 3377    vars_susp(B, D, E, F),
 3378    G=..[A|D],
 3379    make_suspension_continuation_goal(A/B, F, H),
 3380    build_head(A, B, [0], F, I),
 3381    (   chr_pp_flag(debugable, on)
 3382    ->  insert_constraint_goal(A/B, E, D, J),
 3383        attach_constraint_atom(A/B, K, E, L),
 3384        delay_phase_end(validate_store_type_assumptions,
 3385                        chr_translate:update_suspension_field(A/B, E, state, inactive, M)),
 3386        insert_constraint_internal_constraint_goal(A/B,
 3387                                                   K,
 3388                                                   E,
 3389                                                   H,
 3390                                                   D,
 3391                                                   N),
 3392        (   get_constraint_type(A/B, O)
 3393        ->  maplist(dynamic_type_check_call, O, D, P),
 3394            list2conj(P, Q)
 3395        ;   Q=true
 3396        ),
 3397        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))
 3398    ;   get_allocation_occurrence(A/B, 0)
 3399    ->  gen_insert_constraint_internal_goal(A/B,
 3400                                            R,
 3401                                            F,
 3402                                            D,
 3403                                            E),
 3404        delay_phase_end(validate_store_type_assumptions,
 3405                        chr_translate:update_suspension_field(A/B, E, state, inactive, M)),
 3406        C=(G:-R, M, I)
 3407    ;   C=(G:-I)
 3408    ).
 3409make_suspension_continuation_goal(A/B, C, D) :-
 3410    (   may_trigger(A/B)
 3411    ->  build_head(A, B, [0], C, E),
 3412        (   chr_pp_flag(debugable, off)
 3413        ->  D=E
 3414        ;   get_target_module(F),
 3415            D=F:E
 3416        )
 3417    ;   D=true
 3418    ).
 3419gen_cond_attach_clause(A/B, C, D, E) :-
 3420    (   is_finally_stored(A/B)
 3421    ->  get_allocation_occurrence(A/B, F),
 3422        get_max_occurrence(A/B, G),
 3423        (   chr_pp_flag(debugable, off),
 3424            G<F
 3425        ->  (   only_ground_indexed_arguments(A/B)
 3426            ->  gen_insert_constraint_internal_goal(A/B,
 3427                                                    H,
 3428                                                    I,
 3429                                                    J,
 3430                                                    K)
 3431            ;   gen_cond_attach_goal(A/B,
 3432                                     H,
 3433                                     I,
 3434                                     J,
 3435                                     K)
 3436            )
 3437        ;   vars_susp(B, J, K, I),
 3438            gen_uncond_attach_goal(A/B,
 3439                                   K,
 3440                                   J,
 3441                                   H,
 3442                                   _)
 3443        ),
 3444        build_head(A, B, C, I, L),
 3445        M=(L:-H),
 3446        add_dummy_location(M, N),
 3447        D=[N|E]
 3448    ;   D=E
 3449    ).
 3450gen_cond_attach_goal(A/B, C, D, E, F) :-
 3451    vars_susp(B, E, F, D),
 3452    make_suspension_continuation_goal(A/B, D, G),
 3453    (   get_store_type(A/B, var_assoc_store(_, _))
 3454    ->  H=true
 3455    ;   attach_constraint_atom(A/B, I, F, H)
 3456    ),
 3457    _=..[A|E],
 3458    insert_constraint_goal(A/B, F, E, J),
 3459    insert_constraint_internal_constraint_goal(A/B,
 3460                                               I,
 3461                                               F,
 3462                                               G,
 3463                                               E,
 3464                                               K),
 3465    (   may_trigger(A/B)
 3466    ->  activate_constraint_goal(A/B,
 3467                                 (J, H),
 3468                                 I,
 3469                                 F,
 3470                                 _,
 3471                                 L),
 3472        C=(var(F)->K, J, H;L)
 3473    ;   C=(K, J, H)
 3474    ).
 3475gen_insert_constraint_internal_goal(A/B, C, D, E, F) :-
 3476    vars_susp(B, E, F, D),
 3477    make_suspension_continuation_goal(A/B, D, G),
 3478    (   \+ only_ground_indexed_arguments(A/B),
 3479        \+ get_store_type(A/B, var_assoc_store(_, _))
 3480    ->  attach_constraint_atom(A/B, H, F, I)
 3481    ;   I=true
 3482    ),
 3483    _=..[A|E],
 3484    insert_constraint_goal(A/B, F, E, J),
 3485    insert_constraint_internal_constraint_goal(A/B,
 3486                                               H,
 3487                                               F,
 3488                                               G,
 3489                                               E,
 3490                                               K),
 3491    (   only_ground_indexed_arguments(A/B),
 3492        chr_pp_flag(debugable, off)
 3493    ->  C=(K, J)
 3494    ;   C=(K, J, I)
 3495    ).
 3496gen_uncond_attach_goal(A, B, C, D, E) :-
 3497    (   \+ only_ground_indexed_arguments(A),
 3498        \+ get_store_type(A, var_assoc_store(_, _))
 3499    ->  attach_constraint_atom(A, F, B, G)
 3500    ;   G=true
 3501    ),
 3502    insert_constraint_goal(A, B, C, H),
 3503    (   chr_pp_flag(late_allocation, on)
 3504    ->  activate_constraint_goal(A,
 3505                                 (H, G),
 3506                                 F,
 3507                                 B,
 3508                                 E,
 3509                                 D)
 3510    ;   activate_constraint_goal(A, true, F, B, E, D)
 3511    ).
 3512head1_code(A, B, C, D, E, F, G, H, I, J) :-
 3513    E=pragma(K, _, _, _, L),
 3514    K=rule(_, M, _, _),
 3515    (   M==[]
 3516    ->  reorder_heads(L, A, C, D, N, O),
 3517        simplification_code(A,
 3518                            B,
 3519                            N,
 3520                            O,
 3521                            E,
 3522                            F,
 3523                            G,
 3524                            H,
 3525                            I,
 3526                            J)
 3527    ;   simpagation_head1_code(A,
 3528                               B,
 3529                               C,
 3530                               D,
 3531                               E,
 3532                               F,
 3533                               G,
 3534                               H,
 3535                               I,
 3536                               J)
 3537    ).
 3538head2_code(A, B, C, D, E, F, G, H, I, J) :-
 3539    E=pragma(K, _, _, _, L),
 3540    K=rule(M, _, _, _),
 3541    (   M==[]
 3542    ->  reorder_heads(L, A, C, D, N, O),
 3543        propagation_code(A,
 3544                         B,
 3545                         N,
 3546                         O,
 3547                         K,
 3548                         L,
 3549                         F,
 3550                         G,
 3551                         H,
 3552                         I,
 3553                         J)
 3554    ;   simpagation_head2_code(A,
 3555                               B,
 3556                               C,
 3557                               D,
 3558                               E,
 3559                               F,
 3560                               G,
 3561                               H,
 3562                               I,
 3563                               J)
 3564    ).
 3565gen_alloc_inc_clause(A/B, C, D, E, F) :-
 3566    vars_susp(B, G, H, I),
 3567    build_head(A, B, D, I, J),
 3568    inc_id(D, K),
 3569    build_head(A, B, K, I, L),
 3570    gen_occ_allocation(A/B, C, G, H, M),
 3571    N=(J:-M, L),
 3572    add_dummy_location(N, O),
 3573    E=[O|F].
 3574gen_occ_allocation(A, B, C, D, E) :-
 3575    get_allocation_occurrence(A, F),
 3576    get_occurrence_code_id(A, F, G),
 3577    get_occurrence_code_id(A, B, H),
 3578    (   chr_pp_flag(debugable, off),
 3579        H==G
 3580    ->  allocate_constraint_goal(A, D, C, I),
 3581        (   may_trigger(A)
 3582        ->  E=(var(D)->I;true)
 3583        ;   E=I
 3584        )
 3585    ;   E=true
 3586    ).
 3587gen_occ_allocation_in_guard(A, B, C, D, E) :-
 3588    get_allocation_occurrence(A, F),
 3589    (   chr_pp_flag(debugable, off),
 3590        B<F
 3591    ->  allocate_constraint_goal(A, D, C, G),
 3592        (   may_trigger(A)
 3593        ->  E=(var(D)->G;true)
 3594        ;   E=G
 3595        )
 3596    ;   E=true
 3597    ).
 3598guard_via_reschedule_new(A, B, C, D, E, F) :-
 3599    (   chr_pp_flag(guard_via_reschedule, on)
 3600    ->  guard_via_reschedule_main_new(A,
 3601                                      B,
 3602                                      C,
 3603                                      D,
 3604                                      E,
 3605                                      G),
 3606        list2conj(G, F)
 3607    ;   length(A, H),
 3608        length(E, H),
 3609        length(B, I),
 3610        length(D, I),
 3611        append(E, D, J),
 3612        list2conj(J, F)
 3613    ).
 3614guard_via_reschedule_main_new(A, B, C, D, E, F) :-
 3615    initialize_unit_dictionary(C, G),
 3616    maplist(wrap_in_functor(lookup), A, H),
 3617    maplist(wrap_in_functor(guard), B, I),
 3618    build_units(H, I, G, J),
 3619    dependency_reorder(J, K),
 3620    wrappedunits2lists(K, L, E, F),
 3621    sort(L, M),
 3622    snd_of_pairs(M, D).
 3623wrappedunits2lists([], [], [], []).
 3624wrappedunits2lists([unit(A, B, _, _)|C], D, E, F) :-
 3625    F=[G|H],
 3626    (   B=lookup(I)
 3627    ->  E=[G|J],
 3628        D=K
 3629    ;   B=guard(I)
 3630    ->  D=[A-G|K],
 3631        E=J
 3632    ),
 3633    wrappedunits2lists(C, K, J, H).
 3634guard_splitting(A, B) :-
 3635    A=rule(C, D, E, _),
 3636    append(C, D, F),
 3637    conj2list(E, G),
 3638    term_variables(F, H),
 3639    split_off_simple_guard_new(G, H, I, J),
 3640    append(I, [K], B),
 3641    term_variables(J, L),
 3642    ground_vars(F, M),
 3643    list_difference_eq(H, M, N),
 3644    intersect_eq(N, L, O),
 3645    maplist(chr_lock, O, P),
 3646    maplist(chr_unlock, O, Q),
 3647    list2conj(P, R),
 3648    list2conj(Q, S),
 3649    list2conj(J, T),
 3650    K=(R, T, S).
 3651guard_body_copies3(A, B, C, D, E) :-
 3652    A=rule(_, _, _, F),
 3653    my_term_copy(B, C, G, D),
 3654    my_term_copy(F, G, E).
 3655split_off_simple_guard_new([], _, [], []).
 3656split_off_simple_guard_new([A|B], C, D, E) :-
 3657    (   simple_guard_new(A, C)
 3658    ->  D=[A|F],
 3659        split_off_simple_guard_new(B, C, F, E)
 3660    ;   D=[],
 3661        E=[A|B]
 3662    ).
 3663simple_guard_new(A, B) :-
 3664    builtin_binds_b(A, C),
 3665    not(( member(D, C),
 3666          memberchk_eq(D, B)
 3667        )).
 3668dependency_reorder(A, B) :-
 3669    dependency_reorder(A, [], B).
 3670dependency_reorder([], A, B) :-
 3671    reverse(A, B).
 3672dependency_reorder([A|B], C, D) :-
 3673    A=unit(_, _, E, F),
 3674    (   E==fixed
 3675    ->  G=[A|C]
 3676    ;   dependency_insert(C, A, F, G)
 3677    ),
 3678    dependency_reorder(B, G, D).
 3679dependency_insert([], A, _, [A]).
 3680dependency_insert([A|B], C, D, E) :-
 3681    A=unit(F, _, _, _),
 3682    (   memberchk(F, D)
 3683    ->  E=[C, A|B]
 3684    ;   E=[A|G],
 3685        dependency_insert(B, C, D, G)
 3686    ).
 3687build_units(A, B, C, D) :-
 3688    build_retrieval_units(A, 1, E, C, F, D, G),
 3689    build_guard_units(B, E, F, G).
 3690build_retrieval_units([], A, A, B, B, C, C).
 3691build_retrieval_units([A|B], C, D, E, F, G, H) :-
 3692    term_variables(A, I),
 3693    update_unit_dictionary(I, C, E, J, [], K),
 3694    G=[unit(C, A, fixed, K)|L],
 3695    M is C+1,
 3696    build_retrieval_units(B,
 3697                          M,
 3698                          D,
 3699                          J,
 3700                          F,
 3701                          L,
 3702                          H).
 3703initialize_unit_dictionary(A, B) :-
 3704    term_variables(A, C),
 3705    pair_all_with(C, 0, B).
 3706update_unit_dictionary([], _, A, A, B, B).
 3707update_unit_dictionary([A|B], C, D, E, F, G) :-
 3708    (   lookup_eq(D, A, H)
 3709    ->  (   (   H==C
 3710            ;   memberchk(H, F)
 3711            )
 3712        ->  I=F
 3713        ;   I=[H|F]
 3714        ),
 3715        J=D
 3716    ;   J=[A-C|D],
 3717        I=F
 3718    ),
 3719    update_unit_dictionary(B, C, J, E, I, G).
 3720build_guard_units(A, B, C, D) :-
 3721    (   A=[E]
 3722    ->  D=[unit(B, E, fixed, [])]
 3723    ;   A=[E|F]
 3724    ->  term_variables(E, G),
 3725        update_unit_dictionary2(G, B, C, H, [], I),
 3726        D=[unit(B, E, movable, I)|J],
 3727        K is B+1,
 3728        build_guard_units(F, K, H, J)
 3729    ).
 3730update_unit_dictionary2([], _, A, A, B, B).
 3731update_unit_dictionary2([A|B], C, D, E, F, G) :-
 3732    (   lookup_eq(D, A, H)
 3733    ->  (   (   H==C
 3734            ;   memberchk(H, F)
 3735            )
 3736        ->  I=F
 3737        ;   I=[H|F]
 3738        ),
 3739        J=[A-C|D]
 3740    ;   J=[A-C|D],
 3741        I=F
 3742    ),
 3743    update_unit_dictionary2(B, C, J, E, I, G).
 3744functional_dependency_analysis(A) :-
 3745    (   fail,
 3746        chr_pp_flag(functional_dependency_analysis, on)
 3747    ->  functional_dependency_analysis_main(A)
 3748    ;   true
 3749    ).
 3750functional_dependency_analysis_main([]).
 3751functional_dependency_analysis_main([A|B]) :-
 3752    (   discover_unique_pattern(A, C, D, E, F)
 3753    ->  functional_dependency(C, D, E, F)
 3754    ;   true
 3755    ),
 3756    functional_dependency_analysis_main(B).
 3757discover_unique_pattern(A, B/C, D, E, F) :-
 3758    A=pragma(G, _, _, _, D),
 3759    G=rule(H, I, J, _),
 3760    (   H=[K],
 3761        I=[L]
 3762    ->  true
 3763    ;   H=[K, L],
 3764        I==[]
 3765    ->  true
 3766    ),
 3767    check_unique_constraints(K, L, J, D, M),
 3768    term_variables(K, N),
 3769    \+ ( member(O, N),
 3770         lookup_eq(M, O, P),
 3771         memberchk_eq(P, N)
 3772       ),
 3773    select_pragma_unique_variables(N, M, Q),
 3774    copy_term_nat(K-Q, E-F),
 3775    functor(K, B, C).
 3776select_pragma_unique_variables([], _, []).
 3777select_pragma_unique_variables([A|B], C, D) :-
 3778    (   lookup_eq(C, A, _)
 3779    ->  D=E
 3780    ;   D=[A|E]
 3781    ),
 3782    select_pragma_unique_variables(B, C, E).
 3783set_semantics_rules(A) :-
 3784    (   fail,
 3785        chr_pp_flag(set_semantics_rule, on)
 3786    ->  set_semantics_rules_main(A)
 3787    ;   true
 3788    ).
 3789set_semantics_rules_main([]).
 3790set_semantics_rules_main([A|B]) :-
 3791    set_semantics_rule_main(A),
 3792    set_semantics_rules_main(B).
 3793set_semantics_rule_main(A) :-
 3794    A=pragma(B, C, _, _, D),
 3795    (   B=rule([E], [F], true, _),
 3796        C=ids([G], [H]),
 3797        \+ is_passive(D, G),
 3798        functor(E, I, J),
 3799        get_functional_dependency(I/J, D, K, L),
 3800        copy_term_nat(K-L, E-M),
 3801        copy_term_nat(K-L, F-N),
 3802        M==N
 3803    ->  passive(D, H)
 3804    ;   true
 3805    ).
 3806check_unique_constraints(A, B, C, D, E) :-
 3807    \+ any_passive_head(D),
 3808    variable_replacement(A-B, B-A, E),
 3809    copy_with_variable_replacement(C, F, E),
 3810    negate_b(C, G),
 3811    once(entails_b(G, F)).
 3812symmetry_analysis(A) :-
 3813    (   chr_pp_flag(check_unnecessary_active, off)
 3814    ->  true
 3815    ;   symmetry_analysis_main(A)
 3816    ).
 3817symmetry_analysis_main([]).
 3818symmetry_analysis_main([A|B]) :-
 3819    A=pragma(C, ids(D, E), _, _, F),
 3820    C=rule(G, H, _, _),
 3821    (   (   \+ chr_pp_flag(check_unnecessary_active, simplification)
 3822        ;   H==[]
 3823        ),
 3824        G\==[]
 3825    ->  symmetry_analysis_heads_simplification(G,
 3826                                               D,
 3827                                               [],
 3828                                               [],
 3829                                               C,
 3830                                               F),
 3831        symmetry_analysis_heads_propagation(H,
 3832                                            E,
 3833                                            [],
 3834                                            [],
 3835                                            C,
 3836                                            F)
 3837    ;   true
 3838    ),
 3839    symmetry_analysis_main(B).
 3840symmetry_analysis_heads_simplification([], [], _, _, _, _).
 3841symmetry_analysis_heads_simplification([A|B], [C|D], E, F, G, H) :-
 3842    (   \+ is_passive(H, C),
 3843        member2(E, F, I-J),
 3844        \+ is_passive(H, J),
 3845        variable_replacement(I, A, K),
 3846        copy_with_variable_replacement(G, L, K),
 3847        identical_guarded_rules(G, L)
 3848    ->  passive(H, C)
 3849    ;   true
 3850    ),
 3851    symmetry_analysis_heads_simplification(B,
 3852                                           D,
 3853                                           [A|E],
 3854                                           [C|F],
 3855                                           G,
 3856                                           H).
 3857symmetry_analysis_heads_propagation([], [], _, _, _, _).
 3858symmetry_analysis_heads_propagation([A|B], [C|D], E, F, G, H) :-
 3859    (   \+ is_passive(H, C),
 3860        member2(E, F, I-J),
 3861        \+ is_passive(H, J),
 3862        variable_replacement(I, A, K),
 3863        copy_with_variable_replacement(G, L, K),
 3864        identical_rules(G, L)
 3865    ->  passive(H, C)
 3866    ;   true
 3867    ),
 3868    symmetry_analysis_heads_propagation(B,
 3869                                        D,
 3870                                        [A|E],
 3871                                        [C|F],
 3872                                        G,
 3873                                        H).
 3874simplification_code(A, B, C, D, E, F, G, H, I, J) :-
 3875    E=pragma(K, _, _, _, L),
 3876    head_info1(A, F, _, M, N, O),
 3877    build_head(F, H, N, P),
 3878    get_constraint_mode(F, Q),
 3879    head_arg_matches(O, Q, [], R, S, [], T),
 3880    guard_splitting(K, U),
 3881    (   is_stored_in_guard(F, L)
 3882    ->  V=[_|U]
 3883    ;   V=U
 3884    ),
 3885    guard_via_reschedule_new(C,
 3886                             V,
 3887                             A,
 3888                             W,
 3889                             X,
 3890                             Y),
 3891    rest_heads_retrieval_and_matching(C,
 3892                                      D,
 3893                                      A,
 3894                                      X,
 3895                                      Z,
 3896                                      S,
 3897                                      A1,
 3898                                      [],
 3899                                      [],
 3900                                      [],
 3901                                      T,
 3902                                      _),
 3903    guard_body_copies3(K, V, A1, W, B1),
 3904    (   is_stored_in_guard(F, L)
 3905    ->  gen_occ_allocation_in_guard(F,
 3906                                    G,
 3907                                    C1,
 3908                                    M,
 3909                                    D1),
 3910        gen_uncond_attach_goal(F, M, C1, E1, _),
 3911        W=[F1|_],
 3912        F1=(D1, E1)
 3913    ;   true
 3914    ),
 3915    partner_constraint_detachments(Z, C, A1, G1),
 3916    active_constraint_detachment(H, M, A, A1, H1),
 3917    (   chr_pp_flag(debugable, on)
 3918    ->  K=rule(_, _, I1, J1),
 3919        my_term_copy(I1-J1, A1, K1-L1),
 3920        sort_by_key([M|Z], [B|D], M1),
 3921        N1='chr debug_event'(try(M1, [], K1, L1)),
 3922        O1='chr debug_event'(apply(M1, [], K1, L1)),
 3923        instrument_goal(P1, N1, O1, Q1)
 3924    ;   Q1=P1
 3925    ),
 3926    actual_cut(F, G, P1),
 3927    R1=(P:-R, Y, Q1, G1, H1, B1),
 3928    add_location(R1, L, S1),
 3929    I=[S1|J].
 3930actual_cut(A, B, C) :-
 3931    (   unconditional_occurrence(A, B),
 3932        chr_pp_flag(late_allocation, on)
 3933    ->  C=true
 3934    ;   C=!
 3935    ).
 3936add_location(A, B, C) :-
 3937    (   chr_pp_flag(line_numbers, on)
 3938    ->  get_line_number(B, D:E),
 3939        C='$source_location'(D, E):A
 3940    ;   C=A
 3941    ).
 3942add_dummy_location(A, B) :-
 3943    (   chr_pp_flag(line_numbers, on)
 3944    ->  get_chr_source_file(C),
 3945        B='$source_location'(C, 1):A
 3946    ;   B=A
 3947    ).
 3948head_arg_matches(A, B, C, D, E) :-
 3949    head_arg_matches(A, B, C, D, E, [], _).
 3950head_arg_matches(A, B, C, D, E, F, G) :-
 3951    head_arg_matches_(A, B, C, F, H, E, G),
 3952    list2conj(H, D).
 3953head_arg_matches_([], [], A, B, [], A, B).
 3954head_arg_matches_([silent(A-_)|B], [C|D], E, F, G, H, I) :-
 3955    !,
 3956    (   C==(+)
 3957    ->  term_variables(A, J, F),
 3958        head_arg_matches_(B,
 3959                          D,
 3960                          E,
 3961                          J,
 3962                          G,
 3963                          H,
 3964                          I)
 3965    ;   head_arg_matches_(B,
 3966                          D,
 3967                          E,
 3968                          F,
 3969                          G,
 3970                          H,
 3971                          I)
 3972    ).
 3973head_arg_matches_([A-B|C], [D|E], F, G, H, I, J) :-
 3974    (   var(A)
 3975    ->  (   lookup_eq(F, A, K)
 3976        ->  (   D=(+)
 3977            ->  (   memberchk_eq(A, G)
 3978                ->  H=[B=K|L],
 3979                    M=G
 3980                ;   H=[B==K|L],
 3981                    M=[A|G]
 3982                )
 3983            ;   H=[B==K|L],
 3984                M=G
 3985            ),
 3986            N=F
 3987        ;   N=[A-B|F],
 3988            H=L,
 3989            (   D=(+)
 3990            ->  M=[A|G]
 3991            ;   M=G
 3992            )
 3993        ),
 3994        O=C,
 3995        P=E
 3996    ;   ground(A),
 3997        A='$chr_identifier_match'(Q, R)
 3998    ->  identifier_label_atom(R, B, Q, S),
 3999        H=[S|L],
 4000        F=N,
 4001        M=G,
 4002        O=C,
 4003        P=E
 4004    ;   atomic(A)
 4005    ->  (   D=(+)
 4006        ->  H=[B=A|L]
 4007        ;   H=[B==A|L]
 4008        ),
 4009        F=N,
 4010        M=G,
 4011        O=C,
 4012        P=E
 4013    ;   D==(+),
 4014        is_ground(G, A)
 4015    ->  copy_with_variable_replacement(A, T, F),
 4016        H=[B=T|L],
 4017        F=N,
 4018        M=G,
 4019        O=C,
 4020        P=E
 4021    ;   D==(?),
 4022        is_ground(G, A)
 4023    ->  copy_with_variable_replacement(A, T, F),
 4024        H=[B==T|L],
 4025        F=N,
 4026        M=G,
 4027        O=C,
 4028        P=E
 4029    ;   A=..[_|U],
 4030        functor(A, V, W),
 4031        functor(X, V, W),
 4032        X=..[_|Y],
 4033        (   D=(+)
 4034        ->  H=[B=X|L]
 4035        ;   H=[nonvar(B), B=X|L]
 4036        ),
 4037        pairup(U, Y, Z),
 4038        append(Z, C, O),
 4039        replicate(W, D, A1),
 4040        append(A1, E, P),
 4041        N=F,
 4042        M=G
 4043    ),
 4044    head_arg_matches_(O,
 4045                      P,
 4046                      N,
 4047                      M,
 4048                      L,
 4049                      I,
 4050                      J).
 4051add_heads_types([], A, A).
 4052add_heads_types([A|B], C, D) :-
 4053    add_head_types(A, C, E),
 4054    add_heads_types(B, E, D).
 4055add_head_types(A, B, C) :-
 4056    functor(A, D, E),
 4057    get_constraint_type_det(D/E, F),
 4058    A=..[_|G],
 4059    add_args_types(G, F, B, C).
 4060add_args_types([], [], A, A).
 4061add_args_types([A|B], [C|D], E, F) :-
 4062    add_arg_types(A, C, E, G),
 4063    add_args_types(B, D, G, F).
 4064add_arg_types(A, B, C, D) :-
 4065    (   B==any
 4066    ->  D=C
 4067    ;   var(A)
 4068    ->  (   lookup_eq(C, A, _)
 4069        ->  D=C
 4070        ;   D=[A-B|C]
 4071        )
 4072    ;   D=C
 4073    ).
 4074add_heads_ground_variables([], A, A).
 4075add_heads_ground_variables([A|B], C, D) :-
 4076    add_head_ground_variables(A, C, E),
 4077    add_heads_ground_variables(B, E, D).
 4078add_head_ground_variables(A, B, C) :-
 4079    functor(A, D, E),
 4080    get_constraint_mode(D/E, F),
 4081    A=..[_|G],
 4082    add_arg_ground_variables(G, F, B, C).
 4083add_arg_ground_variables([], [], A, A).
 4084add_arg_ground_variables([A|B], [C|D], E, F) :-
 4085    (   C==(+)
 4086    ->  term_variables(A, G),
 4087        add_var_ground_variables(G, E, H)
 4088    ;   E=H
 4089    ),
 4090    add_arg_ground_variables(B, D, H, F).
 4091add_var_ground_variables([], A, A).
 4092add_var_ground_variables([A|B], C, D) :-
 4093    (   memberchk_eq(A, C)
 4094    ->  E=C
 4095    ;   E=[A|C]
 4096    ),
 4097    add_var_ground_variables(B, E, D).
 4098is_ground(A, B) :-
 4099    (   ground(B)
 4100    ->  true
 4101    ;   compound(B)
 4102    ->  B=..[_|C],
 4103        maplist(is_ground(A), C)
 4104    ;   memberchk_eq(B, A)
 4105    ).
 4106check_ground(A, B, C) :-
 4107    term_variables(B, D),
 4108    check_ground_variables(D, A, C).
 4109check_ground_variables([], _, true).
 4110check_ground_variables([A|B], C, D) :-
 4111    (   memberchk_eq(A, C)
 4112    ->  check_ground_variables(B, C, D)
 4113    ;   D=(ground(A), E),
 4114        check_ground_variables(B, C, E)
 4115    ).
 4116rest_heads_retrieval_and_matching(A, B, C, D, E, F, G, H, I, J) :-
 4117    rest_heads_retrieval_and_matching(A,
 4118                                      B,
 4119                                      C,
 4120                                      D,
 4121                                      E,
 4122                                      F,
 4123                                      G,
 4124                                      H,
 4125                                      I,
 4126                                      J,
 4127                                      [],
 4128                                      _).
 4129rest_heads_retrieval_and_matching(A, B, C, D, E, F, G, H, I, J, K, L) :-
 4130    (   A=[_|_]
 4131    ->  rest_heads_retrieval_and_matching_n(A,
 4132                                            B,
 4133                                            H,
 4134                                            I,
 4135                                            C,
 4136                                            D,
 4137                                            E,
 4138                                            F,
 4139                                            G,
 4140                                            J,
 4141                                            K,
 4142                                            L)
 4143    ;   D=[],
 4144        E=[],
 4145        F=G,
 4146        K=L
 4147    ).
 4148rest_heads_retrieval_and_matching_n([], _, _, _, _, [], [], A, A, _, B, B).
 4149rest_heads_retrieval_and_matching_n([A|B], [_|C], D, E, F, [G|H], [I|J], K, L, _, M, N) :-
 4150    functor(A, O, P),
 4151    head_info(A, P, Q, _, _, R),
 4152    get_store_type(O/P, S),
 4153    (   S==default
 4154    ->  passive_head_via(A, [F|D], K, T, U),
 4155        delay_phase_end(validate_store_type_assumptions,
 4156                        (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))),
 4157        get_constraint_mode(O/P, X),
 4158        head_arg_matches(R,
 4159                         X,
 4160                         K,
 4161                         Y,
 4162                         Z,
 4163                         M,
 4164                         A1),
 4165        B1=R,
 4166        sbag_member_call(I, U, C1),
 4167        D1=(T, C1, I=V, W),
 4168        inline_matching_goal(Y, E1)
 4169    ;   delay_phase_end(validate_store_type_assumptions,
 4170                        (static_suspension_term(O/P, V), get_static_suspension_term_field(arguments, O/P, V, Q))),
 4171        existential_lookup(S,
 4172                           A,
 4173                           [F|D],
 4174                           K,
 4175                           M,
 4176                           V,
 4177                           D1,
 4178                           I,
 4179                           R,
 4180                           B1),
 4181        get_constraint_mode(O/P, X),
 4182        F1=X,
 4183        head_arg_matches(B1,
 4184                         F1,
 4185                         K,
 4186                         Y,
 4187                         Z,
 4188                         M,
 4189                         A1),
 4190        filter_append(B1, Z, G1),
 4191        translate(A1, G1, H1),
 4192        translate(A1, Z, I1),
 4193        inline_matching_goal(Y, E1, H1, I1)
 4194    ),
 4195    different_from_other_susps(A, I, D, E, J1),
 4196    G=(D1, J1, E1),
 4197    rest_heads_retrieval_and_matching_n(B,
 4198                                        C,
 4199                                        [A|D],
 4200                                        [I|E],
 4201                                        F,
 4202                                        H,
 4203                                        J,
 4204                                        Z,
 4205                                        L,
 4206                                        _,
 4207                                        A1,
 4208                                        N).
 4209inline_matching_goal(A, B) :-
 4210    inline_matching_goal(A, B, [], []).
 4211inline_matching_goal(A==B, true, C, D) :-
 4212    memberchk_eq(A, C),
 4213    memberchk_eq(B, D),
 4214    A=B,
 4215    !.
 4216inline_matching_goal((A, B), (C, D), E, F) :-
 4217    !,
 4218    inline_matching_goal(A, C, E, F),
 4219    inline_matching_goal(B, D, E, F).
 4220inline_matching_goal(A, A, _, _).
 4221filter_mode([], _, _, []).
 4222filter_mode([A-B|C], [_-D|E], [F|G], H) :-
 4223    (   B==D
 4224    ->  H=[F|I],
 4225        filter_mode(C, E, G, I)
 4226    ;   filter_mode([A-B|C], E, G, H)
 4227    ).
 4228filter_append([], A, A).
 4229filter_append([A|B], C, D) :-
 4230    (   A=silent(_)
 4231    ->  filter_append(B, C, D)
 4232    ;   D=[A|E],
 4233        filter_append(B, C, E)
 4234    ).
 4235check_unique_keys([], _).
 4236check_unique_keys([A|B], C) :-
 4237    lookup_eq(C, A, _),
 4238    check_unique_keys(B, C).
 4239different_from_other_susps(A, B, C, D, E) :-
 4240    different_from_other_susps_(C, D, A, B, F),
 4241    list2conj(F, E).
 4242different_from_other_susps_(_, [], _, _, []) :-
 4243    !.
 4244different_from_other_susps_([A|B], [C|D], E, F, G) :-
 4245    (   functor(E, H, I),
 4246        functor(A, H, I),
 4247        copy_term_nat(A-E, J-K),
 4248        \+ \+ J=K
 4249    ->  G=[F\==C|L]
 4250    ;   G=L
 4251    ),
 4252    different_from_other_susps_(B, D, E, F, L).
 4253passive_head_via(A, B, C, D, E) :-
 4254    functor(A, F, G),
 4255    get_constraint_index(F/G, _),
 4256    common_variables(A, B, H),
 4257    ground_vars([A], I),
 4258    list_difference_eq(H, I, J),
 4259    global_list_store_name(F/G, K),
 4260    L=nb_getval(K, E),
 4261    get_constraint_mode(F/G, M),
 4262    (   N==[]
 4263    ->  D=L
 4264    ;   member(O, J),
 4265        nth1(P, M, -),
 4266        arg(P, A, Q),
 4267        Q==O
 4268    ->  translate([O], C, [R]),
 4269        gen_get_mod_constraints(F/G, R, S, E),
 4270        D=S
 4271    ;   translate(J, C, N),
 4272        add_heads_types(B, [], T),
 4273        my_term_copy(T, C, U),
 4274        gen_get_mod_constraints(F/G,
 4275                                N,
 4276                                U,
 4277                                V,
 4278                                S,
 4279                                E),
 4280        D=(V->S;L)
 4281    ).
 4282common_variables(A, B, C) :-
 4283    term_variables(A, D),
 4284    term_variables(B, E),
 4285    intersect_eq(D, E, C).
 4286gen_get_mod_constraints(A, B, C, D, E, F) :-
 4287    via_goal(B, C, D, G),
 4288    get_target_module(H),
 4289    E=(get_attr(G, H, I), J),
 4290    get_max_constraint_index(K),
 4291    (   K==1
 4292    ->  J=true,
 4293        F=I
 4294    ;   get_constraint_index(A, L),
 4295        get_suspensions(K, L, I, J, F)
 4296    ).
 4297via_goal(A, B, C, D) :-
 4298    (   A=[]
 4299    ->  C=fail
 4300    ;   A=[E]
 4301    ->  lookup_type(B, E, F),
 4302        (   atomic_type(F)
 4303        ->  C=var(E),
 4304            E=D
 4305        ;   C='chr newvia_1'(E, D)
 4306        )
 4307    ;   A=[E, G]
 4308    ->  C='chr newvia_2'(E, G, D)
 4309    ;   C='chr newvia'(A, D)
 4310    ).
 4311lookup_type(A, B, C) :-
 4312    (   lookup_eq(A, B, C)
 4313    ->  true
 4314    ;   C=any
 4315    ).
 4316gen_get_mod_constraints(A, B, C, D) :-
 4317    get_target_module(E),
 4318    C=(get_attr(B, E, F), G),
 4319    get_max_constraint_index(H),
 4320    (   H==1
 4321    ->  G=true,
 4322        D=F
 4323    ;   get_constraint_index(A, I),
 4324        get_suspensions(H, I, F, G, D)
 4325    ).
 4326guard_body_copies(A, B, C, D) :-
 4327    guard_body_copies2(A, B, E, D),
 4328    list2conj(E, C).
 4329guard_body_copies2(A, B, C, D) :-
 4330    A=rule(_, E, F, G),
 4331    conj2list(F, H),
 4332    split_off_simple_guard(H, B, I, J),
 4333    my_term_copy(I-J, B, K, L-M),
 4334    append(L, [N], C),
 4335    term_variables(J, O),
 4336    term_variables(M, P),
 4337    ground_vars(E, Q),
 4338    list_difference_eq(O, Q, R),
 4339    (   chr_pp_flag(guard_locks, off)
 4340    ->  S=[],
 4341        T=[]
 4342    ;   bagof(U-V,
 4343              W^X^(lists:member(W, R), pairlist:lookup_eq(B, W, X), memberchk_eq(X, P), chr_lock(X, U), chr_unlock(X, V)),
 4344              Y)
 4345    ->  once(pairup(S, T, Y))
 4346    ;   S=[],
 4347        T=[]
 4348    ),
 4349    list2conj(S, Z),
 4350    list2conj(T, A1),
 4351    list2conj(M, B1),
 4352    N=(Z, B1, A1),
 4353    my_term_copy(G, K, D).
 4354split_off_simple_guard([], _, [], []).
 4355split_off_simple_guard([A|B], C, D, E) :-
 4356    (   simple_guard(A, C)
 4357    ->  D=[A|F],
 4358        split_off_simple_guard(B, C, F, E)
 4359    ;   D=[],
 4360        E=[A|B]
 4361    ).
 4362simple_guard(A, B) :-
 4363    binds_b(A, C),
 4364    \+ ( member(D, C),
 4365         lookup_eq(B, D, _)
 4366       ).
 4367active_constraint_detachment(A, B, C, D, E) :-
 4368    functor(C, F, G),
 4369    H=F/G,
 4370    (   is_stored(H)
 4371    ->  (   (   A==[0],
 4372                chr_pp_flag(store_in_guards, off)
 4373            ;   get_allocation_occurrence(H, I),
 4374                get_max_occurrence(H, J),
 4375                J<I
 4376            ),
 4377            only_ground_indexed_arguments(H),
 4378            chr_pp_flag(late_allocation, on)
 4379        ->  E=true
 4380        ;   gen_uncond_susp_detachment(C,
 4381                                       B,
 4382                                       active,
 4383                                       D,
 4384                                       K),
 4385            (   chr_pp_flag(late_allocation, on)
 4386            ->  E=(var(B)->true;K)
 4387            ;   E=K
 4388            )
 4389        )
 4390    ;   E=true
 4391    ).
 4392partner_constraint_detachments([], [], _, true).
 4393partner_constraint_detachments([A|B], [C|D], E, (F, G)) :-
 4394    gen_uncond_susp_detachment(C, A, partner, E, F),
 4395    partner_constraint_detachments(B, D, E, G).
 4396gen_uncond_susp_detachment(A, B, C, D, E) :-
 4397    functor(A, F, G),
 4398    H=F/G,
 4399    (   is_stored(H)
 4400    ->  E=(I, J),
 4401        (   chr_pp_flag(debugable, on)
 4402        ->  I='chr debug_event'(remove(B))
 4403        ;   I=true
 4404        ),
 4405        remove_constraint_goal(H,
 4406                               B,
 4407                               K,
 4408                               true,
 4409                               (L, M),
 4410                               C,
 4411                               J),
 4412        delete_constraint_goal(A, B, D, L),
 4413        (   \+ only_ground_indexed_arguments(H),
 4414            \+ get_store_type(H, var_assoc_store(_, _))
 4415        ->  detach_constraint_atom(H, K, B, M)
 4416        ;   M=true
 4417        )
 4418    ;   E=true
 4419    ).
 4420simpagation_head1_code(A, B, C, D, E, F/G, _, H, I, J) :-
 4421    E=pragma(K, ids(_, L), _, _, M),
 4422    K=rule(_, N, O, P),
 4423    head_info(A, G, Q, R, S, T),
 4424    get_constraint_mode(F/G, U),
 4425    head_arg_matches(T, U, [], V, W, [], X),
 4426    build_head(F, G, H, S, Y),
 4427    append(C, N, Z),
 4428    append(D, L, A1),
 4429    reorder_heads(M, A, Z, A1, B1, C1),
 4430    guard_splitting(K, D1),
 4431    (   is_stored_in_guard(F/G, M)
 4432    ->  E1=[_|D1]
 4433    ;   E1=D1
 4434    ),
 4435    guard_via_reschedule_new(B1,
 4436                             E1,
 4437                             A,
 4438                             F1,
 4439                             G1,
 4440                             H1),
 4441    rest_heads_retrieval_and_matching(B1,
 4442                                      C1,
 4443                                      A,
 4444                                      G1,
 4445                                      I1,
 4446                                      W,
 4447                                      J1,
 4448                                      [],
 4449                                      [],
 4450                                      [],
 4451                                      X,
 4452                                      _),
 4453    split_by_ids(C1,
 4454                 I1,
 4455                 D,
 4456                 K1,
 4457                 L1,
 4458                 M1,
 4459                 N1),
 4460    guard_body_copies3(K, E1, J1, F1, O1),
 4461    (   is_stored_in_guard(F/G, M)
 4462    ->  gen_uncond_attach_goal(F/G,
 4463                               R,
 4464                               Q,
 4465                               P1,
 4466                               _),
 4467        F1=[Q1|_],
 4468        Q1=P1
 4469    ;   true
 4470    ),
 4471    sort_by_key(K1, L1, R1),
 4472    partner_constraint_detachments(R1, C, J1, S1),
 4473    active_constraint_detachment(H, R, A, J1, T1),
 4474    (   chr_pp_flag(debugable, on)
 4475    ->  my_term_copy(O-P, J1, U1-V1),
 4476        sort_by_key([R|K1], [B|L1], W1),
 4477        sort_by_key(M1, N1, X1),
 4478        Y1='chr debug_event'(try(W1, X1, U1, V1)),
 4479        Z1='chr debug_event'(apply(W1, X1, U1, V1)),
 4480        instrument_goal(!, Y1, Z1, A2)
 4481    ;   A2=!
 4482    ),
 4483    B2=(Y:-V, H1, A2, S1, T1, O1),
 4484    add_location(B2, M, C2),
 4485    I=[C2|J].
 4486split_by_ids([], [], _, [], []).
 4487split_by_ids([A|B], [C|D], E, F, G) :-
 4488    (   memberchk_eq(A, E)
 4489    ->  F=[C|H],
 4490        G=I
 4491    ;   F=H,
 4492        G=[C|I]
 4493    ),
 4494    split_by_ids(B, D, E, H, I).
 4495split_by_ids([], [], _, [], [], [], []).
 4496split_by_ids([A|B], [C|D], E, F, G, H, I) :-
 4497    (   memberchk_eq(A, E)
 4498    ->  F=[C|J],
 4499        G=[A|K],
 4500        H=L,
 4501        I=M
 4502    ;   F=J,
 4503        G=K,
 4504        H=[C|L],
 4505        I=[A|M]
 4506    ),
 4507    split_by_ids(B, D, E, J, K, L, M).
 4508simpagation_head2_code(A, B, C, D, E, F, G, H, I, J) :-
 4509    E=pragma(K, ids(L, M), _, _, N),
 4510    K=rule(O, _, P, Q),
 4511    append(O, C, R),
 4512    append(L, D, S),
 4513    reorder_heads(N,
 4514                  A,
 4515                  R,
 4516                  S,
 4517                  [T|U],
 4518                  [V|W]),
 4519    simpagation_head2_prelude(A,
 4520                              T,
 4521                              [U, P, Q],
 4522                              F,
 4523                              G,
 4524                              H,
 4525                              I,
 4526                              X),
 4527    extend_id(H, Y),
 4528    (   memberchk_eq(V, M)
 4529    ->  simpagation_universal_searches(U,
 4530                                       W,
 4531                                       M,
 4532                                       [T, A],
 4533                                       K,
 4534                                       F,
 4535                                       G,
 4536                                       Z,
 4537                                       A1,
 4538                                       B1,
 4539                                       Y,
 4540                                       C1,
 4541                                       X,
 4542                                       D1)
 4543    ;   X=D1,
 4544        Y=C1,
 4545        Z=U,
 4546        A1=[T, A],
 4547        B1=W
 4548    ),
 4549    universal_search_iterator_end(A1,
 4550                                  Z,
 4551                                  K,
 4552                                  F,
 4553                                  G,
 4554                                  C1,
 4555                                  D1,
 4556                                  E1),
 4557    simpagation_head2_worker(A1,
 4558                             Z,
 4559                             B1,
 4560                             B,
 4561                             E,
 4562                             F,
 4563                             G,
 4564                             C1,
 4565                             E1,
 4566                             J).
 4567simpagation_universal_searches([], [], _, A, _, _, _, [], A, [], B, B, C, C).
 4568simpagation_universal_searches(A, [B|C], D, E, F, G, H, I, J, K, L, M, N, O) :-
 4569    A=[P|Q],
 4570    inc_id(L, R),
 4571    universal_search_iterator_end(E,
 4572                                  A,
 4573                                  F,
 4574                                  G,
 4575                                  H,
 4576                                  L,
 4577                                  N,
 4578                                  S),
 4579    universal_search_iterator(A,
 4580                              E,
 4581                              F,
 4582                              G,
 4583                              H,
 4584                              L,
 4585                              S,
 4586                              T),
 4587    (   memberchk_eq(B, D)
 4588    ->  simpagation_universal_searches(Q,
 4589                                       C,
 4590                                       D,
 4591                                       [P|E],
 4592                                       F,
 4593                                       G,
 4594                                       H,
 4595                                       I,
 4596                                       J,
 4597                                       K,
 4598                                       R,
 4599                                       M,
 4600                                       T,
 4601                                       O)
 4602    ;   M=R,
 4603        T=O,
 4604        I=Q,
 4605        J=[P|E],
 4606        C=K
 4607    ).
 4608simpagation_head2_prelude(A, B, C, D/E, F, G, H, I) :-
 4609    head_info(A, E, J, K, L, M),
 4610    build_head(D, E, G, L, N),
 4611    get_constraint_mode(D/E, O),
 4612    head_arg_matches(M, O, [], P, Q, [], R),
 4613    lookup_passive_head(B, [A], Q, R, S, T),
 4614    gen_occ_allocation(D/E, F, J, K, U),
 4615    extend_id(G, V),
 4616    extra_active_delegate_variables(A,
 4617                                    [B|C],
 4618                                    Q,
 4619                                    W),
 4620    append([T|L], W, X),
 4621    build_head(D, E, [F|V], X, Y),
 4622    Z=(N:-P, S, !, U, Y),
 4623    add_dummy_location(Z, A1),
 4624    H=[A1|I].
 4625extra_active_delegate_variables(A, B, C, D) :-
 4626    A=..[_|E],
 4627    delegate_variables(A, B, C, E, D).
 4628passive_delegate_variables(A, B, C, D, E) :-
 4629    term_variables(B, F),
 4630    delegate_variables(A, C, D, F, E).
 4631delegate_variables(A, B, C, D, E) :-
 4632    term_variables(A, F),
 4633    term_variables(B, G),
 4634    intersect_eq(F, G, H),
 4635    list_difference_eq(H, D, I),
 4636    translate(I, C, E).
 4637simpagation_head2_worker([A|B], C, D, _, E, F/G, H, I, J, K) :-
 4638    E=pragma(L, ids(M, _), N, _, O),
 4639    L=rule(_, _, P, Q),
 4640    get_prop_inner_loop_vars(B,
 4641                             [A, C, P, Q],
 4642                             R,
 4643                             S,
 4644                             T,
 4645                             U,
 4646                             V),
 4647    gen_var(W),
 4648    gen_var(X),
 4649    functor(A, Y, Z),
 4650    gen_vars(Z, A1),
 4651    head_info(A, Z, A1, W, _, B1),
 4652    get_constraint_mode(Y/Z, C1),
 4653    head_arg_matches(B1, C1, S, D1, E1, [], _),
 4654    delay_phase_end(validate_store_type_assumptions,
 4655                    (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))),
 4656    different_from_other_susps(A, W, B, V, H1),
 4657    I1=(W=F1, G1, H1, D1),
 4658    J1=[[W|X]|R],
 4659    build_head(F, G, [H|I], J1, K1),
 4660    guard_splitting(L, L1),
 4661    (   is_stored_in_guard(F/G, O)
 4662    ->  M1=[_|L1]
 4663    ;   M1=L1
 4664    ),
 4665    guard_via_reschedule_new(C,
 4666                             M1,
 4667                             [A|B],
 4668                             N1,
 4669                             O1,
 4670                             P1),
 4671    rest_heads_retrieval_and_matching(C,
 4672                                      D,
 4673                                      [A|B],
 4674                                      O1,
 4675                                      Q1,
 4676                                      E1,
 4677                                      R1,
 4678                                      [A|B],
 4679                                      [W|V],
 4680                                      []),
 4681    split_by_ids(D, Q1, M, S1, T1),
 4682    split_by_ids(D, C, M, U1, _),
 4683    partner_constraint_detachments([W|S1],
 4684                                   [A|U1],
 4685                                   R1,
 4686                                   V1),
 4687    W1=[X|R],
 4688    build_head(F, G, [H|I], W1, X1),
 4689    Y1=[[]|R],
 4690    build_head(F, G, [H|I], Y1, Z1),
 4691    guard_body_copies3(L, M1, R1, N1, A2),
 4692    (   is_stored_in_guard(F/G, O)
 4693    ->  N1=[B2|_]
 4694    ;   true
 4695    ),
 4696    (   is_observed(F/G, H)
 4697    ->  gen_uncond_attach_goal(F/G,
 4698                               T,
 4699                               U,
 4700                               C2,
 4701                               D2),
 4702        gen_state_cond_call(T,
 4703                            F/G,
 4704                            X1,
 4705                            D2,
 4706                            E2),
 4707        gen_state_cond_call(T,
 4708                            F/G,
 4709                            Z1,
 4710                            D2,
 4711                            F2)
 4712    ;   C2=true,
 4713        E2=X1,
 4714        F2=Z1
 4715    ),
 4716    (   chr_pp_flag(debugable, on)
 4717    ->  my_term_copy(P-Q, S, G2-H2),
 4718        I2='chr debug_event'(try([W|S1], [T|T1], G2, H2)),
 4719        J2='chr debug_event'(apply([W|S1], [T|T1], G2, H2))
 4720    ;   I2=true,
 4721        J2=true
 4722    ),
 4723    (   is_stored_in_guard(F/G, O)
 4724    ->  B2=C2,
 4725        K2=true
 4726    ;   B2=true,
 4727        K2=C2
 4728    ),
 4729    (   member(unique(_, L2), N),
 4730        check_unique_keys(L2, S)
 4731    ->  M2=(K1:-I1->(P1, I2->J2, V1, K2, A2, F2;Z1);X1)
 4732    ;   M2=(K1:-I1, P1, I2->J2, V1, K2, A2, E2;X1)
 4733    ),
 4734    add_location(M2, O, N2),
 4735    J=[N2|K].
 4736gen_state_cond_call(A, B, C, D, E) :-
 4737    (   may_trigger(B)
 4738    ->  does_use_field(B, generation),
 4739        delay_phase_end(validate_store_type_assumptions,
 4740                        (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)))
 4741    ;   delay_phase_end(validate_store_type_assumptions,
 4742                        (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))),
 4743        I=true
 4744    ),
 4745    E=(A=F, G, I->H, C;true).
 4746propagation_code(A, B, C, D, E, F, G, H, I, J, K) :-
 4747    (   C==[]
 4748    ->  propagation_single_headed(A,
 4749                                  B,
 4750                                  E,
 4751                                  F,
 4752                                  G,
 4753                                  H,
 4754                                  I,
 4755                                  J,
 4756                                  K)
 4757    ;   propagation_multi_headed(A,
 4758                                 C,
 4759                                 D,
 4760                                 E,
 4761                                 F,
 4762                                 G,
 4763                                 H,
 4764                                 I,
 4765                                 J,
 4766                                 K)
 4767    ).
 4768propagation_single_headed(A, _, B, C, D/E, F, G, H, I) :-
 4769    head_info(A, E, J, K, L, M),
 4770    build_head(D, E, G, L, N),
 4771    inc_id(G, O),
 4772    build_head(D, E, O, L, P),
 4773    get_constraint_mode(D/E, Q),
 4774    head_arg_matches(M, Q, [], R, S, [], _),
 4775    guard_body_copies(B, S, T, U),
 4776    V=P,
 4777    actual_cut(D/E, F, W),
 4778    B=rule(_, _, X, Y),
 4779    (   chr_pp_flag(debugable, on)
 4780    ->  my_term_copy(X-Y, S, Z-A1),
 4781        B1='chr debug_event'(try([], [K], Z, A1)),
 4782        C1='chr debug_event'(apply([], [K], Z, A1)),
 4783        instrument_goal(W, B1, C1, D1)
 4784    ;   D1=W
 4785    ),
 4786    (   may_trigger(D/E),
 4787        \+ has_no_history(C)
 4788    ->  use_auxiliary_predicate(novel_production),
 4789        use_auxiliary_predicate(extend_history),
 4790        does_use_history(D/E, F),
 4791        gen_occ_allocation(D/E, F, J, K, E1),
 4792        (   named_history(C, F1, G1)
 4793        ->  (   G1==[]
 4794            ->  empty_named_history_novel_production(F1, H1),
 4795                empty_named_history_extend_history(F1, I1)
 4796            ;   J1=F1
 4797            )
 4798        ;   J1=C
 4799        ),
 4800        (   var(H1)
 4801        ->  H1='$novel_production'(K, J1),
 4802            I1='$extend_history'(K, J1)
 4803        ;   true
 4804        ),
 4805        (   is_observed(D/E, F)
 4806        ->  gen_uncond_attach_goal(D/E,
 4807                                   K,
 4808                                   J,
 4809                                   K1,
 4810                                   L1),
 4811            gen_state_cond_call(K,
 4812                                D/E,
 4813                                V,
 4814                                L1,
 4815                                M1)
 4816        ;   K1=true,
 4817            M1=V
 4818        )
 4819    ;   E1=true,
 4820        H1=true,
 4821        I1=true,
 4822        (   is_observed(D/E, F)
 4823        ->  get_allocation_occurrence(D/E, N1),
 4824            (   F==N1
 4825            ->  gen_insert_constraint_internal_goal(D/E,
 4826                                                    K1,
 4827                                                    L,
 4828                                                    J,
 4829                                                    K),
 4830                L1=0
 4831            ;   K1=(O1, P1),
 4832                gen_occ_allocation(D/E,
 4833                                   F,
 4834                                   J,
 4835                                   K,
 4836                                   O1),
 4837                gen_uncond_attach_goal(D/E,
 4838                                       K,
 4839                                       J,
 4840                                       P1,
 4841                                       L1)
 4842            ),
 4843            gen_state_cond_call(K,
 4844                                D/E,
 4845                                V,
 4846                                L1,
 4847                                M1)
 4848        ;   gen_occ_allocation(D/E,
 4849                               F,
 4850                               J,
 4851                               K,
 4852                               K1),
 4853            M1=V
 4854        )
 4855    ),
 4856    (   is_stored_in_guard(D/E, C)
 4857    ->  Q1=K1,
 4858        R1=true
 4859    ;   Q1=true,
 4860        R1=K1
 4861    ),
 4862    S1=(N:-R, E1, H1, Q1, T, D1, I1, R1, U, M1),
 4863    add_location(S1, C, T1),
 4864    H=[T1|I].
 4865propagation_multi_headed(A, B, C, D, E, F, G, H, I, J) :-
 4866    B=[K|L],
 4867    propagation_prelude(A,
 4868                        B,
 4869                        D,
 4870                        F,
 4871                        G,
 4872                        H,
 4873                        I,
 4874                        M),
 4875    extend_id(H, N),
 4876    propagation_nested_code(L,
 4877                            [K, A],
 4878                            C,
 4879                            D,
 4880                            E,
 4881                            F,
 4882                            G,
 4883                            N,
 4884                            M,
 4885                            J).
 4886propagation_prelude(A, [B|C], D, E/F, G, H, I, J) :-
 4887    head_info(A, F, K, L, M, N),
 4888    build_head(E, F, H, M, O),
 4889    get_constraint_mode(E/F, P),
 4890    head_arg_matches(N, P, [], Q, R, [], S),
 4891    D=rule(_, _, T, U),
 4892    extra_active_delegate_variables(A,
 4893                                    [B, C, T, U],
 4894                                    R,
 4895                                    V),
 4896    lookup_passive_head(B, [A], R, S, W, X),
 4897    gen_occ_allocation(E/F, G, K, L, Y),
 4898    extend_id(H, Z),
 4899    append([X|M], V, A1),
 4900    build_head(E, F, [G|Z], A1, B1),
 4901    C1=B1,
 4902    D1=(O:-Q, W, !, Y, C1),
 4903    add_dummy_location(D1, E1),
 4904    I=[E1|J].
 4905propagation_nested_code([], [A|B], C, D, E, F, G, H, I, J) :-
 4906    universal_search_iterator_end([A|B],
 4907                                  [],
 4908                                  D,
 4909                                  F,
 4910                                  G,
 4911                                  H,
 4912                                  I,
 4913                                  K),
 4914    propagation_body(A,
 4915                     B,
 4916                     C,
 4917                     D,
 4918                     E,
 4919                     F,
 4920                     G,
 4921                     H,
 4922                     K,
 4923                     J).
 4924propagation_nested_code([A|B], C, D, E, F, G, H, I, J, K) :-
 4925    universal_search_iterator_end(C,
 4926                                  [A|B],
 4927                                  E,
 4928                                  G,
 4929                                  H,
 4930                                  I,
 4931                                  J,
 4932                                  L),
 4933    universal_search_iterator([A|B],
 4934                              C,
 4935                              E,
 4936                              G,
 4937                              H,
 4938                              I,
 4939                              L,
 4940                              M),
 4941    inc_id(I, N),
 4942    propagation_nested_code(B,
 4943                            [A|C],
 4944                            D,
 4945                            E,
 4946                            F,
 4947                            G,
 4948                            H,
 4949                            N,
 4950                            M,
 4951                            K).
 4952check_fd_lookup_condition(A, B, _, _) :-
 4953    get_store_type(A/B, global_singleton),
 4954    !.
 4955check_fd_lookup_condition(A, B, C, D) :-
 4956    \+ may_trigger(A/B),
 4957    get_functional_dependency(A/B, 1, E, F),
 4958    copy_term(E-F, C-G),
 4959    term_variables(D, H),
 4960    intersect_eq(G, H, G),
 4961    !.
 4962propagation_body(A, B, C, D, E, F/G, H, I, J, K) :-
 4963    D=rule(_, L, M, N),
 4964    gen_var_susp_list_for_b(B,
 4965                            [A, M, N],
 4966                            O,
 4967                            P,
 4968                            Q,
 4969                            R,
 4970                            S),
 4971    flatten(P, T),
 4972    init(R, U),
 4973    last(R, V),
 4974    gen_var(W),
 4975    gen_var(X),
 4976    functor(A, Y, Z),
 4977    gen_vars(Z, A1),
 4978    delay_phase_end(validate_store_type_assumptions,
 4979                    (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))),
 4980    D1=(W=B1, C1),
 4981    E1=[[W|X]|T],
 4982    build_head(F, G, [H|I], E1, F1),
 4983    (   check_fd_lookup_condition(Y, Z, A, B)
 4984    ->  universal_search_iterator_failure_vars(B,
 4985                                               I,
 4986                                               P,
 4987                                               Q,
 4988                                               S,
 4989                                               G1,
 4990                                               H1),
 4991        I1=G1
 4992    ;   I1=[X|T],
 4993        H1=I
 4994    ),
 4995    (   H1=[_]
 4996    ->  J1=H1
 4997    ;   J1=[H|H1]
 4998    ),
 4999    build_head(F, G, J1, I1, K1),
 5000    L1=K1,
 5001    A=..[_|M1],
 5002    pairup(M1, A1, N1),
 5003    get_constraint_mode(Y/Z, O1),
 5004    head_arg_matches(N1, O1, O, P1, Q1),
 5005    different_from_other_susps(A, W, B, U, R1),
 5006    guard_body_copies(D, Q1, S1, T1),
 5007    get_occurrence(F/G, H, _, U1),
 5008    (   is_observed(F/G, H)
 5009    ->  init(Q, V1),
 5010        gen_uncond_attach_goal(F/G,
 5011                               V,
 5012                               V1,
 5013                               W1,
 5014                               X1),
 5015        gen_state_cond_call(V,
 5016                            F/G,
 5017                            L1,
 5018                            X1,
 5019                            Y1)
 5020    ;   W1=true,
 5021        Y1=L1
 5022    ),
 5023    (   (   is_least_occurrence(E)
 5024        ;   has_no_history(E)
 5025        )
 5026    ->  Z1=true,
 5027        A2=true
 5028    ;   \+ may_trigger(F/G),
 5029        maplist(is_passive(E), C)
 5030    ->  Z1=true,
 5031        A2=true
 5032    ;   get_occurrence(F/G, H, _, U1),
 5033        use_auxiliary_predicate(novel_production),
 5034        use_auxiliary_predicate(extend_history),
 5035        does_use_history(F/G, H),
 5036        (   named_history(E, B2, C2)
 5037        ->  (   C2==[]
 5038            ->  empty_named_history_novel_production(B2, Z1),
 5039                empty_named_history_extend_history(B2, A2)
 5040            ;   reverse([W|U], D2),
 5041                named_history_susps(C2,
 5042                                    [U1|C],
 5043                                    [V|D2],
 5044                                    E2),
 5045                E2=[F2|_],
 5046                (   length(C2, 1)
 5047                ->  A2='$extend_history'(F2, B2),
 5048                    Z1='$novel_production'(F2, B2)
 5049                ;   findall(G2,
 5050                            ( member(H2, C2),
 5051                              get_occurrence_from_id(G2,
 5052                                                     _,
 5053                                                     E,
 5054                                                     H2)
 5055                            ),
 5056                            I2),
 5057                    J2=..[t, B2|E2]
 5058                )
 5059            )
 5060        ;   F2=V,
 5061            maplist(extract_symbol, L, I2),
 5062            sort([U1|C], C2),
 5063            history_susps(C,
 5064                          [W|U],
 5065                          V,
 5066                          U1,
 5067                          E2),
 5068            J2=..[t, E|E2]
 5069        ),
 5070        (   var(Z1)
 5071        ->  novel_production_calls(I2,
 5072                                   C2,
 5073                                   E2,
 5074                                   E,
 5075                                   K2,
 5076                                   L2),
 5077            A2='$extend_history'(F2, K2),
 5078            Z1=(K2=J2, L2)
 5079        ;   true
 5080        )
 5081    ),
 5082    (   chr_pp_flag(debugable, on)
 5083    ->  D=rule(_, _, M, N),
 5084        my_term_copy(M-N, Q1, M2-N2),
 5085        get_occurrence(F/G, H, _, U1),
 5086        sort_by_key([V, W|U], [U1|C], O2),
 5087        P2='chr debug_event'(try([], O2, M2, N2)),
 5088        Q2='chr debug_event'(apply([], O2, M2, N2))
 5089    ;   P2=true,
 5090        Q2=true
 5091    ),
 5092    (   is_stored_in_guard(F/G, E)
 5093    ->  R2=W1,
 5094        S2=true
 5095    ;   R2=true,
 5096        S2=W1
 5097    ),
 5098    T2=(F1:-D1, R1, P1, Z1, R2, S1, P2->Q2, A2, S2, T1, Y1;L1),
 5099    add_location(T2, E, U2),
 5100    J=[U2|K].
 5101extract_symbol(A, B/C) :-
 5102    functor(A, B, C).
 5103novel_production_calls([], [], [], _, _, true).
 5104novel_production_calls([A|B], [C|D], [E|F], G, H, (I, J)) :-
 5105    get_occurrence_from_id(A, K, G, C),
 5106    delay_phase_end(validate_store_type_assumptions,
 5107                    novel_production_call(A,
 5108                                          K,
 5109                                          '$novel_production'(E, H),
 5110                                          I)),
 5111    novel_production_calls(B, D, F, G, H, J).
 5112history_susps(A, B, C, D, E) :-
 5113    reverse(B, F),
 5114    sort_by_key([C|F], [D|A], E).
 5115named_history_susps([], _, _, []).
 5116named_history_susps([A|B], C, D, [E|F]) :-
 5117    select2(A, E, C, D, G, H),
 5118    !,
 5119    named_history_susps(B, G, H, F).
 5120gen_var_susp_list_for([A], B, C, D, E, F) :-
 5121    !,
 5122    functor(A, G, H),
 5123    head_info(A, H, _, F, E, I),
 5124    get_constraint_mode(G/H, J),
 5125    head_arg_matches(I, J, [], _, C),
 5126    extra_active_delegate_variables(A, B, C, K),
 5127    append(E, K, D).
 5128gen_var_susp_list_for([A|B], C, D, E, F, G) :-
 5129    gen_var_susp_list_for(B,
 5130                          [A|C],
 5131                          H,
 5132                          F,
 5133                          _,
 5134                          _),
 5135    functor(A, I, J),
 5136    gen_var(G),
 5137    head_info(A, J, _, K, _, L),
 5138    get_constraint_mode(I/J, M),
 5139    head_arg_matches(L, M, H, _, D),
 5140    passive_delegate_variables(A, B, C, D, N),
 5141    append(N, [K, G|F], E).
 5142gen_var_susp_list_for_b([A], B, C, [D], E, [F], []) :-
 5143    !,
 5144    functor(A, G, H),
 5145    head_info(A, H, _, F, E, I),
 5146    get_constraint_mode(G/H, J),
 5147    head_arg_matches(I, J, [], _, C),
 5148    extra_active_delegate_variables(A, B, C, K),
 5149    append(E, K, D).
 5150gen_var_susp_list_for_b([A|B], C, D, [E|F], G, [H|I], [J|K]) :-
 5151    gen_var_susp_list_for_b(B,
 5152                            [A|C],
 5153                            L,
 5154                            F,
 5155                            G,
 5156                            I,
 5157                            K),
 5158    functor(A, M, N),
 5159    gen_var(J),
 5160    head_info(A, N, _, H, _, O),
 5161    get_constraint_mode(M/N, P),
 5162    head_arg_matches(O, P, L, _, D),
 5163    passive_delegate_variables(A, B, C, D, Q),
 5164    append(Q, [H, J], E).
 5165get_prop_inner_loop_vars([A], B, C, D, E, F, []) :-
 5166    !,
 5167    functor(A, G, H),
 5168    head_info(A, H, F, E, I, J),
 5169    get_constraint_mode(G/H, K),
 5170    head_arg_matches(J, K, [], _, D),
 5171    extra_active_delegate_variables(A, B, D, L),
 5172    append(I, L, C).
 5173get_prop_inner_loop_vars([A|B], C, D, E, F, G, [H|I]) :-
 5174    get_prop_inner_loop_vars(B,
 5175                             [A|C],
 5176                             J,
 5177                             K,
 5178                             F,
 5179                             G,
 5180                             I),
 5181    functor(A, L, M),
 5182    gen_var(N),
 5183    head_info(A, M, _, H, _, O),
 5184    get_constraint_mode(L/M, P),
 5185    head_arg_matches(O, P, K, _, E),
 5186    passive_delegate_variables(A, B, C, E, Q),
 5187    append(Q, [H, N|J], D).
 5188reorder_heads(A, B, C, D, E, F) :-
 5189    (   chr_pp_flag(reorder_heads, on),
 5190        length(C, G),
 5191        G=<6
 5192    ->  reorder_heads_main(A, B, C, D, E, F)
 5193    ;   E=C,
 5194        F=D
 5195    ).
 5196reorder_heads_main(A, B, C, D, E, F) :-
 5197    term_variables(B, G),
 5198    H=entry([], [], G, C, D, A),
 5199    copy_term_nat(H, I),
 5200    a_star(I,
 5201           J^(chr_translate:final_data(J)),
 5202           K^L^M^(chr_translate:expand_data(K, L, M)),
 5203           N),
 5204    I=H,
 5205    N=entry(O, P, _, _, _, _),
 5206    reverse(O, E),
 5207    reverse(P, F).
 5208final_data(A) :-
 5209    A=entry(_, _, _, _, [], _).
 5210expand_data(A, B, C) :-
 5211    A=entry(D, E, F, G, H, I),
 5212    select2(J, K, G, H, L, M),
 5213    term_variables([J|F], N),
 5214    B=entry([J|D], [K|E], N, L, M, I),
 5215    order_score(J, K, F, L, I, C).
 5216order_score(A, B, C, D, E, F) :-
 5217    functor(A, G, H),
 5218    get_store_type(G/H, I),
 5219    order_score(I, A, B, C, D, E, 99999, F).
 5220order_score(default, A, _, B, C, _, D, E) :-
 5221    term_variables(A, F),
 5222    term_variables(C, G),
 5223    ground_vars([A], H),
 5224    list_difference_eq(F, H, I),
 5225    order_score_vars(I, B, G, J),
 5226    E is min(D, J).
 5227order_score(multi_inthash(A), B, _, C, _, _, D, E) :-
 5228    (   D=<100
 5229    ->  E=D
 5230    ;   order_score_indexes(A, B, C, E)
 5231    ).
 5232order_score(multi_hash(A), B, _, C, _, _, D, E) :-
 5233    (   D=<100
 5234    ->  E=D
 5235    ;   order_score_indexes(A, B, C, E)
 5236    ).
 5237order_score(global_ground, A, _, B, C, _, D, E) :-
 5238    term_variables(A, F),
 5239    term_variables(C, G),
 5240    order_score_vars(F, B, G, H),
 5241    I is H*200,
 5242    E is min(D, I).
 5243order_score(var_assoc_store(_, _), _, _, _, _, _, _, 1).
 5244order_score(global_singleton, _, _, _, _, _, _, A) :-
 5245    A=1.
 5246order_score(multi_store(A), B, C, D, E, F, G, H) :-
 5247    multi_order_score(A,
 5248                      B,
 5249                      C,
 5250                      D,
 5251                      E,
 5252                      F,
 5253                      G,
 5254                      H).
 5255multi_order_score([], _, _, _, _, _, A, A).
 5256multi_order_score([A|B], C, D, E, F, G, H, I) :-
 5257    (   order_score(A,
 5258                    C,
 5259                    D,
 5260                    E,
 5261                    F,
 5262                    G,
 5263                    H,
 5264                    J)
 5265    ->  true
 5266    ;   J=H
 5267    ),
 5268    multi_order_score(B,
 5269                      C,
 5270                      D,
 5271                      E,
 5272                      F,
 5273                      G,
 5274                      J,
 5275                      I).
 5276order_score(identifier_store(A), B, _, C, _, _, D, E) :-
 5277    arg(A, B, F),
 5278    memberchk_eq(F, C),
 5279    E is min(D, 10).
 5280order_score(type_indexed_identifier_store(A, _), B, _, C, _, _, D, E) :-
 5281    arg(A, B, F),
 5282    memberchk_eq(F, C),
 5283    E is min(D, 10).
 5284order_score_indexes(A, B, C, D) :-
 5285    copy_term_nat(B+C, E+F),
 5286    numbervars(F, 0, _),
 5287    order_score_indexes(A, E, D).
 5288order_score_indexes([A|B], C, D) :-
 5289    args(A, C, E),
 5290    (   maplist(ground, E)
 5291    ->  D=100
 5292    ;   order_score_indexes(B, C, D)
 5293    ).
 5294memberchk_eq_flip(A, B) :-
 5295    memberchk_eq(B, A).
 5296order_score_vars(A, B, C, D) :-
 5297    order_score_count_vars(A, B, C, E-F-G),
 5298    (   E-F-G==0-0-0
 5299    ->  D=0
 5300    ;   E>0
 5301    ->  D is max(10-E, 0)
 5302    ;   F>0
 5303    ->  D is max(10-F, 1)*100
 5304    ;   D is max(10-G, 1)*1000
 5305    ).
 5306order_score_count_vars([], _, _, 0-0-0).
 5307order_score_count_vars([A|B], C, D, E-F-G) :-
 5308    order_score_count_vars(B, C, D, H-I-J),
 5309    (   memberchk_eq(A, C)
 5310    ->  E is H+1,
 5311        F=I,
 5312        G=J
 5313    ;   memberchk_eq(A, D)
 5314    ->  F is I+1,
 5315        E=H,
 5316        G=J
 5317    ;   G is J+1,
 5318        E=H,
 5319        F=I
 5320    ).
 5321create_get_mutable_ref(A, B, C) :-
 5322    C=(B=mutable(A)).
 5323create_get_mutable(A, B, C) :-
 5324    B=mutable(A),
 5325    C=true.
 5326gen_var(_).
 5327gen_vars(A, B) :-
 5328    length(B, A).
 5329ast_head_info1(A, B, C, D, E) :-
 5330    A=chr_constraint(_/F, G, _),
 5331    vars_susp(F, B, C, D),
 5332    pairup(G, B, E).
 5333head_info1(A, _/B, C, D, E, F) :-
 5334    vars_susp(B, C, D, E),
 5335    A=..[_|G],
 5336    pairup(G, C, F).
 5337head_info(A, B, C, D, E, F) :-
 5338    vars_susp(B, C, D, E),
 5339    A=..[_|G],
 5340    pairup(G, C, F).
 5341inc_id([A|B], [C|B]) :-
 5342    C is A+1.
 5343dec_id([A|B], [C|B]) :-
 5344    C is A-1.
 5345extend_id(A, [0|A]).
 5346next_id([_, A|B], [C|B]) :-
 5347    C is A+1.
 5348build_head(A/B, C, D, E) :-
 5349    build_head(A, B, C, D, E).
 5350build_head(A, B, C, D, E) :-
 5351    buildName(A, B, C, F),
 5352    (   (   chr_pp_flag(debugable, on)
 5353        ;   is_stored(A/B),
 5354            (   has_active_occurrence(A/B)
 5355            ;   chr_pp_flag(late_allocation, off)
 5356            ),
 5357            (   may_trigger(A/B)
 5358            ;   get_allocation_occurrence(A/B, G),
 5359                get_max_occurrence(A/B, H),
 5360                H>=G
 5361            )
 5362        )
 5363    ->  E=..[F|D]
 5364    ;   init(D, I),
 5365        E=..[F|I]
 5366    ).
 5367buildName(A, B, C, D) :-
 5368    (   (   chr_pp_flag(debugable, on)
 5369        ;   once((   is_stored(A/B),
 5370                     (   has_active_occurrence(A/B)
 5371                     ;   chr_pp_flag(late_allocation, off)
 5372                     ),
 5373                     (   may_trigger(A/B)
 5374                     ;   get_allocation_occurrence(A/B, E),
 5375                         get_max_occurrence(A/B, F),
 5376                         F>=E
 5377                     )
 5378                 ;   C\=[0]
 5379                 ))
 5380        )
 5381    ->  atom_concat(A, '___', G),
 5382        atomic_concat(G, B, H),
 5383        buildName_(C, H, D)
 5384    ;   D=A
 5385    ).
 5386buildName_([], A, A).
 5387buildName_([A|B], C, D) :-
 5388    buildName_(B, C, E),
 5389    atom_concat(E, '__', F),
 5390    atomic_concat(F, A, D).
 5391vars_susp(A, B, C, D) :-
 5392    length(B, A),
 5393    append(B, [C], D).
 5394or_pattern(A, B) :-
 5395    C is A-1,
 5396    B is 1<<C.
 5397and_pattern(A, B) :-
 5398    C is A-1,
 5399    D is 1<<C,
 5400    B is -1*(D+1).
 5401make_name(A, B/C, D) :-
 5402    atom_concat_list([A, B, '___', C], D).
 5403make_attr(A, B, C, D) :-
 5404    length(C, A),
 5405    D=..[v, B|C].
 5406get_all_suspensions2(A, B, C) :-
 5407    chr_pp_flag(dynattr, off),
 5408    !,
 5409    make_attr(A, _, C, B).
 5410get_all_suspensions2(A, B, C, D) :-
 5411    length(D, A),
 5412    C='chr all_suspensions'(D, 1, B).
 5413normalize_attr(A, B, C) :-
 5414    B='chr normalize_attr'(A, C).
 5415get_suspensions(A, B, C, C=D, E) :-
 5416    chr_pp_flag(dynattr, off),
 5417    !,
 5418    make_attr(A, _, F, D),
 5419    nth1(B, F, E).
 5420get_suspensions(_, A, B, C, D) :-
 5421    C=(memberchk(A-D, B)->true;D=[]).
 5422singleton_attr(A, B, C, D) :-
 5423    chr_pp_flag(dynattr, off),
 5424    !,
 5425    or_pattern(C, E),
 5426    make_attr(A, E, F, D),
 5427    nth1(C, F, [B], G),
 5428    set_elems(G, []).
 5429singleton_attr(_, A, B, C) :-
 5430    C=[B-[A]].
 5431add_attr(A, B, C, D, E, F) :-
 5432    chr_pp_flag(dynattr, off),
 5433    !,
 5434    make_attr(A, G, H, I),
 5435    or_pattern(C, J),
 5436    nth1(C, H, K),
 5437    substitute_eq(K, H, [B|K], L),
 5438    make_attr(A, G, L, M),
 5439    substitute_eq(K, H, [B], N),
 5440    make_attr(A, O, N, P),
 5441    E=(D=I, (G/\J=:=J->F=M;O is G\/J, F=P)),
 5442    !.
 5443add_attr(_, A, B, C, D, E) :-
 5444    D=('chr select'(C, B-F, G)->E=[B-[A|F]|G];E=[B-[A]|C]).
 5445rem_attr(A, B, C, D, E, F) :-
 5446    chr_pp_flag(dynattr, off),
 5447    chr_pp_flag(experiment, off),
 5448    !,
 5449    or_pattern(D, G),
 5450    and_pattern(D, H),
 5451    make_attr(A, I, J, K),
 5452    nth1(D, J, L),
 5453    substitute_eq(L, J, [], M),
 5454    make_attr(A, N, M, O),
 5455    substitute_eq(L, J, P, Q),
 5456    make_attr(A, I, Q, R),
 5457    get_target_module(S),
 5458    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)),
 5459    !.
 5460rem_attr(_, A, B, C, D, E) :-
 5461    chr_pp_flag(dynattr, off),
 5462    chr_pp_flag(experiment, on),
 5463    !,
 5464    or_pattern(C, F),
 5465    and_pattern(C, G),
 5466    H is C+1,
 5467    get_target_module(I),
 5468    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)),
 5469    !.
 5470rem_attr(_, A, B, C, D, E) :-
 5471    get_target_module(F),
 5472    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).
 5473merge_attributes(A, B, C, D, E) :-
 5474    chr_pp_flag(dynattr, off),
 5475    !,
 5476    make_attr(A, F, G, H),
 5477    merge_attributes2(A, F, G, C, I, E),
 5478    D=(B=H, I).
 5479merge_attributes(_, A, B, C, D) :-
 5480    C=(sort(A, E), sort(B, F), 'chr new_merge_attributes'(E, F, D)).
 5481merge_attributes2(A, B, C, D, E, F) :-
 5482    make_attr(A, G, H, I),
 5483    bagof(J,
 5484          K^L^M^N^(member2(C, H, K-L), J=(sort(L, M), 'chr merge_attributes'(K, M, N))),
 5485          O),
 5486    list2conj(O, P),
 5487    bagof(Q,
 5488          R^S^T^member((R, 'chr merge_attributes'(S, T, Q)), O),
 5489          U),
 5490    make_attr(A, V, U, F),
 5491    E=(D=I, P, V is B\/G).
 5492lookup_passive_head(A, B, C, D, E) :-
 5493    functor(A, F, G),
 5494    get_store_type(F/G, H),
 5495    lookup_passive_head(H, A, B, C, [], D, E).
 5496lookup_passive_head(A, B, C, D, E, F) :-
 5497    functor(A, G, H),
 5498    get_store_type(G/H, I),
 5499    lookup_passive_head(I,
 5500                        A,
 5501                        B,
 5502                        C,
 5503                        D,
 5504                        E,
 5505                        F).
 5506lookup_passive_head(default, A, B, C, _, D, E) :-
 5507    functor(A, F, G),
 5508    passive_head_via(A, B, C, D, E),
 5509    update_store_type(F/G, default).
 5510lookup_passive_head(multi_inthash(A), B, _, C, D, E, F) :-
 5511    hash_lookup_passive_head(inthash,
 5512                             A,
 5513                             B,
 5514                             C,
 5515                             D,
 5516                             E,
 5517                             F,
 5518                             _).
 5519lookup_passive_head(multi_hash(A), B, _, C, D, E, F) :-
 5520    hash_lookup_passive_head(hash,
 5521                             A,
 5522                             B,
 5523                             C,
 5524                             D,
 5525                             E,
 5526                             F,
 5527                             _).
 5528lookup_passive_head(global_ground, A, _, _, _, B, C) :-
 5529    functor(A, D, E),
 5530    global_ground_store_name(D/E, F),
 5531    make_get_store_goal(F, C, B),
 5532    update_store_type(D/E, global_ground).
 5533lookup_passive_head(var_assoc_store(A, B), C, _, D, _, E, F) :-
 5534    arg(A, C, G),
 5535    arg(B, C, H),
 5536    translate([G, H], D, [I, J]),
 5537    get_target_module(K),
 5538    E=(get_attr(I, K, L), lookup_assoc_store(L, J, F)).
 5539lookup_passive_head(global_singleton, A, _, _, _, B, C) :-
 5540    functor(A, D, E),
 5541    global_singleton_store_name(D/E, F),
 5542    make_get_store_goal(F, G, H),
 5543    B=(H, G\==[], C=[G]),
 5544    update_store_type(D/E, global_singleton).
 5545lookup_passive_head(multi_store(A), B, C, D, E, F, G) :-
 5546    once(( member(H, A),
 5547           lookup_passive_head(H,
 5548                               B,
 5549                               C,
 5550                               D,
 5551                               E,
 5552                               F,
 5553                               G)
 5554         )).
 5555lookup_passive_head(identifier_store(A), B, _, C, _, D, E) :-
 5556    functor(B, F, G),
 5557    arg(A, B, H),
 5558    translate([H], C, [I]),
 5559    delay_phase_end(validate_store_type_assumptions,
 5560                    identifier_lookup(F/G,
 5561                                      A,
 5562                                      E,
 5563                                      I,
 5564                                      D)),
 5565    update_store_type(F/G, identifier_store(A)),
 5566    get_identifier_index(F/G, A, _).
 5567lookup_passive_head(type_indexed_identifier_store(A, B), C, _, D, _, E, F) :-
 5568    functor(C, G, H),
 5569    arg(A, C, I),
 5570    (   var(I)
 5571    ->  translate([I], D, [J]),
 5572        E=K
 5573    ;   ground(I),
 5574        I='$chr_identifier_match'(L, _)
 5575    ->  lookup_only_identifier_atom(B, L, J, M),
 5576        E=(M, K)
 5577    ),
 5578    delay_phase_end(validate_store_type_assumptions,
 5579                    type_indexed_identifier_lookup(G/H,
 5580                                                   A,
 5581                                                   B,
 5582                                                   F,
 5583                                                   J,
 5584                                                   K)),
 5585    update_store_type(G/H,
 5586                      type_indexed_identifier_store(A, B)),
 5587    get_type_indexed_identifier_index(B,
 5588                                      G/H,
 5589                                      A,
 5590                                      _).
 5591identifier_lookup(A, B, C, D, E) :-
 5592    get_identifier_size(F),
 5593    functor(G, struct, F),
 5594    get_identifier_index(A, B, H),
 5595    arg(H, G, C),
 5596    E=(D=G).
 5597type_indexed_identifier_lookup(A, B, C, D, E, F) :-
 5598    type_indexed_identifier_structure(C, G),
 5599    get_type_indexed_identifier_index(C, A, B, H),
 5600    arg(H, G, D),
 5601    F=(E=G).
 5602hash_lookup_passive_head(A, B, C, D, E, F, G, H) :-
 5603    pick_hash_index(B, C, D, H, I, J),
 5604    (   J=[K]
 5605    ->  true
 5606    ;   K=..[k|J]
 5607    ),
 5608    functor(C, L, M),
 5609    multi_hash_lookup_goal(L/M,
 5610                           A,
 5611                           H,
 5612                           K,
 5613                           G,
 5614                           N),
 5615    check_ground(E, I, O),
 5616    my_term_copy(O, D, P),
 5617    F=(P, N),
 5618    (   A==inthash
 5619    ->  update_store_type(L/M, multi_inthash([H]))
 5620    ;   update_store_type(L/M, multi_hash([H]))
 5621    ).
 5622pick_hash_index(A, B, C, D, E, F) :-
 5623    member(D, A),
 5624    args(D, B, E),
 5625    key_in_scope(E, C, F),
 5626    !.
 5627key_in_scope([], _, []).
 5628key_in_scope([A|B], C, [D|E]) :-
 5629    term_variables(A, F),
 5630    translate(F, C, G),
 5631    copy_term(A/F, D/G),
 5632    key_in_scope(B, C, E).
 5633existential_lookup(var_assoc_store(A, B), C, D, E, F, G, H, I, J, J) :-
 5634    !,
 5635    lookup_passive_head(var_assoc_store(A, B),
 5636                        C,
 5637                        D,
 5638                        E,
 5639                        F,
 5640                        K,
 5641                        L),
 5642    sbag_member_call(I, L, M),
 5643    functor(C, N, O),
 5644    delay_phase_end(validate_store_type_assumptions,
 5645                    (static_suspension_term(N/O, G), get_static_suspension_field(N/O, G, state, active, P))),
 5646    H=(K, M, I=G, P).
 5647existential_lookup(global_singleton, A, _, _, _, B, C, D, E, E) :-
 5648    !,
 5649    functor(A, F, G),
 5650    global_singleton_store_name(F/G, H),
 5651    make_get_store_goal(H, D, I),
 5652    C=(I, D\==[], D=B),
 5653    update_store_type(F/G, global_singleton).
 5654existential_lookup(multi_store(A), B, C, D, E, F, G, H, I, J) :-
 5655    !,
 5656    once(( member(K, A),
 5657           existential_lookup(K,
 5658                              B,
 5659                              C,
 5660                              D,
 5661                              E,
 5662                              F,
 5663                              G,
 5664                              H,
 5665                              I,
 5666                              J)
 5667         )).
 5668existential_lookup(multi_inthash(A), B, _, C, D, E, F, G, H, I) :-
 5669    !,
 5670    existential_hash_lookup(inthash,
 5671                            A,
 5672                            B,
 5673                            C,
 5674                            D,
 5675                            E,
 5676                            F,
 5677                            G,
 5678                            H,
 5679                            I).
 5680existential_lookup(multi_hash(A), B, _, C, D, E, F, G, H, I) :-
 5681    !,
 5682    existential_hash_lookup(hash,
 5683                            A,
 5684                            B,
 5685                            C,
 5686                            D,
 5687                            E,
 5688                            F,
 5689                            G,
 5690                            H,
 5691                            I).
 5692existential_lookup(identifier_store(A), B, C, D, E, F, G, H, I, J) :-
 5693    !,
 5694    lookup_passive_head(identifier_store(A),
 5695                        B,
 5696                        C,
 5697                        D,
 5698                        E,
 5699                        K,
 5700                        L),
 5701    hash_index_filter(I, [A], J),
 5702    functor(B, M, N),
 5703    (   check_fd_lookup_condition(M, N, B, _)
 5704    ->  O=(L=[H])
 5705    ;   sbag_member_call(H, L, O)
 5706    ),
 5707    delay_phase_end(validate_store_type_assumptions,
 5708                    (static_suspension_term(M/N, F), get_static_suspension_field(M/N, F, state, active, P))),
 5709    G=(K, O, H=F, P).
 5710existential_lookup(type_indexed_identifier_store(A, B), C, D, E, F, G, H, I, J, K) :-
 5711    !,
 5712    lookup_passive_head(type_indexed_identifier_store(A, B),
 5713                        C,
 5714                        D,
 5715                        E,
 5716                        F,
 5717                        L,
 5718                        M),
 5719    hash_index_filter(J, [A], K),
 5720    functor(C, N, O),
 5721    (   check_fd_lookup_condition(N, O, C, _)
 5722    ->  P=(M=[I])
 5723    ;   sbag_member_call(I, M, P)
 5724    ),
 5725    delay_phase_end(validate_store_type_assumptions,
 5726                    (static_suspension_term(N/O, G), get_static_suspension_field(N/O, G, state, active, Q))),
 5727    H=(L, P, I=G, Q).
 5728existential_lookup(A, B, C, D, E, F, G, H, I, I) :-
 5729    lookup_passive_head(A,
 5730                        B,
 5731                        C,
 5732                        D,
 5733                        E,
 5734                        J,
 5735                        K),
 5736    sbag_member_call(H, K, L),
 5737    functor(B, M, N),
 5738    delay_phase_end(validate_store_type_assumptions,
 5739                    (static_suspension_term(M/N, F), get_static_suspension_field(M/N, F, state, active, O))),
 5740    G=(J, L, H=F, O).
 5741existential_hash_lookup(A, B, C, D, E, F, G, H, I, J) :-
 5742    hash_lookup_passive_head(A,
 5743                             B,
 5744                             C,
 5745                             D,
 5746                             E,
 5747                             K,
 5748                             L,
 5749                             M),
 5750    hash_index_filter(I, M, J),
 5751    functor(C, N, O),
 5752    (   check_fd_lookup_condition(N, O, C, _)
 5753    ->  P=(L=[H])
 5754    ;   sbag_member_call(H, L, P)
 5755    ),
 5756    delay_phase_end(validate_store_type_assumptions,
 5757                    (static_suspension_term(N/O, F), get_static_suspension_field(N/O, F, state, active, Q))),
 5758    G=(K, P, H=F, Q).
 5759hash_index_filter(A, B, C) :-
 5760    hash_index_filter(A, B, 1, C).
 5761hash_index_filter([], _, _, []).
 5762hash_index_filter([A|B], C, D, E) :-
 5763    (   C=[F|G]
 5764    ->  H is D+1,
 5765        (   F>D
 5766        ->  E=[A|I],
 5767            hash_index_filter(B, [F|G], H, I)
 5768        ;   F==D
 5769        ->  E=[silent(A)|I],
 5770            hash_index_filter(B, G, H, I)
 5771        )
 5772    ;   E=[A|B]
 5773    ).
 5774assume_constraint_stores([]).
 5775assume_constraint_stores([A|B]) :-
 5776    (   chr_pp_flag(debugable, off),
 5777        (   only_ground_indexed_arguments(A)
 5778        ;   chr_pp_flag(mixed_stores, on)
 5779        ),
 5780        is_stored(A),
 5781        get_store_type(A, default)
 5782    ->  get_indexed_arguments(A, C),
 5783        get_constraint_mode(A, D),
 5784        aggregate_all(bag(E)-count,
 5785                      ( member(E, C),
 5786                        nth1(E, D, +)
 5787                      ),
 5788                      F-G),
 5789        (   G>10
 5790        ->  findall([E], member(E, F), H)
 5791        ;   findall(E,
 5792                    ( sublist(E, F),
 5793                      E\==[]
 5794                    ),
 5795                    I),
 5796            predsort(longer_list, I, H)
 5797        ),
 5798        (   get_functional_dependency(A, 1, J, K),
 5799            all_distinct_var_args(J),
 5800            K==[]
 5801        ->  assumed_store_type(A, global_singleton)
 5802        ;   (   only_ground_indexed_arguments(A)
 5803            ;   G>0
 5804            )
 5805        ->  get_constraint_type_det(A, L),
 5806            partition_indexes(H,
 5807                              L,
 5808                              M,
 5809                              N,
 5810                              O,
 5811                              P),
 5812            (   N=[]
 5813            ->  Q=R
 5814            ;   Q=[multi_inthash(N)|R]
 5815            ),
 5816            (   M=[]
 5817            ->  R=S
 5818            ;   R=[multi_hash(M)|S]
 5819            ),
 5820            (   O=[]
 5821            ->  S=T
 5822            ;   maplist(wrap_in_functor(identifier_store), O, U),
 5823                append(U, T, S)
 5824            ),
 5825            append(P, V, T),
 5826            (   only_ground_indexed_arguments(A)
 5827            ->  V=[global_ground]
 5828            ;   V=[default]
 5829            ),
 5830            assumed_store_type(A, multi_store(Q))
 5831        ;   true
 5832        )
 5833    ;   true
 5834    ),
 5835    assume_constraint_stores(B).
 5836partition_indexes([], _, [], [], [], []).
 5837partition_indexes([A|B], C, D, E, F, G) :-
 5838    (   A=[H],
 5839        nth1(H, C, I),
 5840        unalias_type(I, J),
 5841        J==chr_identifier
 5842    ->  F=[H|K],
 5843        E=L,
 5844        D=M,
 5845        G=N
 5846    ;   A=[H],
 5847        nth1(H, C, I),
 5848        unalias_type(I, J),
 5849        nonvar(J),
 5850        J=chr_identifier(O)
 5851    ->  G=[type_indexed_identifier_store(H, O)|N],
 5852        F=K,
 5853        E=L,
 5854        D=M
 5855    ;   A=[H],
 5856        nth1(H, C, I),
 5857        unalias_type(I, J),
 5858        J==dense_int
 5859    ->  E=[A|L],
 5860        D=M,
 5861        F=K,
 5862        G=N
 5863    ;   member(H, A),
 5864        nth1(H, C, I),
 5865        unalias_type(I, J),
 5866        nonvar(J),
 5867        J=chr_identifier(_)
 5868    ->  E=L,
 5869        D=M,
 5870        F=K,
 5871        G=N
 5872    ;   E=L,
 5873        D=[A|M],
 5874        F=K,
 5875        G=N
 5876    ),
 5877    partition_indexes(B, C, M, L, K, N).
 5878longer_list(A, B, C) :-
 5879    length(B, D),
 5880    length(C, E),
 5881    compare(F, E, D),
 5882    (   F==(=)
 5883    ->  compare(A, B, C)
 5884    ;   A=F
 5885    ).
 5886all_distinct_var_args(A) :-
 5887    copy_term_nat(A, B),
 5888    functor(A, C, D),
 5889    functor(E, C, D),
 5890    E=@=B.
 5891get_indexed_arguments(A, B) :-
 5892    A=_/C,
 5893    get_indexed_arguments(1, C, A, B).
 5894get_indexed_arguments(A, B, C, D) :-
 5895    (   A>B
 5896    ->  D=[]
 5897    ;   (   is_indexed_argument(C, A)
 5898        ->  D=[A|E]
 5899        ;   D=E
 5900        ),
 5901        F is A+1,
 5902        get_indexed_arguments(F, B, C, E)
 5903    ).
 5904validate_store_type_assumptions([]).
 5905validate_store_type_assumptions([A|B]) :-
 5906    validate_store_type_assumption(A),
 5907    validate_store_type_assumptions(B).
 5908universal_search_iterator_end([A|B], C, D, E/F, G, H, I, J) :-
 5909    D=rule(_, _, K, L),
 5910    gen_var_susp_list_for_b(B,
 5911                            [A, C, K, L],
 5912                            _,
 5913                            M,
 5914                            N,
 5915                            _,
 5916                            O),
 5917    universal_search_iterator_failure_vars(B,
 5918                                           H,
 5919                                           M,
 5920                                           N,
 5921                                           O,
 5922                                           P,
 5923                                           Q),
 5924    flatten(M, R),
 5925    S=[[]|R],
 5926    build_head(E, F, [G|H], S, T),
 5927    (   Q=[_]
 5928    ->  get_success_continuation_code_id(E/F, G, U),
 5929        V=[U]
 5930    ;   V=[G|Q]
 5931    ),
 5932    build_head(E, F, V, P, W),
 5933    X=(T:-W),
 5934    add_dummy_location(X, Y),
 5935    I=[Y|J].
 5936universal_search_iterator_failure_vars(A, B, C, D, E, F, G) :-
 5937    (   B=[0|_]
 5938    ->  next_id(B, G),
 5939        F=D
 5940    ;   C=[_|H],
 5941        dec_id(B, I),
 5942        (   A=[J|K],
 5943            functor(J, L, M),
 5944            check_fd_lookup_condition(L, M, J, K)
 5945        ->  E=[_|N],
 5946            universal_search_iterator_failure_vars(K,
 5947                                                   I,
 5948                                                   H,
 5949                                                   D,
 5950                                                   N,
 5951                                                   F,
 5952                                                   G)
 5953        ;   G=I,
 5954            flatten(H, O),
 5955            E=[P|_],
 5956            F=[P|O]
 5957        )
 5958    ).
 5959universal_search_iterator([A|B], [C|D], E, F/G, H, I, J, K) :-
 5960    E=rule(_, _, L, M),
 5961    gen_var_susp_list_for_b(D,
 5962                            [C, A, B, L, M],
 5963                            N,
 5964                            O,
 5965                            P,
 5966                            Q,
 5967                            R),
 5968    init(Q, S),
 5969    flatten(O, T),
 5970    gen_var(U),
 5971    functor(C, V, W),
 5972    gen_vars(W, X),
 5973    head_info(C, W, X, Y, _, Z),
 5974    get_constraint_mode(V/W, A1),
 5975    head_arg_matches(Z, A1, N, B1, C1),
 5976    delay_phase_end(validate_store_type_assumptions,
 5977                    (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))),
 5978    different_from_other_susps(C, Y, D, S, F1),
 5979    G1=(Y=D1, E1, F1, B1),
 5980    add_heads_ground_variables([C|D], [], H1),
 5981    lookup_passive_head(A,
 5982                        [C|D],
 5983                        C1,
 5984                        H1,
 5985                        I1,
 5986                        J1),
 5987    inc_id(I, K1),
 5988    L1=[[Y|U]|T],
 5989    build_head(F, G, [H|I], L1, M1),
 5990    passive_delegate_variables(C,
 5991                               D,
 5992                               [A, B, L, M],
 5993                               C1,
 5994                               N1),
 5995    append([J1|N1], [Y, U|T], O1),
 5996    build_head(F, G, [H|K1], O1, P1),
 5997    (   check_fd_lookup_condition(V, W, C, D)
 5998    ->  universal_search_iterator_failure_vars(D,
 5999                                               I,
 6000                                               O,
 6001                                               P,
 6002                                               R,
 6003                                               Q1,
 6004                                               R1),
 6005        S1=Q1
 6006    ;   S1=[U|T],
 6007        R1=I
 6008    ),
 6009    (   R1=[_]
 6010    ->  T1=R1
 6011    ;   T1=[H|R1]
 6012    ),
 6013    build_head(F, G, T1, S1, U1),
 6014    V1=(M1:-G1, I1->P1;U1),
 6015    add_dummy_location(V1, W1),
 6016    J=[W1|K].
 6017ai_observation_analysis(A) :-
 6018    (   chr_pp_flag(ai_observation_analysis, on),
 6019        get_target_module(_),
 6020        '$chr_compiled_with_version'(3)
 6021    ->  list_to_ord_set(A, B),
 6022        abstract_constraints(B),
 6023        ai_observation_schedule_initial_calls(B, B),
 6024        ai_observation_gather_results
 6025    ;   true
 6026    ).
 6027ai_observation_schedule_initial_calls([], _).
 6028ai_observation_schedule_initial_calls([A|B], C) :-
 6029    ai_observation_schedule_initial_call(A, C),
 6030    ai_observation_schedule_initial_calls(B, C).
 6031ai_observation_schedule_initial_call(A, _) :-
 6032    ai_observation_top(A, B),
 6033    initial_call_pattern(B).
 6034ai_observation_schedule_new_calls([], _).
 6035ai_observation_schedule_new_calls([A|B], C) :-
 6036    C=odom(_, D),
 6037    initial_call_pattern(odom(A, D)),
 6038    ai_observation_schedule_new_calls(B, C).
 6039ai_observation_lub(odom(A, B), odom(A, C), odom(A, D)) :-
 6040    ord_intersection(B, C, D).
 6041ai_observation_bot(A, B, odom(A, B)).
 6042ai_observation_top(A, odom(A, B)) :-
 6043    ord_empty(B).
 6044ai_observation_leq(odom(A, B), odom(A, C)) :-
 6045    ord_subset(C, B).
 6046ai_observation_observe_set(A, B, C) :-
 6047    ord_subtract(A, B, C).
 6048ai_observation_abstract_constraint(A, B, C) :-
 6049    functor(A, D, E),
 6050    C=D/E,
 6051    memberchk(C, B).
 6052ai_observation_abstract_constraints(A, B, C) :-
 6053    findall(D,
 6054            ( member(E, A),
 6055              ai_observation_abstract_constraint(E, B, D)
 6056            ),
 6057            C).
 6058ai_observation_abstract_goal_(A, B, C, D, E, F) :-
 6059    term_variables((A, B, C), G),
 6060    append(A, B, H),
 6061    ground_vars(H, I),
 6062    list_difference_eq(G, I, J),
 6063    ai_observation_abstract_goal(D, E, F, [], J),
 6064    !.
 6065ground_vars([], []).
 6066ground_vars([A|B], C) :-
 6067    functor(A, D, E),
 6068    get_constraint_mode(D/E, F),
 6069    head_info(A, E, _, _, _, G),
 6070    head_arg_matches(G, F, [], _, _, [], H),
 6071    ground_vars(B, I),
 6072    append(H, I, C).
 6073ai_observation_abstract_goal((A, B), C, D, E, F) :-
 6074    !,
 6075    ai_observation_abstract_goal(A, C, D, G, F),
 6076    ai_observation_abstract_goal(B, C, G, E, F).
 6077ai_observation_abstract_goal((A;B), C, [(D;E)|F], F, G) :-
 6078    !,
 6079    ai_observation_abstract_goal(A, C, D, [], G),
 6080    ai_observation_abstract_goal(B, C, E, [], G).
 6081ai_observation_abstract_goal((A->B), C, D, E, F) :-
 6082    !,
 6083    ai_observation_abstract_goal(A, C, D, G, F),
 6084    ai_observation_abstract_goal(B, C, G, E, F).
 6085ai_observation_abstract_goal(A, B, [C|D], D, _) :-
 6086    ai_observation_abstract_constraint(A, B, C),
 6087    !.
 6088ai_observation_abstract_goal(true, _, A, A, _) :-
 6089    !.
 6090ai_observation_abstract_goal(writeln(_), _, A, A, _) :-
 6091    !.
 6092ai_observation_abstract_goal(A, _, B, B, C) :-
 6093    builtin_binds_b(A, D),
 6094    intersect_eq(D, C, []),
 6095    !.
 6096ai_observation_abstract_goal(_, _, [A|B], B, _) :-
 6097    A=builtin.
 6098ai_observation_is_observed(odom(_, A), B) :-
 6099    \+ ord_memberchk(B, A).
 6100unconditional_occurrence(A, B) :-
 6101    get_occurrence(A, B, C, _),
 6102    get_rule(C, D),
 6103    D=pragma(E, _, _, _, _),
 6104    copy_term_nat(E, F),
 6105    F=rule(G, H, I, _),
 6106    guard_entailment:entails_guard([chr_pp_headvariables(G, H)], I),
 6107    once((   G=[J],
 6108             H==[]
 6109         ;   H=[J],
 6110             G==[],
 6111             \+ may_trigger(A)
 6112         )),
 6113    all_distinct_var_args(J).
 6114partial_wake_args([], _, _, _).
 6115partial_wake_args([A|B], [C|D], E, F) :-
 6116    (   C\==(+)
 6117    ->  (   nonvar(A)
 6118        ->  no_partial_wake(F)
 6119        ;   memberchk_eq(A, E)
 6120        ->  no_partial_wake(F)
 6121        ;   true
 6122        )
 6123    ;   true
 6124    ),
 6125    partial_wake_args(B, D, E, F).
 6126generate_show_constraint(A, B, C, D) :-
 6127    (   chr_pp_flag(show, on)
 6128    ->  B=['$show'/0|A],
 6129        generate_show_rules(A, D, [E|C]),
 6130        inc_rule_count(F),
 6131        E=pragma(rule(['$show'], [], true, true), ids([0], []), [], no, F)
 6132    ;   B=A,
 6133        D=C
 6134    ).
 6135generate_show_rules([], A, A).
 6136generate_show_rules([A/B|C], [D|E], F) :-
 6137    functor(G, A, B),
 6138    inc_rule_count(H),
 6139    D=pragma(rule([], ['$show', G], true, writeln(G)), ids([], [0, 1]), [passive(1)], no, H),
 6140    generate_show_rules(C, E, F).
 6141static_suspension_term(A/B, C) :-
 6142    suspension_term_base(A/B, D),
 6143    E is D+B,
 6144    functor(C, suspension, E).
 6145has_suspension_field(A, B) :-
 6146    suspension_term_base_fields(A, C),
 6147    memberchk(B, C).
 6148suspension_term_base(A, B) :-
 6149    suspension_term_base_fields(A, C),
 6150    length(C, B).
 6151suspension_term_base_fields(A, B) :-
 6152    (   chr_pp_flag(debugable, on)
 6153    ->  B=[id, state, history, generation, continuation, functor]
 6154    ;   (   uses_history(A)
 6155        ->  B=[id, state, history|C]
 6156        ;   only_ground_indexed_arguments(A),
 6157            get_functional_dependency(A, 1, _, _)
 6158        ->  B=[state|C]
 6159        ;   B=[id, state|C]
 6160        ),
 6161        (   only_ground_indexed_arguments(A)
 6162        ->  get_store_type(A, D),
 6163            basic_store_types(D, E),
 6164            (   memberchk(global_ground, E)
 6165            ->  C=[global_list_prev|F]
 6166            ;   C=F
 6167            ),
 6168            (   chr_pp_flag(ht_removal, on)
 6169            ->  ht_prev_fields(E, F)
 6170            ;   F=[]
 6171            )
 6172        ;   may_trigger(A)
 6173        ->  (   uses_field(A, generation)
 6174            ->  C=[generation, global_list_prev|F]
 6175            ;   C=[global_list_prev|F]
 6176            ),
 6177            (   chr_pp_flag(mixed_stores, on),
 6178                chr_pp_flag(ht_removal, on)
 6179            ->  get_store_type(A, D),
 6180                basic_store_types(D, E),
 6181                ht_prev_fields(E, F)
 6182            ;   F=[]
 6183            )
 6184        ;   C=[global_list_prev|F],
 6185            (   chr_pp_flag(mixed_stores, on),
 6186                chr_pp_flag(ht_removal, on)
 6187            ->  get_store_type(A, D),
 6188                basic_store_types(D, E),
 6189                ht_prev_fields(E, F)
 6190            ;   F=[]
 6191            )
 6192        )
 6193    ).
 6194ht_prev_fields(A, B) :-
 6195    ht_prev_fields_int(A, C),
 6196    append(C, B).
 6197ht_prev_fields_int([], []).
 6198ht_prev_fields_int([A|B], C) :-
 6199    (   A=multi_hash(D)
 6200    ->  maplist(ht_prev_field, D, E),
 6201        C=[E|F]
 6202    ;   C=F
 6203    ),
 6204    ht_prev_fields_int(B, F).
 6205ht_prev_field(A, B) :-
 6206    atomic_list_concat(['multi_hash_prev-'|A], B).
 6207get_static_suspension_term_field(A, B, C, D) :-
 6208    suspension_term_base_fields(B, E),
 6209    nth1(F, E, A),
 6210    !,
 6211    arg(F, C, D).
 6212get_static_suspension_term_field(arguments, A, B, C) :-
 6213    !,
 6214    suspension_term_base(A, D),
 6215    B=..[_|E],
 6216    drop(D, E, C).
 6217get_static_suspension_term_field(A, B, _, _) :-
 6218    chr_error(internal,
 6219              'Trying to obtain field ~w of ~w, wich does not have it!',
 6220              [A, B]).
 6221get_dynamic_suspension_term_field(A, B, C, D, E) :-
 6222    suspension_term_base_fields(B, F),
 6223    nth1(G, F, A),
 6224    !,
 6225    E=arg(G, C, D).
 6226get_dynamic_suspension_term_field(arguments, A, B, C, D) :-
 6227    !,
 6228    static_suspension_term(A, E),
 6229    get_static_suspension_term_field(arguments, A, E, C),
 6230    D=(B=E).
 6231get_dynamic_suspension_term_field(argument(A), B, C, D, E) :-
 6232    !,
 6233    suspension_term_base(B, F),
 6234    G is A+F,
 6235    E=arg(G, C, D).
 6236get_dynamic_suspension_term_field(A, B, _, _, _) :-
 6237    chr_error(internal,
 6238              'Dynamic goal to get ~w of ~w, which does not have this field!',
 6239              [A, B]).
 6240set_dynamic_suspension_term_field(A, B, C, D, E) :-
 6241    suspension_term_base_fields(B, F),
 6242    nth1(G, F, A),
 6243    !,
 6244    E=setarg(G, C, D).
 6245set_dynamic_suspension_term_field(A, B, _, _, _) :-
 6246    chr_error(internal,
 6247              'Dynamic goal to set ~w of ~w, which does not have this field!',
 6248              [A, B]).
 6249basic_store_types(multi_store(A), A) :-
 6250    !.
 6251basic_store_types(A, [A]).
 6252generate_never_stored_rules(A, B) :-
 6253    (   chr_pp_flag(declare_stored_constraints, on)
 6254    ->  never_stored_rules(A, B)
 6255    ;   B=[]
 6256    ).
 6257check_storedness_assertions(A) :-
 6258    (   chr_pp_flag(storage_analysis, on),
 6259        chr_pp_flag(declare_stored_constraints, on)
 6260    ->  forall(B, A, check_storedness_assertion(B))
 6261    ;   true
 6262    ).
 6263continuation_analysis(A) :-
 6264    maplist(analyse_continuations, A).
 6265analyse_continuations(A) :-
 6266    continuation_analysis(A, 1),
 6267    get_max_occurrence(A, B),
 6268    C is B+1,
 6269    bulk_propagation(A, 1, C),
 6270    set_occurrence_code_id(A, 1, 0).
 6271continuation_analysis(A, B) :-
 6272    get_max_occurrence(A, C),
 6273    (   B>C
 6274    ->  true
 6275    ;   B==C
 6276    ->  D is B+1,
 6277        continuation_occurrence(A, B, D)
 6278    ;   constraint_continuation(A, B, C, D),
 6279        continuation_occurrence(A, B, D),
 6280        E is B+1,
 6281        continuation_analysis(A, E)
 6282    ).
 6283constraint_continuation(A, B, C, D) :-
 6284    (   get_occurrence_head(A, B, E)
 6285    ->  F is B+1,
 6286        (   between(F, C, D),
 6287            get_occurrence_head(A, D, G),
 6288            unifiable(E, G, _)
 6289        ->  true
 6290        ;   D is C+1
 6291        )
 6292    ;   D=C
 6293    ).
 6294get_occurrence_head(A, B, C) :-
 6295    get_occurrence(A, B, D, E),
 6296    \+ is_passive(D, E),
 6297    get_rule(D, F),
 6298    F=pragma(rule(G, H, _, _), ids(I, J), _, _, _),
 6299    (   select2(E, C, I, G, _, _)
 6300    ->  true
 6301    ;   select2(E, C, J, H, _, _)
 6302    ).
 6303get_success_continuation_code_id(A, B, C) :-
 6304    get_success_continuation_occurrence(A, B, D),
 6305    get_occurrence_code_id(A, D, C).
 6306collect_constants(_, A, B, C) :-
 6307    (   not_restarted,
 6308        chr_pp_flag(experiment, on)
 6309    ->  (   chr_pp_flag(sss, on)
 6310        ->  D=[fep/4-[2, 3]-[[a, b]-fep1, [c, d]-fep2]-no],
 6311            copy_term_nat(C, E),
 6312            flatten_clauses(E, D, F),
 6313            install_new_declarations_and_restart(F)
 6314        ;   maplist(collect_rule_constants(B), A),
 6315            (   chr_pp_flag(verbose, on)
 6316            ->  print_chr_constants
 6317            ;   true
 6318            ),
 6319            (   chr_pp_flag(experiment, on)
 6320            ->  flattening_dictionary(B, D),
 6321                copy_term_nat(C, E),
 6322                flatten_clauses(E, D, F),
 6323                install_new_declarations_and_restart(F)
 6324            ;   true
 6325            )
 6326        )
 6327    ;   true
 6328    ).
 6329collect_rule_constants(A, B) :-
 6330    B=ast_rule(C, _, _, D, _),
 6331    collect_head_constants(C),
 6332    collect_body_constants(D, A).
 6333collect_head_constants(simplification(A)) :-
 6334    maplist(collect_constraint_constants, A).
 6335collect_head_constants(propagation(A)) :-
 6336    maplist(collect_constraint_constants, A).
 6337collect_head_constants(simpagation(A, B)) :-
 6338    maplist(collect_constraint_constants, A),
 6339    maplist(collect_constraint_constants, B).
 6340collect_body_constants(A, B) :-
 6341    maplist(collect_goal_constants(B), A).
 6342collect_goal_constants(A, B) :-
 6343    (   ast_nonvar(B)
 6344    ->  ast_symbol(B, C),
 6345        (   memberchk(C, A)
 6346        ->  ast_term_to_term(B, D),
 6347            ast_args(B, E),
 6348            collect_constraint_constants(chr_constraint(C,
 6349                                                        E,
 6350                                                        D))
 6351        ;   C==(:)/2,
 6352            ast_args(B, [F, G]),
 6353            F=atomic(H),
 6354            get_target_module(I),
 6355            H==I,
 6356            ast_nonvar(G),
 6357            ast_symbol(G, J),
 6358            memberchk(J, A)
 6359        ->  ast_term_to_term(G, K),
 6360            ast_args(G, L),
 6361            collect_constraint_constants(chr_constraint(J,
 6362                                                        L,
 6363                                                        K))
 6364        ;   true
 6365        )
 6366    ;   true
 6367    ).
 6368collect_constraint_constants(A) :-
 6369    A=chr_constraint(B, C, _),
 6370    get_constraint_type_det(B, D),
 6371    collect_all_arg_constants(C, D, []).
 6372collect_all_arg_constants([], [], A) :-
 6373    (   A\==[]
 6374    ->  add_chr_constants(A)
 6375    ;   true
 6376    ).
 6377collect_all_arg_constants([A|B], [C|D], E) :-
 6378    unalias_type(C, F),
 6379    (   is_chr_constants_type(F, G, _)
 6380    ->  (   ast_ground(A)
 6381        ->  ast_term_to_term(A, H),
 6382            collect_all_arg_constants(B,
 6383                                      D,
 6384                                      [G-H|E])
 6385        ;   true
 6386        )
 6387    ;   collect_all_arg_constants(B, D, E)
 6388    ).
 6389add_chr_constants(A) :-
 6390    keysort(A, B),
 6391    add_chr_constants_(B).
 6392flattening_dictionary([], []).
 6393flattening_dictionary([A|B], C) :-
 6394    (   flattening_dictionary_entry(A, D)
 6395    ->  C=[D|E]
 6396    ;   C=E
 6397    ),
 6398    flattening_dictionary(B, E).
 6399flattening_dictionary_entry(A, B) :-
 6400    get_constraint_type_det(A, C),
 6401    constant_positions(C, 1, D, E, F, G),
 6402    (   D\==[]
 6403    ->  pairup(E, H, I),
 6404        keysort(I, J),
 6405        B=A-D-K-F,
 6406        get_chr_constants(L),
 6407        findall(M,
 6408                ( member(J, L),
 6409                  flat_spec(A, D, H, M)
 6410                ),
 6411                K)
 6412    ;   G==yes
 6413    ->  enum_positions(C, 1, N, O, P),
 6414        B=A-N-K-P,
 6415        findall(M,
 6416                ( cartesian_product(Q, O),
 6417                  flat_spec(A, N, Q, M)
 6418                ),
 6419                K)
 6420    ).
 6421constant_positions([], _, [], [], no, no).
 6422constant_positions([A|B], C, D, E, F, G) :-
 6423    unalias_type(A, H),
 6424    (   is_chr_constants_type(H, I, J)
 6425    ->  compose_error_handlers(J, K, F),
 6426        D=[C|L],
 6427        E=[I|M],
 6428        G=N
 6429    ;   (   is_chr_enum_type(H, _, _)
 6430        ->  G=yes
 6431        ;   G=N
 6432        ),
 6433        L=D,
 6434        M=E,
 6435        K=F
 6436    ),
 6437    O is C+1,
 6438    constant_positions(B, O, L, M, K, N).
 6439compose_error_handlers(no, A, A).
 6440compose_error_handlers(yes(A), _, yes(A)).
 6441enum_positions([], _, [], [], no).
 6442enum_positions([A|B], C, D, E, F) :-
 6443    unalias_type(A, G),
 6444    (   is_chr_enum_type(G, H, I)
 6445    ->  compose_error_handlers(I, J, F),
 6446        D=[C|K],
 6447        E=[H|L]
 6448    ;   D=K,
 6449        E=L,
 6450        F=J
 6451    ),
 6452    M is C+1,
 6453    enum_positions(B, M, K, L, J).
 6454cartesian_product([], []).
 6455cartesian_product([A|B], [C|D]) :-
 6456    member(A, C),
 6457    cartesian_product(B, D).
 6458flat_spec(A/B, C, D, E) :-
 6459    E=D-F,
 6460    term_to_atom(D, G),
 6461    term_to_atom(C, H),
 6462    atom_concat_list(['$flat_', A, /, B, '___', H, '___', G],
 6463                     F).
 6464restart_after_flattening(A, A) :-
 6465    nb_setval('$chr_restart_after_flattening', started).
 6466restart_after_flattening(_, A) :-
 6467    nb_getval('$chr_restart_after_flattening', restart(A)),
 6468    nb_setval('$chr_restart_after_flattening', restarted).
 6469not_restarted :-
 6470    nb_getval('$chr_restart_after_flattening', started).
 6471install_new_declarations_and_restart(A) :-
 6472    nb_setval('$chr_restart_after_flattening', restart(A)),
 6473    fail.
 6474flatten_clauses(A, B, C) :-
 6475    flatten_readcontent(A,
 6476                        D,
 6477                        E,
 6478                        F,
 6479                        _,
 6480                        G,
 6481                        H),
 6482    flatten_clauses_(B, D, H, E, F, G, C).
 6483flatten_clauses_(A, B, C, D, E, F, G) :-
 6484    auxiliary_constraints_declarations(A, E, F, H),
 6485    dispatching_rules(A, I),
 6486    declarations(D, A, E, F, J),
 6487    flatten_rules(B, A, K),
 6488    append([C, H, I, J, K], G).
 6489declarations(A, B, C, D, E) :-
 6490    findall(F,
 6491            ( member(F, A),
 6492              \+ memberchk(F-_-_-_, B)
 6493            ),
 6494            G),
 6495    maplist(declaration(C, D), G, H),
 6496    flatten(H, E).
 6497declaration(A, B, C, [(:-chr_constraint C), (:-chr_option(mode, D)), (:-chr_option(type_declaration, E))]) :-
 6498    C=F/G,
 6499    functor(D, F, G),
 6500    (   memberchk(D, A)
 6501    ->  true
 6502    ;   replicate(G, ?, H),
 6503        D=..[_|H]
 6504    ),
 6505    functor(E, F, G),
 6506    (   memberchk(E, B)
 6507    ->  true
 6508    ;   replicate(G, any, I),
 6509        E=..[_|I]
 6510    ).
 6511flatten_readcontent([], [], [], [], [], [], []).
 6512flatten_readcontent([A|B], C, D, E, F, G, H) :-
 6513    (   A==end_of_file
 6514    ->  C=[],
 6515        D=[],
 6516        E=[],
 6517        G=[],
 6518        F=[],
 6519        H=[]
 6520    ;   crude_is_rule(A)
 6521    ->  C=[A|I],
 6522        flatten_readcontent(B,
 6523                            I,
 6524                            D,
 6525                            E,
 6526                            F,
 6527                            G,
 6528                            H)
 6529    ;   pure_is_declaration(A, J, K, L)
 6530    ->  append(J, M, D),
 6531        append(K, N, E),
 6532        append(L, O, G),
 6533        flatten_readcontent(B,
 6534                            C,
 6535                            M,
 6536                            N,
 6537                            F,
 6538                            O,
 6539                            H)
 6540    ;   is_mode_declaration(A, P)
 6541    ->  E=[P|N],
 6542        flatten_readcontent(B,
 6543                            C,
 6544                            D,
 6545                            N,
 6546                            F,
 6547                            G,
 6548                            H)
 6549    ;   is_type_declaration(A, Q)
 6550    ->  G=[Q|O],
 6551        flatten_readcontent(B,
 6552                            C,
 6553                            D,
 6554                            E,
 6555                            F,
 6556                            O,
 6557                            H)
 6558    ;   is_type_definition(A, R)
 6559    ->  H=[A|S],
 6560        F=[R|T],
 6561        flatten_readcontent(B,
 6562                            C,
 6563                            D,
 6564                            E,
 6565                            T,
 6566                            G,
 6567                            S)
 6568    ;   (   A=(:-op(U, V, W))
 6569        ->  op(U, V, W)
 6570        ;   true
 6571        ),
 6572        H=[A|S],
 6573        flatten_readcontent(B,
 6574                            C,
 6575                            D,
 6576                            E,
 6577                            F,
 6578                            G,
 6579                            S)
 6580    ).
 6581crude_is_rule(@(_, _)).
 6582crude_is_rule(pragma(_, _)).
 6583crude_is_rule(==>(_, _)).
 6584crude_is_rule(<=>(_, _)).
 6585pure_is_declaration(A, B, C, D) :-
 6586    A=(:-E),
 6587    E=..[F, G],
 6588    F==(chr_constraint),
 6589    conj2list(G, H),
 6590    pure_extract_type_mode(H, B, C, D).
 6591pure_extract_type_mode([], [], [], []).
 6592pure_extract_type_mode([A/B|C], [A/B|D], E, F) :-
 6593    !,
 6594    pure_extract_type_mode(C, D, E, F).
 6595pure_extract_type_mode([A|B], [C|D], [E|F], G) :-
 6596    functor(A, H, I),
 6597    C=H/I,
 6598    A=..[_|J],
 6599    extract_types_and_modes(J, K, L),
 6600    E=..[H|L],
 6601    (   forall(member(M, K), M==any)
 6602    ->  G=N
 6603    ;   G=[O|N],
 6604        O=..[H|K]
 6605    ),
 6606    pure_extract_type_mode(B, D, F, N).
 6607is_mode_declaration((:-chr_option(mode, A)), A).
 6608is_type_declaration((:-chr_option(type_declaration, A)), A).
 6609auxiliary_constraints_declarations(A, B, C, D) :-
 6610    findall(E,
 6611            auxiliary_constraints_declaration(A, B, C, E),
 6612            F),
 6613    flatten(F, D).
 6614auxiliary_constraints_declaration(A, B, C, [(:-chr_constraint D), (:-chr_option(mode, E)), (:-chr_option(type_declaration, F))]) :-
 6615    member(G/H-I-J-_, A),
 6616    arg_modes(G, H, B, K),
 6617    specialize_modes(K, I, L),
 6618    arg_types(G, H, C, M),
 6619    specialize_types(M, I, N),
 6620    length(I, O),
 6621    P is H-O,
 6622    member(_-Q, J),
 6623    D=Q/P,
 6624    E=..[Q|L],
 6625    F=..[Q|N].
 6626arg_modes(A, B, C, D) :-
 6627    functor(E, A, B),
 6628    (   memberchk(E, C)
 6629    ->  E=..[_|D]
 6630    ;   replicate(B, ?, D)
 6631    ).
 6632specialize_modes(A, B, C) :-
 6633    split_args(B, A, _, C).
 6634arg_types(A, B, C, D) :-
 6635    functor(E, A, B),
 6636    (   memberchk(E, C)
 6637    ->  E=..[_|D]
 6638    ;   replicate(B, any, D)
 6639    ).
 6640specialize_types(A, B, C) :-
 6641    split_args(B, A, _, C).
 6642dispatching_rules([], []).
 6643dispatching_rules([A-B-C-D|E], F) :-
 6644    constraint_dispatching_rule(C,
 6645                                A,
 6646                                B,
 6647                                D,
 6648                                F,
 6649                                G),
 6650    dispatching_rules(E, G).
 6651constraint_dispatching_rule(A, B/C, D, E, F, G) :-
 6652    (   increasing_numbers(D, 1)
 6653    ->  H=F,
 6654        I=B/C
 6655    ;   functor(J, B, C),
 6656        J=..[_|K],
 6657        split_args(D, K, L, M),
 6658        append(L, M, N),
 6659        atom_concat(B, '_$shuffled', O),
 6660        P=..[O|N],
 6661        [(J:-P)|H]=F,
 6662        I=O/C
 6663    ),
 6664    Q=swap(B, D),
 6665    dispatching_rule_term_cases(A,
 6666                                D,
 6667                                I,
 6668                                E,
 6669                                Q,
 6670                                H,
 6671                                G).
 6672increasing_numbers([], _).
 6673increasing_numbers([A|B], A) :-
 6674    C is A+1,
 6675    increasing_numbers(B, C).
 6676dispatching_rule_term_cases(A, B, C/D, E, F, G, H) :-
 6677    length(B, I),
 6678    once(pairup(J, K, A)),
 6679    maplist(head_tail, J, L, M),
 6680    N is D-I,
 6681    maplist(wrap_in_functor(dispatching_action), K, O),
 6682    dispatch_trie_index(L,
 6683                        M,
 6684                        N,
 6685                        E,
 6686                        F,
 6687                        O,
 6688                        C,
 6689                        G,
 6690                        H).
 6691dispatching_action(A, B, C) :-
 6692    C=..[A|B].
 6693dispatch_trie_index(A, B, C, D, E, F, G, H, I) :-
 6694    dispatch_trie_step(A,
 6695                       G,
 6696                       G,
 6697                       B,
 6698                       C,
 6699                       D,
 6700                       E,
 6701                       F,
 6702                       H,
 6703                       I).
 6704dispatch_trie_step([], _, _, _, [], _, _, [], A, A) :-
 6705    !.
 6706dispatch_trie_step(A, B, C, D, E, F, G, H, I, J) :-
 6707    D=[K|_],
 6708    length(K, L),
 6709    aggregate_all(set(M/N),
 6710                  ( member(O, A),
 6711                    functor(O, M, N)
 6712                  ),
 6713                  P),
 6714    Q is L+1,
 6715    dispatch_trie_step_cases(P,
 6716                             Q,
 6717                             A,
 6718                             D,
 6719                             E,
 6720                             F,
 6721                             G,
 6722                             H,
 6723                             B,
 6724                             C,
 6725                             I,
 6726                             J).
 6727dispatch_trie_step_cases([], A, _, _, B, C, D, _, E, _, F, G) :-
 6728    (   C=yes(H)
 6729    ->  F=[I|G],
 6730        I=(J:-K),
 6731        L is A+B,
 6732        functor(J, E, L),
 6733        reconstruct_original_term(D, J, M),
 6734        K=..[H, M]
 6735    ;   F=G
 6736    ).
 6737dispatch_trie_step_cases([A|B], C, D, E, F, G, H, I, J, K, L, M) :-
 6738    dispatch_trie_step_case(A,
 6739                            C,
 6740                            D,
 6741                            E,
 6742                            F,
 6743                            G,
 6744                            H,
 6745                            I,
 6746                            J,
 6747                            K,
 6748                            L,
 6749                            N),
 6750    dispatch_trie_step_cases(B,
 6751                             C,
 6752                             D,
 6753                             E,
 6754                             F,
 6755                             G,
 6756                             H,
 6757                             I,
 6758                             J,
 6759                             K,
 6760                             N,
 6761                             M).
 6762dispatch_trie_step_case(A/B, C, D, E, F, G, H, I, J, K, [L|M], N) :-
 6763    L=(O:-P, Q),
 6764    (   G=yes(_)
 6765    ->  P=!
 6766    ;   P=true
 6767    ),
 6768    R is C+F,
 6769    functor(O, J, R),
 6770    arg(1, O, S),
 6771    O=..[_, _|T],
 6772    length(U, F),
 6773    once(append(V, U, T)),
 6774    functor(S, A, B),
 6775    W=index_functor(A, B, H),
 6776    S=..[_|X],
 6777    append(X, T, Y),
 6778    (   Y==U
 6779    ->  M=N,
 6780        rec_cases(D,
 6781                  _,
 6782                  I,
 6783                  A/B,
 6784                  _,
 6785                  _,
 6786                  Z),
 6787        Z=[A1],
 6788        call(A1, U, Q)
 6789    ;   rec_cases(D,
 6790                  E,
 6791                  I,
 6792                  A/B,
 6793                  B1,
 6794                  C1,
 6795                  Z),
 6796        (   Z=[D1]
 6797        ->  C1=[E1],
 6798            append([B1, E1, U], Y),
 6799            M=N,
 6800            call(D1, U, Q)
 6801        ;   pairup(B1, C1, F1),
 6802            common_pattern(F1, G1, H1, I1),
 6803            append(X, V, [J1|K1]),
 6804            J1-K1=G1,
 6805            L1=gct([J1|K1], W),
 6806            fresh_symbol(K, M1),
 6807            append(H1, U, N1),
 6808            Q=..[M1|N1],
 6809            findall(O1-P1,
 6810                    member([O1|P1], I1),
 6811                    Q1),
 6812            once(pairup(R1, S1, Q1)),
 6813            dispatch_trie_step(R1,
 6814                               M1,
 6815                               K,
 6816                               S1,
 6817                               F,
 6818                               G,
 6819                               L1,
 6820                               Z,
 6821                               M,
 6822                               N)
 6823        )
 6824    ).
 6825split([A|B], C, D, E, F) :-
 6826    (   C==1
 6827    ->  D=[],
 6828        E=A,
 6829        F=B
 6830    ;   G is C-1,
 6831        D=[A|H],
 6832        split(B, G, H, E, F)
 6833    ).
 6834reconstruct_original_term(swap(A, B), C, D) :-
 6835    functor(C, _, E),
 6836    functor(D, A, E),
 6837    D=..[_|F],
 6838    split_args(B, F, G, H),
 6839    C=..[_|I],
 6840    append(G, H, I).
 6841reconstruct_original_term(index_functor(A, B, C), D, E) :-
 6842    D=..[F|G],
 6843    split_at(B, G, H, I),
 6844    J=..[A|H],
 6845    K=..[F, J|I],
 6846    reconstruct_original_term(C, K, E).
 6847reconstruct_original_term(gct(A, B), C, D) :-
 6848    copy_term_nat(A, E),
 6849    term_variables(E, F),
 6850    C=..[G|H],
 6851    append(F, I, H),
 6852    append(E, I, J),
 6853    K=..[G|J],
 6854    reconstruct_original_term(B, K, D).
 6855flatten_rules(A, B, C) :-
 6856    flatten_rules1(A, B, D),
 6857    flatten(D, C).
 6858flatten_rules1([], _, []).
 6859flatten_rules1([A|B], C, [D|E]) :-
 6860    findall(F, flatten_rule(A, C, F), D),
 6861    flatten_rules1(B, C, E).
 6862flatten_rule(@(A, B), C, @(A, D)) :-
 6863    !,
 6864    flatten_rule(B, C, D).
 6865flatten_rule(pragma(A, B), C, pragma(D, B)) :-
 6866    !,
 6867    flatten_rule(A, C, D).
 6868flatten_rule(==>(A, B), C, ==>(D, E)) :-
 6869    !,
 6870    flatten_heads(A, C, D),
 6871    flatten_body(B, C, E).
 6872flatten_rule(<=>(\(A, B), C), D, <=>(\(E, F), G)) :-
 6873    !,
 6874    flatten_heads((A, B), D, (E, F)),
 6875    flatten_body(C, D, G).
 6876flatten_rule(<=>(A, B), C, <=>(D, E)) :-
 6877    flatten_heads(A, C, D),
 6878    flatten_body(B, C, E).
 6879flatten_heads((A, B), C, (D, E)) :-
 6880    !,
 6881    flatten_heads(A, C, D),
 6882    flatten_heads(B, C, E).
 6883flatten_heads(#(A, B), C, #(D, B)) :-
 6884    !,
 6885    flatten_heads(A, C, D).
 6886flatten_heads(A, B, C) :-
 6887    (   functor(A, D, E),
 6888        memberchk(D/E-F-G-_, B)
 6889    ->  A=..[_|H],
 6890        split_args(F, H, I, J),
 6891        member(I-K, G),
 6892        C=..[K|J]
 6893    ;   C=A
 6894    ).
 6895flatten_body((A| B), C, (D| E)) :-
 6896    !,
 6897    conj2list(A, F),
 6898    maplist(flatten_goal(C), F, G),
 6899    list2conj(G, D),
 6900    conj2list(B, H),
 6901    maplist(flatten_goal(C), H, I),
 6902    list2conj(I, E).
 6903flatten_body(A, B, C) :-
 6904    conj2list(A, D),
 6905    maplist(flatten_goal(B), D, E),
 6906    list2conj(E, C).
 6907flatten_goal(_, A, B) :-
 6908    var(A),
 6909    !,
 6910    B=A.
 6911flatten_goal(A, B, C) :-
 6912    (   is_specializable_goal(B, A, D)
 6913    ->  specialize_goal(B, D, C)
 6914    ;   B=E:F,
 6915        get_target_module(G),
 6916        E==G,
 6917        nonvar(F),
 6918        is_specializable_goal(F, A, D)
 6919    ->  specialize_goal(F, D, H),
 6920        C=E:H
 6921    ;   partial_eval(B, C)
 6922    ->  true
 6923    ;   C=B
 6924    ).
 6925is_specializable_goal(A, B, C) :-
 6926    functor(A, D, E),
 6927    memberchk(D/E-C-_-_, B),
 6928    args(C, A, F),
 6929    ground(F).
 6930specialize_goal(A, B, C) :-
 6931    functor(A, D, E),
 6932    A=..[_|F],
 6933    split_args(B, F, G, H),
 6934    flat_spec(D/E, B, G, _-I),
 6935    C=..[I|H].
 6936partial_eval(append(A, B, C), D) :-
 6937    (   A==[]
 6938    ->  D=(C=B)
 6939    ;   B==[]
 6940    ->  D=(C=A)
 6941    ).
 6942partial_eval(flatten_path(A, B), C) :-
 6943    (   nonvar(A),
 6944        flatten(A, D),
 6945        D\==A
 6946    ->  C=flatten_path(D, B)
 6947    ).
 6948dump_code(A) :-
 6949    (   chr_pp_flag(dump, on)
 6950    ->  maplist(portray_clause, A)
 6951    ;   true
 6952    ).
 6953chr_banner :-
 6954    chr_info(banner,
 6955             '\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',
 6956             []).
 6957chr_none_locked(A, B) :-
 6958    chr_pp_flag(guard_locks, C),
 6959    (   C==off
 6960    ->  B=true
 6961    ;   C==on
 6962    ->  B='chr none_locked'(A)
 6963    ;   C==error
 6964    ->  B='chr none_error_locked'(A)
 6965    ).
 6966chr_not_locked(A, B) :-
 6967    chr_pp_flag(guard_locks, C),
 6968    (   C==off
 6969    ->  B=true
 6970    ;   C==on
 6971    ->  B='chr not_locked'(A)
 6972    ;   C==error
 6973    ->  B='chr not_error_locked'(A)
 6974    ).
 6975chr_lock(A, B) :-
 6976    chr_pp_flag(guard_locks, C),
 6977    (   C==off
 6978    ->  B=true
 6979    ;   C==on
 6980    ->  B='chr lock'(A)
 6981    ;   C==error
 6982    ->  B='chr error_lock'(A)
 6983    ).
 6984chr_unlock(A, B) :-
 6985    chr_pp_flag(guard_locks, C),
 6986    (   C==off
 6987    ->  B=true
 6988    ;   C==on
 6989    ->  B='chr unlock'(A)
 6990    ;   C==error
 6991    ->  B='chr unerror_lock'(A)
 6992    ).
 6993term_to_ast_term(A, B, C, D) :-
 6994    (   atomic(A)
 6995    ->  B=atomic(A),
 6996        D=C
 6997    ;   compound(A)
 6998    ->  functor(A, E, F),
 6999        B=compound(E, F, G, A),
 7000        A=..[_|H],
 7001        maplist_dcg(chr_translate:term_to_ast_term,
 7002                    H,
 7003                    G,
 7004                    C,
 7005                    D)
 7006    ;   var(A)
 7007    ->  var_to_ast_term(A, C, B, D)
 7008    ).
 7009var_to_ast_term(A, B, C, D) :-
 7010    B=E-F,
 7011    (   lookup_eq(E, A, C)
 7012    ->  D=B
 7013    ;   C=var(F, A),
 7014        G is F+1,
 7015        H=[A-C|E],
 7016        D=H-G
 7017    ).
 7018chr_constraint_to_ast_constraint(A, B, C, D) :-
 7019    B=chr_constraint(E/F, G, A),
 7020    functor(A, E, F),
 7021    A=..[_|H],
 7022    maplist_dcg(chr_translate:term_to_ast_term,
 7023                H,
 7024                G,
 7025                C,
 7026                D).
 7027rule_to_ast_rule(A, B) :-
 7028    B=ast_rule(C, D, E, F, G),
 7029    A=rule(H, I, E, G),
 7030    J=[]-1,
 7031    (   H==[]
 7032    ->  C=propagation(K),
 7033        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7034                    I,
 7035                    K,
 7036                    J,
 7037                    L)
 7038    ;   I==[]
 7039    ->  C=simplification(K),
 7040        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7041                    H,
 7042                    K,
 7043                    J,
 7044                    L)
 7045    ;   C=simpagation(M, N),
 7046        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7047                    H,
 7048                    M,
 7049                    J,
 7050                    O),
 7051        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7052                    I,
 7053                    N,
 7054                    O,
 7055                    L)
 7056    ),
 7057    conj2list(E, P),
 7058    maplist_dcg(chr_translate:term_to_ast_term,
 7059                P,
 7060                D,
 7061                L,
 7062                Q),
 7063    conj2list(G, R),
 7064    maplist_dcg(chr_translate:term_to_ast_term,
 7065                R,
 7066                F,
 7067                Q,
 7068                _).
 7069pragma_rule_to_ast_rule(pragma(A, _, _, _, _), B) :-
 7070    rule_to_ast_rule(A, B).
 7071check_rule_to_ast_rule(A) :-
 7072    (   rule_to_ast_rule(A, B)
 7073    ->  writeln(B)
 7074    ;   writeln(failed(rule_to_ast_rule(A, B)))
 7075    ).
 7076ast_term_to_term(var(_, A), A).
 7077ast_term_to_term(atomic(A), A).
 7078ast_term_to_term(compound(_, _, _, A), A).
 7079ast_nonvar(atomic(_)).
 7080ast_nonvar(compound(_, _, _, _)).
 7081ast_ground(atomic(_)).
 7082ast_ground(compound(_, _, A, _)) :-
 7083    maplist(ast_ground, A).
 7084ast_is_ground(A, B) :-
 7085    ast_is_ground_(B, A).
 7086ast_is_ground_(var(A, _), B) :-
 7087    tree_set_memberchk(A, B).
 7088ast_is_ground_(atomic(_), _).
 7089ast_is_ground_(compound(_, _, A, _), B) :-
 7090    maplist(ast_is_ground(B), A).
 7091ast_functor(atomic(A), A, 0).
 7092ast_functor(compound(A, B, _, _), A, B).
 7093ast_symbol(atomic(A), A/0).
 7094ast_symbol(compound(A, B, _, _), A/B).
 7095ast_args(atomic(_), []).
 7096ast_args(compound(_, _, A, _), A).
 7097ast_term_variables(atomic(_), A, A).
 7098ast_term_variables(compound(_, _, A, _), B, C) :-
 7099    ast_term_list_variables(A, B, C).
 7100ast_term_variables(var(A, _), B, C) :-
 7101    tree_set_add(B, A, C).
 7102ast_term_list_variables(A, B, C) :-
 7103    fold(A, chr_translate:ast_term_variables, B, C).
 7104ast_constraint_variables(chr_constraint(_, A, _), B, C) :-
 7105    ast_term_list_variables(A, B, C).
 7106ast_constraint_list_variables(A, B, C) :-
 7107    fold(A, chr_translate:ast_constraint_variables, B, C).
 7108ast_head_variables(simplification(A), B, C) :-
 7109    ast_constraint_list_variables(A, B, C).
 7110ast_head_variables(propagation(A), B, C) :-
 7111    ast_constraint_list_variables(A, B, C).
 7112ast_head_variables(simpagation(A, B), C, D) :-
 7113    ast_constraint_list_variables(A, C, E),
 7114    ast_constraint_list_variables(B, E, D).
 7115ast_var_memberchk(var(A, _), B) :-
 7116    tree_set_memberchk(A, B).
 7117ast_instantiate(A, B, C) :-
 7118    ast_instantiate_(B, A, C).
 7119ast_instantiate_(var(A, _), B, C) :-
 7120    get_assoc(A, B, C).
 7121ast_instantiate_(atomic(A), _, A).
 7122ast_instantiate_(compound(A, B, C, _), D, E) :-
 7123    functor(E, A, B),
 7124    E=..[_|F],
 7125    maplist(ast_instantiate(D), C, F).
 7126ast_head_arg_matches_([], [], A, B, [], A, B).
 7127ast_head_arg_matches_([silent(A-_)|B], [C|D], E, F, G, H, I) :-
 7128    !,
 7129    (   C==(+)
 7130    ->  ast_term_variables(A, J, F),
 7131        ast_head_arg_matches_(B,
 7132                              D,
 7133                              E,
 7134                              J,
 7135                              G,
 7136                              H,
 7137                              I)
 7138    ;   ast_head_arg_matches_(B,
 7139                              D,
 7140                              E,
 7141                              F,
 7142                              G,
 7143                              H,
 7144                              I)
 7145    ).
 7146ast_head_arg_matches_([A-B|C], [D|E], F, G, H, I, J) :-
 7147    (   A=var(K, _)
 7148    ->  (   get_assoc(K, F, L)
 7149        ->  (   D=(+)
 7150            ->  (   tree_set_memberchk(K, G)
 7151                ->  H=[B=L|M],
 7152                    N=G
 7153                ;   H=[B==L|M],
 7154                    tree_set_add(G, K, N)
 7155                )
 7156            ;   H=[B==L|M],
 7157                N=G
 7158            ),
 7159            O=F
 7160        ;   put_assoc(K, F, B, O),
 7161            H=M,
 7162            (   D=(+)
 7163            ->  tree_set_add(G, K, N)
 7164            ;   N=G
 7165            )
 7166        ),
 7167        P=C,
 7168        Q=E
 7169    ;   ground(A),
 7170        A='$chr_identifier_match'(R, S)
 7171    ->  identifier_label_atom(S, B, R, T),
 7172        H=[T|M],
 7173        F=O,
 7174        N=G,
 7175        P=C,
 7176        Q=E
 7177    ;   A=atomic(U)
 7178    ->  (   D=(+)
 7179        ->  H=[B=U|M]
 7180        ;   H=[B==U|M]
 7181        ),
 7182        F=O,
 7183        N=G,
 7184        P=C,
 7185        Q=E
 7186    ;   D==(+),
 7187        ast_is_ground(G, A)
 7188    ->  ast_instantiate(F, A, V),
 7189        H=[B=V|M],
 7190        F=O,
 7191        N=G,
 7192        P=C,
 7193        Q=E
 7194    ;   D==(?),
 7195        ast_is_ground(G, A)
 7196    ->  ast_instantiate(F, A, V),
 7197        H=[B==V|M],
 7198        F=O,
 7199        N=G,
 7200        P=C,
 7201        Q=E
 7202    ;   A=compound(W, X, Y, _),
 7203        functor(Z, W, X),
 7204        Z=..[_|A1],
 7205        (   D=(+)
 7206        ->  H=[B=Z|M]
 7207        ;   H=[nonvar(B), B=Z|M]
 7208        ),
 7209        pairup(Y, A1, B1),
 7210        append(B1, C, P),
 7211        replicate(_, D, C1),
 7212        append(C1, E, Q),
 7213        O=F,
 7214        N=G
 7215    ),
 7216    ast_head_arg_matches_(P,
 7217                          Q,
 7218                          O,
 7219                          N,
 7220                          M,
 7221                          I,
 7222                          J).
 7223:- use_module(chr(chr_runtime)). 7224:- use_module(chr(chr_hashtable_store)). 7225attach_generate_empty_named_history_initialisation___1([], _).
 7226attach_generate_empty_named_history_initialisation___1([A|B], C) :-
 7227    (   get_attr(A, chr_translate, D)
 7228    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7229        (   E/\1=:=1
 7230        ->  P=v(E, [C|F], G, H, I, J, K, L, M, N, O)
 7231        ;   Q is E\/1,
 7232            P=v(Q, [C], G, H, I, J, K, L, M, N, O)
 7233        ),
 7234        put_attr(A, chr_translate, P)
 7235    ;   put_attr(A,
 7236                 chr_translate,
 7237                 v(1, [C], [], [], [], [], [], [], [], [], []))
 7238    ),
 7239    attach_generate_empty_named_history_initialisation___1(B, C).
 7240detach_generate_empty_named_history_initialisation___1([], _).
 7241detach_generate_empty_named_history_initialisation___1([A|B], C) :-
 7242    (   get_attr(A, chr_translate, D)
 7243    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7244        (   E/\1=:=1
 7245        ->  'chr sbag_del_element'(F, C, P),
 7246            (   P==[]
 7247            ->  Q is E/\ -2,
 7248                (   Q==0
 7249                ->  del_attr(A, chr_translate)
 7250                ;   put_attr(A,
 7251                             chr_translate,
 7252                             v(Q,
 7253                               [],
 7254                               G,
 7255                               H,
 7256                               I,
 7257                               J,
 7258                               K,
 7259                               L,
 7260                               M,
 7261                               N,
 7262                               O))
 7263                )
 7264            ;   put_attr(A,
 7265                         chr_translate,
 7266                         v(E,
 7267                           P,
 7268                           G,
 7269                           H,
 7270                           I,
 7271                           J,
 7272                           K,
 7273                           L,
 7274                           M,
 7275                           N,
 7276                           O))
 7277            )
 7278        ;   true
 7279        )
 7280    ;   true
 7281    ),
 7282    detach_generate_empty_named_history_initialisation___1(B, C).
 7283attach_symbol_count___2([], _).
 7284attach_symbol_count___2([A|B], C) :-
 7285    (   get_attr(A, chr_translate, D)
 7286    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7287        (   E/\2=:=2
 7288        ->  P=v(E, F, [C|G], H, I, J, K, L, M, N, O)
 7289        ;   Q is E\/2,
 7290            P=v(Q, F, [C], H, I, J, K, L, M, N, O)
 7291        ),
 7292        put_attr(A, chr_translate, P)
 7293    ;   put_attr(A,
 7294                 chr_translate,
 7295                 v(2, [], [C], [], [], [], [], [], [], [], []))
 7296    ),
 7297    attach_symbol_count___2(B, C).
 7298detach_symbol_count___2([], _).
 7299detach_symbol_count___2([A|B], C) :-
 7300    (   get_attr(A, chr_translate, D)
 7301    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7302        (   E/\2=:=2
 7303        ->  'chr sbag_del_element'(G, C, P),
 7304            (   P==[]
 7305            ->  Q is E/\ -3,
 7306                (   Q==0
 7307                ->  del_attr(A, chr_translate)
 7308                ;   put_attr(A,
 7309                             chr_translate,
 7310                             v(Q,
 7311                               F,
 7312                               [],
 7313                               H,
 7314                               I,
 7315                               J,
 7316                               K,
 7317                               L,
 7318                               M,
 7319                               N,
 7320                               O))
 7321                )
 7322            ;   put_attr(A,
 7323                         chr_translate,
 7324                         v(E,
 7325                           F,
 7326                           P,
 7327                           H,
 7328                           I,
 7329                           J,
 7330                           K,
 7331                           L,
 7332                           M,
 7333                           N,
 7334                           O))
 7335            )
 7336        ;   true
 7337        )
 7338    ;   true
 7339    ),
 7340    detach_symbol_count___2(B, C).
 7341attach_fresh_symbol___2([], _).
 7342attach_fresh_symbol___2([A|B], C) :-
 7343    (   get_attr(A, chr_translate, D)
 7344    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7345        (   E/\4=:=4
 7346        ->  P=v(E, F, G, [C|H], I, J, K, L, M, N, O)
 7347        ;   Q is E\/4,
 7348            P=v(Q, F, G, [C], I, J, K, L, M, N, O)
 7349        ),
 7350        put_attr(A, chr_translate, P)
 7351    ;   put_attr(A,
 7352                 chr_translate,
 7353                 v(4, [], [], [C], [], [], [], [], [], [], []))
 7354    ),
 7355    attach_fresh_symbol___2(B, C).
 7356detach_fresh_symbol___2([], _).
 7357detach_fresh_symbol___2([A|B], C) :-
 7358    (   get_attr(A, chr_translate, D)
 7359    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7360        (   E/\4=:=4
 7361        ->  'chr sbag_del_element'(H, C, P),
 7362            (   P==[]
 7363            ->  Q is E/\ -5,
 7364                (   Q==0
 7365                ->  del_attr(A, chr_translate)
 7366                ;   put_attr(A,
 7367                             chr_translate,
 7368                             v(Q,
 7369                               F,
 7370                               G,
 7371                               [],
 7372                               I,
 7373                               J,
 7374                               K,
 7375                               L,
 7376                               M,
 7377                               N,
 7378                               O))
 7379                )
 7380            ;   put_attr(A,
 7381                         chr_translate,
 7382                         v(E,
 7383                           F,
 7384                           G,
 7385                           P,
 7386                           I,
 7387                           J,
 7388                           K,
 7389                           L,
 7390                           M,
 7391                           N,
 7392                           O))
 7393            )
 7394        ;   true
 7395        )
 7396    ;   true
 7397    ),
 7398    detach_fresh_symbol___2(B, C).
 7399attach_background_info___2([], _).
 7400attach_background_info___2([A|B], C) :-
 7401    (   get_attr(A, chr_translate, D)
 7402    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7403        (   E/\8=:=8
 7404        ->  P=v(E, F, G, H, [C|I], J, K, L, M, N, O)
 7405        ;   Q is E\/8,
 7406            P=v(Q, F, G, H, [C], J, K, L, M, N, O)
 7407        ),
 7408        put_attr(A, chr_translate, P)
 7409    ;   put_attr(A,
 7410                 chr_translate,
 7411                 v(8, [], [], [], [C], [], [], [], [], [], []))
 7412    ),
 7413    attach_background_info___2(B, C).
 7414detach_background_info___2([], _).
 7415detach_background_info___2([A|B], C) :-
 7416    (   get_attr(A, chr_translate, D)
 7417    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7418        (   E/\8=:=8
 7419        ->  'chr sbag_del_element'(I, C, P),
 7420            (   P==[]
 7421            ->  Q is E/\ -9,
 7422                (   Q==0
 7423                ->  del_attr(A, chr_translate)
 7424                ;   put_attr(A,
 7425                             chr_translate,
 7426                             v(Q,
 7427                               F,
 7428                               G,
 7429                               H,
 7430                               [],
 7431                               J,
 7432                               K,
 7433                               L,
 7434                               M,
 7435                               N,
 7436                               O))
 7437                )
 7438            ;   put_attr(A,
 7439                         chr_translate,
 7440                         v(E,
 7441                           F,
 7442                           G,
 7443                           H,
 7444                           P,
 7445                           J,
 7446                           K,
 7447                           L,
 7448                           M,
 7449                           N,
 7450                           O))
 7451            )
 7452        ;   true
 7453        )
 7454    ;   true
 7455    ),
 7456    detach_background_info___2(B, C).
 7457attach_get_bg_info___2([], _).
 7458attach_get_bg_info___2([A|B], C) :-
 7459    (   get_attr(A, chr_translate, D)
 7460    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7461        (   E/\16=:=16
 7462        ->  P=v(E, F, G, H, I, [C|J], K, L, M, N, O)
 7463        ;   Q is E\/16,
 7464            P=v(Q, F, G, H, I, [C], K, L, M, N, O)
 7465        ),
 7466        put_attr(A, chr_translate, P)
 7467    ;   put_attr(A,
 7468                 chr_translate,
 7469                 v(16, [], [], [], [], [C], [], [], [], [], []))
 7470    ),
 7471    attach_get_bg_info___2(B, C).
 7472detach_get_bg_info___2([], _).
 7473detach_get_bg_info___2([A|B], C) :-
 7474    (   get_attr(A, chr_translate, D)
 7475    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7476        (   E/\16=:=16
 7477        ->  'chr sbag_del_element'(J, C, P),
 7478            (   P==[]
 7479            ->  Q is E/\ -17,
 7480                (   Q==0
 7481                ->  del_attr(A, chr_translate)
 7482                ;   put_attr(A,
 7483                             chr_translate,
 7484                             v(Q,
 7485                               F,
 7486                               G,
 7487                               H,
 7488                               I,
 7489                               [],
 7490                               K,
 7491                               L,
 7492                               M,
 7493                               N,
 7494                               O))
 7495                )
 7496            ;   put_attr(A,
 7497                         chr_translate,
 7498                         v(E,
 7499                           F,
 7500                           G,
 7501                           H,
 7502                           I,
 7503                           P,
 7504                           K,
 7505                           L,
 7506                           M,
 7507                           N,
 7508                           O))
 7509            )
 7510        ;   true
 7511        )
 7512    ;   true
 7513    ),
 7514    detach_get_bg_info___2(B, C).
 7515attach_type_definition___2([], _).
 7516attach_type_definition___2([A|B], C) :-
 7517    (   get_attr(A, chr_translate, D)
 7518    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7519        (   E/\32=:=32
 7520        ->  P=v(E, F, G, H, I, J, [C|K], L, M, N, O)
 7521        ;   Q is E\/32,
 7522            P=v(Q, F, G, H, I, J, [C], L, M, N, O)
 7523        ),
 7524        put_attr(A, chr_translate, P)
 7525    ;   put_attr(A,
 7526                 chr_translate,
 7527                 v(32, [], [], [], [], [], [C], [], [], [], []))
 7528    ),
 7529    attach_type_definition___2(B, C).
 7530detach_type_definition___2([], _).
 7531detach_type_definition___2([A|B], C) :-
 7532    (   get_attr(A, chr_translate, D)
 7533    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7534        (   E/\32=:=32
 7535        ->  'chr sbag_del_element'(K, C, P),
 7536            (   P==[]
 7537            ->  Q is E/\ -33,
 7538                (   Q==0
 7539                ->  del_attr(A, chr_translate)
 7540                ;   put_attr(A,
 7541                             chr_translate,
 7542                             v(Q,
 7543                               F,
 7544                               G,
 7545                               H,
 7546                               I,
 7547                               J,
 7548                               [],
 7549                               L,
 7550                               M,
 7551                               N,
 7552                               O))
 7553                )
 7554            ;   put_attr(A,
 7555                         chr_translate,
 7556                         v(E,
 7557                           F,
 7558                           G,
 7559                           H,
 7560                           I,
 7561                           J,
 7562                           P,
 7563                           L,
 7564                           M,
 7565                           N,
 7566                           O))
 7567            )
 7568        ;   true
 7569        )
 7570    ;   true
 7571    ),
 7572    detach_type_definition___2(B, C).
 7573attach_type_alias___2([], _).
 7574attach_type_alias___2([A|B], C) :-
 7575    (   get_attr(A, chr_translate, D)
 7576    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7577        (   E/\64=:=64
 7578        ->  P=v(E, F, G, H, I, J, K, [C|L], M, N, O)
 7579        ;   Q is E\/64,
 7580            P=v(Q, F, G, H, I, J, K, [C], M, N, O)
 7581        ),
 7582        put_attr(A, chr_translate, P)
 7583    ;   put_attr(A,
 7584                 chr_translate,
 7585                 v(64, [], [], [], [], [], [], [C], [], [], []))
 7586    ),
 7587    attach_type_alias___2(B, C).
 7588detach_type_alias___2([], _).
 7589detach_type_alias___2([A|B], C) :-
 7590    (   get_attr(A, chr_translate, D)
 7591    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7592        (   E/\64=:=64
 7593        ->  'chr sbag_del_element'(L, C, P),
 7594            (   P==[]
 7595            ->  Q is E/\ -65,
 7596                (   Q==0
 7597                ->  del_attr(A, chr_translate)
 7598                ;   put_attr(A,
 7599                             chr_translate,
 7600                             v(Q,
 7601                               F,
 7602                               G,
 7603                               H,
 7604                               I,
 7605                               J,
 7606                               K,
 7607                               [],
 7608                               M,
 7609                               N,
 7610                               O))
 7611                )
 7612            ;   put_attr(A,
 7613                         chr_translate,
 7614                         v(E,
 7615                           F,
 7616                           G,
 7617                           H,
 7618                           I,
 7619                           J,
 7620                           K,
 7621                           P,
 7622                           M,
 7623                           N,
 7624                           O))
 7625            )
 7626        ;   true
 7627        )
 7628    ;   true
 7629    ),
 7630    detach_type_alias___2(B, C).
 7631attach_unalias_type___2([], _).
 7632attach_unalias_type___2([A|B], C) :-
 7633    (   get_attr(A, chr_translate, D)
 7634    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7635        (   E/\128=:=128
 7636        ->  P=v(E, F, G, H, I, J, K, L, [C|M], N, O)
 7637        ;   Q is E\/128,
 7638            P=v(Q, F, G, H, I, J, K, L, [C], N, O)
 7639        ),
 7640        put_attr(A, chr_translate, P)
 7641    ;   put_attr(A,
 7642                 chr_translate,
 7643                 v(128, [], [], [], [], [], [], [], [C], [], []))
 7644    ),
 7645    attach_unalias_type___2(B, C).
 7646detach_unalias_type___2([], _).
 7647detach_unalias_type___2([A|B], C) :-
 7648    (   get_attr(A, chr_translate, D)
 7649    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7650        (   E/\128=:=128
 7651        ->  'chr sbag_del_element'(M, C, P),
 7652            (   P==[]
 7653            ->  Q is E/\ -129,
 7654                (   Q==0
 7655                ->  del_attr(A, chr_translate)
 7656                ;   put_attr(A,
 7657                             chr_translate,
 7658                             v(Q,
 7659                               F,
 7660                               G,
 7661                               H,
 7662                               I,
 7663                               J,
 7664                               K,
 7665                               L,
 7666                               [],
 7667                               N,
 7668                               O))
 7669                )
 7670            ;   put_attr(A,
 7671                         chr_translate,
 7672                         v(E,
 7673                           F,
 7674                           G,
 7675                           H,
 7676                           I,
 7677                           J,
 7678                           K,
 7679                           L,
 7680                           P,
 7681                           N,
 7682                           O))
 7683            )
 7684        ;   true
 7685        )
 7686    ;   true
 7687    ),
 7688    detach_unalias_type___2(B, C).
 7689attach_ast_static_type_check_var___4([], _).
 7690attach_ast_static_type_check_var___4([A|B], C) :-
 7691    (   get_attr(A, chr_translate, D)
 7692    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7693        (   E/\256=:=256
 7694        ->  P=v(E, F, G, H, I, J, K, L, M, [C|N], O)
 7695        ;   Q is E\/256,
 7696            P=v(Q, F, G, H, I, J, K, L, M, [C], O)
 7697        ),
 7698        put_attr(A, chr_translate, P)
 7699    ;   put_attr(A,
 7700                 chr_translate,
 7701                 v(256, [], [], [], [], [], [], [], [], [C], []))
 7702    ),
 7703    attach_ast_static_type_check_var___4(B, C).
 7704detach_ast_static_type_check_var___4([], _).
 7705detach_ast_static_type_check_var___4([A|B], C) :-
 7706    (   get_attr(A, chr_translate, D)
 7707    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7708        (   E/\256=:=256
 7709        ->  'chr sbag_del_element'(N, C, P),
 7710            (   P==[]
 7711            ->  Q is E/\ -257,
 7712                (   Q==0
 7713                ->  del_attr(A, chr_translate)
 7714                ;   put_attr(A,
 7715                             chr_translate,
 7716                             v(Q,
 7717                               F,
 7718                               G,
 7719                               H,
 7720                               I,
 7721                               J,
 7722                               K,
 7723                               L,
 7724                               M,
 7725                               [],
 7726                               O))
 7727                )
 7728            ;   put_attr(A,
 7729                         chr_translate,
 7730                         v(E,
 7731                           F,
 7732                           G,
 7733                           H,
 7734                           I,
 7735                           J,
 7736                           K,
 7737                           L,
 7738                           M,
 7739                           P,
 7740                           O))
 7741            )
 7742        ;   true
 7743        )
 7744    ;   true
 7745    ),
 7746    detach_ast_static_type_check_var___4(B, C).
 7747attach_atomic_type___1([], _).
 7748attach_atomic_type___1([A|B], C) :-
 7749    (   get_attr(A, chr_translate, D)
 7750    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7751        (   E/\512=:=512
 7752        ->  P=v(E, F, G, H, I, J, K, L, M, N, [C|O])
 7753        ;   Q is E\/512,
 7754            P=v(Q, F, G, H, I, J, K, L, M, N, [C])
 7755        ),
 7756        put_attr(A, chr_translate, P)
 7757    ;   put_attr(A,
 7758                 chr_translate,
 7759                 v(512, [], [], [], [], [], [], [], [], [], [C]))
 7760    ),
 7761    attach_atomic_type___1(B, C).
 7762detach_atomic_type___1([], _).
 7763detach_atomic_type___1([A|B], C) :-
 7764    (   get_attr(A, chr_translate, D)
 7765    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7766        (   E/\512=:=512
 7767        ->  'chr sbag_del_element'(O, C, P),
 7768            (   P==[]
 7769            ->  Q is E/\ -513,
 7770                (   Q==0
 7771                ->  del_attr(A, chr_translate)
 7772                ;   put_attr(A,
 7773                             chr_translate,
 7774                             v(Q,
 7775                               F,
 7776                               G,
 7777                               H,
 7778                               I,
 7779                               J,
 7780                               K,
 7781                               L,
 7782                               M,
 7783                               N,
 7784                               []))
 7785                )
 7786            ;   put_attr(A,
 7787                         chr_translate,
 7788                         v(E,
 7789                           F,
 7790                           G,
 7791                           H,
 7792                           I,
 7793                           J,
 7794                           K,
 7795                           L,
 7796                           M,
 7797                           N,
 7798                           P))
 7799            )
 7800        ;   true
 7801        )
 7802    ;   true
 7803    ),
 7804    detach_atomic_type___1(B, C).
 7805attach_increment([], _).
 7806attach_increment([A|B], C) :-
 7807    (   get_attr(A, chr_translate, D)
 7808    ->  C=v(E, F, G, H, I, J, K, L, M, N, O),
 7809        D=v(P, Q, R, S, T, U, V, W, X, Y, Z),
 7810        ( sort(Q, A1),
 7811          'chr merge_attributes'(F, A1, B1),
 7812          sort(R, C1),
 7813          'chr merge_attributes'(G, C1, D1),
 7814          sort(S, E1),
 7815          'chr merge_attributes'(H, E1, F1),
 7816          sort(T, G1),
 7817          'chr merge_attributes'(I, G1, H1),
 7818          sort(U, I1),
 7819          'chr merge_attributes'(J, I1, J1),
 7820          sort(V, K1),
 7821          'chr merge_attributes'(K, K1, L1),
 7822          sort(W, M1),
 7823          'chr merge_attributes'(L, M1, N1),
 7824          sort(X, O1),
 7825          'chr merge_attributes'(M, O1, P1),
 7826          sort(Y, Q1),
 7827          'chr merge_attributes'(N, Q1, R1),
 7828          sort(Z, S1),
 7829          'chr merge_attributes'(O, S1, T1)
 7830        ),
 7831        U1 is E\/P,
 7832        put_attr(A,
 7833                 chr_translate,
 7834                 v(U1,
 7835                   B1,
 7836                   D1,
 7837                   F1,
 7838                   H1,
 7839                   J1,
 7840                   L1,
 7841                   N1,
 7842                   P1,
 7843                   R1,
 7844                   T1))
 7845    ;   put_attr(A, chr_translate, C)
 7846    ),
 7847    attach_increment(B, C).
 7848attribute_goals(_, A, A).
 7849attr_unify_hook(v(A, B, C, D, E, F, G, H, I, J, K), L) :-
 7850    sort(B, M),
 7851    sort(C, N),
 7852    sort(D, O),
 7853    sort(E, P),
 7854    sort(F, Q),
 7855    sort(G, R),
 7856    sort(H, S),
 7857    sort(I, T),
 7858    sort(J, U),
 7859    sort(K, V),
 7860    (   var(L)
 7861    ->  (   get_attr(L, chr_translate, W)
 7862        ->  W=v(X, Y, Z, A1, B1, C1, D1, E1, F1, G1, H1),
 7863            ( sort(Y, I1),
 7864              'chr merge_attributes'(M, I1, J1),
 7865              sort(Z, K1),
 7866              'chr merge_attributes'(N, K1, L1),
 7867              sort(A1, M1),
 7868              'chr merge_attributes'(O, M1, N1),
 7869              sort(B1, O1),
 7870              'chr merge_attributes'(P, O1, P1),
 7871              sort(C1, Q1),
 7872              'chr merge_attributes'(Q, Q1, R1),
 7873              sort(D1, S1),
 7874              'chr merge_attributes'(R, S1, T1),
 7875              sort(E1, U1),
 7876              'chr merge_attributes'(S, U1, V1),
 7877              sort(F1, W1),
 7878              'chr merge_attributes'(T, W1, X1),
 7879              sort(G1, Y1),
 7880              'chr merge_attributes'(U, Y1, Z1),
 7881              sort(H1, A2),
 7882              'chr merge_attributes'(V, A2, B2)
 7883            ),
 7884            C2 is A\/X,
 7885            put_attr(L,
 7886                     chr_translate,
 7887                     v(C2,
 7888                       J1,
 7889                       L1,
 7890                       N1,
 7891                       P1,
 7892                       R1,
 7893                       T1,
 7894                       V1,
 7895                       X1,
 7896                       Z1,
 7897                       B2)),
 7898            '$run_suspensions_generate_empty_named_history_initialisation___1'(M),
 7899            '$run_suspensions_symbol_count___2'(N),
 7900            '$run_suspensions_fresh_symbol___2'(O),
 7901            '$run_suspensions_background_info___2'(P1),
 7902            '$run_suspensions_get_bg_info___2'(R1),
 7903            '$run_suspensions_type_definition___2'(T1),
 7904            '$run_suspensions_type_alias___2'(V1),
 7905            '$run_suspensions_unalias_type___2'(X1),
 7906            '$run_suspensions_ast_static_type_check_var___4'(Z1),
 7907            '$run_suspensions_atomic_type___1'(B2)
 7908        ;   put_attr(L,
 7909                     chr_translate,
 7910                     v(A,
 7911                       M,
 7912                       N,
 7913                       O,
 7914                       P,
 7915                       Q,
 7916                       R,
 7917                       S,
 7918                       T,
 7919                       U,
 7920                       V)),
 7921            '$run_suspensions_generate_empty_named_history_initialisation___1'(M),
 7922            '$run_suspensions_symbol_count___2'(N),
 7923            '$run_suspensions_fresh_symbol___2'(O),
 7924            '$run_suspensions_background_info___2'(P),
 7925            '$run_suspensions_get_bg_info___2'(Q),
 7926            '$run_suspensions_type_definition___2'(R),
 7927            '$run_suspensions_type_alias___2'(S),
 7928            '$run_suspensions_unalias_type___2'(T),
 7929            '$run_suspensions_ast_static_type_check_var___4'(U),
 7930            '$run_suspensions_atomic_type___1'(V)
 7931        )
 7932    ;   (   compound(L)
 7933        ->  term_variables(L, D2),
 7934            attach_increment(D2,
 7935                             v(A,
 7936                               M,
 7937                               N,
 7938                               O,
 7939                               P,
 7940                               Q,
 7941                               R,
 7942                               S,
 7943                               T,
 7944                               U,
 7945                               V))
 7946        ;   true
 7947        ),
 7948        '$run_suspensions_generate_empty_named_history_initialisation___1'(M),
 7949        '$run_suspensions_symbol_count___2'(N),
 7950        '$run_suspensions_fresh_symbol___2'(O),
 7951        '$run_suspensions_background_info___2'(P),
 7952        '$run_suspensions_get_bg_info___2'(Q),
 7953        '$run_suspensions_type_definition___2'(R),
 7954        '$run_suspensions_type_alias___2'(S),
 7955        '$run_suspensions_unalias_type___2'(T),
 7956        '$run_suspensions_ast_static_type_check_var___4'(U),
 7957        '$run_suspensions_atomic_type___1'(V)
 7958    ).
 7959'$novel_production'(A, B) :-
 7960    arg(3, A, C),
 7961    (   hprolog:get_ds(B, C, _)
 7962    ->  fail
 7963    ;   true
 7964    ).
 7965'$extend_history'(A, B) :-
 7966    arg(3, A, C),
 7967    hprolog:put_ds(B, C, x, D),
 7968    setarg(3, A, D).
 7969'$run_suspensions_generate_empty_named_history_initialisation___1'([]).
 7970'$run_suspensions_generate_empty_named_history_initialisation___1'([A|B]) :-
 7971    A=suspension(_, C, D, _, E),
 7972    (   C==active
 7973    ->  setarg(2, A, triggered),
 7974        F is D+1,
 7975        setarg(3, A, F),
 7976        generate_empty_named_history_initialisation___1__0(E, A),
 7977        (   C==triggered
 7978        ->  setarg(2, A, active)
 7979        ;   true
 7980        )
 7981    ;   true
 7982    ),
 7983    '$run_suspensions_generate_empty_named_history_initialisation___1'(B).
 7984'$run_suspensions_symbol_count___2'([]).
 7985'$run_suspensions_symbol_count___2'([A|B]) :-
 7986    A=suspension(_, C, _, D, E),
 7987    (   C==active
 7988    ->  setarg(2, A, triggered),
 7989        symbol_count___2__0(D, E, A),
 7990        (   C==triggered
 7991        ->  setarg(2, A, active)
 7992        ;   true
 7993        )
 7994    ;   true
 7995    ),
 7996    '$run_suspensions_symbol_count___2'(B).
 7997'$run_suspensions_fresh_symbol___2'([]).
 7998'$run_suspensions_fresh_symbol___2'([A|B]) :-
 7999    A=suspension(_, C, _, D, _, E, F),
 8000    (   C==active
 8001    ->  setarg(2, A, triggered),
 8002        G is D+1,
 8003        setarg(4, A, G),
 8004        fresh_symbol___2__0(E, F, A),
 8005        (   C==triggered
 8006        ->  setarg(2, A, active)
 8007        ;   true
 8008        )
 8009    ;   true
 8010    ),
 8011    '$run_suspensions_fresh_symbol___2'(B).
 8012'$run_suspensions_background_info___2'([]).
 8013'$run_suspensions_background_info___2'([A|B]) :-
 8014    A=suspension(_, C, _, D, _, E, F),
 8015    setarg(2, A, triggered),
 8016    G is D+1,
 8017    setarg(4, A, G),
 8018    background_info___2__0(E, F, A),
 8019    (   C==triggered
 8020    ->  setarg(2, A, active)
 8021    ;   true
 8022    ),
 8023    '$run_suspensions_background_info___2'(B).
 8024'$run_suspensions_get_bg_info___2'([]).
 8025'$run_suspensions_get_bg_info___2'([A|B]) :-
 8026    A=suspension(_, C, _, D, _, E, F),
 8027    (   C==active
 8028    ->  setarg(2, A, triggered),
 8029        G is D+1,
 8030        setarg(4, A, G),
 8031        get_bg_info___2__0(E, F, A),
 8032        (   C==triggered
 8033        ->  setarg(2, A, active)
 8034        ;   true
 8035        )
 8036    ;   true
 8037    ),
 8038    '$run_suspensions_get_bg_info___2'(B).
 8039'$run_suspensions_type_definition___2'([]).
 8040'$run_suspensions_type_definition___2'([A|B]) :-
 8041    A=suspension(_, C, _, D, _, E, F),
 8042    (   C==active
 8043    ->  setarg(2, A, triggered),
 8044        G is D+1,
 8045        setarg(4, A, G),
 8046        type_definition___2__0(E, F, A),
 8047        (   C==triggered
 8048        ->  setarg(2, A, active)
 8049        ;   true
 8050        )
 8051    ;   true
 8052    ),
 8053    '$run_suspensions_type_definition___2'(B).
 8054'$run_suspensions_type_alias___2'([]).
 8055'$run_suspensions_type_alias___2'([A|B]) :-
 8056    A=suspension(_, C, _, D, _, E, F),
 8057    (   C==active
 8058    ->  setarg(2, A, triggered),
 8059        G is D+1,
 8060        setarg(4, A, G),
 8061        type_alias___2__0(E, F, A),
 8062        (   C==triggered
 8063        ->  setarg(2, A, active)
 8064        ;   true
 8065        )
 8066    ;   true
 8067    ),
 8068    '$run_suspensions_type_alias___2'(B).
 8069'$run_suspensions_unalias_type___2'([]).
 8070'$run_suspensions_unalias_type___2'([A|B]) :-
 8071    A=suspension(_, C, _, D, E),
 8072    (   C==active
 8073    ->  setarg(2, A, triggered),
 8074        unalias_type___2__0(D, E, A),
 8075        (   C==triggered
 8076        ->  setarg(2, A, active)
 8077        ;   true
 8078        )
 8079    ;   true
 8080    ),
 8081    '$run_suspensions_unalias_type___2'(B).
 8082'$run_suspensions_ast_static_type_check_var___4'([]).
 8083'$run_suspensions_ast_static_type_check_var___4'([A|B]) :-
 8084    A=suspension(_, C, _, D, E, F, G),
 8085    (   C==active
 8086    ->  setarg(2, A, triggered),
 8087        ast_static_type_check_var___4__0(D,
 8088                                         E,
 8089                                         F,
 8090                                         G,
 8091                                         A),
 8092        (   C==triggered
 8093        ->  setarg(2, A, active)
 8094        ;   true
 8095        )
 8096    ;   true
 8097    ),
 8098    '$run_suspensions_ast_static_type_check_var___4'(B).
 8099'$run_suspensions_atomic_type___1'([]).
 8100'$run_suspensions_atomic_type___1'([A|B]) :-
 8101    A=suspension(_, C, _, D),
 8102    (   C==active
 8103    ->  setarg(2, A, triggered),
 8104        atomic_type___1__0(D, A),
 8105        (   C==triggered
 8106        ->  setarg(2, A, active)
 8107        ;   true
 8108        )
 8109    ;   true
 8110    ),
 8111    '$run_suspensions_atomic_type___1'(B).
 8112'$enumerate_constraints'(A) :-
 8113    (   nonvar(A)
 8114    ->  functor(A, B, _),
 8115        '$enumerate_constraints'(B, A)
 8116    ;   '$enumerate_constraints'(_, A)
 8117    ).
 8118'$enumerate_constraints'(chr_source_file, A) :-
 8119    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 8120              B),
 8121    member(C, B),
 8122    C=suspension(_, _, _, D),
 8123    A=chr_source_file(D).
 8124'$enumerate_constraints'(target_module, A) :-
 8125    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 8126              B),
 8127    member(C, B),
 8128    C=suspension(_, _, _, D),
 8129    A=target_module(D).
 8130'$enumerate_constraints'(source_location, A) :-
 8131    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 8132              B),
 8133    value_ht(B, C),
 8134    C=suspension(_, _, D, E),
 8135    A=source_location(D, E).
 8136'$enumerate_constraints'(indexed_argument, A) :-
 8137    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 8138              B),
 8139    value_ht(B, C),
 8140    C=suspension(_, _, D, E),
 8141    A=indexed_argument(D, E).
 8142'$enumerate_constraints'(constraint_mode, A) :-
 8143    nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 8144              B),
 8145    member(C, B),
 8146    C=suspension(_, _, _, _, D, E),
 8147    A=constraint_mode(D, E).
 8148'$enumerate_constraints'(none_suspended_on_variables, A) :-
 8149    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
 8150              B),
 8151    member(C, B),
 8152    C=suspension(_, _, _),
 8153    A=none_suspended_on_variables.
 8154'$enumerate_constraints'(store_type, A) :-
 8155    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', B),
 8156    value_ht(B, C),
 8157    C=suspension(_, _, D, E),
 8158    A=store_type(D, E).
 8159'$enumerate_constraints'(actual_store_types, A) :-
 8160    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
 8161              B),
 8162    value_ht(B, C),
 8163    C=suspension(_, _, D, E),
 8164    A=actual_store_types(D, E).
 8165'$enumerate_constraints'(assumed_store_type, A) :-
 8166    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
 8167              B),
 8168    value_ht(B, C),
 8169    C=suspension(_, _, D, E),
 8170    A=assumed_store_type(D, E).
 8171'$enumerate_constraints'(validate_store_type_assumption, A) :-
 8172    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
 8173              B),
 8174    value_ht(B, C),
 8175    C=suspension(_, _, D),
 8176    A=validate_store_type_assumption(D).
 8177'$enumerate_constraints'(rule_count, A) :-
 8178    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
 8179              B),
 8180    member(C, B),
 8181    C=suspension(_, _, _, D),
 8182    A=rule_count(D).
 8183'$enumerate_constraints'(passive, A) :-
 8184    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', B),
 8185    value_ht(B, C),
 8186    C=suspension(_, _, _, D, E),
 8187    A=passive(D, E).
 8188'$enumerate_constraints'(occurrence, A) :-
 8189    nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
 8190              B),
 8191    member(C, B),
 8192    C=suspension(_, _, _, _, D, E, F, G, H),
 8193    A=occurrence(D, E, F, G, H).
 8194'$enumerate_constraints'(max_occurrence, A) :-
 8195    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
 8196              B),
 8197    value_ht(B, C),
 8198    C=suspension(_, _, _, D, E),
 8199    A=max_occurrence(D, E).
 8200'$enumerate_constraints'(allocation_occurrence, A) :-
 8201    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
 8202              B),
 8203    value_ht(B, C),
 8204    C=suspension(_, _, _, D, E),
 8205    A=allocation_occurrence(D, E).
 8206'$enumerate_constraints'(rule, A) :-
 8207    nb_getval('$chr_store_global_ground_chr_translate____rule___2', B),
 8208    member(C, B),
 8209    C=suspension(_, _, _, _, D, E),
 8210    A=rule(D, E).
 8211'$enumerate_constraints'(least_occurrence, A) :-
 8212    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
 8213              B),
 8214    value_ht(B, C),
 8215    C=suspension(_, _, D, E),
 8216    A=least_occurrence(D, E).
 8217'$enumerate_constraints'(constraint_index, A) :-
 8218    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
 8219              B),
 8220    value_ht(B, C),
 8221    C=suspension(_, _, D, E),
 8222    A=constraint_index(D, E).
 8223'$enumerate_constraints'(max_constraint_index, A) :-
 8224    nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
 8225              B),
 8226    member(C, B),
 8227    C=suspension(_, _, _, D),
 8228    A=max_constraint_index(D).
 8229'$enumerate_constraints'(identifier_size, A) :-
 8230    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
 8231              B),
 8232    member(C, B),
 8233    C=suspension(_, _, _, D),
 8234    A=identifier_size(D).
 8235'$enumerate_constraints'(identifier_index, A) :-
 8236    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
 8237              B),
 8238    value_ht(B, C),
 8239    C=suspension(_, _, D, E, F),
 8240    A=identifier_index(D, E, F).
 8241'$enumerate_constraints'(type_indexed_identifier_size, A) :-
 8242    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
 8243              B),
 8244    value_ht(B, C),
 8245    C=suspension(_, _, D, E),
 8246    A=type_indexed_identifier_size(D, E).
 8247'$enumerate_constraints'(type_indexed_identifier_index, A) :-
 8248    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
 8249              B),
 8250    value_ht(B, C),
 8251    C=suspension(_, _, D, E, F, G),
 8252    A=type_indexed_identifier_index(D, E, F, G).
 8253'$enumerate_constraints'(no_history, A) :-
 8254    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', B),
 8255    value_ht(B, C),
 8256    C=suspension(_, _, D),
 8257    A=no_history(D).
 8258'$enumerate_constraints'(history, A) :-
 8259    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', B),
 8260    value_ht(B, C),
 8261    C=suspension(_, _, _, D, E, F),
 8262    A=history(D, E, F).
 8263'$enumerate_constraints'(indexing_spec, A) :-
 8264    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
 8265              B),
 8266    value_ht(B, C),
 8267    C=suspension(_, _, D, E),
 8268    A=indexing_spec(D, E).
 8269'$enumerate_constraints'(observation_analysis, A) :-
 8270    nb_getval('$chr_store_global_ground_chr_translate____observation_analysis___1',
 8271              B),
 8272    member(C, B),
 8273    C=suspension(_, _, _, D),
 8274    A=observation_analysis(D).
 8275'$enumerate_constraints'(spawns, A) :-
 8276    nb_getval('$chr_store_global_ground_chr_translate____spawns___3', B),
 8277    member(C, B),
 8278    C=suspension(_, _, _, _, D, E, F),
 8279    A=spawns(D, E, F).
 8280'$enumerate_constraints'(spawns_all, A) :-
 8281    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1', B),
 8282    value_ht(B, C),
 8283    C=suspension(_, _, D, E),
 8284    A=spawns_all(D, E).
 8285'$enumerate_constraints'(spawns_all_triggers, A) :-
 8286    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
 8287              B),
 8288    member(C, B),
 8289    C=suspension(_, _, _, _, D, E),
 8290    A=spawns_all_triggers(D, E).
 8291'$enumerate_constraints'(spawns_all_triggers_implies_spawns_all, A) :-
 8292    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
 8293              B),
 8294    member(C, B),
 8295    C=suspension(_, _, _),
 8296    A=spawns_all_triggers_implies_spawns_all.
 8297'$enumerate_constraints'(empty_named_history_initialisations, A) :-
 8298    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
 8299              B),
 8300    member(C, B),
 8301    C=suspension(_, _, _, D, E),
 8302    A=empty_named_history_initialisations(D, E).
 8303'$enumerate_constraints'(generate_empty_named_history_initialisation, A) :-
 8304    nb_current('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
 8305               B),
 8306    member(C, B),
 8307    C=suspension(_, _, _, _, D),
 8308    A=generate_empty_named_history_initialisation(D).
 8309'$enumerate_constraints'(find_empty_named_histories, A) :-
 8310    nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
 8311              B),
 8312    member(C, B),
 8313    C=suspension(_, _, _, _),
 8314    A=find_empty_named_histories.
 8315'$enumerate_constraints'(module_initializer, A) :-
 8316    nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
 8317              B),
 8318    member(C, B),
 8319    C=suspension(_, _, _, D),
 8320    A=module_initializer(D).
 8321'$enumerate_constraints'(actual_atomic_multi_hash_keys, A) :-
 8322    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
 8323              B),
 8324    value_ht(B, C),
 8325    C=suspension(_, _, D, E, F),
 8326    A=actual_atomic_multi_hash_keys(D, E, F).
 8327'$enumerate_constraints'(actual_ground_multi_hash_keys, A) :-
 8328    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
 8329              B),
 8330    value_ht(B, C),
 8331    C=suspension(_, _, D, E, F),
 8332    A=actual_ground_multi_hash_keys(D, E, F).
 8333'$enumerate_constraints'(actual_non_ground_multi_hash_key, A) :-
 8334    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
 8335              B),
 8336    value_ht(B, C),
 8337    C=suspension(_, _, D, E),
 8338    A=actual_non_ground_multi_hash_key(D, E).
 8339'$enumerate_constraints'(symbol_count, A) :-
 8340    nb_current('$chr_store_global_list_chr_translate____symbol_count___2',
 8341               B),
 8342    member(C, B),
 8343    C=suspension(_, _, _, D, E),
 8344    A=symbol_count(D, E).
 8345'$enumerate_constraints'(fresh_symbol, A) :-
 8346    nb_current('$chr_store_global_list_chr_translate____fresh_symbol___2',
 8347               B),
 8348    member(C, B),
 8349    C=suspension(_, _, _, _, _, D, E),
 8350    A=fresh_symbol(D, E).
 8351'$enumerate_constraints'(prolog_global_variable, A) :-
 8352    nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
 8353              B),
 8354    member(C, B),
 8355    C=suspension(_, _, _, D),
 8356    A=prolog_global_variable(D).
 8357'$enumerate_constraints'(background_info, A) :-
 8358    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
 8359              B),
 8360    member(C, B),
 8361    C=suspension(_, _, _, D),
 8362    A=background_info(D).
 8363'$enumerate_constraints'(background_info, A) :-
 8364    nb_current('$chr_store_global_list_chr_translate____background_info___2',
 8365               B),
 8366    member(C, B),
 8367    C=suspension(_, _, _, _, _, D, E),
 8368    A=background_info(D, E).
 8369'$enumerate_constraints'(get_bg_info, A) :-
 8370    nb_current('$chr_store_global_list_chr_translate____get_bg_info___2',
 8371               B),
 8372    member(C, B),
 8373    C=suspension(_, _, _, _, _, D, E),
 8374    A=get_bg_info(D, E).
 8375'$enumerate_constraints'(get_bg_info_answer, A) :-
 8376    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
 8377              B),
 8378    member(C, B),
 8379    C=suspension(_, _, _, D),
 8380    A=get_bg_info_answer(D).
 8381'$enumerate_constraints'(prev_guard_list, A) :-
 8382    nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
 8383              B),
 8384    member(C, B),
 8385    C=suspension(_, _, _, _, D, E, F, G, H, I),
 8386    A=prev_guard_list(D, E, F, G, H, I).
 8387'$enumerate_constraints'(set_all_passive, A) :-
 8388    nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
 8389              B),
 8390    value_ht(B, C),
 8391    C=suspension(_, _, _, D),
 8392    A=set_all_passive(D).
 8393'$enumerate_constraints'(precompute_head_matchings, A) :-
 8394    nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
 8395              B),
 8396    member(C, B),
 8397    C=suspension(_, _, _, _),
 8398    A=precompute_head_matchings.
 8399'$enumerate_constraints'(make_head_matchings_explicit_memo_table, A) :-
 8400    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
 8401              B),
 8402    value_ht(B, C),
 8403    C=suspension(_, _, D, E, F),
 8404    A=make_head_matchings_explicit_memo_table(D, E, F).
 8405'$enumerate_constraints'(multiple_occ_constraints_checked, A) :-
 8406    nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
 8407              B),
 8408    member(C, B),
 8409    C=suspension(_, _, _, D),
 8410    A=multiple_occ_constraints_checked(D).
 8411'$enumerate_constraints'(type_definition, A) :-
 8412    nb_current('$chr_store_global_list_chr_translate____type_definition___2',
 8413               B),
 8414    member(C, B),
 8415    C=suspension(_, _, _, _, _, D, E),
 8416    A=type_definition(D, E).
 8417'$enumerate_constraints'(type_alias, A) :-
 8418    nb_current('$chr_store_global_list_chr_translate____type_alias___2', B),
 8419    member(C, B),
 8420    C=suspension(_, _, _, _, _, D, E),
 8421    A=type_alias(D, E).
 8422'$enumerate_constraints'(constraint_type, A) :-
 8423    nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
 8424              B),
 8425    member(C, B),
 8426    C=suspension(_, _, _, D, E),
 8427    A=constraint_type(D, E).
 8428'$enumerate_constraints'(unalias_type, A) :-
 8429    nb_current('$chr_store_global_list_chr_translate____unalias_type___2',
 8430               B),
 8431    member(C, B),
 8432    C=suspension(_, _, _, D, E),
 8433    A=unalias_type(D, E).
 8434'$enumerate_constraints'(types_modes_condition, A) :-
 8435    nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 8436              B),
 8437    member(C, B),
 8438    C=suspension(_, _, _, D, E, F),
 8439    A=types_modes_condition(D, E, F).
 8440'$enumerate_constraints'(static_type_check, A) :-
 8441    nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
 8442              B),
 8443    member(C, B),
 8444    C=suspension(_, _, _, D, E),
 8445    A=static_type_check(D, E).
 8446'$enumerate_constraints'(ast_static_type_check_var, A) :-
 8447    nb_current('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
 8448               B),
 8449    member(C, B),
 8450    C=suspension(_, _, _, D, E, F, G),
 8451    A=ast_static_type_check_var(D, E, F, G).
 8452'$enumerate_constraints'(ast_static_atomic_builtin_type_check_var, A) :-
 8453    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
 8454              B),
 8455    value_ht(B, C),
 8456    C=suspension(_, _, D, E, F, G),
 8457    A=ast_static_atomic_builtin_type_check_var(D, E, F, G).
 8458'$enumerate_constraints'(dynamic_type_check, A) :-
 8459    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
 8460              B),
 8461    member(C, B),
 8462    C=suspension(_, _, _, _),
 8463    A=dynamic_type_check.
 8464'$enumerate_constraints'(dynamic_type_check_clauses, A) :-
 8465    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
 8466              B),
 8467    member(C, B),
 8468    C=suspension(_, _, _, D),
 8469    A=dynamic_type_check_clauses(D).
 8470'$enumerate_constraints'(atomic_type, A) :-
 8471    nb_current('$chr_store_global_list_chr_translate____atomic_type___1',
 8472               B),
 8473    member(C, B),
 8474    C=suspension(_, _, _, D),
 8475    A=atomic_type(D).
 8476'$enumerate_constraints'(stored, A) :-
 8477    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', B),
 8478    value_ht(B, C),
 8479    C=suspension(_, _, D, E, F),
 8480    A=stored(D, E, F).
 8481'$enumerate_constraints'(stored_complete, A) :-
 8482    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
 8483              B),
 8484    value_ht(B, C),
 8485    C=suspension(_, _, _, D, E, F),
 8486    A=stored_complete(D, E, F).
 8487'$enumerate_constraints'(check_all_passive, A) :-
 8488    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
 8489              B),
 8490    value_ht(B, C),
 8491    C=suspension(_, _, D, E),
 8492    A=check_all_passive(D, E).
 8493'$enumerate_constraints'(constraints_code1, A) :-
 8494    nb_getval('$chr_store_global_ground_chr_translate____constraints_code1___3',
 8495              B),
 8496    member(C, B),
 8497    C=suspension(_, _, _, D, E, F),
 8498    A=constraints_code1(D, E, F).
 8499'$enumerate_constraints'(memo_has_active_occurrence, A) :-
 8500    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
 8501              B),
 8502    value_ht(B, C),
 8503    C=suspension(_, _, D),
 8504    A=memo_has_active_occurrence(D).
 8505'$enumerate_constraints'(use_auxiliary_predicate, A) :-
 8506    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
 8507              B),
 8508    value_ht(B, C),
 8509    C=suspension(_, _, D),
 8510    A=use_auxiliary_predicate(D).
 8511'$enumerate_constraints'(use_auxiliary_predicate, A) :-
 8512    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
 8513              B),
 8514    value_ht(B, C),
 8515    C=suspension(_, _, D, E),
 8516    A=use_auxiliary_predicate(D, E).
 8517'$enumerate_constraints'(use_auxiliary_module, A) :-
 8518    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
 8519              B),
 8520    value_ht(B, C),
 8521    C=suspension(_, _, D),
 8522    A=use_auxiliary_module(D).
 8523'$enumerate_constraints'(functional_dependency, A) :-
 8524    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
 8525              B),
 8526    value_ht(B, C),
 8527    C=suspension(_, _, D, E, F, G),
 8528    A=functional_dependency(D, E, F, G).
 8529'$enumerate_constraints'(initial_call_pattern, A) :-
 8530    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
 8531              B),
 8532    value_ht(B, C),
 8533    C=suspension(_, _, _, D),
 8534    A=initial_call_pattern(D).
 8535'$enumerate_constraints'(call_pattern, A) :-
 8536    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
 8537              B),
 8538    value_ht(B, C),
 8539    C=suspension(_, _, D),
 8540    A=call_pattern(D).
 8541'$enumerate_constraints'(final_answer_pattern, A) :-
 8542    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
 8543              B),
 8544    value_ht(B, C),
 8545    C=suspension(_, _, _, D, E),
 8546    A=final_answer_pattern(D, E).
 8547'$enumerate_constraints'(abstract_constraints, A) :-
 8548    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
 8549              B),
 8550    member(C, B),
 8551    C=suspension(_, _, _, D),
 8552    A=abstract_constraints(D).
 8553'$enumerate_constraints'(depends_on, A) :-
 8554    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1', B),
 8555    value_ht(B, C),
 8556    C=suspension(_, _, _, D, E),
 8557    A=depends_on(D, E).
 8558'$enumerate_constraints'(depends_on_ap, A) :-
 8559    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
 8560              B),
 8561    value_ht(B, C),
 8562    C=suspension(_, _, _, D, E, F, G),
 8563    A=depends_on_ap(D, E, F, G).
 8564'$enumerate_constraints'(depends_on_goal, A) :-
 8565    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
 8566              B),
 8567    value_ht(B, C),
 8568    C=suspension(_, _, _, D, E),
 8569    A=depends_on_goal(D, E).
 8570'$enumerate_constraints'(ai_observed_internal, A) :-
 8571    nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
 8572              B),
 8573    member(C, B),
 8574    C=suspension(_, _, _, D, E),
 8575    A=ai_observed_internal(D, E).
 8576'$enumerate_constraints'(ai_not_observed_internal, A) :-
 8577    nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
 8578              B),
 8579    member(C, B),
 8580    C=suspension(_, _, _, D, E),
 8581    A=ai_not_observed_internal(D, E).
 8582'$enumerate_constraints'(ai_not_observed, A) :-
 8583    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
 8584              B),
 8585    value_ht(B, C),
 8586    C=suspension(_, _, D, E),
 8587    A=ai_not_observed(D, E).
 8588'$enumerate_constraints'(depends_on_as, A) :-
 8589    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
 8590              B),
 8591    value_ht(B, C),
 8592    C=suspension(_, _, _, D, E, F),
 8593    A=depends_on_as(D, E, F).
 8594'$enumerate_constraints'(ai_observation_gather_results, A) :-
 8595    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
 8596              B),
 8597    member(C, B),
 8598    C=suspension(_, _, _),
 8599    A=ai_observation_gather_results.
 8600'$enumerate_constraints'(ai_observation_memoed_simplification_rest_heads, A) :-
 8601    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
 8602              B),
 8603    value_ht(B, C),
 8604    C=suspension(_, _, D, E, F),
 8605    A=ai_observation_memoed_simplification_rest_heads(D, E, F).
 8606'$enumerate_constraints'(ai_observation_memoed_propagation_rest_heads, A) :-
 8607    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
 8608              B),
 8609    value_ht(B, C),
 8610    C=suspension(_, _, D, E, F),
 8611    A=ai_observation_memoed_propagation_rest_heads(D, E, F).
 8612'$enumerate_constraints'(ai_observation_memoed_abstract_goal, A) :-
 8613    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
 8614              B),
 8615    value_ht(B, C),
 8616    C=suspension(_, _, D, E),
 8617    A=ai_observation_memoed_abstract_goal(D, E).
 8618'$enumerate_constraints'(ai_observation_memo_abstract_goal, A) :-
 8619    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
 8620              B),
 8621    member(C, B),
 8622    C=suspension(_, _, _, D, E),
 8623    A=ai_observation_memo_abstract_goal(D, E).
 8624'$enumerate_constraints'(partial_wake_analysis, A) :-
 8625    nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
 8626              B),
 8627    member(C, B),
 8628    C=suspension(_, _, _, _),
 8629    A=partial_wake_analysis.
 8630'$enumerate_constraints'(no_partial_wake, A) :-
 8631    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
 8632              B),
 8633    value_ht(B, C),
 8634    C=suspension(_, _, D),
 8635    A=no_partial_wake(D).
 8636'$enumerate_constraints'(phase_end, A) :-
 8637    nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1', B),
 8638    value_ht(B, C),
 8639    C=suspension(_, _, D),
 8640    A=phase_end(D).
 8641'$enumerate_constraints'(delay_phase_end, A) :-
 8642    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
 8643              B),
 8644    value_ht(B, C),
 8645    C=suspension(_, _, D, E),
 8646    A=delay_phase_end(D, E).
 8647'$enumerate_constraints'(does_use_history, A) :-
 8648    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
 8649              B),
 8650    value_ht(B, C),
 8651    C=suspension(_, _, D, E),
 8652    A=does_use_history(D, E).
 8653'$enumerate_constraints'(does_use_field, A) :-
 8654    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
 8655              B),
 8656    value_ht(B, C),
 8657    C=suspension(_, _, D, E),
 8658    A=does_use_field(D, E).
 8659'$enumerate_constraints'(uses_state, A) :-
 8660    nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
 8661              B),
 8662    value_ht(B, C),
 8663    C=suspension(_, _, D, E),
 8664    A=uses_state(D, E).
 8665'$enumerate_constraints'(if_used_state, A) :-
 8666    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
 8667              B),
 8668    member(C, B),
 8669    C=suspension(_, _, _, D, E, F, G, H),
 8670    A=if_used_state(D, E, F, G, H).
 8671'$enumerate_constraints'(used_states_known, A) :-
 8672    nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
 8673              B),
 8674    member(C, B),
 8675    C=suspension(_, _, _),
 8676    A=used_states_known.
 8677'$enumerate_constraints'(stored_assertion, A) :-
 8678    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
 8679              B),
 8680    value_ht(B, C),
 8681    C=suspension(_, _, D),
 8682    A=stored_assertion(D).
 8683'$enumerate_constraints'(never_stored_default, A) :-
 8684    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
 8685              B),
 8686    value_ht(B, C),
 8687    C=suspension(_, _, D, E),
 8688    A=never_stored_default(D, E).
 8689'$enumerate_constraints'(never_stored_rules, A) :-
 8690    nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
 8691              B),
 8692    member(C, B),
 8693    C=suspension(_, _, _, D, E),
 8694    A=never_stored_rules(D, E).
 8695'$enumerate_constraints'(continuation_occurrence, A) :-
 8696    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
 8697              B),
 8698    value_ht(B, C),
 8699    C=suspension(_, _, D, E, F),
 8700    A=continuation_occurrence(D, E, F).
 8701'$enumerate_constraints'(skip_to_next_id, A) :-
 8702    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
 8703              B),
 8704    value_ht(B, C),
 8705    C=suspension(_, _, _, D, E),
 8706    A=skip_to_next_id(D, E).
 8707'$enumerate_constraints'(set_occurrence_code_id, A) :-
 8708    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
 8709              B),
 8710    value_ht(B, C),
 8711    C=suspension(_, _, D, E, F),
 8712    A=set_occurrence_code_id(D, E, F).
 8713'$enumerate_constraints'(occurrence_code_id, A) :-
 8714    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
 8715              B),
 8716    value_ht(B, C),
 8717    C=suspension(_, _, D, E, F),
 8718    A=occurrence_code_id(D, E, F).
 8719'$enumerate_constraints'(chr_constants, A) :-
 8720    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
 8721              B),
 8722    member(C, B),
 8723    C=suspension(_, _, _, D),
 8724    A=chr_constants(D).
 8725'$enumerate_constraints'(print_chr_constants, A) :-
 8726    nb_getval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
 8727              B),
 8728    member(C, B),
 8729    C=suspension(_, _, _),
 8730    A=print_chr_constants.
 8731'$via1_multi_hash_source_location___2-1'(A, B) :-
 8732    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 8733              C),
 8734    lookup_ht(C, A, B).
 8735'$via1_multi_hash_indexed_argument___2-1'(A, B) :-
 8736    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 8737              C),
 8738    lookup_ht(C, A, B).
 8739'$via1_multi_hash_indexed_argument___2-12'(A, B) :-
 8740    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 8741              C),
 8742    lookup_ht(C, A, B).
 8743'$via1_multi_hash_constraint_mode___2-1'(A, B) :-
 8744    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 8745              C),
 8746    lookup_ht(C, A, B).
 8747'$via1_multi_hash_store_type___2-1'(A, B) :-
 8748    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', C),
 8749    lookup_ht(C, A, B).
 8750'$via1_multi_hash_actual_store_types___2-1'(A, B) :-
 8751    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
 8752              C),
 8753    lookup_ht(C, A, B).
 8754'$via1_multi_hash_assumed_store_type___2-1'(A, B) :-
 8755    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
 8756              C),
 8757    lookup_ht(C, A, B).
 8758'$via1_multi_hash_validate_store_type_assumption___1-1'(A, B) :-
 8759    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
 8760              C),
 8761    lookup_ht(C, A, B).
 8762'$via1_multi_hash_passive___2-1'(A, B) :-
 8763    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', C),
 8764    lookup_ht(C, A, B).
 8765'$via1_multi_hash_passive___2-12'(A, B) :-
 8766    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', C),
 8767    lookup_ht(C, A, B).
 8768'$via1_multi_hash_occurrence___5-15'(A, B) :-
 8769    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
 8770              C),
 8771    lookup_ht(C, A, B).
 8772'$via1_multi_hash_occurrence___5-125'(A, B) :-
 8773    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
 8774              C),
 8775    lookup_ht(C, A, B).
 8776'$via1_multi_hash_occurrence___5-134'(A, B) :-
 8777    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
 8778              C),
 8779    lookup_ht(C, A, B).
 8780'$via1_multi_hash_occurrence___5-12'(A, B) :-
 8781    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
 8782              C),
 8783    lookup_ht(C, A, B).
 8784'$via1_multi_hash_occurrence___5-3'(A, B) :-
 8785    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', C),
 8786    lookup_ht(C, A, B).
 8787'$via1_multi_hash_occurrence___5-13'(A, B) :-
 8788    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
 8789              C),
 8790    lookup_ht(C, A, B).
 8791'$via1_multi_hash_occurrence___5-34'(A, B) :-
 8792    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
 8793              C),
 8794    lookup_ht(C, A, B).
 8795'$via1_multi_hash_occurrence___5-1'(A, B) :-
 8796    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', C),
 8797    lookup_ht(C, A, B).
 8798'$via1_multi_hash_max_occurrence___2-1'(A, B) :-
 8799    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
 8800              C),
 8801    lookup_ht(C, A, B).
 8802'$via1_multi_hash_allocation_occurrence___2-1'(A, B) :-
 8803    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
 8804              C),
 8805    lookup_ht(C, A, B).
 8806'$via1_multi_hash_allocation_occurrence___2-12'(A, B) :-
 8807    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
 8808              C),
 8809    lookup_ht(C, A, B).
 8810'$via1_multi_hash_rule___2-1'(A, B) :-
 8811    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', C),
 8812    lookup_ht(C, A, B).
 8813'$via1_multi_hash_least_occurrence___2-12'(A, B) :-
 8814    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
 8815              C),
 8816    lookup_ht(C, A, B).
 8817'$via1_multi_hash_least_occurrence___2-1'(A, B) :-
 8818    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
 8819              C),
 8820    lookup_ht(C, A, B).
 8821'$via1_multi_hash_constraint_index___2-2'(A, B) :-
 8822    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
 8823              C),
 8824    lookup_ht(C, A, B).
 8825'$via1_multi_hash_constraint_index___2-1'(A, B) :-
 8826    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
 8827              C),
 8828    lookup_ht(C, A, B).
 8829'$via1_multi_hash_identifier_index___3-12'(A, B) :-
 8830    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
 8831              C),
 8832    lookup_ht(C, A, B).
 8833'$via1_multi_hash_type_indexed_identifier_size___2-1'(A, B) :-
 8834    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
 8835              C),
 8836    lookup_ht(C, A, B).
 8837'$via1_multi_hash_type_indexed_identifier_index___4-123'(A, B) :-
 8838    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
 8839              C),
 8840    lookup_ht(C, A, B).
 8841'$via1_multi_hash_type_indexed_identifier_index___4-23'(A, B) :-
 8842    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
 8843              C),
 8844    lookup_ht(C, A, B).
 8845'$via1_multi_hash_no_history___1-1'(A, B) :-
 8846    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', C),
 8847    lookup_ht(C, A, B).
 8848'$chr_store_constants_chr_translate____history___3___[3]'([], '$chr_store_constants_chr_translate____history___3___[3]___[]').
 8849'$via1_multi_hash_history___3-2'(A, B) :-
 8850    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', C),
 8851    lookup_ht(C, A, B).
 8852'$via1_multi_hash_history___3-1'(A, B) :-
 8853    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', C),
 8854    lookup_ht(C, A, B).
 8855'$via1_multi_hash_indexing_spec___2-1'(A, B) :-
 8856    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
 8857              C),
 8858    lookup_ht(C, A, B).
 8859'$via1_multi_hash_spawns___3-13'(A, B) :-
 8860    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13', C),
 8861    lookup_ht(C, A, B).
 8862'$via1_multi_hash_spawns___3-12'(A, B) :-
 8863    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', C),
 8864    lookup_ht(C, A, B).
 8865'$via1_multi_hash_spawns___3-1'(A, B) :-
 8866    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1', C),
 8867    lookup_ht(C, A, B).
 8868'$via1_multi_hash_spawns___3-3'(A, B) :-
 8869    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', C),
 8870    lookup_ht(C, A, B).
 8871'$via1_multi_hash_spawns___3-123'(A, B) :-
 8872    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', C),
 8873    lookup_ht(C, A, B).
 8874'$via1_multi_hash_spawns_all___2-1'(A, B) :-
 8875    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1', C),
 8876    lookup_ht(C, A, B).
 8877'$via1_multi_hash_spawns_all___2-12'(A, B) :-
 8878    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
 8879              C),
 8880    lookup_ht(C, A, B).
 8881'$via1_multi_hash_spawns_all_triggers___2-1'(A, B) :-
 8882    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
 8883              C),
 8884    lookup_ht(C, A, B).
 8885'$via1_multi_hash_spawns_all_triggers___2-12'(A, B) :-
 8886    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
 8887              C),
 8888    lookup_ht(C, A, B).
 8889'$via1_multi_hash_actual_atomic_multi_hash_keys___3-12'(A, B) :-
 8890    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
 8891              C),
 8892    lookup_ht(C, A, B).
 8893'$via1_multi_hash_actual_atomic_multi_hash_keys___3-1'(A, B) :-
 8894    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
 8895              C),
 8896    lookup_ht(C, A, B).
 8897'$via1_multi_hash_actual_ground_multi_hash_keys___3-12'(A, B) :-
 8898    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
 8899              C),
 8900    lookup_ht(C, A, B).
 8901'$via1_multi_hash_actual_ground_multi_hash_keys___3-1'(A, B) :-
 8902    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
 8903              C),
 8904    lookup_ht(C, A, B).
 8905'$via1_multi_hash_actual_non_ground_multi_hash_key___2-12'(A, B) :-
 8906    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
 8907              C),
 8908    lookup_ht(C, A, B).
 8909'$via1_multi_hash_prolog_global_variable___1-1'(A, B) :-
 8910    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
 8911              C),
 8912    lookup_ht(C, A, B).
 8913'$via1_multi_hash_prev_guard_list___6-1'(A, B) :-
 8914    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
 8915              C),
 8916    lookup_ht(C, A, B).
 8917'$via1_multi_hash_set_all_passive___1-1'(A, B) :-
 8918    nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
 8919              C),
 8920    lookup_ht(C, A, B).
 8921'$via1_multi_hash_make_head_matchings_explicit_memo_table___3-1'(A, B) :-
 8922    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
 8923              C),
 8924    lookup_ht(C, A, B).
 8925'$via1_multi_hash_constraint_type___2-1'(A, B) :-
 8926    nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
 8927              C),
 8928    lookup_ht(C, A, B).
 8929'$via1_multi_hash_ast_static_atomic_builtin_type_check_var___4-1'(A, B) :-
 8930    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
 8931              C),
 8932    lookup_ht(C, A, B).
 8933'$via1_multi_hash_ast_static_atomic_builtin_type_check_var___4-13'(A, B) :-
 8934    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
 8935              C),
 8936    lookup_ht(C, A, B).
 8937'$via1_multi_hash_stored___3-13'(A, B) :-
 8938    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', C),
 8939    lookup_ht(C, A, B).
 8940'$via1_multi_hash_stored___3-123'(A, B) :-
 8941    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', C),
 8942    lookup_ht(C, A, B).
 8943'$via1_multi_hash_stored_complete___3-13'(A, B) :-
 8944    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
 8945              C),
 8946    lookup_ht(C, A, B).
 8947'$via1_multi_hash_stored_complete___3-1'(A, B) :-
 8948    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
 8949              C),
 8950    lookup_ht(C, A, B).
 8951'$via1_multi_hash_check_all_passive___2-12'(A, B) :-
 8952    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
 8953              C),
 8954    lookup_ht(C, A, B).
 8955'$via1_multi_hash_check_all_passive___2-1'(A, B) :-
 8956    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
 8957              C),
 8958    lookup_ht(C, A, B).
 8959'$via1_multi_hash_memo_has_active_occurrence___1-1'(A, B) :-
 8960    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
 8961              C),
 8962    lookup_ht(C, A, B).
 8963'$via1_multi_hash_use_auxiliary_predicate___1-1'(A, B) :-
 8964    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
 8965              C),
 8966    lookup_ht(C, A, B).
 8967'$via1_multi_hash_use_auxiliary_predicate___2-1'(A, B) :-
 8968    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
 8969              C),
 8970    lookup_ht(C, A, B).
 8971'$via1_multi_hash_use_auxiliary_predicate___2-12'(A, B) :-
 8972    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
 8973              C),
 8974    lookup_ht(C, A, B).
 8975'$via1_multi_hash_use_auxiliary_module___1-1'(A, B) :-
 8976    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
 8977              C),
 8978    lookup_ht(C, A, B).
 8979'$via1_multi_hash_functional_dependency___4-1'(A, B) :-
 8980    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
 8981              C),
 8982    lookup_ht(C, A, B).
 8983'$via1_multi_hash_functional_dependency___4-12'(A, B) :-
 8984    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
 8985              C),
 8986    lookup_ht(C, A, B).
 8987'$via1_multi_hash_initial_call_pattern___1-1'(A, B) :-
 8988    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
 8989              C),
 8990    lookup_ht(C, A, B).
 8991'$via1_multi_hash_call_pattern___1-1'(A, B) :-
 8992    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
 8993              C),
 8994    lookup_ht(C, A, B).
 8995'$via1_multi_hash_final_answer_pattern___2-1'(A, B) :-
 8996    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
 8997              C),
 8998    lookup_ht(C, A, B).
 8999'$via1_multi_hash_depends_on___2-1'(A, B) :-
 9000    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1', C),
 9001    lookup_ht(C, A, B).
 9002'$via1_multi_hash_depends_on___2-2'(A, B) :-
 9003    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2', C),
 9004    lookup_ht(C, A, B).
 9005'$via1_multi_hash_depends_on_ap___4-2'(A, B) :-
 9006    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
 9007              C),
 9008    lookup_ht(C, A, B).
 9009'$via1_multi_hash_depends_on_ap___4-3'(A, B) :-
 9010    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
 9011              C),
 9012    lookup_ht(C, A, B).
 9013'$via1_multi_hash_depends_on_goal___2-2'(A, B) :-
 9014    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
 9015              C),
 9016    lookup_ht(C, A, B).
 9017'$via1_multi_hash_ai_observed_internal___2-12'(A, B) :-
 9018    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
 9019              C),
 9020    lookup_ht(C, A, B).
 9021'$via1_multi_hash_ai_not_observed_internal___2-12'(A, B) :-
 9022    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
 9023              C),
 9024    lookup_ht(C, A, B).
 9025'$via1_multi_hash_ai_not_observed___2-12'(A, B) :-
 9026    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
 9027              C),
 9028    lookup_ht(C, A, B).
 9029'$via1_multi_hash_depends_on_as___3-3'(A, B) :-
 9030    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
 9031              C),
 9032    lookup_ht(C, A, B).
 9033'$via1_multi_hash_depends_on_as___3-2'(A, B) :-
 9034    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
 9035              C),
 9036    lookup_ht(C, A, B).
 9037'$via1_multi_hash_ai_observation_memoed_simplification_rest_heads___3-12'(A, B) :-
 9038    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
 9039              C),
 9040    lookup_ht(C, A, B).
 9041'$via1_multi_hash_ai_observation_memoed_propagation_rest_heads___3-12'(A, B) :-
 9042    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
 9043              C),
 9044    lookup_ht(C, A, B).
 9045'$via1_multi_hash_ai_observation_memoed_abstract_goal___2-1'(A, B) :-
 9046    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
 9047              C),
 9048    lookup_ht(C, A, B).
 9049'$via1_multi_hash_no_partial_wake___1-1'(A, B) :-
 9050    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
 9051              C),
 9052    lookup_ht(C, A, B).
 9053'$via1_multi_hash_phase_end___1-1'(A, B) :-
 9054    nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1', C),
 9055    lookup_ht(C, A, B).
 9056'$via1_multi_hash_delay_phase_end___2-1'(A, B) :-
 9057    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
 9058              C),
 9059    lookup_ht(C, A, B).
 9060'$via1_multi_hash_does_use_history___2-1'(A, B) :-
 9061    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
 9062              C),
 9063    lookup_ht(C, A, B).
 9064'$via1_multi_hash_does_use_history___2-12'(A, B) :-
 9065    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
 9066              C),
 9067    lookup_ht(C, A, B).
 9068'$via1_multi_hash_does_use_field___2-12'(A, B) :-
 9069    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
 9070              C),
 9071    lookup_ht(C, A, B).
 9072'$via1_multi_hash_uses_state___2-12'(A, B) :-
 9073    nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
 9074              C),
 9075    lookup_ht(C, A, B).
 9076'$via1_multi_hash_if_used_state___5-12'(A, B) :-
 9077    nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
 9078              C),
 9079    lookup_ht(C, A, B).
 9080'$via1_multi_hash_stored_assertion___1-1'(A, B) :-
 9081    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
 9082              C),
 9083    lookup_ht(C, A, B).
 9084'$via1_multi_hash_never_stored_default___2-1'(A, B) :-
 9085    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
 9086              C),
 9087    lookup_ht(C, A, B).
 9088'$via1_multi_hash_continuation_occurrence___3-12'(A, B) :-
 9089    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
 9090              C),
 9091    lookup_ht(C, A, B).
 9092'$via1_multi_hash_skip_to_next_id___2-12'(A, B) :-
 9093    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
 9094              C),
 9095    lookup_ht(C, A, B).
 9096'$via1_multi_hash_set_occurrence_code_id___3-12'(A, B) :-
 9097    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
 9098              C),
 9099    lookup_ht(C, A, B).
 9100'$via1_multi_hash_occurrence_code_id___3-12'(A, B) :-
 9101    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
 9102              C),
 9103    lookup_ht(C, A, B).
 9104'$chr_initialization' :-
 9105    nb_setval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
 9106              []),
 9107    nb_setval('$chr_store_global_ground_chr_translate____chr_constants___1', []),
 9108    new_ht(A),
 9109    nb_setval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
 9110              A),
 9111    new_ht(B),
 9112    nb_setval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
 9113              B),
 9114    new_ht(C),
 9115    nb_setval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
 9116              C),
 9117    new_ht(D),
 9118    nb_setval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
 9119              D),
 9120    nb_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
 9121              []),
 9122    new_ht(E),
 9123    nb_setval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
 9124              E),
 9125    new_ht(F),
 9126    nb_setval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
 9127              F),
 9128    nb_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
 9129              []),
 9130    new_ht(G),
 9131    nb_setval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
 9132              G),
 9133    nb_setval('$chr_store_global_ground_chr_translate____if_used_state___5', []),
 9134    new_ht(H),
 9135    nb_setval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
 9136              H),
 9137    new_ht(I),
 9138    nb_setval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
 9139              I),
 9140    new_ht(J),
 9141    nb_setval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
 9142              J),
 9143    new_ht(K),
 9144    nb_setval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
 9145              K),
 9146    new_ht(L),
 9147    nb_setval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
 9148              L),
 9149    new_ht(M),
 9150    nb_setval('$chr_store_multi_hash_chr_translate____phase_end___1-1', M),
 9151    new_ht(N),
 9152    nb_setval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
 9153              N),
 9154    nb_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
 9155              []),
 9156    nb_setval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
 9157              []),
 9158    new_ht(O),
 9159    nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
 9160              O),
 9161    new_ht(P),
 9162    nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
 9163              P),
 9164    new_ht(Q),
 9165    nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
 9166              Q),
 9167    nb_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
 9168              []),
 9169    new_ht(R),
 9170    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
 9171              R),
 9172    new_ht(S),
 9173    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
 9174              S),
 9175    new_ht(T),
 9176    nb_setval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
 9177              T),
 9178    new_ht(U),
 9179    nb_setval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
 9180              U),
 9181    nb_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
 9182              []),
 9183    new_ht(V),
 9184    nb_setval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
 9185              V),
 9186    nb_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
 9187              []),
 9188    new_ht(W),
 9189    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
 9190              W),
 9191    new_ht(X),
 9192    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
 9193              X),
 9194    new_ht(Y),
 9195    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
 9196              Y),
 9197    new_ht(Z),
 9198    nb_setval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
 9199              Z),
 9200    new_ht(A1),
 9201    nb_setval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
 9202              A1),
 9203    nb_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
 9204              []),
 9205    new_ht(B1),
 9206    nb_setval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
 9207              B1),
 9208    new_ht(C1),
 9209    nb_setval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
 9210              C1),
 9211    new_ht(D1),
 9212    nb_setval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
 9213              D1),
 9214    new_ht(E1),
 9215    nb_setval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
 9216              E1),
 9217    new_ht(F1),
 9218    nb_setval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
 9219              F1),
 9220    new_ht(G1),
 9221    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
 9222              G1),
 9223    new_ht(H1),
 9224    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
 9225              H1),
 9226    new_ht(I1),
 9227    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
 9228              I1),
 9229    new_ht(J1),
 9230    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
 9231              J1),
 9232    new_ht(K1),
 9233    nb_setval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
 9234              K1),
 9235    nb_setval('$chr_store_global_ground_chr_translate____constraints_code1___3',
 9236              []),
 9237    new_ht(L1),
 9238    nb_setval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
 9239              L1),
 9240    new_ht(M1),
 9241    nb_setval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
 9242              M1),
 9243    new_ht(N1),
 9244    nb_setval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
 9245              N1),
 9246    new_ht(O1),
 9247    nb_setval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
 9248              O1),
 9249    new_ht(P1),
 9250    nb_setval('$chr_store_multi_hash_chr_translate____stored___3-123', P1),
 9251    new_ht(Q1),
 9252    nb_setval('$chr_store_multi_hash_chr_translate____stored___3-13', Q1),
 9253    nb_setval('$chr_store_global_list_chr_translate____atomic_type___1', []),
 9254    nb_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
 9255              []),
 9256    nb_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
 9257              []),
 9258    new_ht(R1),
 9259    nb_setval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
 9260              R1),
 9261    new_ht(S1),
 9262    nb_setval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
 9263              S1),
 9264    nb_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
 9265              []),
 9266    nb_setval('$chr_store_global_ground_chr_translate____static_type_check___2',
 9267              []),
 9268    nb_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9269              []),
 9270    nb_setval('$chr_store_global_list_chr_translate____unalias_type___2', []),
 9271    new_ht(T1),
 9272    nb_setval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
 9273              T1),
 9274    nb_setval('$chr_store_global_ground_chr_translate____constraint_type___2',
 9275              []),
 9276    nb_setval('$chr_store_global_list_chr_translate____type_alias___2', []),
 9277    nb_setval('$chr_store_global_list_chr_translate____type_definition___2', []),
 9278    nb_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
 9279              []),
 9280    new_ht(U1),
 9281    nb_setval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
 9282              U1),
 9283    nb_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
 9284              []),
 9285    new_ht(V1),
 9286    nb_setval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
 9287              V1),
 9288    new_ht(W1),
 9289    nb_setval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
 9290              W1),
 9291    nb_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
 9292              []),
 9293    nb_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
 9294              []),
 9295    nb_setval('$chr_store_global_list_chr_translate____get_bg_info___2', []),
 9296    nb_setval('$chr_store_global_list_chr_translate____background_info___2', []),
 9297    nb_setval('$chr_store_global_ground_chr_translate____background_info___1',
 9298              []),
 9299    new_ht(X1),
 9300    nb_setval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
 9301              X1),
 9302    nb_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
 9303              []),
 9304    nb_setval('$chr_store_global_list_chr_translate____fresh_symbol___2', []),
 9305    nb_setval('$chr_store_global_list_chr_translate____symbol_count___2', []),
 9306    new_ht(Y1),
 9307    nb_setval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
 9308              Y1),
 9309    new_ht(Z1),
 9310    nb_setval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
 9311              Z1),
 9312    new_ht(A2),
 9313    nb_setval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
 9314              A2),
 9315    new_ht(B2),
 9316    nb_setval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
 9317              B2),
 9318    new_ht(C2),
 9319    nb_setval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
 9320              C2),
 9321    nb_setval('$chr_store_global_ground_chr_translate____module_initializer___1',
 9322              []),
 9323    nb_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
 9324              []),
 9325    nb_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
 9326              []),
 9327    nb_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
 9328              []),
 9329    nb_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
 9330              []),
 9331    new_ht(D2),
 9332    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
 9333              D2),
 9334    new_ht(E2),
 9335    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
 9336              E2),
 9337    nb_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
 9338              []),
 9339    new_ht(F2),
 9340    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
 9341              F2),
 9342    new_ht(G2),
 9343    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
 9344              G2),
 9345    new_ht(H2),
 9346    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-123', H2),
 9347    new_ht(I2),
 9348    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-3', I2),
 9349    new_ht(J2),
 9350    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-1', J2),
 9351    new_ht(K2),
 9352    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-12', K2),
 9353    nb_setval('$chr_store_global_ground_chr_translate____spawns___3', []),
 9354    new_ht(L2),
 9355    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-13', L2),
 9356    nb_setval('$chr_store_global_ground_chr_translate____observation_analysis___1',
 9357              []),
 9358    new_ht(M2),
 9359    nb_setval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
 9360              M2),
 9361    new_ht(N2),
 9362    nb_setval('$chr_store_multi_hash_chr_translate____history___3-1', N2),
 9363    new_ht(O2),
 9364    nb_setval('$chr_store_multi_hash_chr_translate____history___3-2', O2),
 9365    nb_setval('$chr_store_constants_chr_translate____history___3___[3]___[]', []),
 9366    new_ht(P2),
 9367    nb_setval('$chr_store_multi_hash_chr_translate____no_history___1-1',
 9368              P2),
 9369    new_ht(Q2),
 9370    nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
 9371              Q2),
 9372    new_ht(R2),
 9373    nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
 9374              R2),
 9375    new_ht(S2),
 9376    nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
 9377              S2),
 9378    new_ht(T2),
 9379    nb_setval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
 9380              T2),
 9381    nb_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
 9382              []),
 9383    nb_setval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
 9384              []),
 9385    new_ht(U2),
 9386    nb_setval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
 9387              U2),
 9388    new_ht(V2),
 9389    nb_setval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
 9390              V2),
 9391    new_ht(W2),
 9392    nb_setval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
 9393              W2),
 9394    new_ht(X2),
 9395    nb_setval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
 9396              X2),
 9397    new_ht(Y2),
 9398    nb_setval('$chr_store_multi_hash_chr_translate____rule___2-1', Y2),
 9399    nb_setval('$chr_store_global_ground_chr_translate____rule___2', []),
 9400    new_ht(Z2),
 9401    nb_setval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
 9402              Z2),
 9403    new_ht(A3),
 9404    nb_setval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
 9405              A3),
 9406    new_ht(B3),
 9407    nb_setval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
 9408              B3),
 9409    new_ht(C3),
 9410    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
 9411              C3),
 9412    new_ht(D3),
 9413    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
 9414              D3),
 9415    new_ht(E3),
 9416    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
 9417              E3),
 9418    new_ht(F3),
 9419    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
 9420              F3),
 9421    new_ht(G3),
 9422    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
 9423              G3),
 9424    new_ht(H3),
 9425    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
 9426              H3),
 9427    new_ht(I3),
 9428    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
 9429              I3),
 9430    nb_setval('$chr_store_global_ground_chr_translate____occurrence___5', []),
 9431    new_ht(J3),
 9432    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
 9433              J3),
 9434    new_ht(K3),
 9435    nb_setval('$chr_store_multi_hash_chr_translate____passive___2-12', K3),
 9436    new_ht(L3),
 9437    nb_setval('$chr_store_multi_hash_chr_translate____passive___2-1', L3),
 9438    nb_setval('$chr_store_global_ground_chr_translate____rule_count___1', []),
 9439    new_ht(M3),
 9440    nb_setval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
 9441              M3),
 9442    new_ht(N3),
 9443    nb_setval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
 9444              N3),
 9445    new_ht(O3),
 9446    nb_setval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
 9447              O3),
 9448    new_ht(P3),
 9449    nb_setval('$chr_store_multi_hash_chr_translate____store_type___2-1',
 9450              P3),
 9451    nb_setval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
 9452              []),
 9453    new_ht(Q3),
 9454    nb_setval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9455              Q3),
 9456    nb_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9457              []),
 9458    new_ht(R3),
 9459    nb_setval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9460              R3),
 9461    new_ht(S3),
 9462    nb_setval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 9463              S3),
 9464    new_ht(T3),
 9465    nb_setval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9466              T3),
 9467    nb_setval('$chr_store_global_ground_chr_translate____target_module___1', []),
 9468    nb_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9469              []).
 9470:- (initialization'$chr_initialization'). 9471:- (dynamic user:exception/3). 9472:- (multifile user:exception/3). 9473user:exception(undefined_global_variable, A, retry) :-
 9474    '$chr_prolog_global_variable'(A),
 9475    '$chr_initialization'.
 9476'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____print_chr_constants___0').
 9477'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____chr_constants___1').
 9478'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12').
 9479'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12').
 9480'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12').
 9481'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12').
 9482'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____never_stored_rules___2').
 9483'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____never_stored_default___2-1').
 9484'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_assertion___1-1').
 9485'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____used_states_known___0').
 9486'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____if_used_state___5-12').
 9487'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____if_used_state___5').
 9488'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____uses_state___2-12').
 9489'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_field___2-12').
 9490'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_history___2-12').
 9491'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_history___2-1').
 9492'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1').
 9493'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____phase_end___1-1').
 9494'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1').
 9495'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____partial_wake_analysis___0').
 9496'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2').
 9497'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1').
 9498'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12').
 9499'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12').
 9500'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0').
 9501'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_as___3-2').
 9502'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_as___3-3').
 9503'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12').
 9504'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12').
 9505'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2').
 9506'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12').
 9507'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observed_internal___2').
 9508'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2').
 9509'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3').
 9510'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2').
 9511'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on___2-2').
 9512'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on___2-1').
 9513'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____abstract_constraints___1').
 9514'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1').
 9515'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____call_pattern___1-1').
 9516'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1').
 9517'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____functional_dependency___4-12').
 9518'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____functional_dependency___4-1').
 9519'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1').
 9520'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12').
 9521'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1').
 9522'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1').
 9523'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1').
 9524'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraints_code1___3').
 9525'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____check_all_passive___2-1').
 9526'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____check_all_passive___2-12').
 9527'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_complete___3-1').
 9528'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_complete___3-13').
 9529'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored___3-123').
 9530'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored___3-13').
 9531'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____atomic_type___1').
 9532'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1').
 9533'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____dynamic_type_check___0').
 9534'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13').
 9535'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1').
 9536'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____ast_static_type_check_var___4').
 9537'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____static_type_check___2').
 9538'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____types_modes_condition___3').
 9539'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____unalias_type___2').
 9540'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_type___2-1').
 9541'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraint_type___2').
 9542'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____type_alias___2').
 9543'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____type_definition___2').
 9544'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1').
 9545'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1').
 9546'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____precompute_head_matchings___0').
 9547'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____set_all_passive___1-1').
 9548'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1').
 9549'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____prev_guard_list___6').
 9550'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____get_bg_info_answer___1').
 9551'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____get_bg_info___2').
 9552'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____background_info___2').
 9553'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____background_info___1').
 9554'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1').
 9555'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____prolog_global_variable___1').
 9556'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____fresh_symbol___2').
 9557'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____symbol_count___2').
 9558'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12').
 9559'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1').
 9560'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12').
 9561'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1').
 9562'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12').
 9563'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____module_initializer___1').
 9564'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____find_empty_named_histories___0').
 9565'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1').
 9566'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2').
 9567'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0').
 9568'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12').
 9569'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1').
 9570'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns_all_triggers___2').
 9571'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all___2-12').
 9572'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all___2-1').
 9573'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-123').
 9574'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-3').
 9575'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-1').
 9576'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-12').
 9577'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns___3').
 9578'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-13').
 9579'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____observation_analysis___1').
 9580'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexing_spec___2-1').
 9581'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____history___3-1').
 9582'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____history___3-2').
 9583'$chr_prolog_global_variable'('$chr_store_constants_chr_translate____history___3___[3]___[]').
 9584'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____no_history___1-1').
 9585'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23').
 9586'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123').
 9587'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1').
 9588'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____identifier_index___3-12').
 9589'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____identifier_size___1').
 9590'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____max_constraint_index___1').
 9591'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_index___2-1').
 9592'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_index___2-2').
 9593'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____least_occurrence___2-1').
 9594'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____least_occurrence___2-12').
 9595'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____rule___2-1').
 9596'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____rule___2').
 9597'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12').
 9598'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1').
 9599'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____max_occurrence___2-1').
 9600'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-1').
 9601'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-34').
 9602'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-13').
 9603'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-3').
 9604'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-12').
 9605'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-134').
 9606'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-125').
 9607'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____occurrence___5').
 9608'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-15').
 9609'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____passive___2-12').
 9610'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____passive___2-1').
 9611'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____rule_count___1').
 9612'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1').
 9613'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1').
 9614'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_store_types___2-1').
 9615'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____store_type___2-1').
 9616'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0').
 9617'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_mode___2-1').
 9618'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraint_mode___2').
 9619'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexed_argument___2-12').
 9620'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexed_argument___2-1').
 9621'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____source_location___2-1').
 9622'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____target_module___1').
 9623'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____chr_source_file___1').
 9624chr_source_file(A) :-
 9625    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9626              B),
 9627    (   member(C, B),
 9628        C=suspension(_, active, _, _),
 9629        !
 9630    ;   !,
 9631        chr_source_file___1__0__0__2(B, A)
 9632    ).
 9633chr_source_file___1__0__0__2([], A) :-
 9634    chr_source_file___1__1(A).
 9635chr_source_file___1__0__0__2([A|B], C) :-
 9636    (   A=suspension(_, active, _, _)
 9637    ->  setarg(2, A, removed),
 9638        arg(3, A, D),
 9639        (   var(D)
 9640        ->  nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9641                      E),
 9642            E=[_|F],
 9643            b_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9644                     F),
 9645            (   F=[G|_]
 9646            ->  setarg(3, G, _)
 9647            ;   true
 9648            )
 9649        ;   D=[_, _|F],
 9650            setarg(2, D, F),
 9651            (   F=[G|_]
 9652            ->  setarg(3, G, D)
 9653            ;   true
 9654            )
 9655        ),
 9656        chr_source_file___1__0__0__2(B, C)
 9657    ;   chr_source_file___1__0__0__2(B, C)
 9658    ).
 9659chr_source_file(A) :-
 9660    chr_source_file___1__1(A).
 9661chr_source_file___1__1(A) :-
 9662    B=suspension(C, active, _, A),
 9663    'chr gen_id'(C),
 9664    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9665              D),
 9666    E=[B|D],
 9667    b_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9668             E),
 9669    (   D=[F|_]
 9670    ->  setarg(3, F, E)
 9671    ;   true
 9672    ).
 9673get_chr_source_file(A) :-
 9674    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9675              B),
 9676    member(C, B),
 9677    C=suspension(_, active, _, D),
 9678    !,
 9679    A=D.
 9680get_chr_source_file(user).
 9681target_module(A) :-
 9682    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9683              B),
 9684    (   member(C, B),
 9685        C=suspension(_, active, _, _),
 9686        !
 9687    ;   !,
 9688        target_module___1__0__0__2(B, A)
 9689    ).
 9690target_module___1__0__0__2([], A) :-
 9691    target_module___1__1(A).
 9692target_module___1__0__0__2([A|B], C) :-
 9693    (   A=suspension(_, active, _, _)
 9694    ->  setarg(2, A, removed),
 9695        arg(3, A, D),
 9696        (   var(D)
 9697        ->  nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9698                      E),
 9699            E=[_|F],
 9700            b_setval('$chr_store_global_ground_chr_translate____target_module___1',
 9701                     F),
 9702            (   F=[G|_]
 9703            ->  setarg(3, G, _)
 9704            ;   true
 9705            )
 9706        ;   D=[_, _|F],
 9707            setarg(2, D, F),
 9708            (   F=[G|_]
 9709            ->  setarg(3, G, D)
 9710            ;   true
 9711            )
 9712        ),
 9713        target_module___1__0__0__2(B, C)
 9714    ;   target_module___1__0__0__2(B, C)
 9715    ).
 9716target_module(A) :-
 9717    target_module___1__1(A).
 9718target_module___1__1(A) :-
 9719    B=suspension(C, active, _, A),
 9720    'chr gen_id'(C),
 9721    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9722              D),
 9723    E=[B|D],
 9724    b_setval('$chr_store_global_ground_chr_translate____target_module___1',
 9725             E),
 9726    (   D=[F|_]
 9727    ->  setarg(3, F, E)
 9728    ;   true
 9729    ).
 9730get_target_module(A) :-
 9731    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9732              B),
 9733    member(C, B),
 9734    C=suspension(_, active, _, D),
 9735    !,
 9736    A=D.
 9737get_target_module(user).
 9738source_location(A, B) :-
 9739    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9740              C),
 9741    lookup_ht(C, A, D),
 9742    (   member(E, D),
 9743        E=suspension(_, active, _, _),
 9744        !
 9745    ;   !,
 9746        source_location___2__0__0__2(D, A, B)
 9747    ).
 9748source_location___2__0__0__2([], A, B) :-
 9749    source_location___2__1(A, B).
 9750source_location___2__0__0__2([A|B], C, D) :-
 9751    (   A=suspension(_, active, E, _),
 9752        E==C
 9753    ->  setarg(2, A, removed),
 9754        nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9755                  F),
 9756        delete_ht(F, C, A),
 9757        source_location___2__0__0__2(B, C, D)
 9758    ;   source_location___2__0__0__2(B, C, D)
 9759    ).
 9760source_location(A, B) :-
 9761    source_location___2__1(A, B).
 9762source_location___2__1(A, B) :-
 9763    C=suspension(D, active, A, B),
 9764    'chr gen_id'(D),
 9765    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9766              E),
 9767    insert_ht(E, A, C).
 9768get_line_number(A, B) :-
 9769    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9770              C),
 9771    lookup_ht(C, A, D),
 9772    member(E, D),
 9773    E=suspension(_, active, _, F),
 9774    !,
 9775    B=F.
 9776get_line_number(_, (?):0).
 9777indexed_argument(A, B) :-
 9778    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9779              C),
 9780    lookup_ht(C, k(A, B), D),
 9781    member(E, D),
 9782    E=suspension(_, active, _, _),
 9783    !.
 9784indexed_argument(A, B) :-
 9785    C=suspension(D, active, A, B),
 9786    'chr gen_id'(D),
 9787    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 9788              E),
 9789    insert_ht(E, A, C),
 9790    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9791              F),
 9792    insert_ht(F, k(A, B), C).
 9793is_indexed_argument(A, B) :-
 9794    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9795              C),
 9796    lookup_ht(C, k(A, B), D),
 9797    member(E, D),
 9798    E=suspension(_, active, _, _),
 9799    !.
 9800is_indexed_argument(_, _) :-
 9801    fail.
 9802constraint_mode(A, B) :-
 9803    constraint_mode___2__0(A, B, _).
 9804constraint_mode___2__0(A, B, C) :-
 9805    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9806              D),
 9807    lookup_ht(D, A, E),
 9808    (   member(F, E),
 9809        F=suspension(_, active, _, _, _, _),
 9810        !
 9811    ;   !,
 9812        constraint_mode___2__0__0__2(E, A, B, C)
 9813    ).
 9814constraint_mode___2__0__0__2([], A, B, C) :-
 9815    constraint_mode___2__1(A, B, C).
 9816constraint_mode___2__0__0__2([A|B], C, D, E) :-
 9817    (   A=suspension(_, active, _, _, F, _),
 9818        F==C
 9819    ->  setarg(2, A, removed),
 9820        ( arg(4, A, G),
 9821          (   var(G)
 9822          ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9823                        H),
 9824              H=[_|I],
 9825              b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9826                       I),
 9827              (   I=[J|_]
 9828              ->  setarg(4, J, _)
 9829              ;   true
 9830              )
 9831          ;   G=[_, _|I],
 9832              setarg(2, G, I),
 9833              (   I=[J|_]
 9834              ->  setarg(4, J, G)
 9835              ;   true
 9836              )
 9837          )
 9838        ),
 9839        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9840                  K),
 9841        delete_ht(K, C, A),
 9842        constraint_mode___2__0__0__2(B, C, D, E)
 9843    ;   constraint_mode___2__0__0__2(B, C, D, E)
 9844    ).
 9845constraint_mode___2__0(A, B, C) :-
 9846    constraint_mode___2__1(A, B, C).
 9847constraint_mode___2__1(A, B, C) :-
 9848    A=D/E,
 9849    nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9850              F),
 9851    !,
 9852    C=suspension(G, not_stored_yet, t, _, A, B),
 9853    'chr gen_id'(G),
 9854    constraint_mode___2__1__0__7(F,
 9855                                 A,
 9856                                 B,
 9857                                 C,
 9858                                 D,
 9859                                 E).
 9860constraint_mode___2__1__0__7([], A, B, C, _, _) :-
 9861    constraint_mode___2__2(A, B, C).
 9862constraint_mode___2__1__0__7([A|B], C, D, E, F, G) :-
 9863    (   A=suspension(_, active, _, H, I, J),
 9864        H=[K|L],
 9865        I=[M|N],
 9866        functor(K, F, G)
 9867    ->  setarg(2, A, removed),
 9868        arg(3, A, O),
 9869        (   var(O)
 9870        ->  nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9871                      P),
 9872            P=[_|Q],
 9873            b_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9874                     Q),
 9875            (   Q=[R|_]
 9876            ->  setarg(3, R, _)
 9877            ;   true
 9878            )
 9879        ;   O=[_, _|Q],
 9880            setarg(2, O, Q),
 9881            (   Q=[R|_]
 9882            ->  setarg(3, R, O)
 9883            ;   true
 9884            )
 9885        ),
 9886        arg(2, E, S),
 9887        setarg(2, E, active),
 9888        (   S==not_stored_yet
 9889        ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9890                      T),
 9891            U=[E|T],
 9892            b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9893                     U),
 9894            (   T=[V|_]
 9895            ->  setarg(4, V, U)
 9896            ;   true
 9897            ),
 9898            nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9899                      W),
 9900            insert_ht(W, C, E)
 9901        ;   true
 9902        ),
 9903        K=..[_|X],
 9904        J=(Y, Z, A1),
 9905        modes_condition(D, X, Y),
 9906        get_constraint_type_det(F/G, B1),
 9907        M=..[_|C1],
 9908        types_condition(B1, X, C1, D, Z),
 9909        types_modes_condition(L, N, A1),
 9910        (   E=suspension(_, active, _, _, _, _)
 9911        ->  setarg(2, E, inactive),
 9912            constraint_mode___2__1__0__7(B,
 9913                                         C,
 9914                                         D,
 9915                                         E,
 9916                                         F,
 9917                                         G)
 9918        ;   true
 9919        )
 9920    ;   constraint_mode___2__1__0__7(B,
 9921                                     C,
 9922                                     D,
 9923                                     E,
 9924                                     F,
 9925                                     G)
 9926    ).
 9927constraint_mode___2__1(A, B, C) :-
 9928    C=suspension(D, not_stored_yet, t, _, A, B),
 9929    'chr gen_id'(D),
 9930    constraint_mode___2__2(A, B, C).
 9931constraint_mode___2__2(A, B, C) :-
 9932    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', D),
 9933    lookup_ht(D, A, E),
 9934    !,
 9935    constraint_mode___2__2__0__8(E, A, B, C).
 9936constraint_mode___2__2__0__8([], A, B, C) :-
 9937    constraint_mode___2__3(A, B, C).
 9938constraint_mode___2__2__0__8([A|B], C, D, E) :-
 9939    (   A=suspension(_, active, _, _, F, _, G, H, I),
 9940        F==C,
 9941        nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
 9942                  J)
 9943    ->  constraint_mode___2__2__1__8(J,
 9944                                     G,
 9945                                     H,
 9946                                     I,
 9947                                     A,
 9948                                     B,
 9949                                     C,
 9950                                     D,
 9951                                     E)
 9952    ;   constraint_mode___2__2__0__8(B, C, D, E)
 9953    ).
 9954constraint_mode___2__2__1__8([], _, _, _, _, A, B, C, D) :-
 9955    constraint_mode___2__2__0__8(A, B, C, D).
 9956constraint_mode___2__2__1__8([A|B], C, D, E, F, G, H, I, J) :-
 9957    (   A=suspension(_, active, _, _),
 9958        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', K),
 9959        lookup_ht(K, C, L)
 9960    ->  constraint_mode___2__2__2__8(L,
 9961                                     A,
 9962                                     B,
 9963                                     C,
 9964                                     D,
 9965                                     E,
 9966                                     F,
 9967                                     G,
 9968                                     H,
 9969                                     I,
 9970                                     J)
 9971    ;   constraint_mode___2__2__1__8(B,
 9972                                     C,
 9973                                     D,
 9974                                     E,
 9975                                     F,
 9976                                     G,
 9977                                     H,
 9978                                     I,
 9979                                     J)
 9980    ).
 9981constraint_mode___2__2__2__8([], _, A, B, C, D, E, F, G, H, I) :-
 9982    constraint_mode___2__2__1__8(A,
 9983                                 B,
 9984                                 C,
 9985                                 D,
 9986                                 E,
 9987                                 F,
 9988                                 G,
 9989                                 H,
 9990                                 I).
 9991constraint_mode___2__2__2__8([A|B], C, D, E, F, G, H, I, J, K, L) :-
 9992    (   A=suspension(_, active, _, _, M, N),
 9993        M==E,
 9994        O=t(330, C, H, A, L),
 9995        '$novel_production'(C, O),
 9996        '$novel_production'(H, O),
 9997        '$novel_production'(A, O),
 9998        '$novel_production'(L, O)
 9999    ->  '$extend_history'(L, O),
10000        arg(2, L, P),
10001        setarg(2, L, active),
10002        (   P==not_stored_yet
10003        ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10004                      Q),
10005            R=[L|Q],
10006            b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10007                     R),
10008            (   Q=[S|_]
10009            ->  setarg(4, S, R)
10010            ;   true
10011            ),
10012            nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10013                      T),
10014            insert_ht(T, J, L)
10015        ;   true
10016        ),
10017        N=pragma(rule(U, V, W, _), _, _, _, _),
10018        (   is_passive(E, F)
10019        ->  true
10020        ;   G==simplification
10021        ->  select(X, U, _),
10022            X=..[_|Y],
10023            term_variables(W, Z),
10024            partial_wake_args(Y, K, Z, J)
10025        ;   select(X, V, _),
10026            X=..[_|Y],
10027            term_variables(W, Z),
10028            partial_wake_args(Y, K, Z, J)
10029        ),
10030        (   L=suspension(_, active, _, _, _, _)
10031        ->  setarg(2, L, inactive),
10032            constraint_mode___2__2__2__8(B,
10033                                         C,
10034                                         D,
10035                                         E,
10036                                         F,
10037                                         G,
10038                                         H,
10039                                         I,
10040                                         J,
10041                                         K,
10042                                         L)
10043        ;   true
10044        )
10045    ;   constraint_mode___2__2__2__8(B,
10046                                     C,
10047                                     D,
10048                                     E,
10049                                     F,
10050                                     G,
10051                                     H,
10052                                     I,
10053                                     J,
10054                                     K,
10055                                     L)
10056    ).
10057constraint_mode___2__2(A, B, C) :-
10058    constraint_mode___2__3(A, B, C).
10059constraint_mode___2__3(A, _, B) :-
10060    arg(2, B, C),
10061    setarg(2, B, active),
10062    (   C==not_stored_yet
10063    ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10064                  D),
10065        E=[B|D],
10066        b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10067                 E),
10068        (   D=[F|_]
10069        ->  setarg(4, F, E)
10070        ;   true
10071        ),
10072        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10073                  G),
10074        insert_ht(G, A, B)
10075    ;   true
10076    ).
10077get_constraint_mode(A, B) :-
10078    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10079              C),
10080    lookup_ht(C, A, D),
10081    member(E, D),
10082    E=suspension(_, active, _, _, _, F),
10083    !,
10084    B=F.
10085get_constraint_mode(_/A, B) :-
10086    replicate(A, ?, B).
10087may_trigger(A) :-
10088    \+ has_active_occurrence(A),
10089    !,
10090    fail.
10091may_trigger(A) :-
10092    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10093              B),
10094    lookup_ht(B, A, C),
10095    member(D, C),
10096    D=suspension(_, active, _, _, _, E),
10097    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
10098              F),
10099    lookup_ht(F, A, G),
10100    member(H, G),
10101    H=suspension(_, active, _, I),
10102    nth1(I, E, J),
10103    J\==(+),
10104    !,
10105    is_stored(A).
10106may_trigger(_) :-
10107    chr_pp_flag(debugable, on).
10108only_ground_indexed_arguments(A) :-
10109    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10110              B),
10111    lookup_ht(B, A, C),
10112    member(D, C),
10113    D=suspension(_, active, _, _, _, E),
10114    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
10115              F),
10116    lookup_ht(F, A, G),
10117    member(H, G),
10118    H=suspension(_, active, _, I),
10119    nth1(I, E, J),
10120    J\==(+),
10121    !,
10122    fail.
10123only_ground_indexed_arguments(_).
10124none_suspended_on_variables :-
10125    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10126              A),
10127    member(B, A),
10128    B=suspension(_, active, _),
10129    !.
10130none_suspended_on_variables :-
10131    A=suspension(B, active, _),
10132    'chr gen_id'(B),
10133    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10134              C),
10135    D=[A|C],
10136    b_setval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10137             D),
10138    (   C=[E|_]
10139    ->  setarg(3, E, D)
10140    ;   true
10141    ).
10142are_none_suspended_on_variables :-
10143    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10144              A),
10145    member(B, A),
10146    B=suspension(_, active, _),
10147    !.
10148are_none_suspended_on_variables :-
10149    fail.
10150store_type(A, B) :-
10151    store_type___2__0(A, B, _).
10152store_type___2__0(A, B, C) :-
10153    chr_pp_flag(verbose, on),
10154    !,
10155    C=suspension(D, active, A, B),
10156    'chr gen_id'(D),
10157    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', E),
10158    insert_ht(E, A, C),
10159    format('The indexes for ~w are:\n', [A]),
10160    format_storetype(B),
10161    (   C=suspension(_, active, _, _)
10162    ->  setarg(2, C, inactive),
10163        store_type___2__1(A, B, C)
10164    ;   true
10165    ).
10166store_type___2__0(A, B, C) :-
10167    C=suspension(D, not_stored_yet, A, B),
10168    'chr gen_id'(D),
10169    store_type___2__1(A, B, C).
10170store_type___2__1(A, _, B) :-
10171    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10172              C),
10173    lookup_ht(C, A, D),
10174    member(E, D),
10175    E=suspension(_, active, _),
10176    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10177              F),
10178    lookup_ht(F, A, G),
10179    member(H, G),
10180    H=suspension(_, active, _, I),
10181    !,
10182    setarg(2, E, removed),
10183    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10184              J),
10185    delete_ht(J, A, E),
10186    setarg(2, H, removed),
10187    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10188              K),
10189    delete_ht(K, A, H),
10190    (   var(B)
10191    ->  true
10192    ;   arg(2, B, L),
10193        setarg(2, B, removed),
10194        (   L==not_stored_yet
10195        ->  true
10196        ;   nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10197                      M),
10198            delete_ht(M, A, B)
10199        )
10200    ),
10201    store_type(A, multi_store(I)).
10202store_type___2__1(A, _, B) :-
10203    arg(2, B, C),
10204    setarg(2, B, active),
10205    (   C==not_stored_yet
10206    ->  nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10207                  D),
10208        insert_ht(D, A, B)
10209    ;   true
10210    ).
10211get_store_type(A, B) :-
10212    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', C),
10213    lookup_ht(C, A, D),
10214    member(E, D),
10215    E=suspension(_, active, _, F),
10216    !,
10217    B=F.
10218get_store_type(A, B) :-
10219    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10220              C),
10221    lookup_ht(C, A, D),
10222    member(E, D),
10223    E=suspension(_, active, _, F),
10224    !,
10225    B=F.
10226get_store_type(_, default).
10227update_store_type(A, B) :-
10228    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10229              C),
10230    lookup_ht(C, A, D),
10231    member(E, D),
10232    E=suspension(_, active, _, F),
10233    (   memberchk(B, F),
10234        !
10235    ;   !,
10236        setarg(2, E, removed),
10237        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10238                  G),
10239        delete_ht(G, A, E),
10240        actual_store_types(A, [B|F])
10241    ).
10242update_store_type(A, B) :-
10243    actual_store_types(A, [B]).
10244actual_store_types(A, B) :-
10245    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10246              C),
10247    lookup_ht(C, A, D),
10248    member(E, D),
10249    E=suspension(_, active, _, F, G),
10250    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10251              H),
10252    lookup_ht(H, A, I),
10253    member(J, I),
10254    J=suspension(_, active, _),
10255    !,
10256    setarg(2, E, removed),
10257    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
10258              K),
10259    delete_ht(K, k(A, F), E),
10260    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10261              L),
10262    delete_ht(L, A, E),
10263    selectchk(multi_hash([F]), B, M),
10264    F=[N],
10265    (   get_constraint_arg_type(A, N, O),
10266        enumerated_atomic_type(O, P)
10267    ->  Q=P,
10268        R=complete
10269    ;   Q=G,
10270        R=incomplete
10271    ),
10272    actual_store_types(A,
10273                       [atomic_constants(F, Q, R)|M]).
10274actual_store_types(A, B) :-
10275    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10276              C),
10277    lookup_ht(C, A, D),
10278    member(E, D),
10279    E=suspension(_, active, _, F, G),
10280    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10281              H),
10282    lookup_ht(H, A, I),
10283    member(J, I),
10284    J=suspension(_, active, _),
10285    !,
10286    setarg(2, E, removed),
10287    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
10288              K),
10289    delete_ht(K, k(A, F), E),
10290    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10291              L),
10292    delete_ht(L, A, E),
10293    (   F=[M],
10294        get_constraint_arg_type(A, M, N),
10295        N=chr_enum(O)
10296    ->  P=complete
10297    ;   O=G,
10298        P=incomplete
10299    ),
10300    selectchk(multi_hash([F]), B, Q),
10301    actual_store_types(A,
10302                       [ground_constants(F, O, P)|Q]).
10303actual_store_types(A, B) :-
10304    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10305              C),
10306    lookup_ht(C, A, D),
10307    member(E, D),
10308    E=suspension(_, active, _),
10309    (   (   memberchk(multi_hash([[F]]), B),
10310            (   get_constraint_type(A, G),
10311                nth1(F, G, H),
10312                enumerated_atomic_type(H, I),
10313                !,
10314                selectchk(multi_hash([[F]]), B, J),
10315                actual_store_types(A,
10316                                   [ atomic_constants([F],
10317                                                      I,
10318                                                      complete)
10319                                   | J
10320                                   ])
10321            ;   get_constraint_arg_type(A, F, K),
10322                K=chr_enum(L),
10323                !,
10324                selectchk(multi_hash([[F]]), B, M),
10325                actual_store_types(A,
10326                                   [ ground_constants([F],
10327                                                      L,
10328                                                      complete)
10329                                   | M
10330                                   ])
10331            )
10332        ;   nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10333                      N),
10334            lookup_ht(N, A, O),
10335            member(P, O),
10336            P=suspension(_, active, _, _),
10337            !,
10338            setarg(2, E, removed),
10339            nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10340                      Q),
10341            delete_ht(Q, A, E),
10342            setarg(2, P, removed),
10343            nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10344                      R),
10345            delete_ht(R, A, P),
10346            (   maplist(partial_store, B)
10347            ->  S=[global_ground|B]
10348            ;   S=B
10349            ),
10350            store_type(A, multi_store(S))
10351        )
10352    ;   nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10353                  T),
10354        lookup_ht(T, A, U),
10355        member(V, U),
10356        V=suspension(_, active, _, _),
10357        !,
10358        setarg(2, E, removed),
10359        nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10360                  W),
10361        delete_ht(W, A, E),
10362        setarg(2, V, removed),
10363        nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10364                  X),
10365        delete_ht(X, A, V),
10366        store_type(A, multi_store(B))
10367    ).
10368actual_store_types(A, B) :-
10369    C=suspension(D, active, A, B),
10370    'chr gen_id'(D),
10371    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10372              E),
10373    insert_ht(E, A, C).
10374assumed_store_type(A, _) :-
10375    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10376              B),
10377    lookup_ht(B, A, C),
10378    member(D, C),
10379    D=suspension(_, active, _),
10380    (   (   nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10381                      E),
10382            lookup_ht(E, A, F),
10383            member(G, F),
10384            G=suspension(_, active, _, H),
10385            !,
10386            setarg(2, D, removed),
10387            nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10388                      I),
10389            delete_ht(I, A, D),
10390            setarg(2, G, removed),
10391            nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10392                      J),
10393            delete_ht(J, A, G),
10394            (   maplist(partial_store, H)
10395            ->  K=[global_ground|H]
10396            ;   K=H
10397            ),
10398            store_type(A, multi_store(K))
10399        ;   chr_pp_flag(debugable, on),
10400            !,
10401            setarg(2, D, removed),
10402            nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10403                      L),
10404            delete_ht(L, A, D),
10405            store_type(A, default)
10406        )
10407    ;   !,
10408        setarg(2, D, removed),
10409        nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10410                  M),
10411        delete_ht(M, A, D),
10412        store_type(A, global_ground)
10413    ).
10414assumed_store_type(A, B) :-
10415    C=suspension(D, active, A, B),
10416    'chr gen_id'(D),
10417    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10418              E),
10419    insert_ht(E, A, C).
10420validate_store_type_assumption(A) :-
10421    validate_store_type_assumption___1__0(A, _).
10422validate_store_type_assumption___1__0(A, B) :-
10423    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10424              C),
10425    lookup_ht(C, A, D),
10426    !,
10427    B=suspension(E, not_stored_yet, A),
10428    'chr gen_id'(E),
10429    validate_store_type_assumption___1__0__0__1(D, A, B).
10430validate_store_type_assumption___1__0__0__1([], A, B) :-
10431    validate_store_type_assumption___1__1(A, B).
10432validate_store_type_assumption___1__0__0__1([A|B], C, D) :-
10433    (   A=suspension(_, active, E, F),
10434        E==C,
10435        ground(C),
10436        nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10437                  G),
10438        lookup_ht(G, C, H),
10439        member(I, H),
10440        I=suspension(_, active, _, J, K)
10441    ->  ( setarg(2, A, removed),
10442          nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10443                    L),
10444          delete_ht(L, C, A)
10445        ),
10446        setarg(2, I, removed),
10447        ( nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
10448                    M),
10449          delete_ht(M, k(C, J), I)
10450        ),
10451        nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10452                  N),
10453        delete_ht(N, C, I),
10454        arg(2, D, O),
10455        setarg(2, D, active),
10456        (   O==not_stored_yet
10457        ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10458                      P),
10459            insert_ht(P, C, D)
10460        ;   true
10461        ),
10462        selectchk(multi_hash([J]), F, Q),
10463        J=[R],
10464        (   get_constraint_arg_type(C, R, S),
10465            enumerated_atomic_type(S, T)
10466        ->  U=T,
10467            V=complete
10468        ;   U=K,
10469            V=incomplete
10470        ),
10471        actual_store_types(C,
10472                           [ atomic_constants(J, U, V)
10473                           | Q
10474                           ]),
10475        (   D=suspension(_, active, _)
10476        ->  setarg(2, D, inactive),
10477            validate_store_type_assumption___1__0__0__1(B,
10478                                                        C,
10479                                                        D)
10480        ;   true
10481        )
10482    ;   validate_store_type_assumption___1__0__0__1(B, C, D)
10483    ).
10484validate_store_type_assumption___1__0(A, B) :-
10485    B=suspension(C, not_stored_yet, A),
10486    'chr gen_id'(C),
10487    validate_store_type_assumption___1__1(A, B).
10488validate_store_type_assumption___1__1(A, B) :-
10489    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10490              C),
10491    lookup_ht(C, A, D),
10492    !,
10493    validate_store_type_assumption___1__1__0__2(D, A, B).
10494validate_store_type_assumption___1__1__0__2([], A, B) :-
10495    validate_store_type_assumption___1__2(A, B).
10496validate_store_type_assumption___1__1__0__2([A|B], C, D) :-
10497    (   A=suspension(_, active, E, F),
10498        E==C,
10499        ground(C),
10500        nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10501                  G),
10502        lookup_ht(G, C, H),
10503        member(I, H),
10504        I=suspension(_, active, _, J, K)
10505    ->  ( setarg(2, A, removed),
10506          nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10507                    L),
10508          delete_ht(L, C, A)
10509        ),
10510        setarg(2, I, removed),
10511        ( nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
10512                    M),
10513          delete_ht(M, k(C, J), I)
10514        ),
10515        nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10516                  N),
10517        delete_ht(N, C, I),
10518        arg(2, D, O),
10519        setarg(2, D, active),
10520        (   O==not_stored_yet
10521        ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10522                      P),
10523            insert_ht(P, C, D)
10524        ;   true
10525        ),
10526        (   J=[Q],
10527            get_constraint_arg_type(C, Q, R),
10528            R=chr_enum(S)
10529        ->  T=complete
10530        ;   S=K,
10531            T=incomplete
10532        ),
10533        selectchk(multi_hash([J]), F, U),
10534        actual_store_types(C,
10535                           [ ground_constants(J, S, T)
10536                           | U
10537                           ]),
10538        (   D=suspension(_, active, _)
10539        ->  setarg(2, D, inactive),
10540            validate_store_type_assumption___1__1__0__2(B,
10541                                                        C,
10542                                                        D)
10543        ;   true
10544        )
10545    ;   validate_store_type_assumption___1__1__0__2(B, C, D)
10546    ).
10547validate_store_type_assumption___1__1(A, B) :-
10548    validate_store_type_assumption___1__2(A, B).
10549validate_store_type_assumption___1__2(A, B) :-
10550    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10551              C),
10552    lookup_ht(C, A, D),
10553    !,
10554    validate_store_type_assumption___1__2__0__3(D, A, B).
10555validate_store_type_assumption___1__2__0__3([], A, B) :-
10556    validate_store_type_assumption___1__3(A, B).
10557validate_store_type_assumption___1__2__0__3([A|B], C, D) :-
10558    (   A=suspension(_, active, E, F),
10559        E==C,
10560        memberchk(multi_hash([[G]]), F),
10561        get_constraint_type(C, H),
10562        nth1(G, H, I),
10563        enumerated_atomic_type(I, J)
10564    ->  setarg(2, A, removed),
10565        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10566                  K),
10567        delete_ht(K, C, A),
10568        arg(2, D, L),
10569        setarg(2, D, active),
10570        (   L==not_stored_yet
10571        ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10572                      M),
10573            insert_ht(M, C, D)
10574        ;   true
10575        ),
10576        selectchk(multi_hash([[G]]), F, N),
10577        actual_store_types(C,
10578                           [ atomic_constants([G], J, complete)
10579                           | N
10580                           ]),
10581        (   D=suspension(_, active, _)
10582        ->  setarg(2, D, inactive),
10583            validate_store_type_assumption___1__2__0__3(B,
10584                                                        C,
10585                                                        D)
10586        ;   true
10587        )
10588    ;   validate_store_type_assumption___1__2__0__3(B, C, D)
10589    ).
10590validate_store_type_assumption___1__2(A, B) :-
10591    validate_store_type_assumption___1__3(A, B).
10592validate_store_type_assumption___1__3(A, B) :-
10593    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10594              C),
10595    lookup_ht(C, A, D),
10596    !,
10597    validate_store_type_assumption___1__3__0__4(D, A, B).
10598validate_store_type_assumption___1__3__0__4([], A, B) :-
10599    validate_store_type_assumption___1__4(A, B).
10600validate_store_type_assumption___1__3__0__4([A|B], C, D) :-
10601    (   A=suspension(_, active, E, F),
10602        E==C,
10603        memberchk(multi_hash([[G]]), F),
10604        get_constraint_arg_type(C, G, H),
10605        H=chr_enum(I)
10606    ->  setarg(2, A, removed),
10607        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10608                  J),
10609        delete_ht(J, C, A),
10610        arg(2, D, K),
10611        setarg(2, D, active),
10612        (   K==not_stored_yet
10613        ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10614                      L),
10615            insert_ht(L, C, D)
10616        ;   true
10617        ),
10618        selectchk(multi_hash([[G]]), F, M),
10619        actual_store_types(C,
10620                           [ ground_constants([G], I, complete)
10621                           | M
10622                           ]),
10623        (   D=suspension(_, active, _)
10624        ->  setarg(2, D, inactive),
10625            validate_store_type_assumption___1__3__0__4(B,
10626                                                        C,
10627                                                        D)
10628        ;   true
10629        )
10630    ;   validate_store_type_assumption___1__3__0__4(B, C, D)
10631    ).
10632validate_store_type_assumption___1__3(A, B) :-
10633    validate_store_type_assumption___1__4(A, B).
10634validate_store_type_assumption___1__4(A, B) :-
10635    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10636              C),
10637    lookup_ht(C, A, D),
10638    member(E, D),
10639    E=suspension(_, active, _, F),
10640    (   nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10641                  G),
10642        lookup_ht(G, A, H),
10643        member(I, H),
10644        I=suspension(_, active, _, _),
10645        !,
10646        setarg(2, E, removed),
10647        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10648                  J),
10649        delete_ht(J, A, E),
10650        setarg(2, I, removed),
10651        nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10652                  K),
10653        delete_ht(K, A, I),
10654        (   var(B)
10655        ->  true
10656        ;   arg(2, B, L),
10657            setarg(2, B, removed),
10658            (   L==not_stored_yet
10659            ->  true
10660            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10661                          M),
10662                delete_ht(M, A, B)
10663            )
10664        ),
10665        (   maplist(partial_store, F)
10666        ->  N=[global_ground|F]
10667        ;   N=F
10668        ),
10669        store_type(A, multi_store(N))
10670    ;   nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10671                  O),
10672        lookup_ht(O, A, P),
10673        member(Q, P),
10674        Q=suspension(_, active, _, _),
10675        !,
10676        setarg(2, E, removed),
10677        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10678                  R),
10679        delete_ht(R, A, E),
10680        setarg(2, Q, removed),
10681        nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10682                  S),
10683        delete_ht(S, A, Q),
10684        (   var(B)
10685        ->  true
10686        ;   arg(2, B, T),
10687            setarg(2, B, removed),
10688            (   T==not_stored_yet
10689            ->  true
10690            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10691                          U),
10692                delete_ht(U, A, B)
10693            )
10694        ),
10695        store_type(A, multi_store(F))
10696    ).
10697validate_store_type_assumption___1__4(A, B) :-
10698    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10699              C),
10700    lookup_ht(C, A, D),
10701    member(E, D),
10702    E=suspension(_, active, _, _),
10703    (   chr_pp_flag(debugable, on),
10704        !,
10705        setarg(2, E, removed),
10706        nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10707                  F),
10708        delete_ht(F, A, E),
10709        (   var(B)
10710        ->  true
10711        ;   arg(2, B, G),
10712            setarg(2, B, removed),
10713            (   G==not_stored_yet
10714            ->  true
10715            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10716                          H),
10717                delete_ht(H, A, B)
10718            )
10719        ),
10720        store_type(A, default)
10721    ;   !,
10722        setarg(2, E, removed),
10723        nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10724                  I),
10725        delete_ht(I, A, E),
10726        (   var(B)
10727        ->  true
10728        ;   arg(2, B, J),
10729            setarg(2, B, removed),
10730            (   J==not_stored_yet
10731            ->  true
10732            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10733                          K),
10734                delete_ht(K, A, B)
10735            )
10736        ),
10737        store_type(A, global_ground)
10738    ).
10739validate_store_type_assumption___1__4(A, B) :-
10740    (   var(B)
10741    ->  true
10742    ;   arg(2, B, C),
10743        setarg(2, B, removed),
10744        (   C==not_stored_yet
10745        ->  true
10746        ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10747                      D),
10748            delete_ht(D, A, B)
10749        )
10750    ).
10751rule_count(A) :-
10752    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10753              B),
10754    (   member(C, B),
10755        C=suspension(_, active, _, _),
10756        !
10757    ;   !,
10758        rule_count___1__0__0__2(B, A)
10759    ).
10760rule_count___1__0__0__2([], A) :-
10761    rule_count___1__1(A).
10762rule_count___1__0__0__2([A|B], C) :-
10763    (   A=suspension(_, active, _, _)
10764    ->  setarg(2, A, removed),
10765        arg(3, A, D),
10766        (   var(D)
10767        ->  nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10768                      E),
10769            E=[_|F],
10770            b_setval('$chr_store_global_ground_chr_translate____rule_count___1',
10771                     F),
10772            (   F=[G|_]
10773            ->  setarg(3, G, _)
10774            ;   true
10775            )
10776        ;   D=[_, _|F],
10777            setarg(2, D, F),
10778            (   F=[G|_]
10779            ->  setarg(3, G, D)
10780            ;   true
10781            )
10782        ),
10783        rule_count___1__0__0__2(B, C)
10784    ;   rule_count___1__0__0__2(B, C)
10785    ).
10786rule_count(A) :-
10787    rule_count___1__1(A).
10788rule_count___1__1(A) :-
10789    B=suspension(C, active, _, A),
10790    'chr gen_id'(C),
10791    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10792              D),
10793    E=[B|D],
10794    b_setval('$chr_store_global_ground_chr_translate____rule_count___1', E),
10795    (   D=[F|_]
10796    ->  setarg(3, F, E)
10797    ;   true
10798    ).
10799inc_rule_count(A) :-
10800    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10801              B),
10802    member(C, B),
10803    C=suspension(_, active, _, D),
10804    !,
10805    setarg(2, C, removed),
10806    arg(3, C, E),
10807    (   var(E)
10808    ->  nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10809                  F),
10810        F=[_|G],
10811        b_setval('$chr_store_global_ground_chr_translate____rule_count___1',
10812                 G),
10813        (   G=[H|_]
10814        ->  setarg(3, H, _)
10815        ;   true
10816        )
10817    ;   E=[_, _|G],
10818        setarg(2, E, G),
10819        (   G=[H|_]
10820        ->  setarg(3, H, E)
10821        ;   true
10822        )
10823    ),
10824    A is D+1,
10825    rule_count(A).
10826inc_rule_count(1) :-
10827    rule_count(1).
10828passive(A, B) :-
10829    passive___2__0(A, B, _).
10830passive___2__0(A, B, _) :-
10831    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', C),
10832    lookup_ht(C, k(A, B), D),
10833    member(E, D),
10834    E=suspension(_, active, _, _, _),
10835    !.
10836passive___2__0(A, B, C) :-
10837    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
10838              D),
10839    lookup_ht(D, A, E),
10840    !,
10841    C=suspension(F, not_stored_yet, t, A, B),
10842    'chr gen_id'(F),
10843    passive___2__0__0__6(E, A, B, C).
10844passive___2__0__0__6([], A, B, C) :-
10845    passive___2__1(A, B, C).
10846passive___2__0__0__6([A|B], C, D, E) :-
10847    (   A=suspension(_, active, F, G),
10848        F==C,
10849        G=[H|I],
10850        H==D,
10851        ground(C),
10852        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', J),
10853        lookup_ht(J, C, K),
10854        member(L, K),
10855        L=suspension(_, active, _, _, _, _)
10856    ->  setarg(2, A, removed),
10857        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
10858                    M),
10859          delete_ht(M, k(C, [D|I]), A)
10860        ),
10861        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
10862                  N),
10863        delete_ht(N, C, A),
10864        arg(2, E, O),
10865        setarg(2, E, active),
10866        (   O==not_stored_yet
10867        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
10868                      P),
10869            insert_ht(P, C, E),
10870            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
10871                      Q),
10872            insert_ht(Q, k(C, D), E)
10873        ;   true
10874        ),
10875        least_occurrence(C, I),
10876        (   E=suspension(_, active, _, _, _)
10877        ->  setarg(2, E, inactive),
10878            passive___2__0__0__6(B, C, D, E)
10879        ;   true
10880        )
10881    ;   passive___2__0__0__6(B, C, D, E)
10882    ).
10883passive___2__0(A, B, C) :-
10884    C=suspension(D, not_stored_yet, t, A, B),
10885    'chr gen_id'(D),
10886    passive___2__1(A, B, C).
10887passive___2__1(A, B, C) :-
10888    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
10889              D),
10890    lookup_ht(D, k(A, B), E),
10891    !,
10892    passive___2__1__0__8(E, A, B, C).
10893passive___2__1__0__8([], A, B, C) :-
10894    passive___2__2(A, B, C).
10895passive___2__1__0__8([A|B], C, D, E) :-
10896    (   A=suspension(_, active, _, _, F, G, H, I, _),
10897        H==C,
10898        I==D,
10899        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
10900                  J),
10901        lookup_ht(J, F, K)
10902    ->  passive___2__1__1__8(K,
10903                             F,
10904                             G,
10905                             A,
10906                             B,
10907                             C,
10908                             D,
10909                             E)
10910    ;   passive___2__1__0__8(B, C, D, E)
10911    ).
10912passive___2__1__1__8([], _, _, _, A, B, C, D) :-
10913    passive___2__1__0__8(A, B, C, D).
10914passive___2__1__1__8([A|B], C, D, E, F, G, H, I) :-
10915    (   A=suspension(_, active, _, J, K, L),
10916        J==C,
10917        D<K,
10918        ( ground(C),
10919          ground(D)
10920        ),
10921        nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
10922                  M),
10923        lookup_ht(M, k(C, D, yes), N),
10924        member(O, N),
10925        O=suspension(_, active, _, _, _)
10926    ->  ( setarg(2, A, removed),
10927          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
10928                    P),
10929          delete_ht(P, k(C, L), A),
10930          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
10931                    Q),
10932          delete_ht(Q, C, A)
10933        ),
10934        setarg(2, O, removed),
10935        ( nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13',
10936                    R),
10937          delete_ht(R, k(C, yes), O)
10938        ),
10939        nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
10940                  S),
10941        delete_ht(S, k(C, D, yes), O),
10942        arg(2, I, T),
10943        setarg(2, I, active),
10944        (   T==not_stored_yet
10945        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
10946                      U),
10947            insert_ht(U, G, I),
10948            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
10949                      V),
10950            insert_ht(V, k(G, H), I)
10951        ;   true
10952        ),
10953        W is L-1,
10954        stored(C, D, maybe),
10955        stored_complete(C, K, W),
10956        (   I=suspension(_, active, _, _, _)
10957        ->  setarg(2, I, inactive),
10958            passive___2__1__1__8(B,
10959                                 C,
10960                                 D,
10961                                 E,
10962                                 F,
10963                                 G,
10964                                 H,
10965                                 I)
10966        ;   true
10967        )
10968    ;   passive___2__1__1__8(B,
10969                             C,
10970                             D,
10971                             E,
10972                             F,
10973                             G,
10974                             H,
10975                             I)
10976    ).
10977passive___2__1(A, B, C) :-
10978    passive___2__2(A, B, C).
10979passive___2__2(A, B, C) :-
10980    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', D),
10981    lookup_ht(D, A, E),
10982    !,
10983    passive___2__2__0__9(E, A, B, C).
10984passive___2__2__0__9([], A, B, C) :-
10985    passive___2__3(A, B, C).
10986passive___2__2__0__9([A|B], C, D, E) :-
10987    (   A=suspension(_, active, _, _, F, G),
10988        F==C,
10989        H=t(251, A, E),
10990        '$novel_production'(A, H),
10991        '$novel_production'(E, H),
10992        G=pragma(rule(_, _, _, _), ids([D|I], J), _, _, C)
10993    ->  '$extend_history'(E, H),
10994        arg(2, E, K),
10995        setarg(2, E, active),
10996        (   K==not_stored_yet
10997        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
10998                      L),
10999            insert_ht(L, C, E),
11000            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11001                      M),
11002            insert_ht(M, k(C, D), E)
11003        ;   true
11004        ),
11005        append(I, J, N),
11006        check_all_passive(C, N),
11007        (   E=suspension(_, active, _, _, _)
11008        ->  setarg(2, E, inactive),
11009            passive___2__2__0__9(B, C, D, E)
11010        ;   true
11011        )
11012    ;   passive___2__2__0__9(B, C, D, E)
11013    ).
11014passive___2__2(A, B, C) :-
11015    passive___2__3(A, B, C).
11016passive___2__3(A, B, C) :-
11017    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', D),
11018    lookup_ht(D, A, E),
11019    !,
11020    passive___2__3__0__10(E, A, B, C).
11021passive___2__3__0__10([], A, B, C) :-
11022    passive___2__4(A, B, C).
11023passive___2__3__0__10([A|B], C, D, E) :-
11024    (   A=suspension(_, active, _, _, F, G),
11025        F==C,
11026        H=t(252, A, E),
11027        '$novel_production'(A, H),
11028        '$novel_production'(E, H),
11029        G=pragma(rule(_, _, _, _), ids([], [D|I]), _, _, C)
11030    ->  '$extend_history'(E, H),
11031        arg(2, E, J),
11032        setarg(2, E, active),
11033        (   J==not_stored_yet
11034        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11035                      K),
11036            insert_ht(K, C, E),
11037            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11038                      L),
11039            insert_ht(L, k(C, D), E)
11040        ;   true
11041        ),
11042        check_all_passive(C, I),
11043        (   E=suspension(_, active, _, _, _)
11044        ->  setarg(2, E, inactive),
11045            passive___2__3__0__10(B, C, D, E)
11046        ;   true
11047        )
11048    ;   passive___2__3__0__10(B, C, D, E)
11049    ).
11050passive___2__3(A, B, C) :-
11051    passive___2__4(A, B, C).
11052passive___2__4(A, B, C) :-
11053    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
11054              D),
11055    lookup_ht(D, A, E),
11056    !,
11057    passive___2__4__0__11(E, A, B, C).
11058passive___2__4__0__11([], A, B, C) :-
11059    passive___2__5(A, B, C).
11060passive___2__4__0__11([A|B], C, D, E) :-
11061    (   A=suspension(_, active, F, G),
11062        F==C,
11063        G=[H|I],
11064        H==D
11065    ->  setarg(2, A, removed),
11066        ( nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
11067                    J),
11068          delete_ht(J, k(C, [D|I]), A)
11069        ),
11070        nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
11071                  K),
11072        delete_ht(K, C, A),
11073        arg(2, E, L),
11074        setarg(2, E, active),
11075        (   L==not_stored_yet
11076        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11077                      M),
11078            insert_ht(M, C, E),
11079            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11080                      N),
11081            insert_ht(N, k(C, D), E)
11082        ;   true
11083        ),
11084        check_all_passive(C, I),
11085        (   E=suspension(_, active, _, _, _)
11086        ->  setarg(2, E, inactive),
11087            passive___2__4__0__11(B, C, D, E)
11088        ;   true
11089        )
11090    ;   passive___2__4__0__11(B, C, D, E)
11091    ).
11092passive___2__4(A, B, C) :-
11093    passive___2__5(A, B, C).
11094passive___2__5(A, B, C) :-
11095    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11096              D),
11097    lookup_ht(D, k(A, B), E),
11098    !,
11099    passive___2__5__0__14(E, A, B, C).
11100passive___2__5__0__14([], A, B, C) :-
11101    passive___2__6(A, B, C).
11102passive___2__5__0__14([A|B], C, D, E) :-
11103    (   A=suspension(_, active, _, _, F, G, H, I, _),
11104        H==C,
11105        I==D,
11106        nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
11107                  J),
11108        lookup_ht(J, k(F, G), K)
11109    ->  passive___2__5__1__14(K,
11110                              F,
11111                              G,
11112                              A,
11113                              B,
11114                              C,
11115                              D,
11116                              E)
11117    ;   passive___2__5__0__14(B, C, D, E)
11118    ).
11119passive___2__5__1__14([], _, _, _, A, B, C, D) :-
11120    passive___2__5__0__14(A, B, C, D).
11121passive___2__5__1__14([A|B], C, D, E, F, G, H, I) :-
11122    (   A=suspension(_, active, _, J, K),
11123        J==C,
11124        K==D,
11125        L=t(362, E, I, A),
11126        '$novel_production'(E, L),
11127        '$novel_production'(I, L),
11128        '$novel_production'(A, L),
11129        D>1
11130    ->  '$extend_history'(I, L),
11131        arg(2, I, M),
11132        setarg(2, I, active),
11133        (   M==not_stored_yet
11134        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11135                      N),
11136            insert_ht(N, G, I),
11137            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11138                      O),
11139            insert_ht(O, k(G, H), I)
11140        ;   true
11141        ),
11142        P is D-1,
11143        skip_to_next_id(C, P),
11144        (   I=suspension(_, active, _, _, _)
11145        ->  setarg(2, I, inactive),
11146            passive___2__5__1__14(B,
11147                                  C,
11148                                  D,
11149                                  E,
11150                                  F,
11151                                  G,
11152                                  H,
11153                                  I)
11154        ;   true
11155        )
11156    ;   passive___2__5__1__14(B,
11157                              C,
11158                              D,
11159                              E,
11160                              F,
11161                              G,
11162                              H,
11163                              I)
11164    ).
11165passive___2__5(A, B, C) :-
11166    passive___2__6(A, B, C).
11167passive___2__6(A, B, C) :-
11168    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11169              D),
11170    lookup_ht(D, k(A, B), E),
11171    !,
11172    passive___2__6__0__15(E, A, B, C).
11173passive___2__6__0__15([], A, B, C) :-
11174    passive___2__7(A, B, C).
11175passive___2__6__0__15([A|B], C, D, E) :-
11176    (   A=suspension(_, active, _, _, F, G, H, I, _),
11177        H==C,
11178        I==D,
11179        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
11180                  J),
11181        lookup_ht(J, k(F, G), K)
11182    ->  passive___2__6__1__15(K,
11183                              F,
11184                              G,
11185                              A,
11186                              B,
11187                              C,
11188                              D,
11189                              E)
11190    ;   passive___2__6__0__15(B, C, D, E)
11191    ).
11192passive___2__6__1__15([], _, _, _, A, B, C, D) :-
11193    passive___2__6__0__15(A, B, C, D).
11194passive___2__6__1__15([A|B], C, D, E, F, G, H, I) :-
11195    (   A=suspension(_, active, J, K, L),
11196        J==C,
11197        K==D
11198    ->  setarg(2, A, removed),
11199        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
11200                  M),
11201        delete_ht(M, k(C, D), A),
11202        arg(2, I, N),
11203        setarg(2, I, active),
11204        (   N==not_stored_yet
11205        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11206                      O),
11207            insert_ht(O, G, I),
11208            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11209                      P),
11210            insert_ht(P, k(G, H), I)
11211        ;   true
11212        ),
11213        occurrence_code_id(C, D, L),
11214        Q is D+1,
11215        set_occurrence_code_id(C, Q, L),
11216        (   I=suspension(_, active, _, _, _)
11217        ->  setarg(2, I, inactive),
11218            passive___2__6__1__15(B,
11219                                  C,
11220                                  D,
11221                                  E,
11222                                  F,
11223                                  G,
11224                                  H,
11225                                  I)
11226        ;   true
11227        )
11228    ;   passive___2__6__1__15(B,
11229                              C,
11230                              D,
11231                              E,
11232                              F,
11233                              G,
11234                              H,
11235                              I)
11236    ).
11237passive___2__6(A, B, C) :-
11238    passive___2__7(A, B, C).
11239passive___2__7(A, B, C) :-
11240    arg(2, C, D),
11241    setarg(2, C, active),
11242    (   D==not_stored_yet
11243    ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11244                  E),
11245        insert_ht(E, A, C),
11246        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11247                  F),
11248        insert_ht(F, k(A, B), C)
11249    ;   true
11250    ).
11251is_passive(A, B) :-
11252    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', C),
11253    lookup_ht(C, k(A, B), D),
11254    member(E, D),
11255    E=suspension(_, active, _, _, _),
11256    !.
11257is_passive(_, _) :-
11258    fail.
11259any_passive_head(A) :-
11260    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', B),
11261    lookup_ht(B, A, C),
11262    member(D, C),
11263    D=suspension(_, active, _, _, _),
11264    !.
11265any_passive_head(_) :-
11266    fail.
11267new_occurrence(A, B, C, D) :-
11268    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
11269              E),
11270    lookup_ht(E, A, F),
11271    member(G, F),
11272    G=suspension(_, active, _, _, H),
11273    !,
11274    setarg(2, G, removed),
11275    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
11276              I),
11277    delete_ht(I, A, G),
11278    J is H+1,
11279    occurrence(A, J, B, C, D),
11280    max_occurrence(A, J).
11281new_occurrence(A, B, _, _) :-
11282    chr_error(internal,
11283              'new_occurrence: missing max_occurrence for ~w in rule ~w\n',
11284              [A, B]).
11285occurrence(A, B, C, D, E) :-
11286    occurrence___5__0(A, B, C, D, E, _).
11287occurrence___5__0(A, B, C, D, E, F) :-
11288    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
11289    lookup_ht(G, C, H),
11290    !,
11291    F=suspension(I, not_stored_yet, t, _, A, B, C, D, E),
11292    'chr gen_id'(I),
11293    occurrence___5__0__0__4(H,
11294                            A,
11295                            B,
11296                            C,
11297                            D,
11298                            E,
11299                            F).
11300occurrence___5__0__0__4([], A, B, C, D, E, F) :-
11301    occurrence___5__1(A, B, C, D, E, F).
11302occurrence___5__0__0__4([A|B], C, D, E, F, G, H) :-
11303    (   A=suspension(_, active, _, _, I, J),
11304        I==E,
11305        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
11306                  K),
11307        lookup_ht(K, k(C, D), L)
11308    ->  occurrence___5__0__1__4(L,
11309                                J,
11310                                A,
11311                                B,
11312                                C,
11313                                D,
11314                                E,
11315                                F,
11316                                G,
11317                                H)
11318    ;   occurrence___5__0__0__4(B,
11319                                C,
11320                                D,
11321                                E,
11322                                F,
11323                                G,
11324                                H)
11325    ).
11326occurrence___5__0__1__4([], _, _, A, B, C, D, E, F, G) :-
11327    occurrence___5__0__0__4(A,
11328                            B,
11329                            C,
11330                            D,
11331                            E,
11332                            F,
11333                            G).
11334occurrence___5__0__1__4([A|B], C, D, E, F, G, H, I, J, K) :-
11335    (   A=suspension(_, active, _, L, M),
11336        L==F,
11337        M==G,
11338        N=t(60, D, K, A),
11339        '$novel_production'(D, N),
11340        '$novel_production'(K, N),
11341        '$novel_production'(A, N)
11342    ->  '$extend_history'(K, N),
11343        arg(2, K, O),
11344        setarg(2, K, active),
11345        (   O==not_stored_yet
11346        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11347                      P),
11348            insert_ht(P, k(F, J), K),
11349            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11350                      Q),
11351            R=[K|Q],
11352            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11353                     R),
11354            (   Q=[S|_]
11355            ->  setarg(4, S, R)
11356            ;   true
11357            ),
11358            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11359                      T),
11360            insert_ht(T, k(F, G, J), K),
11361            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11362                      U),
11363            insert_ht(U, k(F, H, I), K),
11364            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11365                      V),
11366            insert_ht(V, k(F, G), K),
11367            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11368                      W),
11369            insert_ht(W, H, K),
11370            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11371                      X),
11372            insert_ht(X, k(F, H), K),
11373            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11374                      Y),
11375            insert_ht(Y, k(H, I), K),
11376            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11377                      Z),
11378            insert_ht(Z, F, K)
11379        ;   true
11380        ),
11381        \+ is_passive(H, I),
11382        J==propagation,
11383        (   stored_in_guard_before_next_kept_occurrence(F, G)
11384        ->  true
11385        ;   C=pragma(rule([_|_], _, _, _), _, _, _, _)
11386        ->  is_observed(F, G)
11387        ;   is_least_occurrence(H)
11388        ->  is_observed(F, G)
11389        ;   true
11390        ),
11391        (   K=suspension(_, active, _, _, _, _, _, _, _)
11392        ->  setarg(2, K, inactive),
11393            occurrence___5__0__1__4(B,
11394                                    C,
11395                                    D,
11396                                    E,
11397                                    F,
11398                                    G,
11399                                    H,
11400                                    I,
11401                                    J,
11402                                    K)
11403        ;   true
11404        )
11405    ;   occurrence___5__0__1__4(B,
11406                                C,
11407                                D,
11408                                E,
11409                                F,
11410                                G,
11411                                H,
11412                                I,
11413                                J,
11414                                K)
11415    ).
11416occurrence___5__0(A, B, C, D, E, F) :-
11417    F=suspension(G, not_stored_yet, t, _, A, B, C, D, E),
11418    'chr gen_id'(G),
11419    occurrence___5__1(A, B, C, D, E, F).
11420occurrence___5__1(A, B, C, D, E, F) :-
11421    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
11422              G),
11423    lookup_ht(G, C, H),
11424    !,
11425    occurrence___5__1__0__7(H,
11426                            A,
11427                            B,
11428                            C,
11429                            D,
11430                            E,
11431                            F).
11432occurrence___5__1__0__7([], A, B, C, D, E, F) :-
11433    occurrence___5__2(A, B, C, D, E, F).
11434occurrence___5__1__0__7([A|B], C, D, E, F, G, H) :-
11435    (   A=suspension(_, active, I, J),
11436        I==E,
11437        J=[K|L],
11438        K==F,
11439        ( ground(C),
11440          nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
11441                    M),
11442          lookup_ht(M, C, N)
11443        ),
11444        member(O, N),
11445        O=suspension(_, active, _, _, P),
11446        P>=D,
11447        ( ground(E),
11448          nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
11449                    Q),
11450          lookup_ht(Q, E, R)
11451        ),
11452        member(S, R),
11453        S=suspension(_, active, _, _, _, _),
11454        \+ may_trigger(C)
11455    ->  setarg(2, A, removed),
11456        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
11457                    T),
11458          delete_ht(T, k(E, [F|L]), A)
11459        ),
11460        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
11461                  U),
11462        delete_ht(U, E, A),
11463        arg(2, H, V),
11464        setarg(2, H, active),
11465        (   V==not_stored_yet
11466        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11467                      W),
11468            insert_ht(W, k(C, G), H),
11469            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11470                      X),
11471            Y=[H|X],
11472            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11473                     Y),
11474            (   X=[Z|_]
11475            ->  setarg(4, Z, Y)
11476            ;   true
11477            ),
11478            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11479                      A1),
11480            insert_ht(A1, k(C, D, G), H),
11481            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11482                      B1),
11483            insert_ht(B1, k(C, E, F), H),
11484            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11485                      C1),
11486            insert_ht(C1, k(C, D), H),
11487            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11488                      D1),
11489            insert_ht(D1, E, H),
11490            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11491                      E1),
11492            insert_ht(E1, k(C, E), H),
11493            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11494                      F1),
11495            insert_ht(F1, k(E, F), H),
11496            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11497                      G1),
11498            insert_ht(G1, C, H)
11499        ;   true
11500        ),
11501        least_occurrence(E, L),
11502        (   H=suspension(_, active, _, _, _, _, _, _, _)
11503        ->  setarg(2, H, inactive),
11504            occurrence___5__1__0__7(B,
11505                                    C,
11506                                    D,
11507                                    E,
11508                                    F,
11509                                    G,
11510                                    H)
11511        ;   true
11512        )
11513    ;   occurrence___5__1__0__7(B,
11514                                C,
11515                                D,
11516                                E,
11517                                F,
11518                                G,
11519                                H)
11520    ).
11521occurrence___5__1(A, B, C, D, E, F) :-
11522    occurrence___5__2(A, B, C, D, E, F).
11523occurrence___5__2(A, B, C, D, E, F) :-
11524    nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
11525              G),
11526    lookup_ht(G, C, H),
11527    !,
11528    occurrence___5__2__0__29(H,
11529                             A,
11530                             B,
11531                             C,
11532                             D,
11533                             E,
11534                             F).
11535occurrence___5__2__0__29([], A, B, C, D, E, F) :-
11536    occurrence___5__3(A, B, C, D, E, F).
11537occurrence___5__2__0__29([A|B], C, D, E, F, G, H) :-
11538    (   A=suspension(_, active, _, I),
11539        I==E,
11540        J=t(180, A, H),
11541        '$novel_production'(A, J),
11542        '$novel_production'(H, J)
11543    ->  '$extend_history'(H, J),
11544        arg(2, H, K),
11545        setarg(2, H, active),
11546        (   K==not_stored_yet
11547        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11548                      L),
11549            insert_ht(L, k(C, G), H),
11550            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11551                      M),
11552            N=[H|M],
11553            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11554                     N),
11555            (   M=[O|_]
11556            ->  setarg(4, O, N)
11557            ;   true
11558            ),
11559            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11560                      P),
11561            insert_ht(P, k(C, D, G), H),
11562            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11563                      Q),
11564            insert_ht(Q, k(C, E, F), H),
11565            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11566                      R),
11567            insert_ht(R, k(C, D), H),
11568            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11569                      S),
11570            insert_ht(S, E, H),
11571            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11572                      T),
11573            insert_ht(T, k(C, E), H),
11574            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11575                      U),
11576            insert_ht(U, k(E, F), H),
11577            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11578                      V),
11579            insert_ht(V, C, H)
11580        ;   true
11581        ),
11582        passive(E, F),
11583        (   H=suspension(_, active, _, _, _, _, _, _, _)
11584        ->  setarg(2, H, inactive),
11585            occurrence___5__2__0__29(B,
11586                                     C,
11587                                     D,
11588                                     E,
11589                                     F,
11590                                     G,
11591                                     H)
11592        ;   true
11593        )
11594    ;   occurrence___5__2__0__29(B,
11595                                 C,
11596                                 D,
11597                                 E,
11598                                 F,
11599                                 G,
11600                                 H)
11601    ).
11602occurrence___5__2(A, B, C, D, E, F) :-
11603    occurrence___5__3(A, B, C, D, E, F).
11604occurrence___5__3(A, B, C, D, E, F) :-
11605    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
11606    lookup_ht(G, C, H),
11607    !,
11608    occurrence___5__3__0__30(H,
11609                             A,
11610                             B,
11611                             C,
11612                             D,
11613                             E,
11614                             F).
11615occurrence___5__3__0__30([], A, B, C, D, E, F) :-
11616    occurrence___5__4(A, B, C, D, E, F).
11617occurrence___5__3__0__30([A|B], C, D, E, F, G, H) :-
11618    (   A=suspension(_, active, _, _, I, J),
11619        I==E,
11620        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11621                  K),
11622        lookup_ht(K, k(C, E), L)
11623    ->  occurrence___5__3__1__30(L,
11624                                 J,
11625                                 A,
11626                                 B,
11627                                 C,
11628                                 D,
11629                                 E,
11630                                 F,
11631                                 G,
11632                                 H)
11633    ;   occurrence___5__3__0__30(B,
11634                                 C,
11635                                 D,
11636                                 E,
11637                                 F,
11638                                 G,
11639                                 H)
11640    ).
11641occurrence___5__3__1__30([], _, _, A, B, C, D, E, F, G) :-
11642    occurrence___5__3__0__30(A,
11643                             B,
11644                             C,
11645                             D,
11646                             E,
11647                             F,
11648                             G).
11649occurrence___5__3__1__30([A|B], C, D, E, F, G, H, I, J, K) :-
11650    (   A=suspension(_, active, _, _, L, M, N, _, _),
11651        L==F,
11652        N==H,
11653        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
11654                  O),
11655        lookup_ht(O, H, P)
11656    ->  occurrence___5__3__2__30(P,
11657                                 M,
11658                                 A,
11659                                 B,
11660                                 C,
11661                                 D,
11662                                 E,
11663                                 F,
11664                                 G,
11665                                 H,
11666                                 I,
11667                                 J,
11668                                 K)
11669    ;   occurrence___5__3__1__30(B,
11670                                 C,
11671                                 D,
11672                                 E,
11673                                 F,
11674                                 G,
11675                                 H,
11676                                 I,
11677                                 J,
11678                                 K)
11679    ).
11680occurrence___5__3__2__30([], _, _, A, B, C, D, E, F, G, H, I, J) :-
11681    occurrence___5__3__1__30(A,
11682                             B,
11683                             C,
11684                             D,
11685                             E,
11686                             F,
11687                             G,
11688                             H,
11689                             I,
11690                             J).
11691occurrence___5__3__2__30([A|B], C, D, E, F, G, H, I, J, K, L, M, N) :-
11692    (   A=suspension(_, active, _, _, O, _, _, _, _, _),
11693        O==K,
11694        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11695                  P)
11696    ->  occurrence___5__3__3__30(P,
11697                                 A,
11698                                 B,
11699                                 C,
11700                                 D,
11701                                 E,
11702                                 F,
11703                                 G,
11704                                 H,
11705                                 I,
11706                                 J,
11707                                 K,
11708                                 L,
11709                                 M,
11710                                 N)
11711    ;   occurrence___5__3__2__30(B,
11712                                 C,
11713                                 D,
11714                                 E,
11715                                 F,
11716                                 G,
11717                                 H,
11718                                 I,
11719                                 J,
11720                                 K,
11721                                 L,
11722                                 M,
11723                                 N)
11724    ).
11725occurrence___5__3__3__30([], _, A, B, C, D, E, F, G, H, I, J, K, L, M) :-
11726    occurrence___5__3__2__30(A,
11727                             B,
11728                             C,
11729                             D,
11730                             E,
11731                             F,
11732                             G,
11733                             H,
11734                             I,
11735                             J,
11736                             K,
11737                             L,
11738                             M).
11739occurrence___5__3__3__30([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O, P) :-
11740    (   A=suspension(_, active, _, Q),
11741        L<E,
11742        chr_pp_flag(occurrence_subsumption, on),
11743        H=pragma(rule(R, _, _, _), _, _, _, _),
11744        R\==[],
11745        \+ tree_set_memberchk(K, Q)
11746    ->  setarg(2, A, removed),
11747        arg(3, A, S),
11748        (   var(S)
11749        ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11750                      T),
11751            T=[_|U],
11752            b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11753                     U),
11754            (   U=[V|_]
11755            ->  setarg(3, V, _)
11756            ;   true
11757            )
11758        ;   S=[_, _|U],
11759            setarg(2, S, U),
11760            (   U=[V|_]
11761            ->  setarg(3, V, S)
11762            ;   true
11763            )
11764        ),
11765        arg(2, P, W),
11766        setarg(2, P, active),
11767        (   W==not_stored_yet
11768        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11769                      X),
11770            insert_ht(X, k(K, O), P),
11771            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11772                      Y),
11773            Z=[P|Y],
11774            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11775                     Z),
11776            (   Y=[A1|_]
11777            ->  setarg(4, A1, Z)
11778            ;   true
11779            ),
11780            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11781                      B1),
11782            insert_ht(B1, k(K, L, O), P),
11783            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11784                      C1),
11785            insert_ht(C1, k(K, M, N), P),
11786            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11787                      D1),
11788            insert_ht(D1, k(K, L), P),
11789            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11790                      E1),
11791            insert_ht(E1, M, P),
11792            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11793                      F1),
11794            insert_ht(F1, k(K, M), P),
11795            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11796                      G1),
11797            insert_ht(G1, k(M, N), P),
11798            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11799                      H1),
11800            insert_ht(H1, K, P)
11801        ;   true
11802        ),
11803        first_occ_in_rule(M, K, L, N),
11804        tree_set_add(Q, K, I1),
11805        multiple_occ_constraints_checked(I1),
11806        (   P=suspension(_, active, _, _, _, _, _, _, _)
11807        ->  setarg(2, P, inactive),
11808            occurrence___5__3__3__30(B,
11809                                     C,
11810                                     D,
11811                                     E,
11812                                     F,
11813                                     G,
11814                                     H,
11815                                     I,
11816                                     J,
11817                                     K,
11818                                     L,
11819                                     M,
11820                                     N,
11821                                     O,
11822                                     P)
11823        ;   true
11824        )
11825    ;   occurrence___5__3__3__30(B,
11826                                 C,
11827                                 D,
11828                                 E,
11829                                 F,
11830                                 G,
11831                                 H,
11832                                 I,
11833                                 J,
11834                                 K,
11835                                 L,
11836                                 M,
11837                                 N,
11838                                 O,
11839                                 P)
11840    ).
11841occurrence___5__3(A, B, C, D, E, F) :-
11842    occurrence___5__4(A, B, C, D, E, F).
11843occurrence___5__4(A, B, C, D, E, F) :-
11844    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
11845    lookup_ht(G, C, H),
11846    !,
11847    occurrence___5__4__0__31(H,
11848                             A,
11849                             B,
11850                             C,
11851                             D,
11852                             E,
11853                             F).
11854occurrence___5__4__0__31([], A, B, C, D, E, F) :-
11855    occurrence___5__5(A, B, C, D, E, F).
11856occurrence___5__4__0__31([A|B], C, D, E, F, G, H) :-
11857    (   A=suspension(_, active, _, _, I, J),
11858        I==E,
11859        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11860                  K),
11861        lookup_ht(K, k(C, E), L)
11862    ->  occurrence___5__4__1__31(L,
11863                                 J,
11864                                 A,
11865                                 B,
11866                                 C,
11867                                 D,
11868                                 E,
11869                                 F,
11870                                 G,
11871                                 H)
11872    ;   occurrence___5__4__0__31(B,
11873                                 C,
11874                                 D,
11875                                 E,
11876                                 F,
11877                                 G,
11878                                 H)
11879    ).
11880occurrence___5__4__1__31([], _, _, A, B, C, D, E, F, G) :-
11881    occurrence___5__4__0__31(A,
11882                             B,
11883                             C,
11884                             D,
11885                             E,
11886                             F,
11887                             G).
11888occurrence___5__4__1__31([A|B], C, D, E, F, G, H, I, J, K) :-
11889    (   A=suspension(_, active, _, _, L, M, N, O, _),
11890        L==F,
11891        N==H,
11892        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
11893                  P),
11894        lookup_ht(P, H, Q)
11895    ->  occurrence___5__4__2__31(Q,
11896                                 M,
11897                                 O,
11898                                 A,
11899                                 B,
11900                                 C,
11901                                 D,
11902                                 E,
11903                                 F,
11904                                 G,
11905                                 H,
11906                                 I,
11907                                 J,
11908                                 K)
11909    ;   occurrence___5__4__1__31(B,
11910                                 C,
11911                                 D,
11912                                 E,
11913                                 F,
11914                                 G,
11915                                 H,
11916                                 I,
11917                                 J,
11918                                 K)
11919    ).
11920occurrence___5__4__2__31([], _, _, _, A, B, C, D, E, F, G, H, I, J) :-
11921    occurrence___5__4__1__31(A,
11922                             B,
11923                             C,
11924                             D,
11925                             E,
11926                             F,
11927                             G,
11928                             H,
11929                             I,
11930                             J).
11931occurrence___5__4__2__31([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O) :-
11932    (   A=suspension(_, active, _, _, P, _, _, _, _, _),
11933        P==L,
11934        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11935                  Q)
11936    ->  occurrence___5__4__3__31(Q,
11937                                 A,
11938                                 B,
11939                                 C,
11940                                 D,
11941                                 E,
11942                                 F,
11943                                 G,
11944                                 H,
11945                                 I,
11946                                 J,
11947                                 K,
11948                                 L,
11949                                 M,
11950                                 N,
11951                                 O)
11952    ;   occurrence___5__4__2__31(B,
11953                                 C,
11954                                 D,
11955                                 E,
11956                                 F,
11957                                 G,
11958                                 H,
11959                                 I,
11960                                 J,
11961                                 K,
11962                                 L,
11963                                 M,
11964                                 N,
11965                                 O)
11966    ).
11967occurrence___5__4__3__31([], _, A, B, C, D, E, F, G, H, I, J, K, L, M, N) :-
11968    occurrence___5__4__2__31(A,
11969                             B,
11970                             C,
11971                             D,
11972                             E,
11973                             F,
11974                             G,
11975                             H,
11976                             I,
11977                             J,
11978                             K,
11979                             L,
11980                             M,
11981                             N).
11982occurrence___5__4__3__31([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) :-
11983    (   A=suspension(_, active, _, R),
11984        E<M,
11985        chr_pp_flag(occurrence_subsumption, on),
11986        I=pragma(rule(S, _, _, _), _, _, _, _),
11987        S\==[],
11988        \+ tree_set_memberchk(L, R)
11989    ->  setarg(2, A, removed),
11990        arg(3, A, T),
11991        (   var(T)
11992        ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11993                      U),
11994            U=[_|V],
11995            b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11996                     V),
11997            (   V=[W|_]
11998            ->  setarg(3, W, _)
11999            ;   true
12000            )
12001        ;   T=[_, _|V],
12002            setarg(2, T, V),
12003            (   V=[W|_]
12004            ->  setarg(3, W, T)
12005            ;   true
12006            )
12007        ),
12008        arg(2, Q, X),
12009        setarg(2, Q, active),
12010        (   X==not_stored_yet
12011        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12012                      Y),
12013            insert_ht(Y, k(L, P), Q),
12014            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12015                      Z),
12016            A1=[Q|Z],
12017            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12018                     A1),
12019            (   Z=[B1|_]
12020            ->  setarg(4, B1, A1)
12021            ;   true
12022            ),
12023            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12024                      C1),
12025            insert_ht(C1, k(L, M, P), Q),
12026            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12027                      D1),
12028            insert_ht(D1, k(L, N, O), Q),
12029            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12030                      E1),
12031            insert_ht(E1, k(L, M), Q),
12032            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12033                      F1),
12034            insert_ht(F1, N, Q),
12035            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12036                      G1),
12037            insert_ht(G1, k(L, N), Q),
12038            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12039                      H1),
12040            insert_ht(H1, k(N, O), Q),
12041            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12042                      I1),
12043            insert_ht(I1, L, Q)
12044        ;   true
12045        ),
12046        first_occ_in_rule(N, L, E, F),
12047        tree_set_add(R, L, J1),
12048        multiple_occ_constraints_checked(J1),
12049        (   Q=suspension(_, active, _, _, _, _, _, _, _)
12050        ->  setarg(2, Q, inactive),
12051            occurrence___5__4__3__31(B,
12052                                     C,
12053                                     D,
12054                                     E,
12055                                     F,
12056                                     G,
12057                                     H,
12058                                     I,
12059                                     J,
12060                                     K,
12061                                     L,
12062                                     M,
12063                                     N,
12064                                     O,
12065                                     P,
12066                                     Q)
12067        ;   true
12068        )
12069    ;   occurrence___5__4__3__31(B,
12070                                 C,
12071                                 D,
12072                                 E,
12073                                 F,
12074                                 G,
12075                                 H,
12076                                 I,
12077                                 J,
12078                                 K,
12079                                 L,
12080                                 M,
12081                                 N,
12082                                 O,
12083                                 P,
12084                                 Q)
12085    ).
12086occurrence___5__4(A, B, C, D, E, F) :-
12087    occurrence___5__5(A, B, C, D, E, F).
12088occurrence___5__5(A, B, C, D, E, F) :-
12089    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', G),
12090    lookup_ht(G, k(A, B, yes), H),
12091    !,
12092    occurrence___5__5__0__35(H,
12093                             A,
12094                             B,
12095                             C,
12096                             D,
12097                             E,
12098                             F).
12099occurrence___5__5__0__35([], A, B, C, D, E, F) :-
12100    occurrence___5__6(A, B, C, D, E, F).
12101occurrence___5__5__0__35([A|B], C, D, E, F, G, H) :-
12102    (   A=suspension(_, active, I, J, K),
12103        I==C,
12104        J==D,
12105        K=yes,
12106        ( ground(E),
12107          ground(F),
12108          nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
12109                    L),
12110          lookup_ht(L, k(E, F), M)
12111        ),
12112        member(N, M),
12113        N=suspension(_, active, _, _, _),
12114        ( ground(C),
12115          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
12116                    O),
12117          lookup_ht(O, C, P)
12118        ),
12119        member(Q, P),
12120        Q=suspension(_, active, _, _, R, S),
12121        D<R
12122    ->  ( setarg(2, A, removed),
12123          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13',
12124                    T),
12125          delete_ht(T, k(C, yes), A),
12126          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
12127                    U),
12128          delete_ht(U, k(C, D, yes), A)
12129        ),
12130        setarg(2, Q, removed),
12131        ( nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
12132                    V),
12133          delete_ht(V, k(C, S), Q)
12134        ),
12135        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
12136                  W),
12137        delete_ht(W, C, Q),
12138        arg(2, H, X),
12139        setarg(2, H, active),
12140        (   X==not_stored_yet
12141        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12142                      Y),
12143            insert_ht(Y, k(C, G), H),
12144            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12145                      Z),
12146            A1=[H|Z],
12147            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12148                     A1),
12149            (   Z=[B1|_]
12150            ->  setarg(4, B1, A1)
12151            ;   true
12152            ),
12153            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12154                      C1),
12155            insert_ht(C1, k(C, D, G), H),
12156            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12157                      D1),
12158            insert_ht(D1, k(C, E, F), H),
12159            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12160                      E1),
12161            insert_ht(E1, k(C, D), H),
12162            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12163                      F1),
12164            insert_ht(F1, E, H),
12165            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12166                      G1),
12167            insert_ht(G1, k(C, E), H),
12168            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12169                      H1),
12170            insert_ht(H1, k(E, F), H),
12171            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12172                      I1),
12173            insert_ht(I1, C, H)
12174        ;   true
12175        ),
12176        J1 is S-1,
12177        stored(C, D, maybe),
12178        stored_complete(C, R, J1),
12179        (   H=suspension(_, active, _, _, _, _, _, _, _)
12180        ->  setarg(2, H, inactive),
12181            occurrence___5__5__0__35(B,
12182                                     C,
12183                                     D,
12184                                     E,
12185                                     F,
12186                                     G,
12187                                     H)
12188        ;   true
12189        )
12190    ;   occurrence___5__5__0__35(B,
12191                                 C,
12192                                 D,
12193                                 E,
12194                                 F,
12195                                 G,
12196                                 H)
12197    ).
12198occurrence___5__5(A, B, C, D, E, F) :-
12199    occurrence___5__6(A, B, C, D, E, F).
12200occurrence___5__6(A, B, C, D, E, F) :-
12201    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', G),
12202    lookup_ht(G, C, H),
12203    !,
12204    occurrence___5__6__0__36(H,
12205                             A,
12206                             B,
12207                             C,
12208                             D,
12209                             E,
12210                             F).
12211occurrence___5__6__0__36([], A, B, C, D, E, F) :-
12212    occurrence___5__7(A, B, C, D, E, F).
12213occurrence___5__6__0__36([A|B], C, D, E, F, G, H) :-
12214    (   A=suspension(_, active, _, _, I, _, J, _, _),
12215        J==E,
12216        nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
12217                  K),
12218        lookup_ht(K, I, L)
12219    ->  occurrence___5__6__1__36(L,
12220                                 I,
12221                                 A,
12222                                 B,
12223                                 C,
12224                                 D,
12225                                 E,
12226                                 F,
12227                                 G,
12228                                 H)
12229    ;   occurrence___5__6__0__36(B,
12230                                 C,
12231                                 D,
12232                                 E,
12233                                 F,
12234                                 G,
12235                                 H)
12236    ).
12237occurrence___5__6__1__36([], _, _, A, B, C, D, E, F, G) :-
12238    occurrence___5__6__0__36(A,
12239                             B,
12240                             C,
12241                             D,
12242                             E,
12243                             F,
12244                             G).
12245occurrence___5__6__1__36([A|B], C, D, E, F, G, H, I, J, K) :-
12246    (   A=suspension(_, active, _, L, M),
12247        L==C,
12248        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
12249                  N),
12250        lookup_ht(N, k(C, 0), O)
12251    ->  occurrence___5__6__2__36(O,
12252                                 M,
12253                                 A,
12254                                 B,
12255                                 C,
12256                                 D,
12257                                 E,
12258                                 F,
12259                                 G,
12260                                 H,
12261                                 I,
12262                                 J,
12263                                 K)
12264    ;   occurrence___5__6__1__36(B,
12265                                 C,
12266                                 D,
12267                                 E,
12268                                 F,
12269                                 G,
12270                                 H,
12271                                 I,
12272                                 J,
12273                                 K)
12274    ).
12275occurrence___5__6__2__36([], _, _, A, B, C, D, E, F, G, H, I, J) :-
12276    occurrence___5__6__1__36(A,
12277                             B,
12278                             C,
12279                             D,
12280                             E,
12281                             F,
12282                             G,
12283                             H,
12284                             I,
12285                             J).
12286occurrence___5__6__2__36([A|B], C, D, E, F, G, H, I, J, K, L, M, N) :-
12287    (   A=suspension(_, active, _, O, P, Q),
12288        O==F,
12289        Q=0,
12290        R=t(250, N, G, A, D),
12291        '$novel_production'(N, R),
12292        '$novel_production'(G, R),
12293        '$novel_production'(A, R),
12294        '$novel_production'(D, R),
12295        P=<C
12296    ->  '$extend_history'(N, R),
12297        arg(2, N, S),
12298        setarg(2, N, active),
12299        (   S==not_stored_yet
12300        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12301                      T),
12302            insert_ht(T, k(I, M), N),
12303            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12304                      U),
12305            V=[N|U],
12306            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12307                     V),
12308            (   U=[W|_]
12309            ->  setarg(4, W, V)
12310            ;   true
12311            ),
12312            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12313                      X),
12314            insert_ht(X, k(I, J, M), N),
12315            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12316                      Y),
12317            insert_ht(Y, k(I, K, L), N),
12318            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12319                      Z),
12320            insert_ht(Z, k(I, J), N),
12321            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12322                      A1),
12323            insert_ht(A1, K, N),
12324            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12325                      B1),
12326            insert_ht(B1, k(I, K), N),
12327            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12328                      C1),
12329            insert_ht(C1, k(K, L), N),
12330            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12331                      D1),
12332            insert_ht(D1, I, N)
12333        ;   true
12334        ),
12335        passive(K, L),
12336        (   N=suspension(_, active, _, _, _, _, _, _, _)
12337        ->  setarg(2, N, inactive),
12338            occurrence___5__6__2__36(B,
12339                                     C,
12340                                     D,
12341                                     E,
12342                                     F,
12343                                     G,
12344                                     H,
12345                                     I,
12346                                     J,
12347                                     K,
12348                                     L,
12349                                     M,
12350                                     N)
12351        ;   true
12352        )
12353    ;   occurrence___5__6__2__36(B,
12354                                 C,
12355                                 D,
12356                                 E,
12357                                 F,
12358                                 G,
12359                                 H,
12360                                 I,
12361                                 J,
12362                                 K,
12363                                 L,
12364                                 M,
12365                                 N)
12366    ).
12367occurrence___5__6(A, B, C, D, E, F) :-
12368    occurrence___5__7(A, B, C, D, E, F).
12369occurrence___5__7(A, B, C, D, E, F) :-
12370    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', G),
12371    lookup_ht(G, C, H),
12372    !,
12373    occurrence___5__7__0__37(H,
12374                             A,
12375                             B,
12376                             C,
12377                             D,
12378                             E,
12379                             F).
12380occurrence___5__7__0__37([], A, B, C, D, E, F) :-
12381    occurrence___5__8(A, B, C, D, E, F).
12382occurrence___5__7__0__37([A|B], C, D, E, F, G, H) :-
12383    (   A=suspension(_, active, _, _, _, _, I, J, _),
12384        I==E,
12385        nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
12386                  K),
12387        lookup_ht(K, C, L)
12388    ->  occurrence___5__7__1__37(L,
12389                                 J,
12390                                 A,
12391                                 B,
12392                                 C,
12393                                 D,
12394                                 E,
12395                                 F,
12396                                 G,
12397                                 H)
12398    ;   occurrence___5__7__0__37(B,
12399                                 C,
12400                                 D,
12401                                 E,
12402                                 F,
12403                                 G,
12404                                 H)
12405    ).
12406occurrence___5__7__1__37([], _, _, A, B, C, D, E, F, G) :-
12407    occurrence___5__7__0__37(A,
12408                             B,
12409                             C,
12410                             D,
12411                             E,
12412                             F,
12413                             G).
12414occurrence___5__7__1__37([A|B], C, D, E, F, G, H, I, J, K) :-
12415    (   A=suspension(_, active, _, L, M),
12416        L==F,
12417        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
12418                  N),
12419        lookup_ht(N, k(F, 0), O)
12420    ->  occurrence___5__7__2__37(O,
12421                                 M,
12422                                 A,
12423                                 B,
12424                                 C,
12425                                 D,
12426                                 E,
12427                                 F,
12428                                 G,
12429                                 H,
12430                                 I,
12431                                 J,
12432                                 K)
12433    ;   occurrence___5__7__1__37(B,
12434                                 C,
12435                                 D,
12436                                 E,
12437                                 F,
12438                                 G,
12439                                 H,
12440                                 I,
12441                                 J,
12442                                 K)
12443    ).
12444occurrence___5__7__2__37([], _, _, A, B, C, D, E, F, G, H, I, J) :-
12445    occurrence___5__7__1__37(A,
12446                             B,
12447                             C,
12448                             D,
12449                             E,
12450                             F,
12451                             G,
12452                             H,
12453                             I,
12454                             J).
12455occurrence___5__7__2__37([A|B], C, D, E, F, G, H, I, J, K, L, M, N) :-
12456    (   A=suspension(_, active, _, O, P, Q),
12457        O==I,
12458        Q=0,
12459        R=t(250, G, N, A, D),
12460        '$novel_production'(G, R),
12461        '$novel_production'(N, R),
12462        '$novel_production'(A, R),
12463        '$novel_production'(D, R),
12464        P=<C
12465    ->  '$extend_history'(N, R),
12466        arg(2, N, S),
12467        setarg(2, N, active),
12468        (   S==not_stored_yet
12469        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12470                      T),
12471            insert_ht(T, k(I, M), N),
12472            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12473                      U),
12474            V=[N|U],
12475            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12476                     V),
12477            (   U=[W|_]
12478            ->  setarg(4, W, V)
12479            ;   true
12480            ),
12481            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12482                      X),
12483            insert_ht(X, k(I, J, M), N),
12484            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12485                      Y),
12486            insert_ht(Y, k(I, K, L), N),
12487            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12488                      Z),
12489            insert_ht(Z, k(I, J), N),
12490            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12491                      A1),
12492            insert_ht(A1, K, N),
12493            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12494                      B1),
12495            insert_ht(B1, k(I, K), N),
12496            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12497                      C1),
12498            insert_ht(C1, k(K, L), N),
12499            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12500                      D1),
12501            insert_ht(D1, I, N)
12502        ;   true
12503        ),
12504        passive(K, F),
12505        (   N=suspension(_, active, _, _, _, _, _, _, _)
12506        ->  setarg(2, N, inactive),
12507            occurrence___5__7__2__37(B,
12508                                     C,
12509                                     D,
12510                                     E,
12511                                     F,
12512                                     G,
12513                                     H,
12514                                     I,
12515                                     J,
12516                                     K,
12517                                     L,
12518                                     M,
12519                                     N)
12520        ;   true
12521        )
12522    ;   occurrence___5__7__2__37(B,
12523                                 C,
12524                                 D,
12525                                 E,
12526                                 F,
12527                                 G,
12528                                 H,
12529                                 I,
12530                                 J,
12531                                 K,
12532                                 L,
12533                                 M,
12534                                 N)
12535    ).
12536occurrence___5__7(A, B, C, D, E, F) :-
12537    occurrence___5__8(A, B, C, D, E, F).
12538occurrence___5__8(A, B, C, D, E, F) :-
12539    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
12540              G),
12541    lookup_ht(G, A, H),
12542    !,
12543    occurrence___5__8__0__38(H,
12544                             A,
12545                             B,
12546                             C,
12547                             D,
12548                             E,
12549                             F).
12550occurrence___5__8__0__38([], A, B, C, D, E, F) :-
12551    occurrence___5__9(A, B, C, D, E, F).
12552occurrence___5__8__0__38([A|B], C, D, E, F, G, H) :-
12553    (   A=suspension(_, active, _, I, J, _),
12554        I==C,
12555        K=t(259, A, H),
12556        '$novel_production'(A, K),
12557        '$novel_production'(H, K),
12558        D>J
12559    ->  '$extend_history'(H, K),
12560        arg(2, H, L),
12561        setarg(2, H, active),
12562        (   L==not_stored_yet
12563        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12564                      M),
12565            insert_ht(M, k(C, G), H),
12566            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12567                      N),
12568            O=[H|N],
12569            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12570                     O),
12571            (   N=[P|_]
12572            ->  setarg(4, P, O)
12573            ;   true
12574            ),
12575            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12576                      Q),
12577            insert_ht(Q, k(C, D, G), H),
12578            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12579                      R),
12580            insert_ht(R, k(C, E, F), H),
12581            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12582                      S),
12583            insert_ht(S, k(C, D), H),
12584            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12585                      T),
12586            insert_ht(T, E, H),
12587            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12588                      U),
12589            insert_ht(U, k(C, E), H),
12590            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12591                      V),
12592            insert_ht(V, k(E, F), H),
12593            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12594                      W),
12595            insert_ht(W, C, H)
12596        ;   true
12597        ),
12598        passive(E, F),
12599        (   H=suspension(_, active, _, _, _, _, _, _, _)
12600        ->  setarg(2, H, inactive),
12601            occurrence___5__8__0__38(B,
12602                                     C,
12603                                     D,
12604                                     E,
12605                                     F,
12606                                     G,
12607                                     H)
12608        ;   true
12609        )
12610    ;   occurrence___5__8__0__38(B,
12611                                 C,
12612                                 D,
12613                                 E,
12614                                 F,
12615                                 G,
12616                                 H)
12617    ).
12618occurrence___5__8(A, B, C, D, E, F) :-
12619    occurrence___5__9(A, B, C, D, E, F).
12620occurrence___5__9(A, B, C, D, E, F) :-
12621    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
12622              G),
12623    lookup_ht(G, k(A, C), H),
12624    !,
12625    occurrence___5__9__0__42(H,
12626                             A,
12627                             B,
12628                             C,
12629                             D,
12630                             E,
12631                             F).
12632occurrence___5__9__0__42([], A, B, C, D, E, F) :-
12633    occurrence___5__10(A, B, C, D, E, F).
12634occurrence___5__9__0__42([A|B], C, D, E, F, G, H) :-
12635    (   A=suspension(_, active, I, J, K, L),
12636        I==C,
12637        J==E,
12638        E>1,
12639        ( ground(C),
12640          nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
12641                    M),
12642          lookup_ht(M, C, N)
12643        ),
12644        member(O, N),
12645        O=suspension(_, active, _, _, P),
12646        P>D
12647    ->  setarg(2, A, removed),
12648        ( nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
12649                    Q),
12650          delete_ht(Q, C, A)
12651        ),
12652        nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
12653                  R),
12654        delete_ht(R, k(C, E), A),
12655        arg(2, H, S),
12656        setarg(2, H, active),
12657        (   S==not_stored_yet
12658        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12659                      T),
12660            insert_ht(T, k(C, G), H),
12661            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12662                      U),
12663            V=[H|U],
12664            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12665                     V),
12666            (   U=[W|_]
12667            ->  setarg(4, W, V)
12668            ;   true
12669            ),
12670            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12671                      X),
12672            insert_ht(X, k(C, D, G), H),
12673            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12674                      Y),
12675            insert_ht(Y, k(C, E, F), H),
12676            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12677                      Z),
12678            insert_ht(Z, k(C, D), H),
12679            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12680                      A1),
12681            insert_ht(A1, E, H),
12682            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12683                      B1),
12684            insert_ht(B1, k(C, E), H),
12685            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12686                      C1),
12687            insert_ht(C1, k(E, F), H),
12688            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12689                      D1),
12690            insert_ht(D1, C, H)
12691        ;   true
12692        ),
12693        functional_dependency(C, 1, K, L),
12694        (   H=suspension(_, active, _, _, _, _, _, _, _)
12695        ->  setarg(2, H, inactive),
12696            occurrence___5__9__0__42(B,
12697                                     C,
12698                                     D,
12699                                     E,
12700                                     F,
12701                                     G,
12702                                     H)
12703        ;   true
12704        )
12705    ;   occurrence___5__9__0__42(B,
12706                                 C,
12707                                 D,
12708                                 E,
12709                                 F,
12710                                 G,
12711                                 H)
12712    ).
12713occurrence___5__9(A, B, C, D, E, F) :-
12714    occurrence___5__10(A, B, C, D, E, F).
12715occurrence___5__10(A, B, C, D, E, F) :-
12716    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
12717              G),
12718    lookup_ht(G, A, H),
12719    !,
12720    occurrence___5__10__0__48(H,
12721                              A,
12722                              B,
12723                              C,
12724                              D,
12725                              E,
12726                              F).
12727occurrence___5__10__0__48([], A, B, C, D, E, F) :-
12728    occurrence___5__11(A, B, C, D, E, F).
12729occurrence___5__10__0__48([A|B], C, D, E, F, G, H) :-
12730    (   A=suspension(_, active, _, _, I, J),
12731        I==C,
12732        nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
12733                  K)
12734    ->  occurrence___5__10__1__48(K,
12735                                  J,
12736                                  A,
12737                                  B,
12738                                  C,
12739                                  D,
12740                                  E,
12741                                  F,
12742                                  G,
12743                                  H)
12744    ;   occurrence___5__10__0__48(B,
12745                                  C,
12746                                  D,
12747                                  E,
12748                                  F,
12749                                  G,
12750                                  H)
12751    ).
12752occurrence___5__10__1__48([], _, _, A, B, C, D, E, F, G) :-
12753    occurrence___5__10__0__48(A,
12754                              B,
12755                              C,
12756                              D,
12757                              E,
12758                              F,
12759                              G).
12760occurrence___5__10__1__48([A|B], C, D, E, F, G, H, I, J, K) :-
12761    (   A=suspension(_, active, _, _),
12762        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', L),
12763        lookup_ht(L, H, M)
12764    ->  occurrence___5__10__2__48(M,
12765                                  A,
12766                                  B,
12767                                  C,
12768                                  D,
12769                                  E,
12770                                  F,
12771                                  G,
12772                                  H,
12773                                  I,
12774                                  J,
12775                                  K)
12776    ;   occurrence___5__10__1__48(B,
12777                                  C,
12778                                  D,
12779                                  E,
12780                                  F,
12781                                  G,
12782                                  H,
12783                                  I,
12784                                  J,
12785                                  K)
12786    ).
12787occurrence___5__10__2__48([], _, A, B, C, D, E, F, G, H, I, J) :-
12788    occurrence___5__10__1__48(A,
12789                              B,
12790                              C,
12791                              D,
12792                              E,
12793                              F,
12794                              G,
12795                              H,
12796                              I,
12797                              J).
12798occurrence___5__10__2__48([A|B], C, D, E, F, G, H, I, J, K, L, M) :-
12799    (   A=suspension(_, active, _, _, N, O),
12800        N==J,
12801        P=t(330, C, M, A, F),
12802        '$novel_production'(C, P),
12803        '$novel_production'(M, P),
12804        '$novel_production'(A, P),
12805        '$novel_production'(F, P)
12806    ->  '$extend_history'(M, P),
12807        arg(2, M, Q),
12808        setarg(2, M, active),
12809        (   Q==not_stored_yet
12810        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12811                      R),
12812            insert_ht(R, k(H, L), M),
12813            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12814                      S),
12815            T=[M|S],
12816            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12817                     T),
12818            (   S=[U|_]
12819            ->  setarg(4, U, T)
12820            ;   true
12821            ),
12822            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12823                      V),
12824            insert_ht(V, k(H, I, L), M),
12825            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12826                      W),
12827            insert_ht(W, k(H, J, K), M),
12828            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12829                      X),
12830            insert_ht(X, k(H, I), M),
12831            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12832                      Y),
12833            insert_ht(Y, J, M),
12834            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12835                      Z),
12836            insert_ht(Z, k(H, J), M),
12837            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12838                      A1),
12839            insert_ht(A1, k(J, K), M),
12840            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12841                      B1),
12842            insert_ht(B1, H, M)
12843        ;   true
12844        ),
12845        O=pragma(rule(C1, D1, E1, _), _, _, _, _),
12846        (   is_passive(J, K)
12847        ->  true
12848        ;   L==simplification
12849        ->  select(F1, C1, _),
12850            F1=..[_|G1],
12851            term_variables(E1, H1),
12852            partial_wake_args(G1, E, H1, H)
12853        ;   select(F1, D1, _),
12854            F1=..[_|G1],
12855            term_variables(E1, H1),
12856            partial_wake_args(G1, E, H1, H)
12857        ),
12858        (   M=suspension(_, active, _, _, _, _, _, _, _)
12859        ->  setarg(2, M, inactive),
12860            occurrence___5__10__2__48(B,
12861                                      C,
12862                                      D,
12863                                      E,
12864                                      F,
12865                                      G,
12866                                      H,
12867                                      I,
12868                                      J,
12869                                      K,
12870                                      L,
12871                                      M)
12872        ;   true
12873        )
12874    ;   occurrence___5__10__2__48(B,
12875                                  C,
12876                                  D,
12877                                  E,
12878                                  F,
12879                                  G,
12880                                  H,
12881                                  I,
12882                                  J,
12883                                  K,
12884                                  L,
12885                                  M)
12886    ).
12887occurrence___5__10(A, B, C, D, E, F) :-
12888    occurrence___5__11(A, B, C, D, E, F).
12889occurrence___5__11(A, B, C, D, E, F) :-
12890    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', G),
12891    lookup_ht(G, k(C, D), H),
12892    !,
12893    occurrence___5__11__0__50(H,
12894                              A,
12895                              B,
12896                              C,
12897                              D,
12898                              E,
12899                              F).
12900occurrence___5__11__0__50([], A, B, C, D, E, F) :-
12901    occurrence___5__12(A, B, C, D, E, F).
12902occurrence___5__11__0__50([A|B], C, D, E, F, G, H) :-
12903    (   A=suspension(_, active, _, I, J),
12904        I==E,
12905        J==F,
12906        nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
12907                  K),
12908        lookup_ht(K, k(C, D), L)
12909    ->  occurrence___5__11__1__50(L,
12910                                  A,
12911                                  B,
12912                                  C,
12913                                  D,
12914                                  E,
12915                                  F,
12916                                  G,
12917                                  H)
12918    ;   occurrence___5__11__0__50(B,
12919                                  C,
12920                                  D,
12921                                  E,
12922                                  F,
12923                                  G,
12924                                  H)
12925    ).
12926occurrence___5__11__1__50([], _, A, B, C, D, E, F, G) :-
12927    occurrence___5__11__0__50(A,
12928                              B,
12929                              C,
12930                              D,
12931                              E,
12932                              F,
12933                              G).
12934occurrence___5__11__1__50([A|B], C, D, E, F, G, H, I, J) :-
12935    (   A=suspension(_, active, _, K, L),
12936        K==E,
12937        L==F,
12938        M=t(362, J, C, A),
12939        '$novel_production'(J, M),
12940        '$novel_production'(C, M),
12941        '$novel_production'(A, M),
12942        F>1
12943    ->  '$extend_history'(J, M),
12944        arg(2, J, N),
12945        setarg(2, J, active),
12946        (   N==not_stored_yet
12947        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12948                      O),
12949            insert_ht(O, k(E, I), J),
12950            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12951                      P),
12952            Q=[J|P],
12953            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12954                     Q),
12955            (   P=[R|_]
12956            ->  setarg(4, R, Q)
12957            ;   true
12958            ),
12959            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12960                      S),
12961            insert_ht(S, k(E, F, I), J),
12962            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12963                      T),
12964            insert_ht(T, k(E, G, H), J),
12965            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12966                      U),
12967            insert_ht(U, k(E, F), J),
12968            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12969                      V),
12970            insert_ht(V, G, J),
12971            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12972                      W),
12973            insert_ht(W, k(E, G), J),
12974            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12975                      X),
12976            insert_ht(X, k(G, H), J),
12977            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12978                      Y),
12979            insert_ht(Y, E, J)
12980        ;   true
12981        ),
12982        Z is F-1,
12983        skip_to_next_id(E, Z),
12984        (   J=suspension(_, active, _, _, _, _, _, _, _)
12985        ->  setarg(2, J, inactive),
12986            occurrence___5__11__1__50(B,
12987                                      C,
12988                                      D,
12989                                      E,
12990                                      F,
12991                                      G,
12992                                      H,
12993                                      I,
12994                                      J)
12995        ;   true
12996        )
12997    ;   occurrence___5__11__1__50(B,
12998                                  C,
12999                                  D,
13000                                  E,
13001                                  F,
13002                                  G,
13003                                  H,
13004                                  I,
13005                                  J)
13006    ).
13007occurrence___5__11(A, B, C, D, E, F) :-
13008    occurrence___5__12(A, B, C, D, E, F).
13009occurrence___5__12(A, B, C, D, E, F) :-
13010    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13011              G),
13012    lookup_ht(G, k(A, B), H),
13013    !,
13014    occurrence___5__12__0__51(H,
13015                              A,
13016                              B,
13017                              C,
13018                              D,
13019                              E,
13020                              F).
13021occurrence___5__12__0__51([], A, B, C, D, E, F) :-
13022    occurrence___5__13(A, B, C, D, E, F).
13023occurrence___5__12__0__51([A|B], C, D, E, F, G, H) :-
13024    (   A=suspension(_, active, I, J, K),
13025        I==C,
13026        J==D,
13027        ( ground(E),
13028          ground(F)
13029        ),
13030        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
13031                  L),
13032        lookup_ht(L, k(E, F), M),
13033        member(N, M),
13034        N=suspension(_, active, _, _, _)
13035    ->  setarg(2, A, removed),
13036        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13037                  O),
13038        delete_ht(O, k(C, D), A),
13039        arg(2, H, P),
13040        setarg(2, H, active),
13041        (   P==not_stored_yet
13042        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13043                      Q),
13044            insert_ht(Q, k(C, G), H),
13045            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13046                      R),
13047            S=[H|R],
13048            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13049                     S),
13050            (   R=[T|_]
13051            ->  setarg(4, T, S)
13052            ;   true
13053            ),
13054            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13055                      U),
13056            insert_ht(U, k(C, D, G), H),
13057            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13058                      V),
13059            insert_ht(V, k(C, E, F), H),
13060            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13061                      W),
13062            insert_ht(W, k(C, D), H),
13063            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13064                      X),
13065            insert_ht(X, E, H),
13066            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13067                      Y),
13068            insert_ht(Y, k(C, E), H),
13069            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13070                      Z),
13071            insert_ht(Z, k(E, F), H),
13072            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13073                      A1),
13074            insert_ht(A1, C, H)
13075        ;   true
13076        ),
13077        occurrence_code_id(C, D, K),
13078        B1 is D+1,
13079        set_occurrence_code_id(C, B1, K),
13080        (   H=suspension(_, active, _, _, _, _, _, _, _)
13081        ->  setarg(2, H, inactive),
13082            occurrence___5__12__0__51(B,
13083                                      C,
13084                                      D,
13085                                      E,
13086                                      F,
13087                                      G,
13088                                      H)
13089        ;   true
13090        )
13091    ;   occurrence___5__12__0__51(B,
13092                                  C,
13093                                  D,
13094                                  E,
13095                                  F,
13096                                  G,
13097                                  H)
13098    ).
13099occurrence___5__12(A, B, C, D, E, F) :-
13100    occurrence___5__13(A, B, C, D, E, F).
13101occurrence___5__13(A, B, C, D, simplification, E) :-
13102    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13103              F),
13104    lookup_ht(F, k(A, B), G),
13105    !,
13106    occurrence___5__13__0__52(G,
13107                              A,
13108                              B,
13109                              C,
13110                              D,
13111                              simplification,
13112                              E).
13113occurrence___5__13__0__52([], A, B, C, D, E, F) :-
13114    occurrence___5__15(A, B, C, D, E, F).
13115occurrence___5__13__0__52([A|B], C, D, E, F, G, H) :-
13116    (   A=suspension(_, active, I, J, K),
13117        I==C,
13118        J==D
13119    ->  setarg(2, A, removed),
13120        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13121                  L),
13122        delete_ht(L, k(C, D), A),
13123        arg(2, H, M),
13124        setarg(2, H, active),
13125        (   M==not_stored_yet
13126        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13127                      N),
13128            insert_ht(N, k(C, G), H),
13129            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13130                      O),
13131            P=[H|O],
13132            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13133                     P),
13134            (   O=[Q|_]
13135            ->  setarg(4, Q, P)
13136            ;   true
13137            ),
13138            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13139                      R),
13140            insert_ht(R, k(C, D, G), H),
13141            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13142                      S),
13143            insert_ht(S, k(C, E, F), H),
13144            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13145                      T),
13146            insert_ht(T, k(C, D), H),
13147            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13148                      U),
13149            insert_ht(U, E, H),
13150            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13151                      V),
13152            insert_ht(V, k(C, E), H),
13153            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13154                      W),
13155            insert_ht(W, k(E, F), H),
13156            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13157                      X),
13158            insert_ht(X, C, H)
13159        ;   true
13160        ),
13161        occurrence_code_id(C, D, K),
13162        Y is D+1,
13163        set_occurrence_code_id(C, Y, K),
13164        (   H=suspension(_, active, _, _, _, _, _, _, _)
13165        ->  setarg(2, H, inactive),
13166            occurrence___5__13__0__52(B,
13167                                      C,
13168                                      D,
13169                                      E,
13170                                      F,
13171                                      G,
13172                                      H)
13173        ;   true
13174        )
13175    ;   occurrence___5__13__0__52(B,
13176                                  C,
13177                                  D,
13178                                  E,
13179                                  F,
13180                                  G,
13181                                  H)
13182    ).
13183occurrence___5__13(A, B, C, D, propagation, E) :-
13184    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13185              F),
13186    lookup_ht(F, k(A, B), G),
13187    !,
13188    occurrence___5__13__0__53(G,
13189                              A,
13190                              B,
13191                              C,
13192                              D,
13193                              propagation,
13194                              E).
13195occurrence___5__13__0__53([], A, B, C, D, E, F) :-
13196    occurrence___5__14(A, B, C, D, E, F).
13197occurrence___5__13__0__53([A|B], C, D, E, F, G, H) :-
13198    (   A=suspension(_, active, I, J, K),
13199        I==C,
13200        J==D,
13201        ( ground(C),
13202          ground(D)
13203        ),
13204        nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
13205                  L),
13206        lookup_ht(L, k(C, D), M),
13207        member(N, M),
13208        N=suspension(_, active, _, _, _)
13209    ->  setarg(2, A, removed),
13210        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13211                  O),
13212        delete_ht(O, k(C, D), A),
13213        arg(2, H, P),
13214        setarg(2, H, active),
13215        (   P==not_stored_yet
13216        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13217                      Q),
13218            insert_ht(Q, k(C, G), H),
13219            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13220                      R),
13221            S=[H|R],
13222            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13223                     S),
13224            (   R=[T|_]
13225            ->  setarg(4, T, S)
13226            ;   true
13227            ),
13228            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13229                      U),
13230            insert_ht(U, k(C, D, G), H),
13231            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13232                      V),
13233            insert_ht(V, k(C, E, F), H),
13234            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13235                      W),
13236            insert_ht(W, k(C, D), H),
13237            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13238                      X),
13239            insert_ht(X, E, H),
13240            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13241                      Y),
13242            insert_ht(Y, k(C, E), H),
13243            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13244                      Z),
13245            insert_ht(Z, k(E, F), H),
13246            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13247                      A1),
13248            insert_ht(A1, C, H)
13249        ;   true
13250        ),
13251        occurrence_code_id(C, D, K),
13252        B1 is D+1,
13253        C1 is K+1,
13254        set_occurrence_code_id(C, B1, C1),
13255        (   H=suspension(_, active, _, _, _, _, _, _, _)
13256        ->  setarg(2, H, inactive),
13257            occurrence___5__13__0__53(B,
13258                                      C,
13259                                      D,
13260                                      E,
13261                                      F,
13262                                      G,
13263                                      H)
13264        ;   true
13265        )
13266    ;   occurrence___5__13__0__53(B,
13267                                  C,
13268                                  D,
13269                                  E,
13270                                  F,
13271                                  G,
13272                                  H)
13273    ).
13274occurrence___5__13(A, B, C, D, E, F) :-
13275    occurrence___5__14(A, B, C, D, E, F).
13276occurrence___5__14(A, B, C, D, propagation, E) :-
13277    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13278              F),
13279    lookup_ht(F, k(A, B), G),
13280    !,
13281    occurrence___5__14__0__54(G,
13282                              A,
13283                              B,
13284                              C,
13285                              D,
13286                              propagation,
13287                              E).
13288occurrence___5__14__0__54([], A, B, C, D, E, F) :-
13289    occurrence___5__15(A, B, C, D, E, F).
13290occurrence___5__14__0__54([A|B], C, D, E, F, G, H) :-
13291    (   A=suspension(_, active, I, J, K),
13292        I==C,
13293        J==D
13294    ->  setarg(2, A, removed),
13295        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13296                  L),
13297        delete_ht(L, k(C, D), A),
13298        arg(2, H, M),
13299        setarg(2, H, active),
13300        (   M==not_stored_yet
13301        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13302                      N),
13303            insert_ht(N, k(C, G), H),
13304            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13305                      O),
13306            P=[H|O],
13307            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13308                     P),
13309            (   O=[Q|_]
13310            ->  setarg(4, Q, P)
13311            ;   true
13312            ),
13313            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13314                      R),
13315            insert_ht(R, k(C, D, G), H),
13316            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13317                      S),
13318            insert_ht(S, k(C, E, F), H),
13319            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13320                      T),
13321            insert_ht(T, k(C, D), H),
13322            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13323                      U),
13324            insert_ht(U, E, H),
13325            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13326                      V),
13327            insert_ht(V, k(C, E), H),
13328            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13329                      W),
13330            insert_ht(W, k(E, F), H),
13331            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13332                      X),
13333            insert_ht(X, C, H)
13334        ;   true
13335        ),
13336        occurrence_code_id(C, D, K),
13337        Y is D+1,
13338        set_occurrence_code_id(C, Y, K),
13339        (   H=suspension(_, active, _, _, _, _, _, _, _)
13340        ->  setarg(2, H, inactive),
13341            occurrence___5__14__0__54(B,
13342                                      C,
13343                                      D,
13344                                      E,
13345                                      F,
13346                                      G,
13347                                      H)
13348        ;   true
13349        )
13350    ;   occurrence___5__14__0__54(B,
13351                                  C,
13352                                  D,
13353                                  E,
13354                                  F,
13355                                  G,
13356                                  H)
13357    ).
13358occurrence___5__14(A, B, C, D, E, F) :-
13359    occurrence___5__15(A, B, C, D, E, F).
13360occurrence___5__15(A, B, C, D, E, F) :-
13361    arg(2, F, G),
13362    setarg(2, F, active),
13363    (   G==not_stored_yet
13364    ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13365                  H),
13366        insert_ht(H, k(A, E), F),
13367        nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13368                  I),
13369        J=[F|I],
13370        b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13371                 J),
13372        (   I=[K|_]
13373        ->  setarg(4, K, J)
13374        ;   true
13375        ),
13376        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13377                  L),
13378        insert_ht(L, k(A, B, E), F),
13379        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13380                  M),
13381        insert_ht(M, k(A, C, D), F),
13382        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13383                  N),
13384        insert_ht(N, k(A, B), F),
13385        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13386                  O),
13387        insert_ht(O, C, F),
13388        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13389                  P),
13390        insert_ht(P, k(A, C), F),
13391        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13392                  Q),
13393        insert_ht(Q, k(C, D), F),
13394        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13395                  R),
13396        insert_ht(R, A, F)
13397    ;   true
13398    ).
13399get_occurrence(A, B, C, D) :-
13400    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13401              E),
13402    lookup_ht(E, k(A, B), F),
13403    member(G, F),
13404    G=suspension(_, active, _, _, _, _, H, I, _),
13405    !,
13406    H=C,
13407    I=D.
13408get_occurrence(A, B, _, _) :-
13409    chr_error(internal,
13410              'get_occurrence: missing occurrence ~w:~w\n',
13411              [A, B]).
13412get_occurrence(A, B, C, D, E) :-
13413    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13414              F),
13415    lookup_ht(F, k(A, B), G),
13416    member(H, G),
13417    H=suspension(_, active, _, _, _, _, I, J, K),
13418    !,
13419    I=C,
13420    J=D,
13421    K=E.
13422get_occurrence(A, B, _, _, _) :-
13423    chr_error(internal,
13424              'get_occurrence: missing occurrence ~w:~w\n',
13425              [A, B]).
13426get_occurrence_from_id(A, B, C, D) :-
13427    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13428              E),
13429    lookup_ht(E, k(C, D), F),
13430    member(G, F),
13431    G=suspension(_, active, _, _, H, I, _, _, _),
13432    !,
13433    A=H,
13434    B=I.
13435get_occurrence_from_id(_, _, _, _) :-
13436    chr_error(internal, 'get_occurrence_from_id: missing occurrence ~w:~w\n', []).
13437max_occurrence(A, B) :-
13438    max_occurrence___2__0(A, B, _).
13439max_occurrence___2__0(A, B, C) :-
13440    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13441              D),
13442    lookup_ht(D, A, E),
13443    (   member(F, E),
13444        F=suspension(_, active, _, _, G),
13445        G>=B,
13446        !
13447    ;   !,
13448        max_occurrence___2__0__0__2(E, A, B, C)
13449    ).
13450max_occurrence___2__0__0__2([], A, B, C) :-
13451    max_occurrence___2__1(A, B, C).
13452max_occurrence___2__0__0__2([A|B], C, D, E) :-
13453    (   A=suspension(_, active, _, F, G),
13454        F==C,
13455        D>=G
13456    ->  setarg(2, A, removed),
13457        nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13458                  H),
13459        delete_ht(H, C, A),
13460        max_occurrence___2__0__0__2(B, C, D, E)
13461    ;   max_occurrence___2__0__0__2(B, C, D, E)
13462    ).
13463max_occurrence___2__0(A, B, C) :-
13464    max_occurrence___2__1(A, B, C).
13465max_occurrence___2__1(A, B, C) :-
13466    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
13467              D),
13468    lookup_ht(D, k(A, 0), E),
13469    !,
13470    C=suspension(F, not_stored_yet, t, A, B),
13471    'chr gen_id'(F),
13472    max_occurrence___2__1__0__5(E, A, B, C).
13473max_occurrence___2__1__0__5([], A, B, C) :-
13474    max_occurrence___2__2(A, B, C).
13475max_occurrence___2__1__0__5([A|B], C, D, E) :-
13476    (   A=suspension(_, active, _, F, G, H),
13477        F==C,
13478        H=0,
13479        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13480                  I),
13481        lookup_ht(I, C, J)
13482    ->  max_occurrence___2__1__1__5(J,
13483                                    G,
13484                                    A,
13485                                    B,
13486                                    C,
13487                                    D,
13488                                    E)
13489    ;   max_occurrence___2__1__0__5(B, C, D, E)
13490    ).
13491max_occurrence___2__1__1__5([], _, _, A, B, C, D) :-
13492    max_occurrence___2__1__0__5(A, B, C, D).
13493max_occurrence___2__1__1__5([A|B], C, D, E, F, G, H) :-
13494    (   A=suspension(_, active, _, _, I, _, J, _, _),
13495        I==F,
13496        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13497                  K),
13498        lookup_ht(K, J, L)
13499    ->  max_occurrence___2__1__2__5(L,
13500                                    J,
13501                                    A,
13502                                    B,
13503                                    C,
13504                                    D,
13505                                    E,
13506                                    F,
13507                                    G,
13508                                    H)
13509    ;   max_occurrence___2__1__1__5(B,
13510                                    C,
13511                                    D,
13512                                    E,
13513                                    F,
13514                                    G,
13515                                    H)
13516    ).
13517max_occurrence___2__1__2__5([], _, _, A, B, C, D, E, F, G) :-
13518    max_occurrence___2__1__1__5(A,
13519                                B,
13520                                C,
13521                                D,
13522                                E,
13523                                F,
13524                                G).
13525max_occurrence___2__1__2__5([A|B], C, D, E, F, G, H, I, J, K) :-
13526    (   A=suspension(_, active, _, _, _, _, L, M, _),
13527        A\==D,
13528        L==C,
13529        N=t(250, A, D, G, K),
13530        '$novel_production'(A, N),
13531        '$novel_production'(D, N),
13532        '$novel_production'(G, N),
13533        '$novel_production'(K, N),
13534        F=<J
13535    ->  '$extend_history'(K, N),
13536        arg(2, K, O),
13537        setarg(2, K, active),
13538        (   O==not_stored_yet
13539        ->  nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13540                      P),
13541            insert_ht(P, I, K)
13542        ;   true
13543        ),
13544        passive(C, M),
13545        (   K=suspension(_, active, _, _, _)
13546        ->  setarg(2, K, inactive),
13547            max_occurrence___2__1__2__5(B,
13548                                        C,
13549                                        D,
13550                                        E,
13551                                        F,
13552                                        G,
13553                                        H,
13554                                        I,
13555                                        J,
13556                                        K)
13557        ;   true
13558        )
13559    ;   max_occurrence___2__1__2__5(B,
13560                                    C,
13561                                    D,
13562                                    E,
13563                                    F,
13564                                    G,
13565                                    H,
13566                                    I,
13567                                    J,
13568                                    K)
13569    ).
13570max_occurrence___2__1(A, B, C) :-
13571    C=suspension(D, not_stored_yet, t, A, B),
13572    'chr gen_id'(D),
13573    max_occurrence___2__2(A, B, C).
13574max_occurrence___2__2(A, _, B) :-
13575    arg(2, B, C),
13576    setarg(2, B, active),
13577    (   C==not_stored_yet
13578    ->  nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13579                  D),
13580        insert_ht(D, A, B)
13581    ;   true
13582    ).
13583get_max_occurrence(A, B) :-
13584    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13585              C),
13586    lookup_ht(C, A, D),
13587    member(E, D),
13588    E=suspension(_, active, _, _, F),
13589    !,
13590    B=F.
13591get_max_occurrence(A, _) :-
13592    chr_error(internal,
13593              'get_max_occurrence: missing max occurrence for ~w\n',
13594              [A]).
13595allocation_occurrence(A, B) :-
13596    allocation_occurrence___2__0(A, B, _).
13597allocation_occurrence___2__0(A, 0, B) :-
13598    !,
13599    B=suspension(C, active, t, A, 0),
13600    'chr gen_id'(C),
13601    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13602              D),
13603    insert_ht(D, A, B),
13604    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13605              E),
13606    insert_ht(E, k(A, 0), B),
13607    stored_in_guard_before_next_kept_occurrence(A, 0),
13608    (   B=suspension(_, active, _, _, _)
13609    ->  setarg(2, B, inactive),
13610        allocation_occurrence___2__1(A, 0, B)
13611    ;   true
13612    ).
13613allocation_occurrence___2__0(A, B, C) :-
13614    C=suspension(D, not_stored_yet, t, A, B),
13615    'chr gen_id'(D),
13616    allocation_occurrence___2__1(A, B, C).
13617allocation_occurrence___2__1(A, B, C) :-
13618    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13619              D),
13620    lookup_ht(D, k(A, B), E),
13621    !,
13622    allocation_occurrence___2__1__0__2(E, A, B, C).
13623allocation_occurrence___2__1__0__2([], A, B, C) :-
13624    allocation_occurrence___2__2(A, B, C).
13625allocation_occurrence___2__1__0__2([A|B], C, D, E) :-
13626    (   A=suspension(_, active, _, _, F, G, H, I, J),
13627        F==C,
13628        G==D,
13629        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', K),
13630        lookup_ht(K, H, L)
13631    ->  allocation_occurrence___2__1__1__2(L,
13632                                           H,
13633                                           I,
13634                                           J,
13635                                           A,
13636                                           B,
13637                                           C,
13638                                           D,
13639                                           E)
13640    ;   allocation_occurrence___2__1__0__2(B, C, D, E)
13641    ).
13642allocation_occurrence___2__1__1__2([], _, _, _, _, A, B, C, D) :-
13643    allocation_occurrence___2__1__0__2(A, B, C, D).
13644allocation_occurrence___2__1__1__2([A|B], C, D, E, F, G, H, I, J) :-
13645    (   A=suspension(_, active, _, _, K, L),
13646        K==C,
13647        M=t(60, A, F, J),
13648        '$novel_production'(A, M),
13649        '$novel_production'(F, M),
13650        '$novel_production'(J, M)
13651    ->  '$extend_history'(J, M),
13652        arg(2, J, N),
13653        setarg(2, J, active),
13654        (   N==not_stored_yet
13655        ->  nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13656                      O),
13657            insert_ht(O, H, J),
13658            nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13659                      P),
13660            insert_ht(P, k(H, I), J)
13661        ;   true
13662        ),
13663        \+ is_passive(C, D),
13664        E==propagation,
13665        (   stored_in_guard_before_next_kept_occurrence(H, I)
13666        ->  true
13667        ;   L=pragma(rule([_|_], _, _, _), _, _, _, _)
13668        ->  is_observed(H, I)
13669        ;   is_least_occurrence(C)
13670        ->  is_observed(H, I)
13671        ;   true
13672        ),
13673        (   J=suspension(_, active, _, _, _)
13674        ->  setarg(2, J, inactive),
13675            allocation_occurrence___2__1__1__2(B,
13676                                               C,
13677                                               D,
13678                                               E,
13679                                               F,
13680                                               G,
13681                                               H,
13682                                               I,
13683                                               J)
13684        ;   true
13685        )
13686    ;   allocation_occurrence___2__1__1__2(B,
13687                                           C,
13688                                           D,
13689                                           E,
13690                                           F,
13691                                           G,
13692                                           H,
13693                                           I,
13694                                           J)
13695    ).
13696allocation_occurrence___2__1(A, B, C) :-
13697    allocation_occurrence___2__2(A, B, C).
13698allocation_occurrence___2__2(A, B, C) :-
13699    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', D),
13700    lookup_ht(D, A, E),
13701    !,
13702    allocation_occurrence___2__2__0__3(E, A, B, C).
13703allocation_occurrence___2__2__0__3([], A, B, C) :-
13704    allocation_occurrence___2__3(A, B, C).
13705allocation_occurrence___2__2__0__3([A|B], C, D, E) :-
13706    (   A=suspension(_, active, _, _, F, G, H, I, _),
13707        F==C,
13708        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
13709                  J),
13710        lookup_ht(J, H, K)
13711    ->  allocation_occurrence___2__2__1__3(K,
13712                                           G,
13713                                           H,
13714                                           I,
13715                                           A,
13716                                           B,
13717                                           C,
13718                                           D,
13719                                           E)
13720    ;   allocation_occurrence___2__2__0__3(B, C, D, E)
13721    ).
13722allocation_occurrence___2__2__1__3([], _, _, _, _, A, B, C, D) :-
13723    allocation_occurrence___2__2__0__3(A, B, C, D).
13724allocation_occurrence___2__2__1__3([A|B], C, D, E, F, G, H, I, J) :-
13725    (   A=suspension(_, active, K, L),
13726        K==D,
13727        L=[M|N],
13728        M==E,
13729        I>=C,
13730        ( ground(D),
13731          nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
13732                    O),
13733          lookup_ht(O, D, P)
13734        ),
13735        member(Q, P),
13736        Q=suspension(_, active, _, _, _, _),
13737        \+ may_trigger(H)
13738    ->  setarg(2, A, removed),
13739        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
13740                    R),
13741          delete_ht(R, k(D, [E|N]), A)
13742        ),
13743        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
13744                  S),
13745        delete_ht(S, D, A),
13746        arg(2, J, T),
13747        setarg(2, J, active),
13748        (   T==not_stored_yet
13749        ->  nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13750                      U),
13751            insert_ht(U, H, J),
13752            nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13753                      V),
13754            insert_ht(V, k(H, I), J)
13755        ;   true
13756        ),
13757        least_occurrence(D, N),
13758        (   J=suspension(_, active, _, _, _)
13759        ->  setarg(2, J, inactive),
13760            allocation_occurrence___2__2__1__3(B,
13761                                               C,
13762                                               D,
13763                                               E,
13764                                               F,
13765                                               G,
13766                                               H,
13767                                               I,
13768                                               J)
13769        ;   true
13770        )
13771    ;   allocation_occurrence___2__2__1__3(B,
13772                                           C,
13773                                           D,
13774                                           E,
13775                                           F,
13776                                           G,
13777                                           H,
13778                                           I,
13779                                           J)
13780    ).
13781allocation_occurrence___2__2(A, B, C) :-
13782    allocation_occurrence___2__3(A, B, C).
13783allocation_occurrence___2__3(A, B, C) :-
13784    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
13785              D),
13786    lookup_ht(D, A, E),
13787    !,
13788    allocation_occurrence___2__3__0__5(E, A, B, C).
13789allocation_occurrence___2__3__0__5([], A, B, C) :-
13790    allocation_occurrence___2__4(A, B, C).
13791allocation_occurrence___2__3__0__5([A|B], C, D, E) :-
13792    (   A=suspension(_, active, F, G, H, I),
13793        F==C,
13794        G>1,
13795        ( ground(C),
13796          ground(G),
13797          nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13798                    J),
13799          lookup_ht(J, k(C, G), K)
13800        ),
13801        member(L, K),
13802        L=suspension(_, active, _, _, _, M, _, _, _),
13803        D>M
13804    ->  setarg(2, A, removed),
13805        ( nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
13806                    N),
13807          delete_ht(N, C, A)
13808        ),
13809        nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
13810                  O),
13811        delete_ht(O, k(C, G), A),
13812        arg(2, E, P),
13813        setarg(2, E, active),
13814        (   P==not_stored_yet
13815        ->  nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13816                      Q),
13817            insert_ht(Q, C, E),
13818            nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13819                      R),
13820            insert_ht(R, k(C, D), E)
13821        ;   true
13822        ),
13823        functional_dependency(C, 1, H, I),
13824        (   E=suspension(_, active, _, _, _)
13825        ->  setarg(2, E, inactive),
13826            allocation_occurrence___2__3__0__5(B,
13827                                               C,
13828                                               D,
13829                                               E)
13830        ;   true
13831        )
13832    ;   allocation_occurrence___2__3__0__5(B, C, D, E)
13833    ).
13834allocation_occurrence___2__3(A, B, C) :-
13835    allocation_occurrence___2__4(A, B, C).
13836allocation_occurrence___2__4(A, B, C) :-
13837    arg(2, C, D),
13838    setarg(2, C, active),
13839    (   D==not_stored_yet
13840    ->  nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13841                  E),
13842        insert_ht(E, A, C),
13843        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13844                  F),
13845        insert_ht(F, k(A, B), C)
13846    ;   true
13847    ).
13848get_allocation_occurrence(A, B) :-
13849    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13850              C),
13851    lookup_ht(C, A, D),
13852    member(E, D),
13853    E=suspension(_, active, _, _, F),
13854    !,
13855    B=F.
13856get_allocation_occurrence(_, A) :-
13857    chr_pp_flag(late_allocation, off),
13858    A=0.
13859rule(A, B) :-
13860    rule___2__0(A, B, _).
13861rule___2__0(A, B, C) :-
13862    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
13863    lookup_ht(D, A, E),
13864    !,
13865    C=suspension(F, not_stored_yet, t, _, A, B),
13866    'chr gen_id'(F),
13867    rule___2__0__0__1(E, A, B, C).
13868rule___2__0__0__1([], A, B, C) :-
13869    rule___2__1(A, B, C).
13870rule___2__0__0__1([A|B], C, D, E) :-
13871    (   A=suspension(_, active, _, _, F, G, H, I, J),
13872        H==C,
13873        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13874                  K),
13875        lookup_ht(K, k(F, G), L)
13876    ->  rule___2__0__1__1(L,
13877                          F,
13878                          G,
13879                          I,
13880                          J,
13881                          A,
13882                          B,
13883                          C,
13884                          D,
13885                          E)
13886    ;   rule___2__0__0__1(B, C, D, E)
13887    ).
13888rule___2__0__1__1([], _, _, _, _, _, A, B, C, D) :-
13889    rule___2__0__0__1(A, B, C, D).
13890rule___2__0__1__1([A|B], C, D, E, F, G, H, I, J, K) :-
13891    (   A=suspension(_, active, _, L, M),
13892        L==C,
13893        M==D,
13894        N=t(60, K, G, A),
13895        '$novel_production'(K, N),
13896        '$novel_production'(G, N),
13897        '$novel_production'(A, N)
13898    ->  '$extend_history'(K, N),
13899        arg(2, K, O),
13900        setarg(2, K, active),
13901        (   O==not_stored_yet
13902        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
13903                      P),
13904            Q=[K|P],
13905            b_setval('$chr_store_global_ground_chr_translate____rule___2',
13906                     Q),
13907            (   P=[R|_]
13908            ->  setarg(4, R, Q)
13909            ;   true
13910            ),
13911            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
13912                      S),
13913            insert_ht(S, I, K)
13914        ;   true
13915        ),
13916        \+ is_passive(I, E),
13917        F==propagation,
13918        (   stored_in_guard_before_next_kept_occurrence(C, D)
13919        ->  true
13920        ;   J=pragma(rule([_|_], _, _, _), _, _, _, _)
13921        ->  is_observed(C, D)
13922        ;   is_least_occurrence(I)
13923        ->  is_observed(C, D)
13924        ;   true
13925        ),
13926        (   K=suspension(_, active, _, _, _, _)
13927        ->  setarg(2, K, inactive),
13928            rule___2__0__1__1(B,
13929                              C,
13930                              D,
13931                              E,
13932                              F,
13933                              G,
13934                              H,
13935                              I,
13936                              J,
13937                              K)
13938        ;   true
13939        )
13940    ;   rule___2__0__1__1(B,
13941                          C,
13942                          D,
13943                          E,
13944                          F,
13945                          G,
13946                          H,
13947                          I,
13948                          J,
13949                          K)
13950    ).
13951rule___2__0(A, B, C) :-
13952    C=suspension(D, not_stored_yet, t, _, A, B),
13953    'chr gen_id'(D),
13954    rule___2__1(A, B, C).
13955rule___2__1(A, B, C) :-
13956    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
13957              D),
13958    lookup_ht(D, A, E),
13959    !,
13960    rule___2__1__0__2(E, A, B, C).
13961rule___2__1__0__2([], A, B, C) :-
13962    rule___2__2(A, B, C).
13963rule___2__1__0__2([A|B], C, D, E) :-
13964    (   A=suspension(_, active, F, G),
13965        F==C,
13966        G=[H|I],
13967        ( ground(C),
13968          ground(H),
13969          nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13970                    J),
13971          lookup_ht(J, k(C, H), K)
13972        ),
13973        member(L, K),
13974        L=suspension(_, active, _, _, M, N, _, _, _),
13975        ( nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13976                    O),
13977          lookup_ht(O, M, P)
13978        ),
13979        member(Q, P),
13980        Q=suspension(_, active, _, _, R),
13981        R>=N,
13982        \+ may_trigger(M)
13983    ->  setarg(2, A, removed),
13984        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
13985                    S),
13986          delete_ht(S, k(C, [H|I]), A)
13987        ),
13988        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
13989                  T),
13990        delete_ht(T, C, A),
13991        arg(2, E, U),
13992        setarg(2, E, active),
13993        (   U==not_stored_yet
13994        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
13995                      V),
13996            W=[E|V],
13997            b_setval('$chr_store_global_ground_chr_translate____rule___2',
13998                     W),
13999            (   V=[X|_]
14000            ->  setarg(4, X, W)
14001            ;   true
14002            ),
14003            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14004                      Y),
14005            insert_ht(Y, C, E)
14006        ;   true
14007        ),
14008        least_occurrence(C, I),
14009        (   E=suspension(_, active, _, _, _, _)
14010        ->  setarg(2, E, inactive),
14011            rule___2__1__0__2(B, C, D, E)
14012        ;   true
14013        )
14014    ;   rule___2__1__0__2(B, C, D, E)
14015    ).
14016rule___2__1(A, B, C) :-
14017    rule___2__2(A, B, C).
14018rule___2__2(A, B, C) :-
14019    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14020              D),
14021    lookup_ht(D, A, E),
14022    !,
14023    rule___2__2__0__3(E, A, B, C).
14024rule___2__2__0__3([], A, B, C) :-
14025    rule___2__3(A, B, C).
14026rule___2__2__0__3([A|B], C, D, E) :-
14027    (   A=suspension(_, active, F, G),
14028        F==C,
14029        G=[H|I],
14030        ( ground(C),
14031          ground(H)
14032        ),
14033        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
14034                  J),
14035        lookup_ht(J, k(C, H), K),
14036        member(L, K),
14037        L=suspension(_, active, _, _, _)
14038    ->  setarg(2, A, removed),
14039        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
14040                    M),
14041          delete_ht(M, k(C, [H|I]), A)
14042        ),
14043        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14044                  N),
14045        delete_ht(N, C, A),
14046        arg(2, E, O),
14047        setarg(2, E, active),
14048        (   O==not_stored_yet
14049        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14050                      P),
14051            Q=[E|P],
14052            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14053                     Q),
14054            (   P=[R|_]
14055            ->  setarg(4, R, Q)
14056            ;   true
14057            ),
14058            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14059                      S),
14060            insert_ht(S, C, E)
14061        ;   true
14062        ),
14063        least_occurrence(C, I),
14064        (   E=suspension(_, active, _, _, _, _)
14065        ->  setarg(2, E, inactive),
14066            rule___2__2__0__3(B, C, D, E)
14067        ;   true
14068        )
14069    ;   rule___2__2__0__3(B, C, D, E)
14070    ).
14071rule___2__2(A, B, C) :-
14072    rule___2__3(A, B, C).
14073rule___2__3(A, B, C) :-
14074    B=pragma(rule([], _, _, _), ids([], D), _, _, _),
14075    !,
14076    arg(2, C, E),
14077    setarg(2, C, active),
14078    (   E==not_stored_yet
14079    ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2', F),
14080        G=[C|F],
14081        b_setval('$chr_store_global_ground_chr_translate____rule___2', G),
14082        (   F=[H|_]
14083        ->  setarg(4, H, G)
14084        ;   true
14085        ),
14086        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I),
14087        insert_ht(I, A, C)
14088    ;   true
14089    ),
14090    least_occurrence(A, D),
14091    (   C=suspension(_, active, _, _, _, _)
14092    ->  setarg(2, C, inactive),
14093        rule___2__4(A, B, C)
14094    ;   true
14095    ).
14096rule___2__3(A, B, C) :-
14097    rule___2__4(A, B, C).
14098rule___2__4(A, B, C) :-
14099    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14100              D),
14101    lookup_ht(D, A, E),
14102    member(F, E),
14103    F=suspension(_, active, _, _, _, G, H, I, J, _),
14104    B=pragma(rule(K, L, H, M), N, O, P, A),
14105    H\==true,
14106    append(J, I, Q),
14107    (   conj2list(H, R),
14108        append(Q, R, S),
14109        guard_entailment:entails_guard(S, fail)
14110    ->  T=fail
14111    ;   simplify_guard(H, M, Q, T, U)
14112    ),
14113    H\==T,
14114    !,
14115    setarg(2, F, removed),
14116    arg(4, F, V),
14117    (   var(V)
14118    ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
14119                  W),
14120        W=[_|X],
14121        b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
14122                 X),
14123        (   X=[Y|_]
14124        ->  setarg(4, Y, _)
14125        ;   true
14126        )
14127    ;   V=[_, _|X],
14128        setarg(2, V, X),
14129        (   X=[Y|_]
14130        ->  setarg(4, Y, V)
14131        ;   true
14132        )
14133    ),
14134    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14135              Z),
14136    delete_ht(Z, A, F),
14137    (   var(C)
14138    ->  true
14139    ;   arg(2, C, A1),
14140        setarg(2, C, removed),
14141        (   A1==not_stored_yet
14142        ->  true
14143        ;   arg(4, C, B1),
14144            (   var(B1)
14145            ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14146                          C1),
14147                C1=[_|D1],
14148                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14149                         D1),
14150                (   D1=[E1|_]
14151                ->  setarg(4, E1, _)
14152                ;   true
14153                )
14154            ;   B1=[_, _|D1],
14155                setarg(2, B1, D1),
14156                (   D1=[E1|_]
14157                ->  setarg(4, E1, B1)
14158                ;   true
14159                )
14160            ),
14161            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14162                      F1),
14163            delete_ht(F1, A, C)
14164        )
14165    ),
14166    rule(A,
14167         pragma(rule(K, L, T, U),
14168                N,
14169                O,
14170                P,
14171                A)),
14172    prev_guard_list(A, G, T, I, J, []).
14173rule___2__4(A, B, C) :-
14174    nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
14175              D),
14176    !,
14177    rule___2__4__0__10(D, A, B, C).
14178rule___2__4__0__10([], A, B, C) :-
14179    rule___2__5(A, B, C).
14180rule___2__4__0__10([A|B], C, D, E) :-
14181    (   A=suspension(_, active, _, _),
14182        F=t(174, E, A),
14183        '$novel_production'(E, F),
14184        '$novel_production'(A, F)
14185    ->  '$extend_history'(E, F),
14186        arg(2, E, G),
14187        setarg(2, E, active),
14188        (   G==not_stored_yet
14189        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14190                      H),
14191            I=[E|H],
14192            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14193                     I),
14194            (   H=[J|_]
14195            ->  setarg(4, J, I)
14196            ;   true
14197            ),
14198            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14199                      K),
14200            insert_ht(K, C, E)
14201        ;   true
14202        ),
14203        D=pragma(rule(L, M, _, _), _, _, _, _),
14204        append(L, M, N),
14205        make_head_matchings_explicit_(N, O, P),
14206        copy_term_nat(O-P, Q-R),
14207        make_head_matchings_explicit_memo_table(C, Q, R),
14208        (   E=suspension(_, active, _, _, _, _)
14209        ->  setarg(2, E, inactive),
14210            rule___2__4__0__10(B, C, D, E)
14211        ;   true
14212        )
14213    ;   rule___2__4__0__10(B, C, D, E)
14214    ).
14215rule___2__4(A, B, C) :-
14216    rule___2__5(A, B, C).
14217rule___2__5(A, B, C) :-
14218    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14219              D),
14220    lookup_ht(D, A, E),
14221    !,
14222    rule___2__5__0__11(E, A, B, C).
14223rule___2__5__0__11([], A, B, C) :-
14224    rule___2__6(A, B, C).
14225rule___2__5__0__11([A|B], C, D, E) :-
14226    (   A=suspension(_, active, _, _, F, _, G, H, I, _),
14227        F==C,
14228        J=t(178, A, E),
14229        '$novel_production'(A, J),
14230        '$novel_production'(E, J),
14231        chr_pp_flag(check_impossible_rules, on),
14232        D=pragma(rule(_, _, G, _), _, _, _, C),
14233        conj2list(G, K),
14234        append(I, H, L),
14235        append(L, K, M),
14236        guard_entailment:entails_guard(M, fail)
14237    ->  '$extend_history'(E, J),
14238        arg(2, E, N),
14239        setarg(2, E, active),
14240        (   N==not_stored_yet
14241        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14242                      O),
14243            P=[E|O],
14244            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14245                     P),
14246            (   O=[Q|_]
14247            ->  setarg(4, Q, P)
14248            ;   true
14249            ),
14250            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14251                      R),
14252            insert_ht(R, C, E)
14253        ;   true
14254        ),
14255        chr_warning(weird_program,
14256                    'Heads will never match or guard will always fail in ~@.\n\tThis rule will never fire!\n',
14257                    [format_rule(D)]),
14258        set_all_passive(C),
14259        (   E=suspension(_, active, _, _, _, _)
14260        ->  setarg(2, E, inactive),
14261            rule___2__5__0__11(B, C, D, E)
14262        ;   true
14263        )
14264    ;   rule___2__5__0__11(B, C, D, E)
14265    ).
14266rule___2__5(A, B, C) :-
14267    rule___2__6(A, B, C).
14268rule___2__6(A, B, C) :-
14269    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14270              D),
14271    lookup_ht(D, A, E),
14272    member(F, E),
14273    F=suspension(_, active, _, _, _, G, H, I, J, _),
14274    B=pragma(rule(K, L, H, M), N, O, P, A),
14275    simplify_heads(J, I, H, M, Q, R),
14276    Q\==[],
14277    extract_arguments(K, S),
14278    extract_arguments(L, T),
14279    extract_arguments(G, U),
14280    replace_some_heads(S,
14281                       T,
14282                       U,
14283                       Q,
14284                       V,
14285                       W,
14286                       H,
14287                       M,
14288                       X),
14289    substitute_arguments(K, V, Y),
14290    substitute_arguments(L, W, Z),
14291    append(R, X, A1),
14292    list2conj(A1, B1),
14293    C1=pragma(rule(Y, Z, H, (B1, M)), N, O, P, A),
14294    (   K\==Y
14295    ;   L\==Z
14296    ),
14297    !,
14298    (   var(C)
14299    ->  true
14300    ;   arg(2, C, D1),
14301        setarg(2, C, removed),
14302        (   D1==not_stored_yet
14303        ->  true
14304        ;   arg(4, C, E1),
14305            (   var(E1)
14306            ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14307                          F1),
14308                F1=[_|G1],
14309                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14310                         G1),
14311                (   G1=[H1|_]
14312                ->  setarg(4, H1, _)
14313                ;   true
14314                )
14315            ;   E1=[_, _|G1],
14316                setarg(2, E1, G1),
14317                (   G1=[H1|_]
14318                ->  setarg(4, H1, E1)
14319                ;   true
14320                )
14321            ),
14322            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14323                      I1),
14324            delete_ht(I1, A, C)
14325        )
14326    ),
14327    rule(A, C1).
14328rule___2__6(A, B, C) :-
14329    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
14330    lookup_ht(D, A, E),
14331    !,
14332    rule___2__6__0__13(E, A, B, C).
14333rule___2__6__0__13([], A, B, C) :-
14334    rule___2__7(A, B, C).
14335rule___2__6__0__13([A|B], C, D, E) :-
14336    (   A=suspension(_, active, _, _, F, G, H, _, _),
14337        H==C,
14338        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
14339                  I),
14340        lookup_ht(I, k(F, C), J)
14341    ->  rule___2__6__1__13(J,
14342                           F,
14343                           G,
14344                           A,
14345                           B,
14346                           C,
14347                           D,
14348                           E)
14349    ;   rule___2__6__0__13(B, C, D, E)
14350    ).
14351rule___2__6__1__13([], _, _, _, A, B, C, D) :-
14352    rule___2__6__0__13(A, B, C, D).
14353rule___2__6__1__13([A|B], C, D, E, F, G, H, I) :-
14354    (   A=suspension(_, active, _, _, J, K, L, M, _),
14355        A\==E,
14356        J==C,
14357        L==G,
14358        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14359                  N),
14360        lookup_ht(N, G, O)
14361    ->  rule___2__6__2__13(O,
14362                           K,
14363                           M,
14364                           A,
14365                           B,
14366                           C,
14367                           D,
14368                           E,
14369                           F,
14370                           G,
14371                           H,
14372                           I)
14373    ;   rule___2__6__1__13(B,
14374                           C,
14375                           D,
14376                           E,
14377                           F,
14378                           G,
14379                           H,
14380                           I)
14381    ).
14382rule___2__6__2__13([], _, _, _, A, B, C, D, E, F, G, H) :-
14383    rule___2__6__1__13(A,
14384                       B,
14385                       C,
14386                       D,
14387                       E,
14388                       F,
14389                       G,
14390                       H).
14391rule___2__6__2__13([A|B], C, D, E, F, G, H, I, J, K, L, M) :-
14392    (   A=suspension(_, active, _, _, N, _, _, _, _, _),
14393        N==K,
14394        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
14395                  O)
14396    ->  rule___2__6__3__13(O,
14397                           A,
14398                           B,
14399                           C,
14400                           D,
14401                           E,
14402                           F,
14403                           G,
14404                           H,
14405                           I,
14406                           J,
14407                           K,
14408                           L,
14409                           M)
14410    ;   rule___2__6__2__13(B,
14411                           C,
14412                           D,
14413                           E,
14414                           F,
14415                           G,
14416                           H,
14417                           I,
14418                           J,
14419                           K,
14420                           L,
14421                           M)
14422    ).
14423rule___2__6__3__13([], _, A, B, C, D, E, F, G, H, I, J, K, L) :-
14424    rule___2__6__2__13(A,
14425                       B,
14426                       C,
14427                       D,
14428                       E,
14429                       F,
14430                       G,
14431                       H,
14432                       I,
14433                       J,
14434                       K,
14435                       L).
14436rule___2__6__3__13([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O) :-
14437    (   A=suspension(_, active, _, P),
14438        E<J,
14439        chr_pp_flag(occurrence_subsumption, on),
14440        N=pragma(rule(Q, _, _, _), _, _, _, _),
14441        Q\==[],
14442        \+ tree_set_memberchk(I, P)
14443    ->  setarg(2, A, removed),
14444        arg(3, A, R),
14445        (   var(R)
14446        ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
14447                      S),
14448            S=[_|T],
14449            b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
14450                     T),
14451            (   T=[U|_]
14452            ->  setarg(3, U, _)
14453            ;   true
14454            )
14455        ;   R=[_, _|T],
14456            setarg(2, R, T),
14457            (   T=[U|_]
14458            ->  setarg(3, U, R)
14459            ;   true
14460            )
14461        ),
14462        arg(2, O, V),
14463        setarg(2, O, active),
14464        (   V==not_stored_yet
14465        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14466                      W),
14467            X=[O|W],
14468            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14469                     X),
14470            (   W=[Y|_]
14471            ->  setarg(4, Y, X)
14472            ;   true
14473            ),
14474            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14475                      Z),
14476            insert_ht(Z, M, O)
14477        ;   true
14478        ),
14479        first_occ_in_rule(M, I, E, F),
14480        tree_set_add(P, I, A1),
14481        multiple_occ_constraints_checked(A1),
14482        (   O=suspension(_, active, _, _, _, _)
14483        ->  setarg(2, O, inactive),
14484            rule___2__6__3__13(B,
14485                               C,
14486                               D,
14487                               E,
14488                               F,
14489                               G,
14490                               H,
14491                               I,
14492                               J,
14493                               K,
14494                               L,
14495                               M,
14496                               N,
14497                               O)
14498        ;   true
14499        )
14500    ;   rule___2__6__3__13(B,
14501                           C,
14502                           D,
14503                           E,
14504                           F,
14505                           G,
14506                           H,
14507                           I,
14508                           J,
14509                           K,
14510                           L,
14511                           M,
14512                           N,
14513                           O)
14514    ).
14515rule___2__6(A, B, C) :-
14516    rule___2__7(A, B, C).
14517rule___2__7(A, B, C) :-
14518    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', D),
14519    lookup_ht(D, A, E),
14520    !,
14521    rule___2__7__0__15(E, A, B, C).
14522rule___2__7__0__15([], A, B, C) :-
14523    rule___2__8(A, B, C).
14524rule___2__7__0__15([A|B], C, D, E) :-
14525    (   A=suspension(_, active, _, F, G),
14526        F==C,
14527        H=t(251, E, A),
14528        '$novel_production'(E, H),
14529        '$novel_production'(A, H),
14530        D=pragma(rule(_, _, _, _), ids([G|I], J), _, _, C)
14531    ->  '$extend_history'(E, H),
14532        arg(2, E, K),
14533        setarg(2, E, active),
14534        (   K==not_stored_yet
14535        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14536                      L),
14537            M=[E|L],
14538            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14539                     M),
14540            (   L=[N|_]
14541            ->  setarg(4, N, M)
14542            ;   true
14543            ),
14544            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14545                      O),
14546            insert_ht(O, C, E)
14547        ;   true
14548        ),
14549        append(I, J, P),
14550        check_all_passive(C, P),
14551        (   E=suspension(_, active, _, _, _, _)
14552        ->  setarg(2, E, inactive),
14553            rule___2__7__0__15(B, C, D, E)
14554        ;   true
14555        )
14556    ;   rule___2__7__0__15(B, C, D, E)
14557    ).
14558rule___2__7(A, B, C) :-
14559    rule___2__8(A, B, C).
14560rule___2__8(A, B, C) :-
14561    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', D),
14562    lookup_ht(D, A, E),
14563    !,
14564    rule___2__8__0__16(E, A, B, C).
14565rule___2__8__0__16([], A, B, C) :-
14566    rule___2__9(A, B, C).
14567rule___2__8__0__16([A|B], C, D, E) :-
14568    (   A=suspension(_, active, _, F, G),
14569        F==C,
14570        H=t(252, E, A),
14571        '$novel_production'(E, H),
14572        '$novel_production'(A, H),
14573        D=pragma(rule(_, _, _, _), ids([], [G|I]), _, _, C)
14574    ->  '$extend_history'(E, H),
14575        arg(2, E, J),
14576        setarg(2, E, active),
14577        (   J==not_stored_yet
14578        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14579                      K),
14580            L=[E|K],
14581            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14582                     L),
14583            (   K=[M|_]
14584            ->  setarg(4, M, L)
14585            ;   true
14586            ),
14587            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14588                      N),
14589            insert_ht(N, C, E)
14590        ;   true
14591        ),
14592        check_all_passive(C, I),
14593        (   E=suspension(_, active, _, _, _, _)
14594        ->  setarg(2, E, inactive),
14595            rule___2__8__0__16(B, C, D, E)
14596        ;   true
14597        )
14598    ;   rule___2__8__0__16(B, C, D, E)
14599    ).
14600rule___2__8(A, B, C) :-
14601    rule___2__9(A, B, C).
14602rule___2__9(A, B, C) :-
14603    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
14604              D),
14605    lookup_ht(D, k(A, []), E),
14606    !,
14607    rule___2__9__0__17(E, A, B, C).
14608rule___2__9__0__17([], A, B, C) :-
14609    rule___2__10(A, B, C).
14610rule___2__9__0__17([A|B], C, D, E) :-
14611    (   A=suspension(_, active, F, G),
14612        F==C,
14613        G=[]
14614    ->  setarg(2, A, removed),
14615        ( nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
14616                    H),
14617          delete_ht(H, k(C, []), A)
14618        ),
14619        nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
14620                  I),
14621        delete_ht(I, C, A),
14622        arg(2, E, J),
14623        setarg(2, E, active),
14624        (   J==not_stored_yet
14625        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14626                      K),
14627            L=[E|K],
14628            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14629                     L),
14630            (   K=[M|_]
14631            ->  setarg(4, M, L)
14632            ;   true
14633            ),
14634            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14635                      N),
14636            insert_ht(N, C, E)
14637        ;   true
14638        ),
14639        chr_warning(weird_program,
14640                    'All heads passive in ~@.\n\tThis rule never fires. Please check your program.\n',
14641                    [format_rule(D)]),
14642        (   E=suspension(_, active, _, _, _, _)
14643        ->  setarg(2, E, inactive),
14644            rule___2__9__0__17(B, C, D, E)
14645        ;   true
14646        )
14647    ;   rule___2__9__0__17(B, C, D, E)
14648    ).
14649rule___2__9(A, B, C) :-
14650    rule___2__10(A, B, C).
14651rule___2__10(A, B, C) :-
14652    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
14653    lookup_ht(D, A, E),
14654    !,
14655    rule___2__10__0__22(E, A, B, C).
14656rule___2__10__0__22([], A, B, C) :-
14657    rule___2__11(A, B, C).
14658rule___2__10__0__22([A|B], C, D, E) :-
14659    (   A=suspension(_, active, _, _, F, _, G, H, I),
14660        G==C,
14661        nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
14662                  J)
14663    ->  rule___2__10__1__22(J,
14664                            F,
14665                            H,
14666                            I,
14667                            A,
14668                            B,
14669                            C,
14670                            D,
14671                            E)
14672    ;   rule___2__10__0__22(B, C, D, E)
14673    ).
14674rule___2__10__1__22([], _, _, _, _, A, B, C, D) :-
14675    rule___2__10__0__22(A, B, C, D).
14676rule___2__10__1__22([A|B], C, D, E, F, G, H, I, J) :-
14677    (   A=suspension(_, active, _, _),
14678        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
14679                  K),
14680        lookup_ht(K, C, L)
14681    ->  rule___2__10__2__22(L,
14682                            A,
14683                            B,
14684                            C,
14685                            D,
14686                            E,
14687                            F,
14688                            G,
14689                            H,
14690                            I,
14691                            J)
14692    ;   rule___2__10__1__22(B,
14693                            C,
14694                            D,
14695                            E,
14696                            F,
14697                            G,
14698                            H,
14699                            I,
14700                            J)
14701    ).
14702rule___2__10__2__22([], _, A, B, C, D, E, F, G, H, I) :-
14703    rule___2__10__1__22(A,
14704                        B,
14705                        C,
14706                        D,
14707                        E,
14708                        F,
14709                        G,
14710                        H,
14711                        I).
14712rule___2__10__2__22([A|B], C, D, E, F, G, H, I, J, K, L) :-
14713    (   A=suspension(_, active, _, _, M, N),
14714        M==E,
14715        O=t(330, C, H, L, A),
14716        '$novel_production'(C, O),
14717        '$novel_production'(H, O),
14718        '$novel_production'(L, O),
14719        '$novel_production'(A, O)
14720    ->  '$extend_history'(L, O),
14721        arg(2, L, P),
14722        setarg(2, L, active),
14723        (   P==not_stored_yet
14724        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14725                      Q),
14726            R=[L|Q],
14727            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14728                     R),
14729            (   Q=[S|_]
14730            ->  setarg(4, S, R)
14731            ;   true
14732            ),
14733            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14734                      T),
14735            insert_ht(T, J, L)
14736        ;   true
14737        ),
14738        K=pragma(rule(U, V, W, _), _, _, _, _),
14739        (   is_passive(J, F)
14740        ->  true
14741        ;   G==simplification
14742        ->  select(X, U, _),
14743            X=..[_|Y],
14744            term_variables(W, Z),
14745            partial_wake_args(Y, N, Z, E)
14746        ;   select(X, V, _),
14747            X=..[_|Y],
14748            term_variables(W, Z),
14749            partial_wake_args(Y, N, Z, E)
14750        ),
14751        (   L=suspension(_, active, _, _, _, _)
14752        ->  setarg(2, L, inactive),
14753            rule___2__10__2__22(B,
14754                                C,
14755                                D,
14756                                E,
14757                                F,
14758                                G,
14759                                H,
14760                                I,
14761                                J,
14762                                K,
14763                                L)
14764        ;   true
14765        )
14766    ;   rule___2__10__2__22(B,
14767                            C,
14768                            D,
14769                            E,
14770                            F,
14771                            G,
14772                            H,
14773                            I,
14774                            J,
14775                            K,
14776                            L)
14777    ).
14778rule___2__10(A, B, C) :-
14779    rule___2__11(A, B, C).
14780rule___2__11(A, _, B) :-
14781    arg(2, B, C),
14782    setarg(2, B, active),
14783    (   C==not_stored_yet
14784    ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2', D),
14785        E=[B|D],
14786        b_setval('$chr_store_global_ground_chr_translate____rule___2', E),
14787        (   D=[F|_]
14788        ->  setarg(4, F, E)
14789        ;   true
14790        ),
14791        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
14792        insert_ht(G, A, B)
14793    ;   true
14794    ).
14795get_rule(A, B) :-
14796    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', C),
14797    lookup_ht(C, A, D),
14798    member(E, D),
14799    E=suspension(_, active, _, _, _, F),
14800    !,
14801    B=F.
14802get_rule(_, _) :-
14803    fail.
14804least_occurrence(A, [B|C]) :-
14805    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', D),
14806    lookup_ht(D, A, E),
14807    member(F, E),
14808    F=suspension(_, active, _, _, _, _),
14809    (   nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
14810                  G),
14811        lookup_ht(G, k(A, B), H),
14812        member(I, H),
14813        I=suspension(_, active, _, _, J, K, _, _, _),
14814        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
14815                  L),
14816        lookup_ht(L, J, M),
14817        member(N, M),
14818        N=suspension(_, active, _, _, O),
14819        O>=K,
14820        \+ may_trigger(J),
14821        !,
14822        least_occurrence(A, C)
14823    ;   nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
14824                  P),
14825        lookup_ht(P, k(A, B), Q),
14826        member(R, Q),
14827        R=suspension(_, active, _, _, _),
14828        !,
14829        least_occurrence(A, C)
14830    ).
14831least_occurrence(A, B) :-
14832    C=suspension(D, active, A, B),
14833    'chr gen_id'(D),
14834    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
14835              E),
14836    insert_ht(E, k(A, B), C),
14837    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14838              F),
14839    insert_ht(F, A, C).
14840is_least_occurrence(A) :-
14841    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
14842              B),
14843    lookup_ht(B, k(A, []), C),
14844    member(D, C),
14845    D=suspension(_, active, _, _),
14846    !.
14847is_least_occurrence(_) :-
14848    fail.
14849stored_in_guard_lookahead(A, B) :-
14850    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
14851              C),
14852    lookup_ht(C, k(A, B), D),
14853    member(E, D),
14854    E=suspension(_, active, _, _, _, _, F, G, H),
14855    (   nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
14856                  I),
14857        lookup_ht(I, k(F, G), J),
14858        member(K, J),
14859        K=suspension(_, active, _, _, _),
14860        !,
14861        L is B+1,
14862        stored_in_guard_lookahead(A, L)
14863    ;   !,
14864        H==simplification,
14865        (   is_stored_in_guard(A, F)
14866        ->  true
14867        ;   M is B+1,
14868            stored_in_guard_lookahead(A, M)
14869        )
14870    ).
14871stored_in_guard_lookahead(_, _) :-
14872    fail.
14873constraint_index(A, B) :-
14874    C=suspension(D, active, A, B),
14875    'chr gen_id'(D),
14876    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
14877              E),
14878    insert_ht(E, B, C),
14879    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
14880              F),
14881    insert_ht(F, A, C).
14882get_constraint_index(A, B) :-
14883    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
14884              C),
14885    lookup_ht(C, A, D),
14886    member(E, D),
14887    E=suspension(_, active, _, F),
14888    !,
14889    B=F.
14890get_constraint_index(_, _) :-
14891    fail.
14892get_indexed_constraint(A, B) :-
14893    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
14894              C),
14895    lookup_ht(C, A, D),
14896    member(E, D),
14897    E=suspension(_, active, F, _),
14898    !,
14899    B=F.
14900get_indexed_constraint(_, _) :-
14901    fail.
14902max_constraint_index(A) :-
14903    B=suspension(C, active, _, A),
14904    'chr gen_id'(C),
14905    nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
14906              D),
14907    E=[B|D],
14908    b_setval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
14909             E),
14910    (   D=[F|_]
14911    ->  setarg(3, F, E)
14912    ;   true
14913    ).
14914get_max_constraint_index(A) :-
14915    nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
14916              B),
14917    member(C, B),
14918    C=suspension(_, active, _, D),
14919    !,
14920    A=D.
14921get_max_constraint_index(0).
14922identifier_size(A) :-
14923    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
14924              B),
14925    (   member(C, B),
14926        C=suspension(_, active, _, _),
14927        !
14928    ;   !,
14929        identifier_size___1__0__0__2(B, A)
14930    ).
14931identifier_size___1__0__0__2([], A) :-
14932    identifier_size___1__1(A).
14933identifier_size___1__0__0__2([A|B], C) :-
14934    (   A=suspension(_, active, _, _)
14935    ->  setarg(2, A, removed),
14936        arg(3, A, D),
14937        (   var(D)
14938        ->  nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
14939                      E),
14940            E=[_|F],
14941            b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
14942                     F),
14943            (   F=[G|_]
14944            ->  setarg(3, G, _)
14945            ;   true
14946            )
14947        ;   D=[_, _|F],
14948            setarg(2, D, F),
14949            (   F=[G|_]
14950            ->  setarg(3, G, D)
14951            ;   true
14952            )
14953        ),
14954        identifier_size___1__0__0__2(B, C)
14955    ;   identifier_size___1__0__0__2(B, C)
14956    ).
14957identifier_size(A) :-
14958    identifier_size___1__1(A).
14959identifier_size___1__1(A) :-
14960    B=suspension(C, active, _, A),
14961    'chr gen_id'(C),
14962    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
14963              D),
14964    E=[B|D],
14965    b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
14966             E),
14967    (   D=[F|_]
14968    ->  setarg(3, F, E)
14969    ;   true
14970    ).
14971get_identifier_size(A) :-
14972    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
14973              B),
14974    member(C, B),
14975    C=suspension(_, active, _, D),
14976    !,
14977    A=D.
14978get_identifier_size(1).
14979identifier_index(A, B, C) :-
14980    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
14981              D),
14982    lookup_ht(D, k(A, B), E),
14983    (   member(F, E),
14984        F=suspension(_, active, _, _, _),
14985        !
14986    ;   !,
14987        identifier_index___3__0__0__2(E, A, B, C)
14988    ).
14989identifier_index___3__0__0__2([], A, B, C) :-
14990    identifier_index___3__1(A, B, C).
14991identifier_index___3__0__0__2([A|B], C, D, E) :-
14992    (   A=suspension(_, active, F, G, _),
14993        F==C,
14994        G==D
14995    ->  setarg(2, A, removed),
14996        nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
14997                  H),
14998        delete_ht(H, k(C, D), A),
14999        identifier_index___3__0__0__2(B, C, D, E)
15000    ;   identifier_index___3__0__0__2(B, C, D, E)
15001    ).
15002identifier_index(A, B, C) :-
15003    identifier_index___3__1(A, B, C).
15004identifier_index___3__1(A, B, C) :-
15005    D=suspension(E, active, A, B, C),
15006    'chr gen_id'(E),
15007    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
15008              F),
15009    insert_ht(F, k(A, B), D).
15010get_identifier_index(A, B, C) :-
15011    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
15012              D),
15013    lookup_ht(D, k(A, B), E),
15014    member(F, E),
15015    F=suspension(_, active, _, _, G),
15016    !,
15017    C=G.
15018get_identifier_index(A, B, C) :-
15019    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
15020              D),
15021    member(E, D),
15022    E=suspension(_, active, _, F),
15023    !,
15024    setarg(2, E, removed),
15025    arg(3, E, G),
15026    (   var(G)
15027    ->  nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
15028                  H),
15029        H=[_|I],
15030        b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
15031                 I),
15032        (   I=[J|_]
15033        ->  setarg(3, J, _)
15034        ;   true
15035        )
15036    ;   G=[_, _|I],
15037        setarg(2, G, I),
15038        (   I=[J|_]
15039        ->  setarg(3, J, G)
15040        ;   true
15041        )
15042    ),
15043    K is F+1,
15044    identifier_index(A, B, K),
15045    identifier_size(K),
15046    C=K.
15047get_identifier_index(A, B, C) :-
15048    identifier_index(A, B, 2),
15049    identifier_size(2),
15050    C=2.
15051type_indexed_identifier_size(A, B) :-
15052    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15053              C),
15054    lookup_ht(C, A, D),
15055    (   member(E, D),
15056        E=suspension(_, active, _, _),
15057        !
15058    ;   !,
15059        type_indexed_identifier_size___2__0__0__2(D, A, B)
15060    ).
15061type_indexed_identifier_size___2__0__0__2([], A, B) :-
15062    type_indexed_identifier_size___2__1(A, B).
15063type_indexed_identifier_size___2__0__0__2([A|B], C, D) :-
15064    (   A=suspension(_, active, E, _),
15065        E==C
15066    ->  setarg(2, A, removed),
15067        nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15068                  F),
15069        delete_ht(F, C, A),
15070        type_indexed_identifier_size___2__0__0__2(B, C, D)
15071    ;   type_indexed_identifier_size___2__0__0__2(B, C, D)
15072    ).
15073type_indexed_identifier_size(A, B) :-
15074    type_indexed_identifier_size___2__1(A, B).
15075type_indexed_identifier_size___2__1(A, B) :-
15076    C=suspension(D, active, A, B),
15077    'chr gen_id'(D),
15078    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15079              E),
15080    insert_ht(E, A, C).
15081get_type_indexed_identifier_size(A, B) :-
15082    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15083              C),
15084    lookup_ht(C, A, D),
15085    member(E, D),
15086    E=suspension(_, active, _, F),
15087    !,
15088    B=F.
15089get_type_indexed_identifier_size(_, 1).
15090type_indexed_identifier_index(A, B, C, D) :-
15091    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
15092              E),
15093    lookup_ht(E, k(B, C), F),
15094    (   member(G, F),
15095        G=suspension(_, active, _, _, _, _),
15096        !
15097    ;   !,
15098        type_indexed_identifier_index___4__0__0__2(F,
15099                                                   A,
15100                                                   B,
15101                                                   C,
15102                                                   D)
15103    ).
15104type_indexed_identifier_index___4__0__0__2([], A, B, C, D) :-
15105    type_indexed_identifier_index___4__1(A, B, C, D).
15106type_indexed_identifier_index___4__0__0__2([A|B], C, D, E, F) :-
15107    (   A=suspension(_, active, G, H, I, _),
15108        H==D,
15109        I==E
15110    ->  setarg(2, A, removed),
15111        ( nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
15112                    J),
15113          delete_ht(J, k(G, D, E), A)
15114        ),
15115        nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
15116                  K),
15117        delete_ht(K, k(D, E), A),
15118        type_indexed_identifier_index___4__0__0__2(B,
15119                                                   C,
15120                                                   D,
15121                                                   E,
15122                                                   F)
15123    ;   type_indexed_identifier_index___4__0__0__2(B,
15124                                                   C,
15125                                                   D,
15126                                                   E,
15127                                                   F)
15128    ).
15129type_indexed_identifier_index(A, B, C, D) :-
15130    type_indexed_identifier_index___4__1(A, B, C, D).
15131type_indexed_identifier_index___4__1(A, B, C, D) :-
15132    E=suspension(F, active, A, B, C, D),
15133    'chr gen_id'(F),
15134    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
15135              G),
15136    insert_ht(G, k(A, B, C), E),
15137    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
15138              H),
15139    insert_ht(H, k(B, C), E).
15140get_type_indexed_identifier_index(A, B, C, D) :-
15141    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
15142              E),
15143    lookup_ht(E, k(A, B, C), F),
15144    member(G, F),
15145    G=suspension(_, active, _, _, _, H),
15146    !,
15147    D=H.
15148get_type_indexed_identifier_index(A, B, C, D) :-
15149    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15150              E),
15151    lookup_ht(E, A, F),
15152    member(G, F),
15153    G=suspension(_, active, _, H),
15154    !,
15155    setarg(2, G, removed),
15156    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15157              I),
15158    delete_ht(I, A, G),
15159    J is H+1,
15160    type_indexed_identifier_index(A, B, C, J),
15161    type_indexed_identifier_size(A, J),
15162    D=J.
15163get_type_indexed_identifier_index(A, B, C, D) :-
15164    type_indexed_identifier_index(A, B, C, 2),
15165    type_indexed_identifier_size(A, 2),
15166    D=2.
15167no_history(A) :-
15168    B=suspension(C, active, A),
15169    'chr gen_id'(C),
15170    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', D),
15171    insert_ht(D, A, B).
15172has_no_history(A) :-
15173    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', B),
15174    lookup_ht(B, A, C),
15175    member(D, C),
15176    D=suspension(_, active, _),
15177    !.
15178has_no_history(_) :-
15179    fail.
15180history(A, B, C) :-
15181    history___3__0(A, B, C, _).
15182history___3__0(A, B, C, D) :-
15183    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', E),
15184    lookup_ht(E, A, F),
15185    !,
15186    D=suspension(G, not_stored_yet, t, A, B, C),
15187    'chr gen_id'(G),
15188    history___3__0__0__1(F, A, B, C, D).
15189history___3__0__0__1([], A, B, C, D) :-
15190    history___3__1(A, B, C, D).
15191history___3__0__0__1([A|B], C, D, E, F) :-
15192    (   A=suspension(_, active, _, G, _, _),
15193        G==C,
15194        H=t(95, F, A),
15195        '$novel_production'(F, H),
15196        '$novel_production'(A, H)
15197    ->  '$extend_history'(F, H),
15198        arg(2, F, I),
15199        setarg(2, F, active),
15200        (   I==not_stored_yet
15201        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15202                                                                          J)
15203            ->  nb_getval(J, K),
15204                b_setval(J, [F|K])
15205            ;   true
15206            ),
15207            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15208                      L),
15209            insert_ht(L, D, F),
15210            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15211                      M),
15212            insert_ht(M, C, F)
15213        ;   true
15214        ),
15215        chr_error(syntax,
15216                  'Only one pragma history allowed per rule (rule number ~w)\n',
15217                  [C]),
15218        (   F=suspension(_, active, _, _, _, _)
15219        ->  setarg(2, F, inactive),
15220            history___3__0__0__1(B, C, D, E, F)
15221        ;   true
15222        )
15223    ;   history___3__0__0__1(B, C, D, E, F)
15224    ).
15225history___3__0(A, B, C, D) :-
15226    D=suspension(E, not_stored_yet, t, A, B, C),
15227    'chr gen_id'(E),
15228    history___3__1(A, B, C, D).
15229history___3__1(A, B, C, D) :-
15230    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', E),
15231    lookup_ht(E, A, F),
15232    !,
15233    history___3__1__0__2(F, A, B, C, D).
15234history___3__1__0__2([], A, B, C, D) :-
15235    history___3__2(A, B, C, D).
15236history___3__1__0__2([A|B], C, D, E, F) :-
15237    (   A=suspension(_, active, _, G, _, _),
15238        G==C,
15239        H=t(95, A, F),
15240        '$novel_production'(A, H),
15241        '$novel_production'(F, H)
15242    ->  '$extend_history'(F, H),
15243        arg(2, F, I),
15244        setarg(2, F, active),
15245        (   I==not_stored_yet
15246        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15247                                                                          J)
15248            ->  nb_getval(J, K),
15249                b_setval(J, [F|K])
15250            ;   true
15251            ),
15252            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15253                      L),
15254            insert_ht(L, D, F),
15255            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15256                      M),
15257            insert_ht(M, C, F)
15258        ;   true
15259        ),
15260        chr_error(syntax,
15261                  'Only one pragma history allowed per rule (rule number ~w)\n',
15262                  [C]),
15263        (   F=suspension(_, active, _, _, _, _)
15264        ->  setarg(2, F, inactive),
15265            history___3__1__0__2(B, C, D, E, F)
15266        ;   true
15267        )
15268    ;   history___3__1__0__2(B, C, D, E, F)
15269    ).
15270history___3__1(A, B, C, D) :-
15271    history___3__2(A, B, C, D).
15272history___3__2(A, B, C, D) :-
15273    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', E),
15274    lookup_ht(E, B, F),
15275    !,
15276    history___3__2__0__3(F, A, B, C, D).
15277history___3__2__0__3([], A, B, C, D) :-
15278    history___3__3(A, B, C, D).
15279history___3__2__0__3([A|B], C, D, E, F) :-
15280    (   A=suspension(_, active, _, G, H, I),
15281        H==D,
15282        J=t(96, F, A),
15283        '$novel_production'(F, J),
15284        '$novel_production'(A, J)
15285    ->  '$extend_history'(F, J),
15286        arg(2, F, K),
15287        setarg(2, F, active),
15288        (   K==not_stored_yet
15289        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15290                                                                          L)
15291            ->  nb_getval(L, M),
15292                b_setval(L, [F|M])
15293            ;   true
15294            ),
15295            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15296                      N),
15297            insert_ht(N, D, F),
15298            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15299                      O),
15300            insert_ht(O, C, F)
15301        ;   true
15302        ),
15303        length(E, P),
15304        length(I, Q),
15305        (   P\==Q
15306        ->  chr_error(syntax,
15307                      'The history named ~w does not always range over an equal amount of occurrences.\n',
15308                      [D])
15309        ;   test_named_history_id_pairs(C, E, G, I)
15310        ),
15311        (   F=suspension(_, active, _, _, _, _)
15312        ->  setarg(2, F, inactive),
15313            history___3__2__0__3(B, C, D, E, F)
15314        ;   true
15315        )
15316    ;   history___3__2__0__3(B, C, D, E, F)
15317    ).
15318history___3__2(A, B, C, D) :-
15319    history___3__3(A, B, C, D).
15320history___3__3(A, B, C, D) :-
15321    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', E),
15322    lookup_ht(E, B, F),
15323    !,
15324    history___3__3__0__4(F, A, B, C, D).
15325history___3__3__0__4([], A, B, C, D) :-
15326    history___3__4(A, B, C, D).
15327history___3__3__0__4([A|B], C, D, E, F) :-
15328    (   A=suspension(_, active, _, G, H, I),
15329        H==D,
15330        J=t(96, A, F),
15331        '$novel_production'(A, J),
15332        '$novel_production'(F, J)
15333    ->  '$extend_history'(F, J),
15334        arg(2, F, K),
15335        setarg(2, F, active),
15336        (   K==not_stored_yet
15337        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15338                                                                          L)
15339            ->  nb_getval(L, M),
15340                b_setval(L, [F|M])
15341            ;   true
15342            ),
15343            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15344                      N),
15345            insert_ht(N, D, F),
15346            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15347                      O),
15348            insert_ht(O, C, F)
15349        ;   true
15350        ),
15351        length(I, P),
15352        length(E, Q),
15353        (   P\==Q
15354        ->  chr_error(syntax,
15355                      'The history named ~w does not always range over an equal amount of occurrences.\n',
15356                      [D])
15357        ;   test_named_history_id_pairs(G, I, C, E)
15358        ),
15359        (   F=suspension(_, active, _, _, _, _)
15360        ->  setarg(2, F, inactive),
15361            history___3__3__0__4(B, C, D, E, F)
15362        ;   true
15363        )
15364    ;   history___3__3__0__4(B, C, D, E, F)
15365    ).
15366history___3__3(A, B, C, D) :-
15367    history___3__4(A, B, C, D).
15368history___3__4(A, B, [], C) :-
15369    nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
15370              D),
15371    !,
15372    history___3__4__0__6(D, A, B, [], C).
15373history___3__4__0__6([], A, B, C, D) :-
15374    history___3__5(A, B, C, D).
15375history___3__4__0__6([A|B], C, D, E, F) :-
15376    (   A=suspension(_, active, _, _),
15377        G=t(142, A, F),
15378        '$novel_production'(A, G),
15379        '$novel_production'(F, G)
15380    ->  '$extend_history'(F, G),
15381        arg(2, F, H),
15382        setarg(2, F, active),
15383        (   H==not_stored_yet
15384        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15385                                                                          I)
15386            ->  nb_getval(I, J),
15387                b_setval(I, [F|J])
15388            ;   true
15389            ),
15390            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15391                      K),
15392            insert_ht(K, D, F),
15393            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15394                      L),
15395            insert_ht(L, C, F)
15396        ;   true
15397        ),
15398        generate_empty_named_history_initialisation(D),
15399        (   F=suspension(_, active, _, _, _, _)
15400        ->  setarg(2, F, inactive),
15401            history___3__4__0__6(B, C, D, E, F)
15402        ;   true
15403        )
15404    ;   history___3__4__0__6(B, C, D, E, F)
15405    ).
15406history___3__4(A, B, C, D) :-
15407    history___3__5(A, B, C, D).
15408history___3__5(A, B, C, D) :-
15409    arg(2, D, E),
15410    setarg(2, D, active),
15411    (   E==not_stored_yet
15412    ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(C,
15413                                                                      F)
15414        ->  nb_getval(F, G),
15415            b_setval(F, [D|G])
15416        ;   true
15417        ),
15418        nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15419                  H),
15420        insert_ht(H, B, D),
15421        nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15422                  I),
15423        insert_ht(I, A, D)
15424    ;   true
15425    ).
15426named_history(A, B, C) :-
15427    ground(A),
15428    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', D),
15429    lookup_ht(D, A, E),
15430    member(F, E),
15431    F=suspension(_, active, _, _, G, H),
15432    !,
15433    B=G,
15434    C=H.
15435named_history(_, _, _) :-
15436    fail.
15437test_named_history_id_pair(A, B, C, D) :-
15438    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
15439              E),
15440    lookup_ht(E, k(A, B), F),
15441    member(G, F),
15442    G=suspension(_, active, _, _, H, _, _, _, _),
15443    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
15444              I),
15445    lookup_ht(I, k(H, C, D), J),
15446    member(K, J),
15447    K=suspension(_, active, _, _, _, _, _, _, _),
15448    K\==G,
15449    !.
15450test_named_history_id_pair(A, _, B, _) :-
15451    chr_error(syntax,
15452              'Occurrences of shared history in rules number ~w and ~w do not correspond\n',
15453              [B, A]).
15454indexing_spec(A, B) :-
15455    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15456              C),
15457    lookup_ht(C, A, D),
15458    member(E, D),
15459    E=suspension(_, active, _, F),
15460    !,
15461    setarg(2, E, removed),
15462    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15463              G),
15464    delete_ht(G, A, E),
15465    append(B, F, H),
15466    indexing_spec(A, H).
15467indexing_spec(A, B) :-
15468    C=suspension(D, active, A, B),
15469    'chr gen_id'(D),
15470    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15471              E),
15472    insert_ht(E, A, C).
15473get_indexing_spec(A, B) :-
15474    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15475              C),
15476    lookup_ht(C, A, D),
15477    member(E, D),
15478    E=suspension(_, active, _, F),
15479    !,
15480    B=F.
15481get_indexing_spec(_, []).
15482observation_analysis(A) :-
15483    observation_analysis___1__0(A, _).
15484observation_analysis___1__0(A, B) :-
15485    nb_getval('$chr_store_global_ground_chr_translate____rule___2', C),
15486    !,
15487    B=suspension(D, not_stored_yet, _, A),
15488    'chr gen_id'(D),
15489    observation_analysis___1__0__0__1(C, A, B).
15490observation_analysis___1__0__0__1([], A, B) :-
15491    observation_analysis___1__1(A, B).
15492observation_analysis___1__0__0__1([A|B], C, D) :-
15493    (   A=suspension(_, active, _, _, E, F)
15494    ->  F=pragma(rule(_, _, G, H), _, _, _, _),
15495        (   chr_pp_flag(store_in_guards, on)
15496        ->  observation_analysis(E, G, guard, C)
15497        ;   true
15498        ),
15499        observation_analysis(E, H, body, C),
15500        observation_analysis___1__0__0__1(B, C, D)
15501    ;   observation_analysis___1__0__0__1(B, C, D)
15502    ).
15503observation_analysis___1__0(A, B) :-
15504    B=suspension(C, not_stored_yet, _, A),
15505    'chr gen_id'(C),
15506    observation_analysis___1__1(A, B).
15507observation_analysis___1__1(_, A) :-
15508    (   var(A)
15509    ->  true
15510    ;   arg(2, A, B),
15511        setarg(2, A, removed),
15512        (   B==not_stored_yet
15513        ->  true
15514        ;   arg(3, A, C),
15515            (   var(C)
15516            ->  nb_getval('$chr_store_global_ground_chr_translate____observation_analysis___1',
15517                          D),
15518                D=[_|E],
15519                b_setval('$chr_store_global_ground_chr_translate____observation_analysis___1',
15520                         E),
15521                (   E=[F|_]
15522                ->  setarg(3, F, _)
15523                ;   true
15524                )
15525            ;   C=[_, _|E],
15526                setarg(2, C, E),
15527                (   E=[F|_]
15528                ->  setarg(3, F, C)
15529                ;   true
15530                )
15531            )
15532        )
15533    ).
15534spawns(A, B, C) :-
15535    spawns___3__0(A, B, C, _).
15536spawns___3__0(A, B, C, _) :-
15537    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', D),
15538    lookup_ht(D, k(A, B, C), E),
15539    member(F, E),
15540    F=suspension(_, active, _, _, _, _, _),
15541    !.
15542spawns___3__0(A, body, B, _) :-
15543    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', C),
15544    lookup_ht(C, k(A, guard, B), D),
15545    member(E, D),
15546    E=suspension(_, active, _, _, _, _, _),
15547    !.
15548spawns___3__0(A, guard, B, C) :-
15549    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', D),
15550    lookup_ht(D, k(A, body, B), E),
15551    !,
15552    spawns___3__0__0__4(E, A, guard, B, C).
15553spawns___3__0__0__4([], A, B, C, D) :-
15554    spawns___3__1(A, B, C, D).
15555spawns___3__0__0__4([A|B], C, D, E, F) :-
15556    (   A=suspension(_, active, _, _, G, H, I),
15557        G==C,
15558        H=body,
15559        I==E
15560    ->  setarg(2, A, removed),
15561        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15562                    J),
15563          delete_ht(J, k(C, E), A)
15564        ),
15565        ( arg(4, A, K),
15566          (   var(K)
15567          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15568                        L),
15569              L=[_|M],
15570              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15571                       M),
15572              (   M=[N|_]
15573              ->  setarg(4, N, _)
15574              ;   true
15575              )
15576          ;   K=[_, _|M],
15577              setarg(2, K, M),
15578              (   M=[N|_]
15579              ->  setarg(4, N, K)
15580              ;   true
15581              )
15582          )
15583        ),
15584        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15585                    O),
15586          delete_ht(O, k(C, body), A)
15587        ),
15588        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15589                    P),
15590          delete_ht(P, C, A)
15591        ),
15592        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15593                    Q),
15594          delete_ht(Q, E, A)
15595        ),
15596        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15597                  R),
15598        delete_ht(R, k(C, body, E), A),
15599        spawns___3__0__0__4(B, C, D, E, F)
15600    ;   spawns___3__0__0__4(B, C, D, E, F)
15601    ).
15602spawns___3__0(A, B, C, D) :-
15603    spawns___3__1(A, B, C, D).
15604spawns___3__1(A, B, C, D) :-
15605    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
15606              E),
15607    lookup_ht(E, k(A, B), F),
15608    member(G, F),
15609    G=suspension(_, active, _, _),
15610    !,
15611    (   var(D)
15612    ->  true
15613    ;   arg(2, D, H),
15614        setarg(2, D, removed),
15615        (   H==not_stored_yet
15616        ->  true
15617        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15618                      I),
15619            delete_ht(I, k(A, C), D),
15620            arg(4, D, J),
15621            (   var(J)
15622            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15623                          K),
15624                K=[_|L],
15625                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15626                         L),
15627                (   L=[M|_]
15628                ->  setarg(4, M, _)
15629                ;   true
15630                )
15631            ;   J=[_, _|L],
15632                setarg(2, J, L),
15633                (   L=[M|_]
15634                ->  setarg(4, M, J)
15635                ;   true
15636                )
15637            ),
15638            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15639                      N),
15640            delete_ht(N, k(A, B), D),
15641            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15642                      O),
15643            delete_ht(O, A, D),
15644            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15645                      P),
15646            delete_ht(P, C, D),
15647            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15648                      Q),
15649            delete_ht(Q, k(A, B, C), D)
15650        )
15651    ).
15652spawns___3__1(A, body, B, C) :-
15653    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
15654              D),
15655    lookup_ht(D, k(A, guard), E),
15656    member(F, E),
15657    F=suspension(_, active, _, _),
15658    !,
15659    (   var(C)
15660    ->  true
15661    ;   arg(2, C, G),
15662        setarg(2, C, removed),
15663        (   G==not_stored_yet
15664        ->  true
15665        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15666                      H),
15667            delete_ht(H, k(A, B), C),
15668            arg(4, C, I),
15669            (   var(I)
15670            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15671                          J),
15672                J=[_|K],
15673                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15674                         K),
15675                (   K=[L|_]
15676                ->  setarg(4, L, _)
15677                ;   true
15678                )
15679            ;   I=[_, _|K],
15680                setarg(2, I, K),
15681                (   K=[L|_]
15682                ->  setarg(4, L, I)
15683                ;   true
15684                )
15685            ),
15686            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15687                      M),
15688            delete_ht(M, k(A, body), C),
15689            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15690                      N),
15691            delete_ht(N, A, C),
15692            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15693                      O),
15694            delete_ht(O, B, C),
15695            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15696                      P),
15697            delete_ht(P, k(A, body, B), C)
15698        )
15699    ).
15700spawns___3__1(A, B, C, D) :-
15701    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
15702              E),
15703    lookup_ht(E, k(A, B), F),
15704    member(G, F),
15705    G=suspension(_, active, _, _, _, _),
15706    may_trigger(C),
15707    !,
15708    (   var(D)
15709    ->  true
15710    ;   arg(2, D, H),
15711        setarg(2, D, removed),
15712        (   H==not_stored_yet
15713        ->  true
15714        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15715                      I),
15716            delete_ht(I, k(A, C), D),
15717            arg(4, D, J),
15718            (   var(J)
15719            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15720                          K),
15721                K=[_|L],
15722                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15723                         L),
15724                (   L=[M|_]
15725                ->  setarg(4, M, _)
15726                ;   true
15727                )
15728            ;   J=[_, _|L],
15729                setarg(2, J, L),
15730                (   L=[M|_]
15731                ->  setarg(4, M, J)
15732                ;   true
15733                )
15734            ),
15735            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15736                      N),
15737            delete_ht(N, k(A, B), D),
15738            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15739                      O),
15740            delete_ht(O, A, D),
15741            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15742                      P),
15743            delete_ht(P, C, D),
15744            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15745                      Q),
15746            delete_ht(Q, k(A, B, C), D)
15747        )
15748    ).
15749spawns___3__1(A, body, B, C) :-
15750    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
15751              D),
15752    lookup_ht(D, k(A, guard), E),
15753    member(F, E),
15754    F=suspension(_, active, _, _, _, _),
15755    may_trigger(B),
15756    !,
15757    (   var(C)
15758    ->  true
15759    ;   arg(2, C, G),
15760        setarg(2, C, removed),
15761        (   G==not_stored_yet
15762        ->  true
15763        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15764                      H),
15765            delete_ht(H, k(A, B), C),
15766            arg(4, C, I),
15767            (   var(I)
15768            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15769                          J),
15770                J=[_|K],
15771                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15772                         K),
15773                (   K=[L|_]
15774                ->  setarg(4, L, _)
15775                ;   true
15776                )
15777            ;   I=[_, _|K],
15778                setarg(2, I, K),
15779                (   K=[L|_]
15780                ->  setarg(4, L, I)
15781                ;   true
15782                )
15783            ),
15784            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15785                      M),
15786            delete_ht(M, k(A, body), C),
15787            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15788                      N),
15789            delete_ht(N, A, C),
15790            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15791                      O),
15792            delete_ht(O, B, C),
15793            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15794                      P),
15795            delete_ht(P, k(A, body, B), C)
15796        )
15797    ).
15798spawns___3__1(A, B, C, D) :-
15799    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', E),
15800    lookup_ht(E, C, F),
15801    (   member(G, F),
15802        G=suspension(_, active, _, _, _, _, H, I, _),
15803        (   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
15804                      J),
15805            lookup_ht(J, H, K),
15806            member(L, K),
15807            L=suspension(_, active, _, _),
15808            \+ is_passive(H, I),
15809            !,
15810            (   var(D)
15811            ->  true
15812            ;   arg(2, D, M),
15813                setarg(2, D, removed),
15814                (   M==not_stored_yet
15815                ->  true
15816                ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15817                              N),
15818                    delete_ht(N, k(A, C), D),
15819                    arg(4, D, O),
15820                    (   var(O)
15821                    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15822                                  P),
15823                        P=[_|Q],
15824                        b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15825                                 Q),
15826                        (   Q=[R|_]
15827                        ->  setarg(4, R, _)
15828                        ;   true
15829                        )
15830                    ;   O=[_, _|Q],
15831                        setarg(2, O, Q),
15832                        (   Q=[R|_]
15833                        ->  setarg(4, R, O)
15834                        ;   true
15835                        )
15836                    ),
15837                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15838                              S),
15839                    delete_ht(S, k(A, B), D),
15840                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15841                              T),
15842                    delete_ht(T, A, D),
15843                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15844                              U),
15845                    delete_ht(U, C, D),
15846                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15847                              V),
15848                    delete_ht(V, k(A, B, C), D)
15849                )
15850            ),
15851            spawns_all(A, B)
15852        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
15853                      W),
15854            lookup_ht(W, H, X),
15855            member(Y, X),
15856            Y=suspension(_, active, _, _, _, _),
15857            may_trigger(C),
15858            \+ is_passive(H, I),
15859            !,
15860            (   var(D)
15861            ->  true
15862            ;   arg(2, D, Z),
15863                setarg(2, D, removed),
15864                (   Z==not_stored_yet
15865                ->  true
15866                ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15867                              A1),
15868                    delete_ht(A1, k(A, C), D),
15869                    arg(4, D, B1),
15870                    (   var(B1)
15871                    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15872                                  C1),
15873                        C1=[_|D1],
15874                        b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15875                                 D1),
15876                        (   D1=[E1|_]
15877                        ->  setarg(4, E1, _)
15878                        ;   true
15879                        )
15880                    ;   B1=[_, _|D1],
15881                        setarg(2, B1, D1),
15882                        (   D1=[E1|_]
15883                        ->  setarg(4, E1, B1)
15884                        ;   true
15885                        )
15886                    ),
15887                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15888                              F1),
15889                    delete_ht(F1, k(A, B), D),
15890                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15891                              G1),
15892                    delete_ht(G1, A, D),
15893                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15894                              H1),
15895                    delete_ht(H1, C, D),
15896                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15897                              I1),
15898                    delete_ht(I1, k(A, B, C), D)
15899                )
15900            ),
15901            spawns_all_triggers(A, B)
15902        )
15903    ;   !,
15904        D=suspension(J1, not_stored_yet, t, _, A, B, C),
15905        'chr gen_id'(J1),
15906        spawns___3__1__0__11(F, A, B, C, D)
15907    ).
15908spawns___3__1__0__11([], A, B, C, D) :-
15909    spawns___3__2(A, B, C, D).
15910spawns___3__1__0__11([A|B], C, D, E, F) :-
15911    (   A=suspension(_, active, _, _, G, _, H, I, _),
15912        G==E,
15913        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
15914                  J),
15915        lookup_ht(J, H, K)
15916    ->  spawns___3__1__1__11(K,
15917                             H,
15918                             I,
15919                             A,
15920                             B,
15921                             C,
15922                             D,
15923                             E,
15924                             F)
15925    ;   spawns___3__1__0__11(B, C, D, E, F)
15926    ).
15927spawns___3__1__1__11([], _, _, _, A, B, C, D, E) :-
15928    spawns___3__1__0__11(A, B, C, D, E).
15929spawns___3__1__1__11([A|B], C, D, E, F, G, H, I, J) :-
15930    (   A=suspension(_, active, _, _, K, _),
15931        K==C,
15932        L=t(123, A, E, J),
15933        '$novel_production'(A, L),
15934        '$novel_production'(J, L),
15935        \+ may_trigger(I),
15936        \+ is_passive(C, D)
15937    ->  '$extend_history'(J, L),
15938        arg(2, J, M),
15939        setarg(2, J, active),
15940        (   M==not_stored_yet
15941        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15942                      N),
15943            insert_ht(N, k(G, I), J),
15944            nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15945                      O),
15946            P=[J|O],
15947            b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15948                     P),
15949            (   O=[Q|_]
15950            ->  setarg(4, Q, P)
15951            ;   true
15952            ),
15953            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15954                      R),
15955            insert_ht(R, k(G, H), J),
15956            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15957                      S),
15958            insert_ht(S, G, J),
15959            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15960                      T),
15961            insert_ht(T, I, J),
15962            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15963                      U),
15964            insert_ht(U, k(G, H, I), J)
15965        ;   true
15966        ),
15967        spawns_all_triggers(G, H),
15968        (   J=suspension(_, active, _, _, _, _, _)
15969        ->  setarg(2, J, inactive),
15970            spawns___3__1__1__11(B,
15971                                 C,
15972                                 D,
15973                                 E,
15974                                 F,
15975                                 G,
15976                                 H,
15977                                 I,
15978                                 J)
15979        ;   true
15980        )
15981    ;   spawns___3__1__1__11(B,
15982                             C,
15983                             D,
15984                             E,
15985                             F,
15986                             G,
15987                             H,
15988                             I,
15989                             J)
15990    ).
15991spawns___3__1(A, B, C, D) :-
15992    D=suspension(E, not_stored_yet, t, _, A, B, C),
15993    'chr gen_id'(E),
15994    spawns___3__2(A, B, C, D).
15995spawns___3__2(A, B, C, D) :-
15996    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', E),
15997    lookup_ht(E, A, F),
15998    !,
15999    spawns___3__2__0__12(F, A, B, C, D).
16000spawns___3__2__0__12([], A, B, C, D) :-
16001    spawns___3__3(A, B, C, D).
16002spawns___3__2__0__12([A|B], C, D, E, F) :-
16003    (   A=suspension(_, active, _, _, G, _, H, I, _),
16004        H==C,
16005        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', J),
16006        lookup_ht(J, G, K)
16007    ->  spawns___3__2__1__12(K,
16008                             G,
16009                             I,
16010                             A,
16011                             B,
16012                             C,
16013                             D,
16014                             E,
16015                             F)
16016    ;   spawns___3__2__0__12(B, C, D, E, F)
16017    ).
16018spawns___3__2__1__12([], _, _, _, A, B, C, D, E) :-
16019    spawns___3__2__0__12(A, B, C, D, E).
16020spawns___3__2__1__12([A|B], C, D, E, F, G, H, I, J) :-
16021    (   A=suspension(_, active, _, _, K, L, M),
16022        M==C,
16023        N=t(124, J, E, A),
16024        '$novel_production'(J, N),
16025        '$novel_production'(A, N),
16026        K\==G,
16027        C\==I,
16028        \+ is_passive(G, D)
16029    ->  '$extend_history'(J, N),
16030        arg(2, J, O),
16031        setarg(2, J, active),
16032        (   O==not_stored_yet
16033        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16034                      P),
16035            insert_ht(P, k(G, I), J),
16036            nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16037                      Q),
16038            R=[J|Q],
16039            b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16040                     R),
16041            (   Q=[S|_]
16042            ->  setarg(4, S, R)
16043            ;   true
16044            ),
16045            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16046                      T),
16047            insert_ht(T, k(G, H), J),
16048            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16049                      U),
16050            insert_ht(U, G, J),
16051            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16052                      V),
16053            insert_ht(V, I, J),
16054            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16055                      W),
16056            insert_ht(W, k(G, H, I), J)
16057        ;   true
16058        ),
16059        spawns(K, L, I),
16060        (   J=suspension(_, active, _, _, _, _, _)
16061        ->  setarg(2, J, inactive),
16062            spawns___3__2__1__12(B,
16063                                 C,
16064                                 D,
16065                                 E,
16066                                 F,
16067                                 G,
16068                                 H,
16069                                 I,
16070                                 J)
16071        ;   true
16072        )
16073    ;   spawns___3__2__1__12(B,
16074                             C,
16075                             D,
16076                             E,
16077                             F,
16078                             G,
16079                             H,
16080                             I,
16081                             J)
16082    ).
16083spawns___3__2(A, B, C, D) :-
16084    spawns___3__3(A, B, C, D).
16085spawns___3__3(A, B, C, D) :-
16086    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', E),
16087    lookup_ht(E, C, F),
16088    !,
16089    spawns___3__3__0__13(F, A, B, C, D).
16090spawns___3__3__0__13([], A, B, C, D) :-
16091    spawns___3__4(A, B, C, D).
16092spawns___3__3__0__13([A|B], C, D, E, F) :-
16093    (   A=suspension(_, active, _, _, G, _, H, I, _),
16094        G==E,
16095        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1', J),
16096        lookup_ht(J, H, K)
16097    ->  spawns___3__3__1__13(K,
16098                             H,
16099                             I,
16100                             A,
16101                             B,
16102                             C,
16103                             D,
16104                             E,
16105                             F)
16106    ;   spawns___3__3__0__13(B, C, D, E, F)
16107    ).
16108spawns___3__3__1__13([], _, _, _, A, B, C, D, E) :-
16109    spawns___3__3__0__13(A, B, C, D, E).
16110spawns___3__3__1__13([A|B], C, D, E, F, G, H, I, J) :-
16111    (   A=suspension(_, active, _, _, K, _, L),
16112        K==C,
16113        M=t(124, A, E, J),
16114        '$novel_production'(A, M),
16115        '$novel_production'(J, M),
16116        G\==C,
16117        I\==L,
16118        \+ is_passive(C, D)
16119    ->  '$extend_history'(J, M),
16120        arg(2, J, N),
16121        setarg(2, J, active),
16122        (   N==not_stored_yet
16123        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16124                      O),
16125            insert_ht(O, k(G, I), J),
16126            nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16127                      P),
16128            Q=[J|P],
16129            b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16130                     Q),
16131            (   P=[R|_]
16132            ->  setarg(4, R, Q)
16133            ;   true
16134            ),
16135            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16136                      S),
16137            insert_ht(S, k(G, H), J),
16138            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16139                      T),
16140            insert_ht(T, G, J),
16141            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16142                      U),
16143            insert_ht(U, I, J),
16144            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16145                      V),
16146            insert_ht(V, k(G, H, I), J)
16147        ;   true
16148        ),
16149        spawns(G, H, L),
16150        (   J=suspension(_, active, _, _, _, _, _)
16151        ->  setarg(2, J, inactive),
16152            spawns___3__3__1__13(B,
16153                                 C,
16154                                 D,
16155                                 E,
16156                                 F,
16157                                 G,
16158                                 H,
16159                                 I,
16160                                 J)
16161        ;   true
16162        )
16163    ;   spawns___3__3__1__13(B,
16164                             C,
16165                             D,
16166                             E,
16167                             F,
16168                             G,
16169                             H,
16170                             I,
16171                             J)
16172    ).
16173spawns___3__3(A, B, C, D) :-
16174    spawns___3__4(A, B, C, D).
16175spawns___3__4(A, B, C, D) :-
16176    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', E),
16177    lookup_ht(E, A, F),
16178    !,
16179    spawns___3__4__0__14(F, A, B, C, D).
16180spawns___3__4__0__14([], A, B, C, D) :-
16181    spawns___3__5(A, B, C, D).
16182spawns___3__4__0__14([A|B], C, D, E, F) :-
16183    (   A=suspension(_, active, _, _, G, _, H, I, _),
16184        H==C,
16185        nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16186                  J)
16187    ->  spawns___3__4__1__14(J,
16188                             G,
16189                             I,
16190                             A,
16191                             B,
16192                             C,
16193                             D,
16194                             E,
16195                             F)
16196    ;   spawns___3__4__0__14(B, C, D, E, F)
16197    ).
16198spawns___3__4__1__14([], _, _, _, A, B, C, D, E) :-
16199    spawns___3__4__0__14(A, B, C, D, E).
16200spawns___3__4__1__14([A|B], C, D, E, F, G, H, I, J) :-
16201    (   A=suspension(_, active, _, _, K, L),
16202        M=t(125, J, E, A),
16203        '$novel_production'(J, M),
16204        '$novel_production'(A, M),
16205        \+ is_passive(G, D),
16206        may_trigger(C),
16207        \+ may_trigger(I)
16208    ->  '$extend_history'(J, M),
16209        arg(2, J, N),
16210        setarg(2, J, active),
16211        (   N==not_stored_yet
16212        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16213                      O),
16214            insert_ht(O, k(G, I), J),
16215            nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16216                      P),
16217            Q=[J|P],
16218            b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16219                     Q),
16220            (   P=[R|_]
16221            ->  setarg(4, R, Q)
16222            ;   true
16223            ),
16224            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16225                      S),
16226            insert_ht(S, k(G, H), J),
16227            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16228                      T),
16229            insert_ht(T, G, J),
16230            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16231                      U),
16232            insert_ht(U, I, J),
16233            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16234                      V),
16235            insert_ht(V, k(G, H, I), J)
16236        ;   true
16237        ),
16238        spawns(K, L, I),
16239        (   J=suspension(_, active, _, _, _, _, _)
16240        ->  setarg(2, J, inactive),
16241            spawns___3__4__1__14(B,
16242                                 C,
16243                                 D,
16244                                 E,
16245                                 F,
16246                                 G,
16247                                 H,
16248                                 I,
16249                                 J)
16250        ;   true
16251        )
16252    ;   spawns___3__4__1__14(B,
16253                             C,
16254                             D,
16255                             E,
16256                             F,
16257                             G,
16258                             H,
16259                             I,
16260                             J)
16261    ).
16262spawns___3__4(A, B, C, D) :-
16263    spawns___3__5(A, B, C, D).
16264spawns___3__5(A, B, C, D) :-
16265    arg(2, D, E),
16266    setarg(2, D, active),
16267    (   E==not_stored_yet
16268    ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16269                  F),
16270        insert_ht(F, k(A, C), D),
16271        nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16272                  G),
16273        H=[D|G],
16274        b_setval('$chr_store_global_ground_chr_translate____spawns___3', H),
16275        (   G=[I|_]
16276        ->  setarg(4, I, H)
16277        ;   true
16278        ),
16279        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16280                  J),
16281        insert_ht(J, k(A, B), D),
16282        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16283                  K),
16284        insert_ht(K, A, D),
16285        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16286                  L),
16287        insert_ht(L, C, D),
16288        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16289                  M),
16290        insert_ht(M, k(A, B, C), D)
16291    ;   true
16292    ).
16293spawns_all(A, B) :-
16294    spawns_all___2__0(A, B, _).
16295spawns_all___2__0(A, B, _) :-
16296    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16297              C),
16298    lookup_ht(C, k(A, B), D),
16299    member(E, D),
16300    E=suspension(_, active, _, _),
16301    !.
16302spawns_all___2__0(A, body, _) :-
16303    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16304              B),
16305    lookup_ht(B, k(A, guard), C),
16306    member(D, C),
16307    D=suspension(_, active, _, _),
16308    !.
16309spawns_all___2__0(A, guard, B) :-
16310    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16311              C),
16312    lookup_ht(C, k(A, body), D),
16313    !,
16314    spawns_all___2__0__0__4(D, A, guard, B).
16315spawns_all___2__0__0__4([], A, B, C) :-
16316    spawns_all___2__1(A, B, C).
16317spawns_all___2__0__0__4([A|B], C, D, E) :-
16318    (   A=suspension(_, active, F, G),
16319        F==C,
16320        G=body
16321    ->  setarg(2, A, removed),
16322        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16323                    H),
16324          delete_ht(H, C, A)
16325        ),
16326        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16327                  I),
16328        delete_ht(I, k(C, body), A),
16329        spawns_all___2__0__0__4(B, C, D, E)
16330    ;   spawns_all___2__0__0__4(B, C, D, E)
16331    ).
16332spawns_all___2__0(A, B, C) :-
16333    spawns_all___2__1(A, B, C).
16334spawns_all___2__1(A, B, C) :-
16335    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', D),
16336    lookup_ht(D, k(A, B), E),
16337    !,
16338    spawns_all___2__1__0__5(E, A, B, C).
16339spawns_all___2__1__0__5([], A, B, C) :-
16340    spawns_all___2__2(A, B, C).
16341spawns_all___2__1__0__5([A|B], C, D, E) :-
16342    (   A=suspension(_, active, _, _, F, G, H),
16343        F==C,
16344        G==D
16345    ->  setarg(2, A, removed),
16346        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16347                    I),
16348          delete_ht(I, k(C, H), A)
16349        ),
16350        ( arg(4, A, J),
16351          (   var(J)
16352          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16353                        K),
16354              K=[_|L],
16355              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16356                       L),
16357              (   L=[M|_]
16358              ->  setarg(4, M, _)
16359              ;   true
16360              )
16361          ;   J=[_, _|L],
16362              setarg(2, J, L),
16363              (   L=[M|_]
16364              ->  setarg(4, M, J)
16365              ;   true
16366              )
16367          )
16368        ),
16369        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16370                    N),
16371          delete_ht(N, k(C, D), A)
16372        ),
16373        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16374                    O),
16375          delete_ht(O, C, A)
16376        ),
16377        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16378                    P),
16379          delete_ht(P, H, A)
16380        ),
16381        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16382                  Q),
16383        delete_ht(Q, k(C, D, H), A),
16384        spawns_all___2__1__0__5(B, C, D, E)
16385    ;   spawns_all___2__1__0__5(B, C, D, E)
16386    ).
16387spawns_all___2__1(A, B, C) :-
16388    spawns_all___2__2(A, B, C).
16389spawns_all___2__2(A, guard, B) :-
16390    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', C),
16391    lookup_ht(C, k(A, body), D),
16392    !,
16393    spawns_all___2__2__0__6(D, A, guard, B).
16394spawns_all___2__2__0__6([], A, B, C) :-
16395    spawns_all___2__3(A, B, C).
16396spawns_all___2__2__0__6([A|B], C, D, E) :-
16397    (   A=suspension(_, active, _, _, F, G, H),
16398        F==C,
16399        G=body
16400    ->  setarg(2, A, removed),
16401        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16402                    I),
16403          delete_ht(I, k(C, H), A)
16404        ),
16405        ( arg(4, A, J),
16406          (   var(J)
16407          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16408                        K),
16409              K=[_|L],
16410              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16411                       L),
16412              (   L=[M|_]
16413              ->  setarg(4, M, _)
16414              ;   true
16415              )
16416          ;   J=[_, _|L],
16417              setarg(2, J, L),
16418              (   L=[M|_]
16419              ->  setarg(4, M, J)
16420              ;   true
16421              )
16422          )
16423        ),
16424        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16425                    N),
16426          delete_ht(N, k(C, body), A)
16427        ),
16428        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16429                    O),
16430          delete_ht(O, C, A)
16431        ),
16432        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16433                    P),
16434          delete_ht(P, H, A)
16435        ),
16436        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16437                  Q),
16438        delete_ht(Q, k(C, body, H), A),
16439        spawns_all___2__2__0__6(B, C, D, E)
16440    ;   spawns_all___2__2__0__6(B, C, D, E)
16441    ).
16442spawns_all___2__2(A, B, C) :-
16443    spawns_all___2__3(A, B, C).
16444spawns_all___2__3(A, B, C) :-
16445    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16446              D),
16447    lookup_ht(D, k(A, B), E),
16448    !,
16449    spawns_all___2__3__0__7(E, A, B, C).
16450spawns_all___2__3__0__7([], A, B, C) :-
16451    spawns_all___2__4(A, B, C).
16452spawns_all___2__3__0__7([A|B], C, D, E) :-
16453    (   A=suspension(_, active, _, _, F, G),
16454        F==C,
16455        G==D
16456    ->  setarg(2, A, removed),
16457        ( arg(4, A, H),
16458          (   var(H)
16459          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16460                        I),
16461              I=[_|J],
16462              b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16463                       J),
16464              (   J=[K|_]
16465              ->  setarg(4, K, _)
16466              ;   true
16467              )
16468          ;   H=[_, _|J],
16469              setarg(2, H, J),
16470              (   J=[K|_]
16471              ->  setarg(4, K, H)
16472              ;   true
16473              )
16474          )
16475        ),
16476        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16477                    L),
16478          delete_ht(L, C, A)
16479        ),
16480        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16481                  M),
16482        delete_ht(M, k(C, D), A),
16483        spawns_all___2__3__0__7(B, C, D, E)
16484    ;   spawns_all___2__3__0__7(B, C, D, E)
16485    ).
16486spawns_all___2__3(A, B, C) :-
16487    spawns_all___2__4(A, B, C).
16488spawns_all___2__4(A, guard, B) :-
16489    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16490              C),
16491    lookup_ht(C, k(A, body), D),
16492    !,
16493    spawns_all___2__4__0__8(D, A, guard, B).
16494spawns_all___2__4__0__8([], A, B, C) :-
16495    spawns_all___2__5(A, B, C).
16496spawns_all___2__4__0__8([A|B], C, D, E) :-
16497    (   A=suspension(_, active, _, _, F, G),
16498        F==C,
16499        G=body
16500    ->  setarg(2, A, removed),
16501        ( arg(4, A, H),
16502          (   var(H)
16503          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16504                        I),
16505              I=[_|J],
16506              b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16507                       J),
16508              (   J=[K|_]
16509              ->  setarg(4, K, _)
16510              ;   true
16511              )
16512          ;   H=[_, _|J],
16513              setarg(2, H, J),
16514              (   J=[K|_]
16515              ->  setarg(4, K, H)
16516              ;   true
16517              )
16518          )
16519        ),
16520        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16521                    L),
16522          delete_ht(L, C, A)
16523        ),
16524        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16525                  M),
16526        delete_ht(M, k(C, body), A),
16527        spawns_all___2__4__0__8(B, C, D, E)
16528    ;   spawns_all___2__4__0__8(B, C, D, E)
16529    ).
16530spawns_all___2__4(A, B, C) :-
16531    spawns_all___2__5(A, B, C).
16532spawns_all___2__5(A, B, C) :-
16533    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
16534    lookup_ht(D, A, E),
16535    !,
16536    C=suspension(F, not_stored_yet, A, B),
16537    'chr gen_id'(F),
16538    spawns_all___2__5__0__9(E, A, B, C).
16539spawns_all___2__5__0__9([], A, B, C) :-
16540    spawns_all___2__6(A, B, C).
16541spawns_all___2__5__0__9([A|B], C, D, E) :-
16542    (   A=suspension(_, active, _, _, F, _, G, H, _),
16543        G==C,
16544        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', I),
16545        lookup_ht(I, F, J)
16546    ->  spawns_all___2__5__1__9(J,
16547                                F,
16548                                H,
16549                                A,
16550                                B,
16551                                C,
16552                                D,
16553                                E)
16554    ;   spawns_all___2__5__0__9(B, C, D, E)
16555    ).
16556spawns_all___2__5__1__9([], _, _, _, A, B, C, D) :-
16557    spawns_all___2__5__0__9(A, B, C, D).
16558spawns_all___2__5__1__9([A|B], C, D, E, F, G, H, I) :-
16559    (   A=suspension(_, active, _, _, J, K, L),
16560        L==C,
16561        \+ is_passive(G, D)
16562    ->  setarg(2, A, removed),
16563        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16564                    M),
16565          delete_ht(M, k(J, C), A)
16566        ),
16567        ( arg(4, A, N),
16568          (   var(N)
16569          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16570                        O),
16571              O=[_|P],
16572              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16573                       P),
16574              (   P=[Q|_]
16575              ->  setarg(4, Q, _)
16576              ;   true
16577              )
16578          ;   N=[_, _|P],
16579              setarg(2, N, P),
16580              (   P=[Q|_]
16581              ->  setarg(4, Q, N)
16582              ;   true
16583              )
16584          )
16585        ),
16586        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16587                    R),
16588          delete_ht(R, k(J, K), A)
16589        ),
16590        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16591                    S),
16592          delete_ht(S, J, A)
16593        ),
16594        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16595                    T),
16596          delete_ht(T, C, A)
16597        ),
16598        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16599                  U),
16600        delete_ht(U, k(J, K, C), A),
16601        arg(2, I, V),
16602        setarg(2, I, active),
16603        (   V==not_stored_yet
16604        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16605                      W),
16606            insert_ht(W, G, I),
16607            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16608                      X),
16609            insert_ht(X, k(G, H), I)
16610        ;   true
16611        ),
16612        spawns_all(J, K),
16613        (   I=suspension(_, active, _, _)
16614        ->  setarg(2, I, inactive),
16615            spawns_all___2__5__1__9(B,
16616                                    C,
16617                                    D,
16618                                    E,
16619                                    F,
16620                                    G,
16621                                    H,
16622                                    I)
16623        ;   true
16624        )
16625    ;   spawns_all___2__5__1__9(B,
16626                                C,
16627                                D,
16628                                E,
16629                                F,
16630                                G,
16631                                H,
16632                                I)
16633    ).
16634spawns_all___2__5(A, B, C) :-
16635    C=suspension(D, not_stored_yet, A, B),
16636    'chr gen_id'(D),
16637    spawns_all___2__6(A, B, C).
16638spawns_all___2__6(A, B, C) :-
16639    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
16640    lookup_ht(D, A, E),
16641    !,
16642    spawns_all___2__6__0__10(E, A, B, C).
16643spawns_all___2__6__0__10([], A, B, C) :-
16644    spawns_all___2__7(A, B, C).
16645spawns_all___2__6__0__10([A|B], C, D, E) :-
16646    (   A=suspension(_, active, _, _, F, _, G, H, _),
16647        G==C,
16648        \+ \+ spawns_all_triggers_implies_spawns_all,
16649        \+ is_passive(C, H),
16650        may_trigger(F)
16651    ->  arg(2, E, I),
16652        setarg(2, E, active),
16653        (   I==not_stored_yet
16654        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16655                      J),
16656            insert_ht(J, C, E),
16657            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16658                      K),
16659            insert_ht(K, k(C, D), E)
16660        ;   true
16661        ),
16662        spawns_all_triggers_implies_spawns_all,
16663        (   E=suspension(_, active, _, _)
16664        ->  setarg(2, E, inactive),
16665            spawns_all___2__6__0__10(B, C, D, E)
16666        ;   true
16667        )
16668    ;   spawns_all___2__6__0__10(B, C, D, E)
16669    ).
16670spawns_all___2__6(A, B, C) :-
16671    spawns_all___2__7(A, B, C).
16672spawns_all___2__7(A, B, C) :-
16673    arg(2, C, D),
16674    setarg(2, C, active),
16675    (   D==not_stored_yet
16676    ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16677                  E),
16678        insert_ht(E, A, C),
16679        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16680                  F),
16681        insert_ht(F, k(A, B), C)
16682    ;   true
16683    ).
16684spawns_all_triggers(A, B) :-
16685    spawns_all_triggers___2__0(A, B, _).
16686spawns_all_triggers___2__0(A, B, _) :-
16687    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16688              C),
16689    lookup_ht(C, k(A, B), D),
16690    member(E, D),
16691    E=suspension(_, active, _, _, _, _),
16692    !.
16693spawns_all_triggers___2__0(A, body, _) :-
16694    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16695              B),
16696    lookup_ht(B, k(A, guard), C),
16697    member(D, C),
16698    D=suspension(_, active, _, _, _, _),
16699    !.
16700spawns_all_triggers___2__0(A, guard, B) :-
16701    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16702              C),
16703    lookup_ht(C, k(A, body), D),
16704    !,
16705    spawns_all_triggers___2__0__0__4(D, A, guard, B).
16706spawns_all_triggers___2__0__0__4([], A, B, C) :-
16707    spawns_all_triggers___2__1(A, B, C).
16708spawns_all_triggers___2__0__0__4([A|B], C, D, E) :-
16709    (   A=suspension(_, active, _, _, F, G),
16710        F==C,
16711        G=body
16712    ->  setarg(2, A, removed),
16713        ( arg(4, A, H),
16714          (   var(H)
16715          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16716                        I),
16717              I=[_|J],
16718              b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16719                       J),
16720              (   J=[K|_]
16721              ->  setarg(4, K, _)
16722              ;   true
16723              )
16724          ;   H=[_, _|J],
16725              setarg(2, H, J),
16726              (   J=[K|_]
16727              ->  setarg(4, K, H)
16728              ;   true
16729              )
16730          )
16731        ),
16732        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16733                    L),
16734          delete_ht(L, C, A)
16735        ),
16736        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16737                  M),
16738        delete_ht(M, k(C, body), A),
16739        spawns_all_triggers___2__0__0__4(B, C, D, E)
16740    ;   spawns_all_triggers___2__0__0__4(B, C, D, E)
16741    ).
16742spawns_all_triggers___2__0(A, B, C) :-
16743    spawns_all_triggers___2__1(A, B, C).
16744spawns_all_triggers___2__1(A, B, C) :-
16745    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16746              D),
16747    lookup_ht(D, k(A, B), E),
16748    member(F, E),
16749    F=suspension(_, active, _, _),
16750    !,
16751    (   var(C)
16752    ->  true
16753    ;   arg(2, C, G),
16754        setarg(2, C, removed),
16755        (   G==not_stored_yet
16756        ->  true
16757        ;   arg(4, C, H),
16758            (   var(H)
16759            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16760                          I),
16761                I=[_|J],
16762                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16763                         J),
16764                (   J=[K|_]
16765                ->  setarg(4, K, _)
16766                ;   true
16767                )
16768            ;   H=[_, _|J],
16769                setarg(2, H, J),
16770                (   J=[K|_]
16771                ->  setarg(4, K, H)
16772                ;   true
16773                )
16774            ),
16775            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16776                      L),
16777            delete_ht(L, A, C),
16778            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16779                      M),
16780            delete_ht(M, k(A, B), C)
16781        )
16782    ).
16783spawns_all_triggers___2__1(A, body, B) :-
16784    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16785              C),
16786    lookup_ht(C, k(A, guard), D),
16787    member(E, D),
16788    E=suspension(_, active, _, _),
16789    !,
16790    (   var(B)
16791    ->  true
16792    ;   arg(2, B, F),
16793        setarg(2, B, removed),
16794        (   F==not_stored_yet
16795        ->  true
16796        ;   arg(4, B, G),
16797            (   var(G)
16798            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16799                          H),
16800                H=[_|I],
16801                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16802                         I),
16803                (   I=[J|_]
16804                ->  setarg(4, J, _)
16805                ;   true
16806                )
16807            ;   G=[_, _|I],
16808                setarg(2, G, I),
16809                (   I=[J|_]
16810                ->  setarg(4, J, G)
16811                ;   true
16812                )
16813            ),
16814            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16815                      K),
16816            delete_ht(K, A, B),
16817            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16818                      L),
16819            delete_ht(L, k(A, body), B)
16820        )
16821    ).
16822spawns_all_triggers___2__1(A, B, C) :-
16823    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', D),
16824    lookup_ht(D, k(A, B), E),
16825    !,
16826    spawns_all_triggers___2__1__0__7(E, A, B, C).
16827spawns_all_triggers___2__1__0__7([], A, B, C) :-
16828    spawns_all_triggers___2__2(A, B, C).
16829spawns_all_triggers___2__1__0__7([A|B], C, D, E) :-
16830    (   A=suspension(_, active, _, _, F, G, H),
16831        F==C,
16832        G==D,
16833        may_trigger(H)
16834    ->  setarg(2, A, removed),
16835        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16836                    I),
16837          delete_ht(I, k(C, H), A)
16838        ),
16839        ( arg(4, A, J),
16840          (   var(J)
16841          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16842                        K),
16843              K=[_|L],
16844              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16845                       L),
16846              (   L=[M|_]
16847              ->  setarg(4, M, _)
16848              ;   true
16849              )
16850          ;   J=[_, _|L],
16851              setarg(2, J, L),
16852              (   L=[M|_]
16853              ->  setarg(4, M, J)
16854              ;   true
16855              )
16856          )
16857        ),
16858        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16859                    N),
16860          delete_ht(N, k(C, D), A)
16861        ),
16862        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16863                    O),
16864          delete_ht(O, C, A)
16865        ),
16866        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16867                    P),
16868          delete_ht(P, H, A)
16869        ),
16870        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16871                  Q),
16872        delete_ht(Q, k(C, D, H), A),
16873        spawns_all_triggers___2__1__0__7(B, C, D, E)
16874    ;   spawns_all_triggers___2__1__0__7(B, C, D, E)
16875    ).
16876spawns_all_triggers___2__1(A, B, C) :-
16877    spawns_all_triggers___2__2(A, B, C).
16878spawns_all_triggers___2__2(A, guard, B) :-
16879    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', C),
16880    lookup_ht(C, k(A, body), D),
16881    !,
16882    spawns_all_triggers___2__2__0__8(D, A, guard, B).
16883spawns_all_triggers___2__2__0__8([], A, B, C) :-
16884    spawns_all_triggers___2__3(A, B, C).
16885spawns_all_triggers___2__2__0__8([A|B], C, D, E) :-
16886    (   A=suspension(_, active, _, _, F, G, H),
16887        F==C,
16888        G=body,
16889        may_trigger(H)
16890    ->  setarg(2, A, removed),
16891        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16892                    I),
16893          delete_ht(I, k(C, H), A)
16894        ),
16895        ( arg(4, A, J),
16896          (   var(J)
16897          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16898                        K),
16899              K=[_|L],
16900              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16901                       L),
16902              (   L=[M|_]
16903              ->  setarg(4, M, _)
16904              ;   true
16905              )
16906          ;   J=[_, _|L],
16907              setarg(2, J, L),
16908              (   L=[M|_]
16909              ->  setarg(4, M, J)
16910              ;   true
16911              )
16912          )
16913        ),
16914        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16915                    N),
16916          delete_ht(N, k(C, body), A)
16917        ),
16918        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16919                    O),
16920          delete_ht(O, C, A)
16921        ),
16922        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16923                    P),
16924          delete_ht(P, H, A)
16925        ),
16926        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16927                  Q),
16928        delete_ht(Q, k(C, body, H), A),
16929        spawns_all_triggers___2__2__0__8(B, C, D, E)
16930    ;   spawns_all_triggers___2__2__0__8(B, C, D, E)
16931    ).
16932spawns_all_triggers___2__2(A, B, C) :-
16933    spawns_all_triggers___2__3(A, B, C).
16934spawns_all_triggers___2__3(A, B, C) :-
16935    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
16936              D),
16937    member(E, D),
16938    E=suspension(_, active, _),
16939    !,
16940    (   var(C)
16941    ->  true
16942    ;   arg(2, C, F),
16943        setarg(2, C, removed),
16944        (   F==not_stored_yet
16945        ->  true
16946        ;   arg(4, C, G),
16947            (   var(G)
16948            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16949                          H),
16950                H=[_|I],
16951                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16952                         I),
16953                (   I=[J|_]
16954                ->  setarg(4, J, _)
16955                ;   true
16956                )
16957            ;   G=[_, _|I],
16958                setarg(2, G, I),
16959                (   I=[J|_]
16960                ->  setarg(4, J, G)
16961                ;   true
16962                )
16963            ),
16964            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16965                      K),
16966            delete_ht(K, A, C),
16967            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16968                      L),
16969            delete_ht(L, k(A, B), C)
16970        )
16971    ),
16972    spawns_all(A, B).
16973spawns_all_triggers___2__3(A, B, C) :-
16974    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
16975    lookup_ht(D, A, E),
16976    !,
16977    C=suspension(F, not_stored_yet, t, _, A, B),
16978    'chr gen_id'(F),
16979    spawns_all_triggers___2__3__0__10(E, A, B, C).
16980spawns_all_triggers___2__3__0__10([], A, B, C) :-
16981    spawns_all_triggers___2__4(A, B, C).
16982spawns_all_triggers___2__3__0__10([A|B], C, D, E) :-
16983    (   A=suspension(_, active, _, _, F, _, G, H, _),
16984        G==C,
16985        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', I),
16986        lookup_ht(I, F, J)
16987    ->  spawns_all_triggers___2__3__1__10(J,
16988                                          F,
16989                                          H,
16990                                          A,
16991                                          B,
16992                                          C,
16993                                          D,
16994                                          E)
16995    ;   spawns_all_triggers___2__3__0__10(B, C, D, E)
16996    ).
16997spawns_all_triggers___2__3__1__10([], _, _, _, A, B, C, D) :-
16998    spawns_all_triggers___2__3__0__10(A, B, C, D).
16999spawns_all_triggers___2__3__1__10([A|B], C, D, E, F, G, H, I) :-
17000    (   A=suspension(_, active, _, _, J, K, L),
17001        L==C,
17002        may_trigger(C),
17003        \+ is_passive(G, D)
17004    ->  setarg(2, A, removed),
17005        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
17006                    M),
17007          delete_ht(M, k(J, C), A)
17008        ),
17009        ( arg(4, A, N),
17010          (   var(N)
17011          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
17012                        O),
17013              O=[_|P],
17014              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
17015                       P),
17016              (   P=[Q|_]
17017              ->  setarg(4, Q, _)
17018              ;   true
17019              )
17020          ;   N=[_, _|P],
17021              setarg(2, N, P),
17022              (   P=[Q|_]
17023              ->  setarg(4, Q, N)
17024              ;   true
17025              )
17026          )
17027        ),
17028        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
17029                    R),
17030          delete_ht(R, k(J, K), A)
17031        ),
17032        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
17033                    S),
17034          delete_ht(S, J, A)
17035        ),
17036        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
17037                    T),
17038          delete_ht(T, C, A)
17039        ),
17040        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
17041                  U),
17042        delete_ht(U, k(J, K, C), A),
17043        arg(2, I, V),
17044        setarg(2, I, active),
17045        (   V==not_stored_yet
17046        ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17047                      W),
17048            X=[I|W],
17049            b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17050                     X),
17051            (   W=[Y|_]
17052            ->  setarg(4, Y, X)
17053            ;   true
17054            ),
17055            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17056                      Z),
17057            insert_ht(Z, G, I),
17058            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17059                      A1),
17060            insert_ht(A1, k(G, H), I)
17061        ;   true
17062        ),
17063        spawns_all_triggers(J, K),
17064        (   I=suspension(_, active, _, _, _, _)
17065        ->  setarg(2, I, inactive),
17066            spawns_all_triggers___2__3__1__10(B,
17067                                              C,
17068                                              D,
17069                                              E,
17070                                              F,
17071                                              G,
17072                                              H,
17073                                              I)
17074        ;   true
17075        )
17076    ;   spawns_all_triggers___2__3__1__10(B,
17077                                          C,
17078                                          D,
17079                                          E,
17080                                          F,
17081                                          G,
17082                                          H,
17083                                          I)
17084    ).
17085spawns_all_triggers___2__3(A, B, C) :-
17086    C=suspension(D, not_stored_yet, t, _, A, B),
17087    'chr gen_id'(D),
17088    spawns_all_triggers___2__4(A, B, C).
17089spawns_all_triggers___2__4(A, B, C) :-
17090    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
17091    lookup_ht(D, A, E),
17092    !,
17093    spawns_all_triggers___2__4__0__11(E, A, B, C).
17094spawns_all_triggers___2__4__0__11([], A, B, C) :-
17095    spawns_all_triggers___2__5(A, B, C).
17096spawns_all_triggers___2__4__0__11([A|B], C, D, E) :-
17097    (   A=suspension(_, active, _, _, F, _, G, H, _),
17098        G==C,
17099        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', I),
17100        lookup_ht(I, F, J)
17101    ->  spawns_all_triggers___2__4__1__11(J,
17102                                          F,
17103                                          H,
17104                                          A,
17105                                          B,
17106                                          C,
17107                                          D,
17108                                          E)
17109    ;   spawns_all_triggers___2__4__0__11(B, C, D, E)
17110    ).
17111spawns_all_triggers___2__4__1__11([], _, _, _, A, B, C, D) :-
17112    spawns_all_triggers___2__4__0__11(A, B, C, D).
17113spawns_all_triggers___2__4__1__11([A|B], C, D, E, F, G, H, I) :-
17114    (   A=suspension(_, active, _, _, J, K, L),
17115        L==C,
17116        M=t(123, I, E, A),
17117        '$novel_production'(I, M),
17118        '$novel_production'(A, M),
17119        \+ may_trigger(C),
17120        \+ is_passive(G, D)
17121    ->  '$extend_history'(I, M),
17122        arg(2, I, N),
17123        setarg(2, I, active),
17124        (   N==not_stored_yet
17125        ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17126                      O),
17127            P=[I|O],
17128            b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17129                     P),
17130            (   O=[Q|_]
17131            ->  setarg(4, Q, P)
17132            ;   true
17133            ),
17134            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17135                      R),
17136            insert_ht(R, G, I),
17137            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17138                      S),
17139            insert_ht(S, k(G, H), I)
17140        ;   true
17141        ),
17142        spawns_all_triggers(J, K),
17143        (   I=suspension(_, active, _, _, _, _)
17144        ->  setarg(2, I, inactive),
17145            spawns_all_triggers___2__4__1__11(B,
17146                                              C,
17147                                              D,
17148                                              E,
17149                                              F,
17150                                              G,
17151                                              H,
17152                                              I)
17153        ;   true
17154        )
17155    ;   spawns_all_triggers___2__4__1__11(B,
17156                                          C,
17157                                          D,
17158                                          E,
17159                                          F,
17160                                          G,
17161                                          H,
17162                                          I)
17163    ).
17164spawns_all_triggers___2__4(A, B, C) :-
17165    spawns_all_triggers___2__5(A, B, C).
17166spawns_all_triggers___2__5(A, B, C) :-
17167    nb_getval('$chr_store_global_ground_chr_translate____spawns___3', D),
17168    !,
17169    spawns_all_triggers___2__5__0__12(D, A, B, C).
17170spawns_all_triggers___2__5__0__12([], A, B, C) :-
17171    spawns_all_triggers___2__6(A, B, C).
17172spawns_all_triggers___2__5__0__12([A|B], C, D, E) :-
17173    (   A=suspension(_, active, _, _, F, _, G),
17174        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
17175                  H),
17176        lookup_ht(H, F, I)
17177    ->  spawns_all_triggers___2__5__1__12(I,
17178                                          F,
17179                                          G,
17180                                          A,
17181                                          B,
17182                                          C,
17183                                          D,
17184                                          E)
17185    ;   spawns_all_triggers___2__5__0__12(B, C, D, E)
17186    ).
17187spawns_all_triggers___2__5__1__12([], _, _, _, A, B, C, D) :-
17188    spawns_all_triggers___2__5__0__12(A, B, C, D).
17189spawns_all_triggers___2__5__1__12([A|B], C, D, E, F, G, H, I) :-
17190    (   A=suspension(_, active, _, _, J, _, K, L, _),
17191        K==C,
17192        M=t(125, E, A, I),
17193        '$novel_production'(E, M),
17194        '$novel_production'(I, M),
17195        \+ is_passive(C, L),
17196        may_trigger(J),
17197        \+ may_trigger(D)
17198    ->  '$extend_history'(I, M),
17199        arg(2, I, N),
17200        setarg(2, I, active),
17201        (   N==not_stored_yet
17202        ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17203                      O),
17204            P=[I|O],
17205            b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17206                     P),
17207            (   O=[Q|_]
17208            ->  setarg(4, Q, P)
17209            ;   true
17210            ),
17211            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17212                      R),
17213            insert_ht(R, G, I),
17214            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17215                      S),
17216            insert_ht(S, k(G, H), I)
17217        ;   true
17218        ),
17219        spawns(G, H, D),
17220        (   I=suspension(_, active, _, _, _, _)
17221        ->  setarg(2, I, inactive),
17222            spawns_all_triggers___2__5__1__12(B,
17223                                              C,
17224                                              D,
17225                                              E,
17226                                              F,
17227                                              G,
17228                                              H,
17229                                              I)
17230        ;   true
17231        )
17232    ;   spawns_all_triggers___2__5__1__12(B,
17233                                          C,
17234                                          D,
17235                                          E,
17236                                          F,
17237                                          G,
17238                                          H,
17239                                          I)
17240    ).
17241spawns_all_triggers___2__5(A, B, C) :-
17242    spawns_all_triggers___2__6(A, B, C).
17243spawns_all_triggers___2__6(A, B, C) :-
17244    arg(2, C, D),
17245    setarg(2, C, active),
17246    (   D==not_stored_yet
17247    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17248                  E),
17249        F=[C|E],
17250        b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17251                 F),
17252        (   E=[G|_]
17253        ->  setarg(4, G, F)
17254        ;   true
17255        ),
17256        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17257                  H),
17258        insert_ht(H, A, C),
17259        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17260                  I),
17261        insert_ht(I, k(A, B), C)
17262    ;   true
17263    ).
17264spawns_all_triggers_implies_spawns_all :-
17265    spawns_all_triggers_implies_spawns_all___0__0(_).
17266spawns_all_triggers_implies_spawns_all___0__0(_) :-
17267    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17268              A),
17269    member(B, A),
17270    B=suspension(_, active, _),
17271    !,
17272    setarg(2, B, removed),
17273    arg(3, B, C),
17274    (   var(C)
17275    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17276                  D),
17277        D=[_|E],
17278        b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17279                 E),
17280        (   E=[F|_]
17281        ->  setarg(3, F, _)
17282        ;   true
17283        )
17284    ;   C=[_, _|E],
17285        setarg(2, C, E),
17286        (   E=[F|_]
17287        ->  setarg(3, F, C)
17288        ;   true
17289        )
17290    ),
17291    fail.
17292spawns_all_triggers_implies_spawns_all___0__0(A) :-
17293    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17294              B),
17295    !,
17296    A=suspension(C, not_stored_yet, _),
17297    'chr gen_id'(C),
17298    spawns_all_triggers_implies_spawns_all___0__0__0__3(B, A).
17299spawns_all_triggers_implies_spawns_all___0__0__0__3([], A) :-
17300    spawns_all_triggers_implies_spawns_all___0__1(A).
17301spawns_all_triggers_implies_spawns_all___0__0__0__3([A|B], C) :-
17302    (   A=suspension(_, active, _, _, D, E)
17303    ->  setarg(2, A, removed),
17304        ( arg(4, A, F),
17305          (   var(F)
17306          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17307                        G),
17308              G=[_|H],
17309              b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17310                       H),
17311              (   H=[I|_]
17312              ->  setarg(4, I, _)
17313              ;   true
17314              )
17315          ;   F=[_, _|H],
17316              setarg(2, F, H),
17317              (   H=[I|_]
17318              ->  setarg(4, I, F)
17319              ;   true
17320              )
17321          )
17322        ),
17323        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17324                    J),
17325          delete_ht(J, D, A)
17326        ),
17327        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17328                  K),
17329        delete_ht(K, k(D, E), A),
17330        arg(2, C, L),
17331        setarg(2, C, active),
17332        (   L==not_stored_yet
17333        ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17334                      M),
17335            N=[C|M],
17336            b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17337                     N),
17338            (   M=[O|_]
17339            ->  setarg(3, O, N)
17340            ;   true
17341            )
17342        ;   true
17343        ),
17344        spawns_all(D, E),
17345        (   C=suspension(_, active, _)
17346        ->  setarg(2, C, inactive),
17347            spawns_all_triggers_implies_spawns_all___0__0__0__3(B,
17348                                                                C)
17349        ;   true
17350        )
17351    ;   spawns_all_triggers_implies_spawns_all___0__0__0__3(B, C)
17352    ).
17353spawns_all_triggers_implies_spawns_all___0__0(A) :-
17354    A=suspension(B, not_stored_yet, _),
17355    'chr gen_id'(B),
17356    spawns_all_triggers_implies_spawns_all___0__1(A).
17357spawns_all_triggers_implies_spawns_all___0__1(A) :-
17358    arg(2, A, B),
17359    setarg(2, A, active),
17360    (   B==not_stored_yet
17361    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17362                  C),
17363        D=[A|C],
17364        b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17365                 D),
17366        (   C=[E|_]
17367        ->  setarg(3, E, D)
17368        ;   true
17369        )
17370    ;   true
17371    ).
17372all_spawned(A, B) :-
17373    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
17374              C),
17375    (   lookup_ht(C, k(A, guard), D),
17376        member(E, D),
17377        E=suspension(_, active, _, _),
17378        !
17379    ;   lookup_ht(C, k(A, B), F),
17380        member(G, F),
17381        G=suspension(_, active, _, _),
17382        !
17383    ).
17384all_spawned(_, _) :-
17385    fail.
17386is_observed(A, B, C) :-
17387    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
17388              D),
17389    lookup_ht(D, k(A, B), E),
17390    member(F, E),
17391    F=suspension(_, active, _, _, _, _, G, _, _),
17392    !,
17393    do_is_observed(A, G, C).
17394is_observed(_, _, _) :-
17395    fail.
17396do_is_observed(A, B, C) :-
17397    var(C),
17398    !,
17399    do_is_observed(A, B).
17400do_is_observed(A, B, C) :-
17401    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', D),
17402    lookup_ht(D, A, E),
17403    member(F, E),
17404    F=suspension(_, active, _, _, _, _, G, _, _),
17405    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', H),
17406    lookup_ht(H, G, I),
17407    member(J, I),
17408    J=suspension(_, active, _, _, K, _, _, L, _),
17409    J\==F,
17410    ground(C),
17411    (   (   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
17412                      M),
17413            lookup_ht(M, k(B, C), N),
17414            member(O, N),
17415            O=suspension(_, active, _, _),
17416            \+ is_passive(G, L),
17417            !
17418        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
17419                      P),
17420            lookup_ht(P, k(B, C, K), Q),
17421            member(R, Q),
17422            R=suspension(_, active, _, _, _, _, _),
17423            \+ is_passive(G, L),
17424            !
17425        )
17426    ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17427                  S),
17428        lookup_ht(S, k(B, C), T),
17429        member(U, T),
17430        U=suspension(_, active, _, _, _, _),
17431        \+ is_passive(G, L),
17432        may_trigger(K),
17433        !
17434    ).
17435do_is_observed(_, _, _) :-
17436    chr_pp_flag(observation_analysis, off).
17437do_is_observed(A, B) :-
17438    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', C),
17439    lookup_ht(C, A, D),
17440    member(E, D),
17441    E=suspension(_, active, _, _, _, _, F, _, _),
17442    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', G),
17443    lookup_ht(G, F, H),
17444    member(I, H),
17445    I=suspension(_, active, _, _, J, _, _, K, _),
17446    I\==E,
17447    (   (   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
17448                      L),
17449            lookup_ht(L, B, M),
17450            member(N, M),
17451            N=suspension(_, active, _, _),
17452            \+ is_passive(F, K),
17453            !
17454        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
17455                      O),
17456            lookup_ht(O, k(B, J), P),
17457            member(Q, P),
17458            Q=suspension(_, active, _, _, _, _, _),
17459            \+ is_passive(F, K),
17460            !
17461        )
17462    ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17463                  R),
17464        lookup_ht(R, B, S),
17465        member(T, S),
17466        T=suspension(_, active, _, _, _, _),
17467        \+ is_passive(F, K),
17468        may_trigger(J),
17469        !
17470    ).
17471do_is_observed(_, _) :-
17472    chr_pp_flag(observation_analysis, off).
17473generate_indexed_variables_body(A/B, C, D, E) :-
17474    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
17475              F),
17476    lookup_ht(F, A/B, G),
17477    member(H, G),
17478    H=suspension(_, active, _, _, _, I),
17479    !,
17480    get_indexing_spec(A/B, J),
17481    (   chr_pp_flag(term_indexing, on)
17482    ->  spectermvars(J, C, A, B, D, E)
17483    ;   get_constraint_type_det(A/B, K),
17484        create_indexed_variables_body(C,
17485                                      I,
17486                                      K,
17487                                      E,
17488                                      1,
17489                                      A/B,
17490                                      L,
17491                                      M),
17492        (   L==empty
17493        ->  D=true,
17494            E=[]
17495        ;   M==0
17496        ->  (   C=[N]
17497            ->  true
17498            ;   N=..[term|C]
17499            ),
17500            D=term_variables(N, E)
17501        ;   L=D
17502        )
17503    ).
17504generate_indexed_variables_body(A, _, _, _) :-
17505    chr_error(internal,
17506              'generate_indexed_variables_body: missing mode info for ~w.\n',
17507              [A]).
17508empty_named_history_initialisations(A, B) :-
17509    C=suspension(D, active, _, A, B),
17510    'chr gen_id'(D),
17511    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17512              E),
17513    F=[C|E],
17514    b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17515             F),
17516    (   E=[G|_]
17517    ->  setarg(3, G, F)
17518    ;   true
17519    ).
17520generate_empty_named_history_initialisation(A) :-
17521    generate_empty_named_history_initialisation___1__0(A, _).
17522generate_empty_named_history_initialisation___1__0(A, B) :-
17523    (   'chr newvia_1'(A, C)
17524    ->  get_attr(C, chr_translate, D),
17525        D=v(_, E, _, _, _, _, _, _, _, _, _)
17526    ;   nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17527                  E)
17528    ),
17529    member(F, E),
17530    F=suspension(_, active, _, _, G),
17531    G==A,
17532    !,
17533    (   var(B)
17534    ->  true
17535    ;   B=suspension(_, H, _, _, I),
17536        setarg(2, B, removed),
17537        (   H==not_stored_yet
17538        ->  J=[]
17539        ;   term_variables(I, J),
17540            arg(4, B, K),
17541            (   var(K)
17542            ->  nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17543                          L),
17544                L=[_|M],
17545                b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17546                         M),
17547                (   M=[N|_]
17548                ->  setarg(4, N, _)
17549                ;   true
17550                )
17551            ;   K=[_, _|M],
17552                setarg(2, K, M),
17553                (   M=[N|_]
17554                ->  setarg(4, N, K)
17555                ;   true
17556                )
17557            ),
17558            detach_generate_empty_named_history_initialisation___1(J,
17559                                                                   B)
17560        )
17561    ).
17562generate_empty_named_history_initialisation___1__0(A, B) :-
17563    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17564              C),
17565    !,
17566    (   var(B)
17567    ->  B=suspension(D, not_stored_yet, 0, _, A),
17568        'chr gen_id'(D)
17569    ;   true
17570    ),
17571    generate_empty_named_history_initialisation___1__0__0__3(C,
17572                                                             A,
17573                                                             B).
17574generate_empty_named_history_initialisation___1__0__0__3([], A, B) :-
17575    generate_empty_named_history_initialisation___1__1(A, B).
17576generate_empty_named_history_initialisation___1__0__0__3([A|B], C, D) :-
17577    (   A=suspension(_, active, _, E, F)
17578    ->  setarg(2, A, removed),
17579        arg(3, A, G),
17580        (   var(G)
17581        ->  nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17582                      H),
17583            H=[_|I],
17584            b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17585                     I),
17586            (   I=[J|_]
17587            ->  setarg(3, J, _)
17588            ;   true
17589            )
17590        ;   G=[_, _|I],
17591            setarg(2, G, I),
17592            (   I=[J|_]
17593            ->  setarg(3, J, G)
17594            ;   true
17595            )
17596        ),
17597        arg(2, D, K),
17598        setarg(2, D, active),
17599        ( arg(3, D, L),
17600          M is L+1,
17601          setarg(3, D, M)
17602        ),
17603        (   K==not_stored_yet
17604        ->  D=suspension(_, _, _, _, N),
17605            term_variables(N, O),
17606            nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17607                      P),
17608            Q=[D|P],
17609            b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17610                     Q),
17611            (   P=[R|_]
17612            ->  setarg(4, R, Q)
17613            ;   true
17614            ),
17615            attach_generate_empty_named_history_initialisation___1(O,
17616                                                                   D)
17617        ;   true
17618        ),
17619        empty_named_history_global_variable(C, S),
17620        E=[(:-nb_setval(S, 0))|T],
17621        empty_named_history_initialisations(T, F),
17622        (   D=suspension(_, active, M, _, _)
17623        ->  setarg(2, D, inactive),
17624            generate_empty_named_history_initialisation___1__0__0__3(B,
17625                                                                     C,
17626                                                                     D)
17627        ;   true
17628        )
17629    ;   generate_empty_named_history_initialisation___1__0__0__3(B,
17630                                                                 C,
17631                                                                 D)
17632    ).
17633generate_empty_named_history_initialisation___1__0(A, B) :-
17634    (   var(B)
17635    ->  B=suspension(C, not_stored_yet, 0, _, A),
17636        'chr gen_id'(C)
17637    ;   true
17638    ),
17639    generate_empty_named_history_initialisation___1__1(A, B).
17640generate_empty_named_history_initialisation___1__1(_, A) :-
17641    arg(2, A, B),
17642    setarg(2, A, active),
17643    arg(3, A, C),
17644    D is C+1,
17645    setarg(3, A, D),
17646    (   B==not_stored_yet
17647    ->  A=suspension(_, _, _, _, E),
17648        term_variables(E, F),
17649        nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17650                  G),
17651        H=[A|G],
17652        b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17653                 H),
17654        (   G=[I|_]
17655        ->  setarg(4, I, H)
17656        ;   true
17657        ),
17658        attach_generate_empty_named_history_initialisation___1(F,
17659                                                               A)
17660    ;   true
17661    ).
17662find_empty_named_histories :-
17663    find_empty_named_histories___0__0(_).
17664find_empty_named_histories___0__0(A) :-
17665    nb_getval('$chr_store_constants_chr_translate____history___3___[3]___[]',
17666              B),
17667    !,
17668    A=suspension(C, not_stored_yet, t, _),
17669    'chr gen_id'(C),
17670    find_empty_named_histories___0__0__0__1(B, A).
17671find_empty_named_histories___0__0__0__1([], A) :-
17672    find_empty_named_histories___0__1(A).
17673find_empty_named_histories___0__0__0__1([A|B], C) :-
17674    (   A=suspension(_, active, _, _, D, E),
17675        E=[],
17676        F=t(142, C, A),
17677        '$novel_production'(C, F),
17678        '$novel_production'(A, F)
17679    ->  '$extend_history'(C, F),
17680        arg(2, C, G),
17681        setarg(2, C, active),
17682        (   G==not_stored_yet
17683        ->  nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17684                      H),
17685            I=[C|H],
17686            b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17687                     I),
17688            (   H=[J|_]
17689            ->  setarg(4, J, I)
17690            ;   true
17691            )
17692        ;   true
17693        ),
17694        generate_empty_named_history_initialisation(D),
17695        (   C=suspension(_, active, _, _)
17696        ->  setarg(2, C, inactive),
17697            find_empty_named_histories___0__0__0__1(B, C)
17698        ;   true
17699        )
17700    ;   find_empty_named_histories___0__0__0__1(B, C)
17701    ).
17702find_empty_named_histories___0__0(A) :-
17703    A=suspension(B, not_stored_yet, t, _),
17704    'chr gen_id'(B),
17705    find_empty_named_histories___0__1(A).
17706find_empty_named_histories___0__1(A) :-
17707    nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17708              B),
17709    !,
17710    find_empty_named_histories___0__1__0__2(B, A).
17711find_empty_named_histories___0__1__0__2([], A) :-
17712    find_empty_named_histories___0__2(A).
17713find_empty_named_histories___0__1__0__2([A|B], C) :-
17714    (   A=suspension(_, active, _, _, _)
17715    ->  A=suspension(_, _, _, _, D),
17716        setarg(2, A, removed),
17717        term_variables(D, E),
17718        ( arg(4, A, F),
17719          (   var(F)
17720          ->  nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17721                        G),
17722              G=[_|H],
17723              b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17724                       H),
17725              (   H=[I|_]
17726              ->  setarg(4, I, _)
17727              ;   true
17728              )
17729          ;   F=[_, _|H],
17730              setarg(2, F, H),
17731              (   H=[I|_]
17732              ->  setarg(4, I, F)
17733              ;   true
17734              )
17735          )
17736        ),
17737        detach_generate_empty_named_history_initialisation___1(E,
17738                                                               A),
17739        find_empty_named_histories___0__1__0__2(B, C)
17740    ;   find_empty_named_histories___0__1__0__2(B, C)
17741    ).
17742find_empty_named_histories___0__1(A) :-
17743    find_empty_named_histories___0__2(A).
17744find_empty_named_histories___0__2(A) :-
17745    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17746              B),
17747    member(C, B),
17748    C=suspension(_, active, _, D, E),
17749    !,
17750    setarg(2, C, removed),
17751    arg(3, C, F),
17752    (   var(F)
17753    ->  nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17754                  G),
17755        G=[_|H],
17756        b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17757                 H),
17758        (   H=[I|_]
17759        ->  setarg(3, I, _)
17760        ;   true
17761        )
17762    ;   F=[_, _|H],
17763        setarg(2, F, H),
17764        (   H=[I|_]
17765        ->  setarg(3, I, F)
17766        ;   true
17767        )
17768    ),
17769    (   var(A)
17770    ->  true
17771    ;   arg(2, A, J),
17772        setarg(2, A, removed),
17773        (   J==not_stored_yet
17774        ->  true
17775        ;   arg(4, A, K),
17776            (   var(K)
17777            ->  nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17778                          L),
17779                L=[_|M],
17780                b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17781                         M),
17782                (   M=[N|_]
17783                ->  setarg(4, N, _)
17784                ;   true
17785                )
17786            ;   K=[_, _|M],
17787                setarg(2, K, M),
17788                (   M=[N|_]
17789                ->  setarg(4, N, K)
17790                ;   true
17791                )
17792            )
17793        )
17794    ),
17795    D=E.
17796find_empty_named_histories___0__2(A) :-
17797    (   var(A)
17798    ->  true
17799    ;   arg(2, A, B),
17800        setarg(2, A, removed),
17801        (   B==not_stored_yet
17802        ->  true
17803        ;   arg(4, A, C),
17804            (   var(C)
17805            ->  nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17806                          D),
17807                D=[_|E],
17808                b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17809                         E),
17810                (   E=[F|_]
17811                ->  setarg(4, F, _)
17812                ;   true
17813                )
17814            ;   C=[_, _|E],
17815                setarg(2, C, E),
17816                (   E=[F|_]
17817                ->  setarg(4, F, C)
17818                ;   true
17819                )
17820            )
17821        )
17822    ),
17823    chr_error(internal, 'find_empty_named_histories was not removed', []).
17824module_initializer(A) :-
17825    B=suspension(C, active, _, A),
17826    'chr gen_id'(C),
17827    nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
17828              D),
17829    E=[B|D],
17830    b_setval('$chr_store_global_ground_chr_translate____module_initializer___1',
17831             E),
17832    (   D=[F|_]
17833    ->  setarg(3, F, E)
17834    ;   true
17835    ).
17836module_initializers(A) :-
17837    nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
17838              B),
17839    member(C, B),
17840    C=suspension(_, active, _, D),
17841    !,
17842    setarg(2, C, removed),
17843    arg(3, C, E),
17844    (   var(E)
17845    ->  nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
17846                  F),
17847        F=[_|G],
17848        b_setval('$chr_store_global_ground_chr_translate____module_initializer___1',
17849                 G),
17850        (   G=[H|_]
17851        ->  setarg(3, H, _)
17852        ;   true
17853        )
17854    ;   E=[_, _|G],
17855        setarg(2, E, G),
17856        (   G=[H|_]
17857        ->  setarg(3, H, E)
17858        ;   true
17859        )
17860    ),
17861    A=(D, I),
17862    module_initializers(I).
17863module_initializers(true).
17864actual_atomic_multi_hash_keys(A, B, C) :-
17865    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
17866              D),
17867    lookup_ht(D, A, E),
17868    member(F, E),
17869    F=suspension(_, active, _, G),
17870    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
17871              H),
17872    lookup_ht(H, A, I),
17873    member(J, I),
17874    J=suspension(_, active, _),
17875    !,
17876    setarg(2, F, removed),
17877    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
17878              K),
17879    delete_ht(K, A, F),
17880    selectchk(multi_hash([B]), G, L),
17881    B=[M],
17882    (   get_constraint_arg_type(A, M, N),
17883        enumerated_atomic_type(N, O)
17884    ->  P=O,
17885        Q=complete
17886    ;   P=C,
17887        Q=incomplete
17888    ),
17889    actual_store_types(A,
17890                       [atomic_constants(B, P, Q)|L]).
17891actual_atomic_multi_hash_keys(A, B, C) :-
17892    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17893              D),
17894    lookup_ht(D, k(A, B), E),
17895    member(F, E),
17896    F=suspension(_, active, _, _, G),
17897    !,
17898    setarg(2, F, removed),
17899    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17900              H),
17901    delete_ht(H, k(A, B), F),
17902    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
17903              I),
17904    delete_ht(I, A, F),
17905    append(C, G, J),
17906    sort(J, K),
17907    actual_atomic_multi_hash_keys(A, B, K).
17908actual_atomic_multi_hash_keys(A, B, C) :-
17909    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
17910              D),
17911    lookup_ht(D, k(A, B), E),
17912    member(F, E),
17913    F=suspension(_, active, _, _, G),
17914    !,
17915    setarg(2, F, removed),
17916    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
17917              H),
17918    delete_ht(H, k(A, B), F),
17919    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
17920              I),
17921    delete_ht(I, A, F),
17922    append(G, C, J),
17923    sort(J, K),
17924    actual_ground_multi_hash_keys(A, B, K).
17925actual_atomic_multi_hash_keys(A, B, _) :-
17926    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
17927              C),
17928    lookup_ht(C, k(A, B), D),
17929    member(E, D),
17930    E=suspension(_, active, _, _),
17931    !.
17932actual_atomic_multi_hash_keys(A, B, C) :-
17933    D=suspension(E, active, A, B, C),
17934    'chr gen_id'(E),
17935    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17936              F),
17937    insert_ht(F, k(A, B), D),
17938    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
17939              G),
17940    insert_ht(G, A, D).
17941actual_ground_multi_hash_keys(A, B, C) :-
17942    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
17943              D),
17944    lookup_ht(D, A, E),
17945    member(F, E),
17946    F=suspension(_, active, _, G),
17947    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
17948              H),
17949    lookup_ht(H, A, I),
17950    member(J, I),
17951    J=suspension(_, active, _),
17952    !,
17953    setarg(2, F, removed),
17954    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
17955              K),
17956    delete_ht(K, A, F),
17957    (   B=[L],
17958        get_constraint_arg_type(A, L, M),
17959        M=chr_enum(N)
17960    ->  O=complete
17961    ;   N=C,
17962        O=incomplete
17963    ),
17964    selectchk(multi_hash([B]), G, P),
17965    actual_store_types(A,
17966                       [ground_constants(B, N, O)|P]).
17967actual_ground_multi_hash_keys(A, B, C) :-
17968    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17969              D),
17970    lookup_ht(D, k(A, B), E),
17971    member(F, E),
17972    F=suspension(_, active, _, _, G),
17973    !,
17974    setarg(2, F, removed),
17975    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17976              H),
17977    delete_ht(H, k(A, B), F),
17978    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
17979              I),
17980    delete_ht(I, A, F),
17981    append(C, G, J),
17982    sort(J, K),
17983    actual_ground_multi_hash_keys(A, B, K).
17984actual_ground_multi_hash_keys(A, B, C) :-
17985    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
17986              D),
17987    lookup_ht(D, k(A, B), E),
17988    member(F, E),
17989    F=suspension(_, active, _, _, G),
17990    !,
17991    setarg(2, F, removed),
17992    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
17993              H),
17994    delete_ht(H, k(A, B), F),
17995    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
17996              I),
17997    delete_ht(I, A, F),
17998    append(C, G, J),
17999    sort(J, K),
18000    actual_ground_multi_hash_keys(A, B, K).
18001actual_ground_multi_hash_keys(A, B, _) :-
18002    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
18003              C),
18004    lookup_ht(C, k(A, B), D),
18005    member(E, D),
18006    E=suspension(_, active, _, _),
18007    !.
18008actual_ground_multi_hash_keys(A, B, C) :-
18009    D=suspension(E, active, A, B, C),
18010    'chr gen_id'(E),
18011    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18012              F),
18013    insert_ht(F, k(A, B), D),
18014    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
18015              G),
18016    insert_ht(G, A, D).
18017actual_non_ground_multi_hash_key(A, B) :-
18018    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
18019              C),
18020    lookup_ht(C, k(A, B), D),
18021    member(E, D),
18022    E=suspension(_, active, _, _),
18023    !.
18024actual_non_ground_multi_hash_key(A, B) :-
18025    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
18026              C),
18027    lookup_ht(C, k(A, B), D),
18028    !,
18029    actual_non_ground_multi_hash_key___2__0__0__3(D, A, B).
18030actual_non_ground_multi_hash_key___2__0__0__3([], A, B) :-
18031    actual_non_ground_multi_hash_key___2__1(A, B).
18032actual_non_ground_multi_hash_key___2__0__0__3([A|B], C, D) :-
18033    (   A=suspension(_, active, E, F, _),
18034        E==C,
18035        F==D
18036    ->  setarg(2, A, removed),
18037        ( nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
18038                    G),
18039          delete_ht(G, k(C, D), A)
18040        ),
18041        nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
18042                  H),
18043        delete_ht(H, C, A),
18044        actual_non_ground_multi_hash_key___2__0__0__3(B, C, D)
18045    ;   actual_non_ground_multi_hash_key___2__0__0__3(B, C, D)
18046    ).
18047actual_non_ground_multi_hash_key(A, B) :-
18048    actual_non_ground_multi_hash_key___2__1(A, B).
18049actual_non_ground_multi_hash_key___2__1(A, B) :-
18050    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18051              C),
18052    lookup_ht(C, k(A, B), D),
18053    !,
18054    actual_non_ground_multi_hash_key___2__1__0__4(D, A, B).
18055actual_non_ground_multi_hash_key___2__1__0__4([], A, B) :-
18056    actual_non_ground_multi_hash_key___2__2(A, B).
18057actual_non_ground_multi_hash_key___2__1__0__4([A|B], C, D) :-
18058    (   A=suspension(_, active, E, F, _),
18059        E==C,
18060        F==D
18061    ->  setarg(2, A, removed),
18062        ( nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18063                    G),
18064          delete_ht(G, k(C, D), A)
18065        ),
18066        nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
18067                  H),
18068        delete_ht(H, C, A),
18069        actual_non_ground_multi_hash_key___2__1__0__4(B, C, D)
18070    ;   actual_non_ground_multi_hash_key___2__1__0__4(B, C, D)
18071    ).
18072actual_non_ground_multi_hash_key___2__1(A, B) :-
18073    actual_non_ground_multi_hash_key___2__2(A, B).
18074actual_non_ground_multi_hash_key___2__2(A, B) :-
18075    C=suspension(D, active, A, B),
18076    'chr gen_id'(D),
18077    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
18078              E),
18079    insert_ht(E, k(A, B), C).
18080symbol_count(A, B) :-
18081    symbol_count___2__0(A, B, _).
18082symbol_count___2__0(A, B, C) :-
18083    (   'chr newvia_1'(A, D)
18084    ->  get_attr(D, chr_translate, E),
18085        E=v(_, _, _, F, _, _, _, _, _, _, _)
18086    ;   nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18087                  F)
18088    ),
18089    member(G, F),
18090    G=suspension(_, active, _, _, _, H, I),
18091    H==A,
18092    !,
18093    G=suspension(_, _, _, _, _, J, _),
18094    setarg(2, G, removed),
18095    term_variables(J, K),
18096    arg(5, G, L),
18097    (   var(L)
18098    ->  nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18099                  M),
18100        M=[_|N],
18101        b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18102                 N),
18103        (   N=[O|_]
18104        ->  setarg(5, O, _)
18105        ;   true
18106        )
18107    ;   L=[_, _|N],
18108        setarg(2, L, N),
18109        (   N=[O|_]
18110        ->  setarg(5, O, L)
18111        ;   true
18112        )
18113    ),
18114    detach_fresh_symbol___2(K, G),
18115    (   var(C)
18116    ->  true
18117    ;   C=suspension(_, _, _, P, _),
18118        setarg(2, C, removed),
18119        term_variables(P, Q),
18120        arg(3, C, R),
18121        (   var(R)
18122        ->  nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18123                      S),
18124            S=[_|T],
18125            b_setval('$chr_store_global_list_chr_translate____symbol_count___2',
18126                     T),
18127            (   T=[U|_]
18128            ->  setarg(3, U, _)
18129            ;   true
18130            )
18131        ;   R=[_, _|T],
18132            setarg(2, R, T),
18133            (   T=[U|_]
18134            ->  setarg(3, U, R)
18135            ;   true
18136            )
18137        ),
18138        detach_symbol_count___2(Q, C)
18139    ),
18140    atom_concat(A, B, I),
18141    V is B+1,
18142    symbol_count(A, V).
18143symbol_count___2__0(A, B, C) :-
18144    (   var(C)
18145    ->  C=suspension(D, active, _, A, B),
18146        term_variables(A, E),
18147        'chr gen_id'(D),
18148        nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18149                  F),
18150        G=[C|F],
18151        b_setval('$chr_store_global_list_chr_translate____symbol_count___2',
18152                 G),
18153        (   F=[H|_]
18154        ->  setarg(3, H, G)
18155        ;   true
18156        ),
18157        attach_symbol_count___2(E, C)
18158    ;   setarg(2, C, active)
18159    ).
18160fresh_symbol(A, B) :-
18161    fresh_symbol___2__0(A, B, _).
18162fresh_symbol___2__0(A, B, C) :-
18163    (   'chr newvia_1'(A, D)
18164    ->  get_attr(D, chr_translate, E),
18165        E=v(_, _, F, _, _, _, _, _, _, _, _)
18166    ;   nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18167                  F)
18168    ),
18169    member(G, F),
18170    G=suspension(_, active, _, H, I),
18171    H==A,
18172    !,
18173    G=suspension(_, _, _, J, _),
18174    setarg(2, G, removed),
18175    term_variables(J, K),
18176    arg(3, G, L),
18177    (   var(L)
18178    ->  nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18179                  M),
18180        M=[_|N],
18181        b_setval('$chr_store_global_list_chr_translate____symbol_count___2',
18182                 N),
18183        (   N=[O|_]
18184        ->  setarg(3, O, _)
18185        ;   true
18186        )
18187    ;   L=[_, _|N],
18188        setarg(2, L, N),
18189        (   N=[O|_]
18190        ->  setarg(3, O, L)
18191        ;   true
18192        )
18193    ),
18194    detach_symbol_count___2(K, G),
18195    (   var(C)
18196    ->  true
18197    ;   C=suspension(_, P, _, _, _, Q, _),
18198        setarg(2, C, removed),
18199        (   P==not_stored_yet
18200        ->  R=[]
18201        ;   term_variables(Q, R),
18202            arg(5, C, S),
18203            (   var(S)
18204            ->  nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18205                          T),
18206                T=[_|U],
18207                b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18208                         U),
18209                (   U=[V|_]
18210                ->  setarg(5, V, _)
18211                ;   true
18212                )
18213            ;   S=[_, _|U],
18214                setarg(2, S, U),
18215                (   U=[V|_]
18216                ->  setarg(5, V, S)
18217                ;   true
18218                )
18219            ),
18220            detach_fresh_symbol___2(R, C)
18221        )
18222    ),
18223    atom_concat(A, I, B),
18224    W is I+1,
18225    symbol_count(A, W).
18226fresh_symbol___2__0(A, B, C) :-
18227    (   var(C)
18228    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
18229        'chr gen_id'(D)
18230    ;   true
18231    ),
18232    (   '$novel_production'(C, 157),
18233        !,
18234        '$extend_history'(C, 157),
18235        arg(2, C, E),
18236        setarg(2, C, active),
18237        arg(4, C, F),
18238        G is F+1,
18239        setarg(4, C, G),
18240        (   E==not_stored_yet
18241        ->  C=suspension(_, _, _, _, _, H, _),
18242            term_variables(H, I),
18243            nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18244                      J),
18245            K=[C|J],
18246            b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18247                     K),
18248            (   J=[L|_]
18249            ->  setarg(5, L, K)
18250            ;   true
18251            ),
18252            attach_fresh_symbol___2(I, C)
18253        ;   true
18254        ),
18255        symbol_count(A, 0),
18256        (   C=suspension(_, active, _, G, _, _, _)
18257        ->  setarg(2, C, inactive),
18258            fresh_symbol___2__1(A, B, C)
18259        ;   true
18260        )
18261    ;   fresh_symbol___2__1(A, B, C)
18262    ).
18263fresh_symbol___2__1(_, _, A) :-
18264    arg(2, A, B),
18265    setarg(2, A, active),
18266    arg(4, A, C),
18267    D is C+1,
18268    setarg(4, A, D),
18269    (   B==not_stored_yet
18270    ->  A=suspension(_, _, _, _, _, E, _),
18271        term_variables(E, F),
18272        nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18273                  G),
18274        H=[A|G],
18275        b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18276                 H),
18277        (   G=[I|_]
18278        ->  setarg(5, I, H)
18279        ;   true
18280        ),
18281        attach_fresh_symbol___2(F, A)
18282    ;   true
18283    ).
18284prolog_global_variable(A) :-
18285    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
18286              B),
18287    lookup_ht(B, A, C),
18288    member(D, C),
18289    D=suspension(_, active, _, _),
18290    !.
18291prolog_global_variable(A) :-
18292    B=suspension(C, active, _, A),
18293    'chr gen_id'(C),
18294    nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18295              D),
18296    E=[B|D],
18297    b_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18298             E),
18299    (   D=[F|_]
18300    ->  setarg(3, F, E)
18301    ;   true
18302    ),
18303    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
18304              G),
18305    insert_ht(G, A, B).
18306prolog_global_variables(A) :-
18307    nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18308              B),
18309    member(C, B),
18310    C=suspension(_, active, _, D),
18311    !,
18312    setarg(2, C, removed),
18313    arg(3, C, E),
18314    (   var(E)
18315    ->  nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18316                  F),
18317        F=[_|G],
18318        b_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18319                 G),
18320        (   G=[H|_]
18321        ->  setarg(3, H, _)
18322        ;   true
18323        )
18324    ;   E=[_, _|G],
18325        setarg(2, E, G),
18326        (   G=[H|_]
18327        ->  setarg(3, H, E)
18328        ;   true
18329        )
18330    ),
18331    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
18332              I),
18333    delete_ht(I, D, C),
18334    A=[D|J],
18335    prolog_global_variables(J).
18336prolog_global_variables([]).
18337background_info(A) :-
18338    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18339              B),
18340    member(C, B),
18341    C=suspension(_, active, _, D),
18342    !,
18343    setarg(2, C, removed),
18344    arg(3, C, E),
18345    (   var(E)
18346    ->  nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18347                  F),
18348        F=[_|G],
18349        b_setval('$chr_store_global_ground_chr_translate____background_info___1',
18350                 G),
18351        (   G=[H|_]
18352        ->  setarg(3, H, _)
18353        ;   true
18354        )
18355    ;   E=[_, _|G],
18356        setarg(2, E, G),
18357        (   G=[H|_]
18358        ->  setarg(3, H, E)
18359        ;   true
18360        )
18361    ),
18362    append(A, D, I),
18363    background_info(I).
18364background_info(A) :-
18365    B=suspension(C, active, _, A),
18366    'chr gen_id'(C),
18367    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18368              D),
18369    E=[B|D],
18370    b_setval('$chr_store_global_ground_chr_translate____background_info___1',
18371             E),
18372    (   D=[F|_]
18373    ->  setarg(3, F, E)
18374    ;   true
18375    ).
18376background_info(A, B) :-
18377    background_info___2__0(A, B, _).
18378background_info___2__0(A, B, C) :-
18379    nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2', D),
18380    !,
18381    (   var(C)
18382    ->  C=suspension(E, not_stored_yet, t, 0, _, A, B),
18383        'chr gen_id'(E)
18384    ;   true
18385    ),
18386    background_info___2__0__0__1(D, A, B, C).
18387background_info___2__0__0__1([], A, B, C) :-
18388    background_info___2__1(A, B, C).
18389background_info___2__0__0__1([A|B], C, D, E) :-
18390    (   A=suspension(_, active, _, _, _, F, _),
18391        G=t(164, E, A),
18392        '$novel_production'(E, G),
18393        '$novel_production'(A, G),
18394        copy_term_nat(C, H),
18395        subsumes_term(H, F)
18396    ->  '$extend_history'(E, G),
18397        arg(2, E, I),
18398        setarg(2, E, active),
18399        ( arg(4, E, J),
18400          K is J+1,
18401          setarg(4, E, K)
18402        ),
18403        (   I==not_stored_yet
18404        ->  E=suspension(_, _, _, _, _, L, _),
18405            term_variables(L, M),
18406            nb_getval('$chr_store_global_list_chr_translate____background_info___2',
18407                      N),
18408            O=[E|N],
18409            b_setval('$chr_store_global_list_chr_translate____background_info___2',
18410                     O),
18411            (   N=[P|_]
18412            ->  setarg(5, P, O)
18413            ;   true
18414            ),
18415            attach_background_info___2(M, E)
18416        ;   true
18417        ),
18418        copy_term_nat(C-D, F-Q),
18419        get_bg_info_answer([Q]),
18420        (   E=suspension(_, active, _, K, _, _, _)
18421        ->  setarg(2, E, inactive),
18422            background_info___2__0__0__1(B, C, D, E)
18423        ;   true
18424        )
18425    ;   background_info___2__0__0__1(B, C, D, E)
18426    ).
18427background_info___2__0(A, B, C) :-
18428    (   var(C)
18429    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
18430        'chr gen_id'(D)
18431    ;   true
18432    ),
18433    background_info___2__1(A, B, C).
18434background_info___2__1(_, _, A) :-
18435    arg(2, A, B),
18436    setarg(2, A, active),
18437    arg(4, A, C),
18438    D is C+1,
18439    setarg(4, A, D),
18440    (   B==not_stored_yet
18441    ->  A=suspension(_, _, _, _, _, E, _),
18442        term_variables(E, F),
18443        nb_getval('$chr_store_global_list_chr_translate____background_info___2',
18444                  G),
18445        H=[A|G],
18446        b_setval('$chr_store_global_list_chr_translate____background_info___2',
18447                 H),
18448        (   G=[I|_]
18449        ->  setarg(5, I, H)
18450        ;   true
18451        ),
18452        attach_background_info___2(F, A)
18453    ;   true
18454    ).
18455get_bg_info(A) :-
18456    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18457              B),
18458    member(C, B),
18459    C=suspension(_, active, _, D),
18460    !,
18461    A=D.
18462get_bg_info([]).
18463get_bg_info(A, B) :-
18464    get_bg_info___2__0(A, B, _).
18465get_bg_info___2__0(A, B, C) :-
18466    nb_getval('$chr_store_global_list_chr_translate____background_info___2',
18467              D),
18468    !,
18469    (   var(C)
18470    ->  C=suspension(E, not_stored_yet, t, 0, _, A, B),
18471        'chr gen_id'(E)
18472    ;   true
18473    ),
18474    get_bg_info___2__0__0__1(D, A, B, C).
18475get_bg_info___2__0__0__1([], A, B, C) :-
18476    get_bg_info___2__1(A, B, C).
18477get_bg_info___2__0__0__1([A|B], C, D, E) :-
18478    (   A=suspension(_, active, _, _, _, F, G),
18479        H=t(164, A, E),
18480        '$novel_production'(A, H),
18481        '$novel_production'(E, H),
18482        copy_term_nat(F, I),
18483        subsumes_term(I, C)
18484    ->  '$extend_history'(E, H),
18485        arg(2, E, J),
18486        setarg(2, E, active),
18487        ( arg(4, E, K),
18488          L is K+1,
18489          setarg(4, E, L)
18490        ),
18491        (   J==not_stored_yet
18492        ->  E=suspension(_, _, _, _, _, M, _),
18493            term_variables(M, N),
18494            nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',
18495                      O),
18496            P=[E|O],
18497            b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',
18498                     P),
18499            (   O=[Q|_]
18500            ->  setarg(5, Q, P)
18501            ;   true
18502            ),
18503            attach_get_bg_info___2(N, E)
18504        ;   true
18505        ),
18506        copy_term_nat(F-G, C-R),
18507        get_bg_info_answer([R]),
18508        (   E=suspension(_, active, _, L, _, _, _)
18509        ->  setarg(2, E, inactive),
18510            get_bg_info___2__0__0__1(B, C, D, E)
18511        ;   true
18512        )
18513    ;   get_bg_info___2__0__0__1(B, C, D, E)
18514    ).
18515get_bg_info___2__0(A, B, C) :-
18516    (   var(C)
18517    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
18518        'chr gen_id'(D)
18519    ;   true
18520    ),
18521    get_bg_info___2__1(A, B, C).
18522get_bg_info___2__1(_, A, B) :-
18523    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18524              C),
18525    member(D, C),
18526    D=suspension(_, active, _, E),
18527    !,
18528    setarg(2, D, removed),
18529    arg(3, D, F),
18530    (   var(F)
18531    ->  nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18532                  G),
18533        G=[_|H],
18534        b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18535                 H),
18536        (   H=[I|_]
18537        ->  setarg(3, I, _)
18538        ;   true
18539        )
18540    ;   F=[_, _|H],
18541        setarg(2, F, H),
18542        (   H=[I|_]
18543        ->  setarg(3, I, F)
18544        ;   true
18545        )
18546    ),
18547    (   var(B)
18548    ->  true
18549    ;   B=suspension(_, J, _, _, _, K, _),
18550        setarg(2, B, removed),
18551        (   J==not_stored_yet
18552        ->  L=[]
18553        ;   term_variables(K, L),
18554            arg(5, B, M),
18555            (   var(M)
18556            ->  nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',
18557                          N),
18558                N=[_|O],
18559                b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',
18560                         O),
18561                (   O=[P|_]
18562                ->  setarg(5, P, _)
18563                ;   true
18564                )
18565            ;   M=[_, _|O],
18566                setarg(2, M, O),
18567                (   O=[P|_]
18568                ->  setarg(5, P, M)
18569                ;   true
18570                )
18571            ),
18572            detach_get_bg_info___2(L, B)
18573        )
18574    ),
18575    A=E.
18576get_bg_info___2__1(_, A, B) :-
18577    (   var(B)
18578    ->  true
18579    ;   B=suspension(_, C, _, _, _, D, _),
18580        setarg(2, B, removed),
18581        (   C==not_stored_yet
18582        ->  E=[]
18583        ;   term_variables(D, E),
18584            arg(5, B, F),
18585            (   var(F)
18586            ->  nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',
18587                          G),
18588                G=[_|H],
18589                b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',
18590                         H),
18591                (   H=[I|_]
18592                ->  setarg(5, I, _)
18593                ;   true
18594                )
18595            ;   F=[_, _|H],
18596                setarg(2, F, H),
18597                (   H=[I|_]
18598                ->  setarg(5, I, F)
18599                ;   true
18600                )
18601            ),
18602            detach_get_bg_info___2(E, B)
18603        )
18604    ),
18605    A=[].
18606get_bg_info_answer(A) :-
18607    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18608              B),
18609    member(C, B),
18610    C=suspension(_, active, _, D),
18611    !,
18612    setarg(2, C, removed),
18613    arg(3, C, E),
18614    (   var(E)
18615    ->  nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18616                  F),
18617        F=[_|G],
18618        b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18619                 G),
18620        (   G=[H|_]
18621        ->  setarg(3, H, _)
18622        ;   true
18623        )
18624    ;   E=[_, _|G],
18625        setarg(2, E, G),
18626        (   G=[H|_]
18627        ->  setarg(3, H, E)
18628        ;   true
18629        )
18630    ),
18631    append(A, D, I),
18632    get_bg_info_answer(I).
18633get_bg_info_answer(A) :-
18634    B=suspension(C, active, _, A),
18635    'chr gen_id'(C),
18636    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18637              D),
18638    E=[B|D],
18639    b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18640             E),
18641    (   D=[F|_]
18642    ->  setarg(3, F, E)
18643    ;   true
18644    ).
18645prev_guard_list(A, B, C, D, E, F, G, H) :-
18646    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I),
18647    lookup_ht(I, B, J),
18648    member(K, J),
18649    K=suspension(_, active, _, _, _, L),
18650    L=pragma(rule(M, N, O, _), _, _, _, _),
18651    M\==[],
18652    make_head_matchings_explicit(B, P, Q),
18653    setof(R,
18654          chr_translate:head_subset(P, D, R),
18655          S),
18656    !,
18657    append(M, N, T),
18658    compute_derived_info(S,
18659                         Q,
18660                         P,
18661                         T,
18662                         O,
18663                         G,
18664                         D,
18665                         H,
18666                         U,
18667                         V),
18668    append(F, U, W),
18669    normalize_conj_list(W, X),
18670    append(V, H, Y),
18671    normalize_conj_list(Y, Z),
18672    next_prev_rule(C, A1, B1),
18673    prev_guard_list(A,
18674                    A1,
18675                    B1,
18676                    D,
18677                    E,
18678                    X,
18679                    G,
18680                    Z).
18681prev_guard_list(A, B, C, D, E, F, G, H) :-
18682    (   B>0
18683    ->  next_prev_rule(C, I, J),
18684        prev_guard_list(A,
18685                        I,
18686                        J,
18687                        D,
18688                        E,
18689                        F,
18690                        G,
18691                        H)
18692    ;   prev_guard_list(A, D, E, F, G, H)
18693    ).
18694prev_guard_list(A, B, C, D, E, F) :-
18695    prev_guard_list___6__0(A,
18696                           B,
18697                           C,
18698                           D,
18699                           E,
18700                           F,
18701                           _).
18702prev_guard_list___6__0(A, B, C, D, E, F, _) :-
18703    F\==[],
18704    !,
18705    head_types_modes_condition(F, B, G),
18706    conj2list(G, H),
18707    term_variables(B, I),
18708    append([chr_pp_headvariables(I)|H], D, J),
18709    normalize_conj_list(J, K),
18710    append(B, K, L),
18711    add_background_info([C|L], M),
18712    append(K, M, N),
18713    normalize_conj_list(N, O),
18714    prev_guard_list(A, B, C, O, E, []).
18715prev_guard_list___6__0(A, B, C, D, E, F, G) :-
18716    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', H),
18717    lookup_ht(H, A, I),
18718    (   member(J, I),
18719        J=suspension(_, active, _, _, _, K),
18720        K=pragma(rule(L, M, C, N), O, P, Q, A),
18721        C\==true,
18722        append(E, D, R),
18723        (   conj2list(C, S),
18724            append(R, S, T),
18725            guard_entailment:entails_guard(T, fail)
18726        ->  U=fail
18727        ;   simplify_guard(C, N, R, U, V)
18728        ),
18729        C\==U,
18730        !,
18731        setarg(2, J, removed),
18732        arg(4, J, W),
18733        (   var(W)
18734        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
18735                      X),
18736            X=[_|Y],
18737            b_setval('$chr_store_global_ground_chr_translate____rule___2',
18738                     Y),
18739            (   Y=[Z|_]
18740            ->  setarg(4, Z, _)
18741            ;   true
18742            )
18743        ;   W=[_, _|Y],
18744            setarg(2, W, Y),
18745            (   Y=[Z|_]
18746            ->  setarg(4, Z, W)
18747            ;   true
18748            )
18749        ),
18750        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A1),
18751        delete_ht(A1, A, J),
18752        rule(A,
18753             pragma(rule(L, M, U, V),
18754                    O,
18755                    P,
18756                    Q,
18757                    A)),
18758        prev_guard_list(A, B, U, D, E, [])
18759    ;   !,
18760        G=suspension(B1, not_stored_yet, t, _, A, B, C, D, E, F),
18761        'chr gen_id'(B1),
18762        prev_guard_list___6__0__0__3(I,
18763                                     A,
18764                                     B,
18765                                     C,
18766                                     D,
18767                                     E,
18768                                     F,
18769                                     G)
18770    ).
18771prev_guard_list___6__0__0__3([], A, B, C, D, E, F, G) :-
18772    prev_guard_list___6__1(A,
18773                           B,
18774                           C,
18775                           D,
18776                           E,
18777                           F,
18778                           G).
18779prev_guard_list___6__0__0__3([A|B], C, D, E, F, G, H, I) :-
18780    (   A=suspension(_, active, _, _, J, K),
18781        J==C,
18782        L=t(178, I, A),
18783        '$novel_production'(I, L),
18784        '$novel_production'(A, L),
18785        chr_pp_flag(check_impossible_rules, on),
18786        K=pragma(rule(_, _, E, _), _, _, _, C),
18787        conj2list(E, M),
18788        append(G, F, N),
18789        append(N, M, O),
18790        guard_entailment:entails_guard(O, fail)
18791    ->  '$extend_history'(I, L),
18792        arg(2, I, P),
18793        setarg(2, I, active),
18794        (   P==not_stored_yet
18795        ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
18796                      Q),
18797            R=[I|Q],
18798            b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
18799                     R),
18800            (   Q=[S|_]
18801            ->  setarg(4, S, R)
18802            ;   true
18803            ),
18804            nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
18805                      T),
18806            insert_ht(T, C, I)
18807        ;   true
18808        ),
18809        chr_warning(weird_program,
18810                    'Heads will never match or guard will always fail in ~@.\n\tThis rule will never fire!\n',
18811                    [format_rule(K)]),
18812        set_all_passive(C),
18813        (   I=suspension(_, active, _, _, _, _, _, _, _, _)
18814        ->  setarg(2, I, inactive),
18815            prev_guard_list___6__0__0__3(B,
18816                                         C,
18817                                         D,
18818                                         E,
18819                                         F,
18820                                         G,
18821                                         H,
18822                                         I)
18823        ;   true
18824        )
18825    ;   prev_guard_list___6__0__0__3(B,
18826                                     C,
18827                                     D,
18828                                     E,
18829                                     F,
18830                                     G,
18831                                     H,
18832                                     I)
18833    ).
18834prev_guard_list___6__0(A, B, C, D, E, F, G) :-
18835    G=suspension(H, not_stored_yet, t, _, A, B, C, D, E, F),
18836    'chr gen_id'(H),
18837    prev_guard_list___6__1(A,
18838                           B,
18839                           C,
18840                           D,
18841                           E,
18842                           F,
18843                           G).
18844prev_guard_list___6__1(A, B, C, D, E, F, G) :-
18845    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', H),
18846    lookup_ht(H, A, I),
18847    !,
18848    prev_guard_list___6__1__0__4(I,
18849                                 A,
18850                                 B,
18851                                 C,
18852                                 D,
18853                                 E,
18854                                 F,
18855                                 G).
18856prev_guard_list___6__1__0__4([], A, B, C, D, E, F, G) :-
18857    prev_guard_list___6__2(A,
18858                           B,
18859                           C,
18860                           D,
18861                           E,
18862                           F,
18863                           G).
18864prev_guard_list___6__1__0__4([A|B], C, D, E, F, G, H, I) :-
18865    (   A=suspension(_, active, _, _, J, K),
18866        J==C,
18867        K=pragma(rule(L, M, E, N), O, P, Q, C),
18868        simplify_heads(G, F, E, N, R, S),
18869        R\==[],
18870        extract_arguments(L, T),
18871        extract_arguments(M, U),
18872        extract_arguments(D, V),
18873        replace_some_heads(T,
18874                           U,
18875                           V,
18876                           R,
18877                           W,
18878                           X,
18879                           E,
18880                           N,
18881                           Y),
18882        substitute_arguments(L, W, Z),
18883        substitute_arguments(M, X, A1),
18884        append(S, Y, B1),
18885        list2conj(B1, C1),
18886        D1=pragma(rule(Z, A1, E, (C1, N)), O, P, Q, C),
18887        (   L\==Z
18888        ;   M\==A1
18889        )
18890    ->  setarg(2, A, removed),
18891        ( arg(4, A, E1),
18892          (   var(E1)
18893          ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
18894                        F1),
18895              F1=[_|G1],
18896              b_setval('$chr_store_global_ground_chr_translate____rule___2',
18897                       G1),
18898              (   G1=[H1|_]
18899              ->  setarg(4, H1, _)
18900              ;   true
18901              )
18902          ;   E1=[_, _|G1],
18903              setarg(2, E1, G1),
18904              (   G1=[H1|_]
18905              ->  setarg(4, H1, E1)
18906              ;   true
18907              )
18908          )
18909        ),
18910        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I1),
18911        delete_ht(I1, C, A),
18912        arg(2, I, J1),
18913        setarg(2, I, active),
18914        (   J1==not_stored_yet
18915        ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
18916                      K1),
18917            L1=[I|K1],
18918            b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
18919                     L1),
18920            (   K1=[M1|_]
18921            ->  setarg(4, M1, L1)
18922            ;   true
18923            ),
18924            nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
18925                      N1),
18926            insert_ht(N1, C, I)
18927        ;   true
18928        ),
18929        rule(C, D1),
18930        (   I=suspension(_, active, _, _, _, _, _, _, _, _)
18931        ->  setarg(2, I, inactive),
18932            prev_guard_list___6__1__0__4(B,
18933                                         C,
18934                                         D,
18935                                         E,
18936                                         F,
18937                                         G,
18938                                         H,
18939                                         I)
18940        ;   true
18941        )
18942    ;   prev_guard_list___6__1__0__4(B,
18943                                     C,
18944                                     D,
18945                                     E,
18946                                     F,
18947                                     G,
18948                                     H,
18949                                     I)
18950    ).
18951prev_guard_list___6__1(A, B, C, D, E, F, G) :-
18952    prev_guard_list___6__2(A,
18953                           B,
18954                           C,
18955                           D,
18956                           E,
18957                           F,
18958                           G).
18959prev_guard_list___6__2(A, B, C, D, E, F, G) :-
18960    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', H),
18961    lookup_ht(H, A, I),
18962    !,
18963    prev_guard_list___6__2__0__5(I,
18964                                 A,
18965                                 B,
18966                                 C,
18967                                 D,
18968                                 E,
18969                                 F,
18970                                 G).
18971prev_guard_list___6__2__0__5([], A, B, C, D, E, F, G) :-
18972    prev_guard_list___6__3(A,
18973                           B,
18974                           C,
18975                           D,
18976                           E,
18977                           F,
18978                           G).
18979prev_guard_list___6__2__0__5([A|B], C, D, E, F, G, H, I) :-
18980    (   A=suspension(_, active, _, _, J, K),
18981        J==C,
18982        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
18983                  L),
18984        lookup_ht(L, C, M)
18985    ->  prev_guard_list___6__2__1__5(M,
18986                                     K,
18987                                     A,
18988                                     B,
18989                                     C,
18990                                     D,
18991                                     E,
18992                                     F,
18993                                     G,
18994                                     H,
18995                                     I)
18996    ;   prev_guard_list___6__2__0__5(B,
18997                                     C,
18998                                     D,
18999                                     E,
19000                                     F,
19001                                     G,
19002                                     H,
19003                                     I)
19004    ).
19005prev_guard_list___6__2__1__5([], _, _, A, B, C, D, E, F, G, H) :-
19006    prev_guard_list___6__2__0__5(A,
19007                                 B,
19008                                 C,
19009                                 D,
19010                                 E,
19011                                 F,
19012                                 G,
19013                                 H).
19014prev_guard_list___6__2__1__5([A|B], C, D, E, F, G, H, I, J, K, L) :-
19015    (   A=suspension(_, active, _, _, M, N, O, _, _),
19016        O==F,
19017        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
19018                  P),
19019        lookup_ht(P, k(M, F), Q)
19020    ->  prev_guard_list___6__2__2__5(Q,
19021                                     M,
19022                                     N,
19023                                     A,
19024                                     B,
19025                                     C,
19026                                     D,
19027                                     E,
19028                                     F,
19029                                     G,
19030                                     H,
19031                                     I,
19032                                     J,
19033                                     K,
19034                                     L)
19035    ;   prev_guard_list___6__2__1__5(B,
19036                                     C,
19037                                     D,
19038                                     E,
19039                                     F,
19040                                     G,
19041                                     H,
19042                                     I,
19043                                     J,
19044                                     K,
19045                                     L)
19046    ).
19047prev_guard_list___6__2__2__5([], _, _, _, A, B, C, D, E, F, G, H, I, J, K) :-
19048    prev_guard_list___6__2__1__5(A,
19049                                 B,
19050                                 C,
19051                                 D,
19052                                 E,
19053                                 F,
19054                                 G,
19055                                 H,
19056                                 I,
19057                                 J,
19058                                 K).
19059prev_guard_list___6__2__2__5([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O, P) :-
19060    (   A=suspension(_, active, _, _, Q, R, S, T, _),
19061        A\==E,
19062        Q==C,
19063        S==J,
19064        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19065                  U)
19066    ->  prev_guard_list___6__2__3__5(U,
19067                                     R,
19068                                     T,
19069                                     A,
19070                                     B,
19071                                     C,
19072                                     D,
19073                                     E,
19074                                     F,
19075                                     G,
19076                                     H,
19077                                     I,
19078                                     J,
19079                                     K,
19080                                     L,
19081                                     M,
19082                                     N,
19083                                     O,
19084                                     P)
19085    ;   prev_guard_list___6__2__2__5(B,
19086                                     C,
19087                                     D,
19088                                     E,
19089                                     F,
19090                                     G,
19091                                     H,
19092                                     I,
19093                                     J,
19094                                     K,
19095                                     L,
19096                                     M,
19097                                     N,
19098                                     O,
19099                                     P)
19100    ).
19101prev_guard_list___6__2__3__5([], _, _, _, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) :-
19102    prev_guard_list___6__2__2__5(A,
19103                                 B,
19104                                 C,
19105                                 D,
19106                                 E,
19107                                 F,
19108                                 G,
19109                                 H,
19110                                 I,
19111                                 J,
19112                                 K,
19113                                 L,
19114                                 M,
19115                                 N,
19116                                 O).
19117prev_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) :-
19118    (   A=suspension(_, active, _, U),
19119        C<H,
19120        chr_pp_flag(occurrence_subsumption, on),
19121        K=pragma(rule(V, _, _, _), _, _, _, _),
19122        V\==[],
19123        \+ tree_set_memberchk(G, U)
19124    ->  setarg(2, A, removed),
19125        arg(3, A, W),
19126        (   var(W)
19127        ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19128                      X),
19129            X=[_|Y],
19130            b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19131                     Y),
19132            (   Y=[Z|_]
19133            ->  setarg(3, Z, _)
19134            ;   true
19135            )
19136        ;   W=[_, _|Y],
19137            setarg(2, W, Y),
19138            (   Y=[Z|_]
19139            ->  setarg(3, Z, W)
19140            ;   true
19141            )
19142        ),
19143        arg(2, T, A1),
19144        setarg(2, T, active),
19145        (   A1==not_stored_yet
19146        ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19147                      B1),
19148            C1=[T|B1],
19149            b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19150                     C1),
19151            (   B1=[D1|_]
19152            ->  setarg(4, D1, C1)
19153            ;   true
19154            ),
19155            nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19156                      E1),
19157            insert_ht(E1, N, T)
19158        ;   true
19159        ),
19160        first_occ_in_rule(N, G, C, D),
19161        tree_set_add(U, G, F1),
19162        multiple_occ_constraints_checked(F1),
19163        (   T=suspension(_, active, _, _, _, _, _, _, _, _)
19164        ->  setarg(2, T, inactive),
19165            prev_guard_list___6__2__3__5(B,
19166                                         C,
19167                                         D,
19168                                         E,
19169                                         F,
19170                                         G,
19171                                         H,
19172                                         I,
19173                                         J,
19174                                         K,
19175                                         L,
19176                                         M,
19177                                         N,
19178                                         O,
19179                                         P,
19180                                         Q,
19181                                         R,
19182                                         S,
19183                                         T)
19184        ;   true
19185        )
19186    ;   prev_guard_list___6__2__3__5(B,
19187                                     C,
19188                                     D,
19189                                     E,
19190                                     F,
19191                                     G,
19192                                     H,
19193                                     I,
19194                                     J,
19195                                     K,
19196                                     L,
19197                                     M,
19198                                     N,
19199                                     O,
19200                                     P,
19201                                     Q,
19202                                     R,
19203                                     S,
19204                                     T)
19205    ).
19206prev_guard_list___6__2(A, B, C, D, E, F, G) :-
19207    prev_guard_list___6__3(A,
19208                           B,
19209                           C,
19210                           D,
19211                           E,
19212                           F,
19213                           G).
19214prev_guard_list___6__3(A, _, _, _, _, _, B) :-
19215    nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19216              C),
19217    member(D, C),
19218    D=suspension(_, active, _, _),
19219    !,
19220    setarg(2, D, removed),
19221    arg(3, D, E),
19222    (   var(E)
19223    ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19224                  F),
19225        F=[_|G],
19226        b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19227                 G),
19228        (   G=[H|_]
19229        ->  setarg(3, H, _)
19230        ;   true
19231        )
19232    ;   E=[_, _|G],
19233        setarg(2, E, G),
19234        (   G=[H|_]
19235        ->  setarg(3, H, E)
19236        ;   true
19237        )
19238    ),
19239    (   var(B)
19240    ->  true
19241    ;   arg(2, B, I),
19242        setarg(2, B, removed),
19243        (   I==not_stored_yet
19244        ->  true
19245        ;   arg(4, B, J),
19246            (   var(J)
19247            ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19248                          K),
19249                K=[_|L],
19250                b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19251                         L),
19252                (   L=[M|_]
19253                ->  setarg(4, M, _)
19254                ;   true
19255                )
19256            ;   J=[_, _|L],
19257                setarg(2, J, L),
19258                (   L=[M|_]
19259                ->  setarg(4, M, J)
19260                ;   true
19261                )
19262            ),
19263            nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19264                      N),
19265            delete_ht(N, A, B)
19266        )
19267    ).
19268prev_guard_list___6__3(A, _, _, _, _, _, B) :-
19269    arg(2, B, C),
19270    setarg(2, B, active),
19271    (   C==not_stored_yet
19272    ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19273                  D),
19274        E=[B|D],
19275        b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19276                 E),
19277        (   D=[F|_]
19278        ->  setarg(4, F, E)
19279        ;   true
19280        ),
19281        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19282                  G),
19283        insert_ht(G, A, B)
19284    ;   true
19285    ).
19286simplify_guards(A) :-
19287    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', B),
19288    lookup_ht(B, A, C),
19289    member(D, C),
19290    D=suspension(_, active, _, _, _, E),
19291    !,
19292    E=pragma(rule(F, G, H, _), ids(I, J), _, _, A),
19293    append(F, G, K),
19294    make_head_matchings_explicit_not_negated(K, L, M),
19295    tree_set_empty(N),
19296    multiple_occ_constraints_checked(N),
19297    apply_guard_wrt_term(K, H, O),
19298    append(I, J, P),
19299    findall(tuple(Q, R, A)-(-A),
19300            ( member(S, P),
19301              get_occurrence_from_id(Q, R, A, S)
19302            ),
19303            T),
19304    empty_q(U),
19305    insert_list_q(T, U, V),
19306    next_prev_rule(V, _, W),
19307    next_prev_rule(W, X, Y),
19308    prev_guard_list(A,
19309                    X,
19310                    Y,
19311                    L,
19312                    H,
19313                    [],
19314                    M,
19315                    [O]),
19316    Z is A+1,
19317    simplify_guards(Z).
19318simplify_guards(_).
19319set_all_passive(A) :-
19320    set_all_passive___1__0(A, _).
19321set_all_passive___1__0(A, B) :-
19322    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', C),
19323    lookup_ht(C, A, D),
19324    !,
19325    B=suspension(E, not_stored_yet, t, A),
19326    'chr gen_id'(E),
19327    set_all_passive___1__0__0__1(D, A, B).
19328set_all_passive___1__0__0__1([], A, B) :-
19329    set_all_passive___1__1(A, B).
19330set_all_passive___1__0__0__1([A|B], C, D) :-
19331    (   A=suspension(_, active, _, _, _, _, E, F, _),
19332        E==C,
19333        G=t(180, D, A),
19334        '$novel_production'(D, G),
19335        '$novel_production'(A, G)
19336    ->  '$extend_history'(D, G),
19337        arg(2, D, H),
19338        setarg(2, D, active),
19339        (   H==not_stored_yet
19340        ->  nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
19341                      I),
19342            insert_ht(I, C, D)
19343        ;   true
19344        ),
19345        passive(C, F),
19346        (   D=suspension(_, active, _, _)
19347        ->  setarg(2, D, inactive),
19348            set_all_passive___1__0__0__1(B, C, D)
19349        ;   true
19350        )
19351    ;   set_all_passive___1__0__0__1(B, C, D)
19352    ).
19353set_all_passive___1__0(A, B) :-
19354    B=suspension(C, not_stored_yet, t, A),
19355    'chr gen_id'(C),
19356    set_all_passive___1__1(A, B).
19357set_all_passive___1__1(A, B) :-
19358    (   var(B)
19359    ->  true
19360    ;   arg(2, B, C),
19361        setarg(2, B, removed),
19362        (   C==not_stored_yet
19363        ->  true
19364        ;   nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
19365                      D),
19366            delete_ht(D, A, B)
19367        )
19368    ).
19369precompute_head_matchings :-
19370    precompute_head_matchings___0__0(_).
19371precompute_head_matchings___0__0(A) :-
19372    nb_getval('$chr_store_global_ground_chr_translate____rule___2', B),
19373    !,
19374    A=suspension(C, not_stored_yet, t, _),
19375    'chr gen_id'(C),
19376    precompute_head_matchings___0__0__0__1(B, A).
19377precompute_head_matchings___0__0__0__1([], A) :-
19378    precompute_head_matchings___0__1(A).
19379precompute_head_matchings___0__0__0__1([A|B], C) :-
19380    (   A=suspension(_, active, _, _, D, E),
19381        F=t(174, A, C),
19382        '$novel_production'(A, F),
19383        '$novel_production'(C, F)
19384    ->  '$extend_history'(C, F),
19385        arg(2, C, G),
19386        setarg(2, C, active),
19387        (   G==not_stored_yet
19388        ->  nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19389                      H),
19390            I=[C|H],
19391            b_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19392                     I),
19393            (   H=[J|_]
19394            ->  setarg(4, J, I)
19395            ;   true
19396            )
19397        ;   true
19398        ),
19399        E=pragma(rule(K, L, _, _), _, _, _, _),
19400        append(K, L, M),
19401        make_head_matchings_explicit_(M, N, O),
19402        copy_term_nat(N-O, P-Q),
19403        make_head_matchings_explicit_memo_table(D, P, Q),
19404        (   C=suspension(_, active, _, _)
19405        ->  setarg(2, C, inactive),
19406            precompute_head_matchings___0__0__0__1(B, C)
19407        ;   true
19408        )
19409    ;   precompute_head_matchings___0__0__0__1(B, C)
19410    ).
19411precompute_head_matchings___0__0(A) :-
19412    A=suspension(B, not_stored_yet, t, _),
19413    'chr gen_id'(B),
19414    precompute_head_matchings___0__1(A).
19415precompute_head_matchings___0__1(A) :-
19416    (   var(A)
19417    ->  true
19418    ;   arg(2, A, B),
19419        setarg(2, A, removed),
19420        (   B==not_stored_yet
19421        ->  true
19422        ;   arg(4, A, C),
19423            (   var(C)
19424            ->  nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19425                          D),
19426                D=[_|E],
19427                b_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19428                         E),
19429                (   E=[F|_]
19430                ->  setarg(4, F, _)
19431                ;   true
19432                )
19433            ;   C=[_, _|E],
19434                setarg(2, C, E),
19435                (   E=[F|_]
19436                ->  setarg(4, F, C)
19437                ;   true
19438                )
19439            )
19440        )
19441    ).
19442make_head_matchings_explicit_memo_table(A, B, C) :-
19443    D=suspension(E, active, A, B, C),
19444    'chr gen_id'(E),
19445    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
19446              F),
19447    insert_ht(F, A, D).
19448make_head_matchings_explicit_memo_lookup(A, B, C) :-
19449    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
19450              D),
19451    lookup_ht(D, A, E),
19452    member(F, E),
19453    F=suspension(_, active, _, G, H),
19454    !,
19455    B=G,
19456    C=H.
19457make_head_matchings_explicit_memo_lookup(_, _, _) :-
19458    fail.
19459first_occ_in_rule(A, B, C, _) :-
19460    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
19461              D),
19462    lookup_ht(D, k(B, A), E),
19463    member(F, E),
19464    F=suspension(_, active, _, _, _, G, _, H, _),
19465    G<C,
19466    !,
19467    first_occ_in_rule(A, B, G, H).
19468first_occ_in_rule(A, B, C, D) :-
19469    B=E/F,
19470    functor(G, E, F),
19471    next_occ_in_rule(A, B, C, D, [], G).
19472next_occ_in_rule(A, B, C, D, _, E) :-
19473    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', F),
19474    lookup_ht(F, A, G),
19475    member(H, G),
19476    H=suspension(_, active, _, _, I),
19477    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
19478              J),
19479    lookup_ht(J, k(B, A, I), K),
19480    member(L, K),
19481    L=suspension(_, active, _, _, _, M, _, _, _),
19482    M is C+1,
19483    !,
19484    next_occ_in_rule(A, B, M, D, _, E).
19485next_occ_in_rule(A, B, C, D, E, F) :-
19486    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19487              G),
19488    lookup_ht(G, A, H),
19489    member(I, H),
19490    I=suspension(_, active, _, _, _, J, K, L, M, _),
19491    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', N),
19492    lookup_ht(N, A, O),
19493    member(P, O),
19494    P=suspension(_, active, _, _, _, Q),
19495    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
19496              R),
19497    lookup_ht(R, k(B, A), S),
19498    member(T, S),
19499    T=suspension(_, active, _, _, _, U, _, V, _),
19500    U is C+1,
19501    Q=pragma(rule(W, X, K, _), ids(_, _), _, _, A),
19502    !,
19503    append(W, X, Y),
19504    add_failing_occ(Q,
19505                    Y,
19506                    J,
19507                    D,
19508                    Z,
19509                    F,
19510                    M,
19511                    B,
19512                    A1),
19513    (   Z==[chr_pp_void_info]
19514    ->  next_occ_in_rule(A, B, U, V, E, F)
19515    ;   append(Z, E, B1),
19516        add_failing_occ(Q,
19517                        Y,
19518                        J,
19519                        V,
19520                        C1,
19521                        F,
19522                        M,
19523                        B,
19524                        D1),
19525        copy_term(L, E1),
19526        variable_replacement(L, E1, F1),
19527        copy_with_variable_replacement(L, G1, A1),
19528        copy_with_variable_replacement(L, H1, D1),
19529        copy_with_variable_replacement(H1, I1, F1),
19530        append(B1, G1, J1),
19531        append(J1, I1, K1),
19532        copy_with_variable_replacement(M, L1, A1),
19533        copy_with_variable_replacement(M, M1, D1),
19534        append(M1, K1, N1),
19535        append([chr_pp_active_constraint(F)|L1], N1, O1),
19536        list2conj(C1, P1),
19537        copy_term((B1, K1, O1, P1, F),
19538                  (_, _, Q1, R1, _)),
19539        (   P1\=chr_pp_void_info
19540        ->  (   guard_entailment:entails_guard(Q1, R1)
19541            ->  passive(A, V)
19542            ;   true
19543            )
19544        ;   true
19545        ),
19546        !,
19547        next_occ_in_rule(A, B, U, V, B1, F)
19548    ).
19549next_occ_in_rule(_, _, _, _, _, _).
19550multiple_occ_constraints_checked(A) :-
19551    nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19552              B),
19553    member(C, B),
19554    C=suspension(_, active, _, _, D, _, _, _, _, _),
19555    (   nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
19556                  E),
19557        lookup_ht(E, D, F),
19558        member(G, F),
19559        G=suspension(_, active, _, _, H, I, _, _, _),
19560        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', J),
19561        lookup_ht(J, D, K),
19562        member(L, K),
19563        L=suspension(_, active, _, _, _, M),
19564        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
19565                  N),
19566        lookup_ht(N, k(H, D), O),
19567        member(P, O),
19568        P=suspension(_, active, _, _, _, Q, _, R, _),
19569        P\==G,
19570        Q<I,
19571        chr_pp_flag(occurrence_subsumption, on),
19572        M=pragma(rule(S, _, _, _), _, _, _, _),
19573        S\==[],
19574        \+ tree_set_memberchk(H, A),
19575        !,
19576        first_occ_in_rule(D, H, Q, R),
19577        tree_set_add(A, H, T),
19578        multiple_occ_constraints_checked(T)
19579    ;   !,
19580        setarg(2, C, removed),
19581        arg(4, C, U),
19582        (   var(U)
19583        ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19584                      V),
19585            V=[_|W],
19586            b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19587                     W),
19588            (   W=[X|_]
19589            ->  setarg(4, X, _)
19590            ;   true
19591            )
19592        ;   U=[_, _|W],
19593            setarg(2, U, W),
19594            (   W=[X|_]
19595            ->  setarg(4, X, U)
19596            ;   true
19597            )
19598        ),
19599        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19600                  Y),
19601        delete_ht(Y, D, C)
19602    ).
19603multiple_occ_constraints_checked(A) :-
19604    B=suspension(C, active, _, A),
19605    'chr gen_id'(C),
19606    nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19607              D),
19608    E=[B|D],
19609    b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19610             E),
19611    (   D=[F|_]
19612    ->  setarg(3, F, E)
19613    ;   true
19614    ).
19615type_definition(A, B) :-
19616    type_definition___2__0(A, B, _).
19617type_definition___2__0(A, _, B) :-
19618    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19619              C),
19620    member(D, C),
19621    D=suspension(_, active, _, _, _, E, _),
19622    (   functor(A, F, G),
19623        functor(E, F, G),
19624        !,
19625        D=suspension(_, _, _, _, _, H, I),
19626        setarg(2, D, removed),
19627        term_variables(term(H, I), J),
19628        arg(5, D, K),
19629        (   var(K)
19630        ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19631                      L),
19632            L=[_|M],
19633            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19634                     M),
19635            (   M=[N|_]
19636            ->  setarg(5, N, _)
19637            ;   true
19638            )
19639        ;   K=[_, _|M],
19640            setarg(2, K, M),
19641            (   M=[N|_]
19642            ->  setarg(5, N, K)
19643            ;   true
19644            )
19645        ),
19646        detach_type_definition___2(J, D),
19647        (   var(B)
19648        ->  true
19649        ;   B=suspension(_, O, _, _, _, P, Q),
19650            setarg(2, B, removed),
19651            (   O==not_stored_yet
19652            ->  R=[]
19653            ;   term_variables(term(P, Q), R),
19654                arg(5, B, S),
19655                (   var(S)
19656                ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19657                              T),
19658                    T=[_|U],
19659                    b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19660                             U),
19661                    (   U=[V|_]
19662                    ->  setarg(5, V, _)
19663                    ;   true
19664                    )
19665                ;   S=[_, _|U],
19666                    setarg(2, S, U),
19667                    (   U=[V|_]
19668                    ->  setarg(5, V, S)
19669                    ;   true
19670                    )
19671                ),
19672                detach_type_definition___2(R, B)
19673            )
19674        ),
19675        chr_error(type_error,
19676                  'Multiple definitions for type: ~w/~w.\n',
19677                  [F, G])
19678    ;   functor(E, W, X),
19679        functor(A, W, X),
19680        !,
19681        D=suspension(_, _, _, _, _, Y, Z),
19682        setarg(2, D, removed),
19683        term_variables(term(Y, Z), A1),
19684        arg(5, D, B1),
19685        (   var(B1)
19686        ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19687                      C1),
19688            C1=[_|D1],
19689            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19690                     D1),
19691            (   D1=[E1|_]
19692            ->  setarg(5, E1, _)
19693            ;   true
19694            )
19695        ;   B1=[_, _|D1],
19696            setarg(2, B1, D1),
19697            (   D1=[E1|_]
19698            ->  setarg(5, E1, B1)
19699            ;   true
19700            )
19701        ),
19702        detach_type_definition___2(A1, D),
19703        (   var(B)
19704        ->  true
19705        ;   B=suspension(_, F1, _, _, _, G1, H1),
19706            setarg(2, B, removed),
19707            (   F1==not_stored_yet
19708            ->  I1=[]
19709            ;   term_variables(term(G1, H1), I1),
19710                arg(5, B, J1),
19711                (   var(J1)
19712                ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19713                              K1),
19714                    K1=[_|L1],
19715                    b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19716                             L1),
19717                    (   L1=[M1|_]
19718                    ->  setarg(5, M1, _)
19719                    ;   true
19720                    )
19721                ;   J1=[_, _|L1],
19722                    setarg(2, J1, L1),
19723                    (   L1=[M1|_]
19724                    ->  setarg(5, M1, J1)
19725                    ;   true
19726                    )
19727                ),
19728                detach_type_definition___2(I1, B)
19729            )
19730        ),
19731        chr_error(type_error,
19732                  'Multiple definitions for type: ~w/~w.\n',
19733                  [W, X])
19734    ).
19735type_definition___2__0(A, _, B) :-
19736    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', C),
19737    member(D, C),
19738    D=suspension(_, active, _, _, _, E, _),
19739    functor(A, F, G),
19740    functor(E, F, G),
19741    !,
19742    D=suspension(_, _, _, _, _, H, I),
19743    setarg(2, D, removed),
19744    term_variables(term(H, I), J),
19745    arg(5, D, K),
19746    (   var(K)
19747    ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
19748                  L),
19749        L=[_|M],
19750        b_setval('$chr_store_global_list_chr_translate____type_alias___2',
19751                 M),
19752        (   M=[N|_]
19753        ->  setarg(5, N, _)
19754        ;   true
19755        )
19756    ;   K=[_, _|M],
19757        setarg(2, K, M),
19758        (   M=[N|_]
19759        ->  setarg(5, N, K)
19760        ;   true
19761        )
19762    ),
19763    detach_type_alias___2(J, D),
19764    (   var(B)
19765    ->  true
19766    ;   B=suspension(_, O, _, _, _, P, Q),
19767        setarg(2, B, removed),
19768        (   O==not_stored_yet
19769        ->  R=[]
19770        ;   term_variables(term(P, Q), R),
19771            arg(5, B, S),
19772            (   var(S)
19773            ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19774                          T),
19775                T=[_|U],
19776                b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19777                         U),
19778                (   U=[V|_]
19779                ->  setarg(5, V, _)
19780                ;   true
19781                )
19782            ;   S=[_, _|U],
19783                setarg(2, S, U),
19784                (   U=[V|_]
19785                ->  setarg(5, V, S)
19786                ;   true
19787                )
19788            ),
19789            detach_type_definition___2(R, B)
19790        )
19791    ),
19792    chr_error(type_error,
19793              'Multiple definitions for type, once in a type definition and once as a type alias: ~w/~w.\n',
19794              [F, G]).
19795type_definition___2__0(A, B, C) :-
19796    nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
19797              D),
19798    !,
19799    (   var(C)
19800    ->  C=suspension(E, not_stored_yet, t, 0, _, A, B),
19801        'chr gen_id'(E)
19802    ;   true
19803    ),
19804    type_definition___2__0__0__5(D, A, B, C).
19805type_definition___2__0__0__5([], A, B, C) :-
19806    type_definition___2__1(A, B, C).
19807type_definition___2__0__0__5([A|B], C, D, E) :-
19808    (   A=suspension(_, active, _, F, G),
19809        nonvar(C),
19810        functor(C, H, I),
19811        functor(F, H, I)
19812    ->  A=suspension(_, _, _, J, _),
19813        setarg(2, A, removed),
19814        term_variables(J, K),
19815        ( arg(3, A, L),
19816          (   var(L)
19817          ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
19818                        M),
19819              M=[_|N],
19820              b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
19821                       N),
19822              (   N=[O|_]
19823              ->  setarg(3, O, _)
19824              ;   true
19825              )
19826          ;   L=[_, _|N],
19827              setarg(2, L, N),
19828              (   N=[O|_]
19829              ->  setarg(3, O, L)
19830              ;   true
19831              )
19832          )
19833        ),
19834        detach_unalias_type___2(K, A),
19835        arg(2, E, P),
19836        setarg(2, E, active),
19837        ( arg(4, E, Q),
19838          R is Q+1,
19839          setarg(4, E, R)
19840        ),
19841        (   P==not_stored_yet
19842        ->  E=suspension(_, _, _, _, _, S, T),
19843            term_variables(term(S, T), U),
19844            nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19845                      V),
19846            W=[E|V],
19847            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19848                     W),
19849            (   V=[X|_]
19850            ->  setarg(5, X, W)
19851            ;   true
19852            ),
19853            attach_type_definition___2(U, E)
19854        ;   true
19855        ),
19856        G=F,
19857        (   E=suspension(_, active, _, R, _, _, _)
19858        ->  setarg(2, E, inactive),
19859            type_definition___2__0__0__5(B, C, D, E)
19860        ;   true
19861        )
19862    ;   type_definition___2__0__0__5(B, C, D, E)
19863    ).
19864type_definition___2__0(A, B, C) :-
19865    (   var(C)
19866    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
19867        'chr gen_id'(D)
19868    ;   true
19869    ),
19870    type_definition___2__1(A, B, C).
19871type_definition___2__1(A, B, C) :-
19872    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
19873              D),
19874    !,
19875    type_definition___2__1__0__7(D, A, B, C).
19876type_definition___2__1__0__7([], A, B, C) :-
19877    type_definition___2__2(A, B, C).
19878type_definition___2__1__0__7([A|B], C, D, E) :-
19879    (   A=suspension(_, active, _, _),
19880        F=t(235, E, A),
19881        '$novel_production'(E, F),
19882        '$novel_production'(A, F)
19883    ->  '$extend_history'(E, F),
19884        arg(2, E, G),
19885        setarg(2, E, active),
19886        ( arg(4, E, H),
19887          I is H+1,
19888          setarg(4, E, I)
19889        ),
19890        (   G==not_stored_yet
19891        ->  E=suspension(_, _, _, _, _, J, K),
19892            term_variables(term(J, K), L),
19893            nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19894                      M),
19895            N=[E|M],
19896            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19897                     N),
19898            (   M=[O|_]
19899            ->  setarg(5, O, N)
19900            ;   true
19901            ),
19902            attach_type_definition___2(L, E)
19903        ;   true
19904        ),
19905        copy_term_nat(C-D, P-Q),
19906        maplist(dynamic_type_check_clause(P), Q, R),
19907        dynamic_type_check_clauses(R),
19908        (   E=suspension(_, active, _, I, _, _, _)
19909        ->  setarg(2, E, inactive),
19910            type_definition___2__1__0__7(B, C, D, E)
19911        ;   true
19912        )
19913    ;   type_definition___2__1__0__7(B, C, D, E)
19914    ).
19915type_definition___2__1(A, B, C) :-
19916    type_definition___2__2(A, B, C).
19917type_definition___2__2(A, B, C) :-
19918    nb_getval('$chr_store_global_list_chr_translate____atomic_type___1', D),
19919    !,
19920    type_definition___2__2__0__8(D, A, B, C).
19921type_definition___2__2__0__8([], A, B, C) :-
19922    type_definition___2__3(A, B, C).
19923type_definition___2__2__0__8([A|B], C, D, E) :-
19924    (   A=suspension(_, active, _, F),
19925        functor(F, G, H),
19926        functor(C, G, H)
19927    ->  A=suspension(_, _, _, I),
19928        setarg(2, A, removed),
19929        term_variables(I, J),
19930        ( arg(3, A, K),
19931          (   var(K)
19932          ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
19933                        L),
19934              L=[_|M],
19935              b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
19936                       M),
19937              (   M=[N|_]
19938              ->  setarg(3, N, _)
19939              ;   true
19940              )
19941          ;   K=[_, _|M],
19942              setarg(2, K, M),
19943              (   M=[N|_]
19944              ->  setarg(3, N, K)
19945              ;   true
19946              )
19947          )
19948        ),
19949        detach_atomic_type___1(J, A),
19950        arg(2, E, O),
19951        setarg(2, E, active),
19952        ( arg(4, E, P),
19953          Q is P+1,
19954          setarg(4, E, Q)
19955        ),
19956        (   O==not_stored_yet
19957        ->  E=suspension(_, _, _, _, _, R, S),
19958            term_variables(term(R, S), T),
19959            nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19960                      U),
19961            V=[E|U],
19962            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19963                     V),
19964            (   U=[W|_]
19965            ->  setarg(5, W, V)
19966            ;   true
19967            ),
19968            attach_type_definition___2(T, E)
19969        ;   true
19970        ),
19971        maplist(atomic, D),
19972        (   E=suspension(_, active, _, Q, _, _, _)
19973        ->  setarg(2, E, inactive),
19974            type_definition___2__2__0__8(B, C, D, E)
19975        ;   true
19976        )
19977    ;   type_definition___2__2__0__8(B, C, D, E)
19978    ).
19979type_definition___2__2(A, B, C) :-
19980    type_definition___2__3(A, B, C).
19981type_definition___2__3(_, _, A) :-
19982    arg(2, A, B),
19983    setarg(2, A, active),
19984    arg(4, A, C),
19985    D is C+1,
19986    setarg(4, A, D),
19987    (   B==not_stored_yet
19988    ->  A=suspension(_, _, _, _, _, E, F),
19989        term_variables(term(E, F), G),
19990        nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19991                  H),
19992        I=[A|H],
19993        b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19994                 I),
19995        (   H=[J|_]
19996        ->  setarg(5, J, I)
19997        ;   true
19998        ),
19999        attach_type_definition___2(G, A)
20000    ;   true
20001    ).
20002type_alias(A, B) :-
20003    type_alias___2__0(A, B, _).
20004type_alias___2__0(A, B, C) :-
20005    var(A),
20006    !,
20007    (   var(C)
20008    ->  true
20009    ;   C=suspension(_, D, _, _, _, E, F),
20010        setarg(2, C, removed),
20011        (   D==not_stored_yet
20012        ->  G=[]
20013        ;   term_variables(term(E, F), G),
20014            arg(5, C, H),
20015            (   var(H)
20016            ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20017                          I),
20018                I=[_|J],
20019                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20020                         J),
20021                (   J=[K|_]
20022                ->  setarg(5, K, _)
20023                ;   true
20024                )
20025            ;   H=[_, _|J],
20026                setarg(2, H, J),
20027                (   J=[K|_]
20028                ->  setarg(5, K, H)
20029                ;   true
20030                )
20031            ),
20032            detach_type_alias___2(G, C)
20033        )
20034    ),
20035    chr_error(type_error,
20036              'Variable alias definition: "~w".\n',
20037              [(:-chr_type A==B)]).
20038type_alias___2__0(A, B, C) :-
20039    var(B),
20040    !,
20041    (   var(C)
20042    ->  true
20043    ;   C=suspension(_, D, _, _, _, E, F),
20044        setarg(2, C, removed),
20045        (   D==not_stored_yet
20046        ->  G=[]
20047        ;   term_variables(term(E, F), G),
20048            arg(5, C, H),
20049            (   var(H)
20050            ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20051                          I),
20052                I=[_|J],
20053                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20054                         J),
20055                (   J=[K|_]
20056                ->  setarg(5, K, _)
20057                ;   true
20058                )
20059            ;   H=[_, _|J],
20060                setarg(2, H, J),
20061                (   J=[K|_]
20062                ->  setarg(5, K, H)
20063                ;   true
20064                )
20065            ),
20066            detach_type_alias___2(G, C)
20067        )
20068    ),
20069    chr_error(type_error,
20070              'Variable alias definition: "~w".\n',
20071              [(:-chr_type A==B)]).
20072type_alias___2__0(A, B, C) :-
20073    subsumes_term(A, B),
20074    !,
20075    (   var(C)
20076    ->  true
20077    ;   C=suspension(_, D, _, _, _, E, F),
20078        setarg(2, C, removed),
20079        (   D==not_stored_yet
20080        ->  G=[]
20081        ;   term_variables(term(E, F), G),
20082            arg(5, C, H),
20083            (   var(H)
20084            ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20085                          I),
20086                I=[_|J],
20087                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20088                         J),
20089                (   J=[K|_]
20090                ->  setarg(5, K, _)
20091                ;   true
20092                )
20093            ;   H=[_, _|J],
20094                setarg(2, H, J),
20095                (   J=[K|_]
20096                ->  setarg(5, K, H)
20097                ;   true
20098                )
20099            ),
20100            detach_type_alias___2(G, C)
20101        )
20102    ),
20103    chr_error(type_error, 'Cyclic alias definition: "~w".\n', [A==B]).
20104type_alias___2__0(A, B, C) :-
20105    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', D),
20106    (   member(E, D),
20107        E=suspension(_, active, _, _, _, F, G),
20108        (   (   functor(A, H, I),
20109                functor(F, H, I),
20110                \+ A\=F,
20111                !,
20112                E=suspension(_, _, _, _, _, J, K),
20113                setarg(2, E, removed),
20114                term_variables(term(J, K), L),
20115                arg(5, E, M),
20116                (   var(M)
20117                ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20118                              N),
20119                    N=[_|O],
20120                    b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20121                             O),
20122                    (   O=[P|_]
20123                    ->  setarg(5, P, _)
20124                    ;   true
20125                    )
20126                ;   M=[_, _|O],
20127                    setarg(2, M, O),
20128                    (   O=[P|_]
20129                    ->  setarg(5, P, M)
20130                    ;   true
20131                    )
20132                ),
20133                detach_type_alias___2(L, E),
20134                (   var(C)
20135                ->  true
20136                ;   C=suspension(_, Q, _, _, _, R, S),
20137                    setarg(2, C, removed),
20138                    (   Q==not_stored_yet
20139                    ->  T=[]
20140                    ;   term_variables(term(R, S), T),
20141                        arg(5, C, U),
20142                        (   var(U)
20143                        ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20144                                      V),
20145                            V=[_|W],
20146                            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20147                                     W),
20148                            (   W=[X|_]
20149                            ->  setarg(5, X, _)
20150                            ;   true
20151                            )
20152                        ;   U=[_, _|W],
20153                            setarg(2, U, W),
20154                            (   W=[X|_]
20155                            ->  setarg(5, X, U)
20156                            ;   true
20157                            )
20158                        ),
20159                        detach_type_alias___2(T, C)
20160                    )
20161                ),
20162                copy_term_nat(A, Y),
20163                copy_term_nat(F, Z),
20164                Y=Z,
20165                chr_error(type_error,
20166                          'Ambiguous type aliases: you have defined \n\t`~w\'\n\t`~w\'\n\tresulting in two definitions for "~w".\n',
20167                          [A==B, F==G, Y])
20168            ;   functor(F, A1, B1),
20169                functor(A, A1, B1),
20170                \+ F\=A,
20171                !,
20172                E=suspension(_, _, _, _, _, C1, D1),
20173                setarg(2, E, removed),
20174                term_variables(term(C1, D1), E1),
20175                arg(5, E, F1),
20176                (   var(F1)
20177                ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20178                              G1),
20179                    G1=[_|H1],
20180                    b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20181                             H1),
20182                    (   H1=[I1|_]
20183                    ->  setarg(5, I1, _)
20184                    ;   true
20185                    )
20186                ;   F1=[_, _|H1],
20187                    setarg(2, F1, H1),
20188                    (   H1=[I1|_]
20189                    ->  setarg(5, I1, F1)
20190                    ;   true
20191                    )
20192                ),
20193                detach_type_alias___2(E1, E),
20194                (   var(C)
20195                ->  true
20196                ;   C=suspension(_, J1, _, _, _, K1, L1),
20197                    setarg(2, C, removed),
20198                    (   J1==not_stored_yet
20199                    ->  M1=[]
20200                    ;   term_variables(term(K1, L1), M1),
20201                        arg(5, C, N1),
20202                        (   var(N1)
20203                        ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20204                                      O1),
20205                            O1=[_|P1],
20206                            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20207                                     P1),
20208                            (   P1=[Q1|_]
20209                            ->  setarg(5, Q1, _)
20210                            ;   true
20211                            )
20212                        ;   N1=[_, _|P1],
20213                            setarg(2, N1, P1),
20214                            (   P1=[Q1|_]
20215                            ->  setarg(5, Q1, N1)
20216                            ;   true
20217                            )
20218                        ),
20219                        detach_type_alias___2(M1, C)
20220                    )
20221                ),
20222                copy_term_nat(F, R1),
20223                copy_term_nat(A, S1),
20224                R1=S1,
20225                chr_error(type_error,
20226                          'Ambiguous type aliases: you have defined \n\t`~w\'\n\t`~w\'\n\tresulting in two definitions for "~w".\n',
20227                          [F==G, A==B, R1])
20228            )
20229        ;   functor(F, T1, U1),
20230            functor(B, T1, U1),
20231            copy_term_nat((A, B, F, G),
20232                          (V1, W1, X1, Y1)),
20233            subsumes_term(X1, W1),
20234            !,
20235            (   var(C)
20236            ->  true
20237            ;   C=suspension(_, Z1, _, _, _, A2, B2),
20238                setarg(2, C, removed),
20239                (   Z1==not_stored_yet
20240                ->  C2=[]
20241                ;   term_variables(term(A2, B2), C2),
20242                    arg(5, C, D2),
20243                    (   var(D2)
20244                    ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20245                                  E2),
20246                        E2=[_|F2],
20247                        b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20248                                 F2),
20249                        (   F2=[G2|_]
20250                        ->  setarg(5, G2, _)
20251                        ;   true
20252                        )
20253                    ;   D2=[_, _|F2],
20254                        setarg(2, D2, F2),
20255                        (   F2=[G2|_]
20256                        ->  setarg(5, G2, D2)
20257                        ;   true
20258                        )
20259                    ),
20260                    detach_type_alias___2(C2, C)
20261                )
20262            ),
20263            type_alias(V1, Y1)
20264        )
20265    ;   !,
20266        (   var(C)
20267        ->  C=suspension(H2, not_stored_yet, t, 0, _, A, B),
20268            'chr gen_id'(H2)
20269        ;   true
20270        ),
20271        type_alias___2__0__0__7(D, A, B, C)
20272    ).
20273type_alias___2__0__0__7([], A, B, C) :-
20274    type_alias___2__1(A, B, C).
20275type_alias___2__0__0__7([A|B], C, D, E) :-
20276    (   A=suspension(_, active, _, _, _, F, G),
20277        functor(C, H, I),
20278        functor(G, H, I),
20279        copy_term_nat((F, G, C, D),
20280                      (J, K, L, M)),
20281        subsumes_term(L, K)
20282    ->  A=suspension(_, _, _, _, _, N, O),
20283        setarg(2, A, removed),
20284        term_variables(term(N, O), P),
20285        ( arg(5, A, Q),
20286          (   var(Q)
20287          ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20288                        R),
20289              R=[_|S],
20290              b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20291                       S),
20292              (   S=[T|_]
20293              ->  setarg(5, T, _)
20294              ;   true
20295              )
20296          ;   Q=[_, _|S],
20297              setarg(2, Q, S),
20298              (   S=[T|_]
20299              ->  setarg(5, T, Q)
20300              ;   true
20301              )
20302          )
20303        ),
20304        detach_type_alias___2(P, A),
20305        arg(2, E, U),
20306        setarg(2, E, active),
20307        ( arg(4, E, V),
20308          W is V+1,
20309          setarg(4, E, W)
20310        ),
20311        (   U==not_stored_yet
20312        ->  E=suspension(_, _, _, _, _, X, Y),
20313            term_variables(term(X, Y), Z),
20314            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20315                      A1),
20316            B1=[E|A1],
20317            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20318                     B1),
20319            (   A1=[C1|_]
20320            ->  setarg(5, C1, B1)
20321            ;   true
20322            ),
20323            attach_type_alias___2(Z, E)
20324        ;   true
20325        ),
20326        type_alias(J, M),
20327        (   E=suspension(_, active, _, W, _, _, _)
20328        ->  setarg(2, E, inactive),
20329            type_alias___2__0__0__7(B, C, D, E)
20330        ;   true
20331        )
20332    ;   type_alias___2__0__0__7(B, C, D, E)
20333    ).
20334type_alias___2__0(A, B, C) :-
20335    (   var(C)
20336    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
20337        'chr gen_id'(D)
20338    ;   true
20339    ),
20340    type_alias___2__1(A, B, C).
20341type_alias___2__1(A, _, B) :-
20342    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20343              C),
20344    member(D, C),
20345    D=suspension(_, active, _, _, _, E, _),
20346    functor(E, F, G),
20347    functor(A, F, G),
20348    !,
20349    D=suspension(_, _, _, _, _, H, I),
20350    setarg(2, D, removed),
20351    term_variables(term(H, I), J),
20352    arg(5, D, K),
20353    (   var(K)
20354    ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20355                  L),
20356        L=[_|M],
20357        b_setval('$chr_store_global_list_chr_translate____type_definition___2',
20358                 M),
20359        (   M=[N|_]
20360        ->  setarg(5, N, _)
20361        ;   true
20362        )
20363    ;   K=[_, _|M],
20364        setarg(2, K, M),
20365        (   M=[N|_]
20366        ->  setarg(5, N, K)
20367        ;   true
20368        )
20369    ),
20370    detach_type_definition___2(J, D),
20371    (   var(B)
20372    ->  true
20373    ;   B=suspension(_, O, _, _, _, P, Q),
20374        setarg(2, B, removed),
20375        (   O==not_stored_yet
20376        ->  R=[]
20377        ;   term_variables(term(P, Q), R),
20378            arg(5, B, S),
20379            (   var(S)
20380            ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20381                          T),
20382                T=[_|U],
20383                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20384                         U),
20385                (   U=[V|_]
20386                ->  setarg(5, V, _)
20387                ;   true
20388                )
20389            ;   S=[_, _|U],
20390                setarg(2, S, U),
20391                (   U=[V|_]
20392                ->  setarg(5, V, S)
20393                ;   true
20394                )
20395            ),
20396            detach_type_alias___2(R, B)
20397        )
20398    ),
20399    chr_error(type_error,
20400              'Multiple definitions for type, once in a type definition and once as a type alias: ~w/~w.\n',
20401              [F, G]).
20402type_alias___2__1(A, B, C) :-
20403    nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20404              D),
20405    !,
20406    type_alias___2__1__0__10(D, A, B, C).
20407type_alias___2__1__0__10([], A, B, C) :-
20408    type_alias___2__2(A, B, C).
20409type_alias___2__1__0__10([A|B], C, D, E) :-
20410    (   A=suspension(_, active, _, F, G),
20411        functor(C, H, I),
20412        functor(F, H, I),
20413        copy_term_nat((C, D), (J, K)),
20414        F=J
20415    ->  A=suspension(_, _, _, L, _),
20416        setarg(2, A, removed),
20417        term_variables(L, M),
20418        ( arg(3, A, N),
20419          (   var(N)
20420          ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20421                        O),
20422              O=[_|P],
20423              b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20424                       P),
20425              (   P=[Q|_]
20426              ->  setarg(3, Q, _)
20427              ;   true
20428              )
20429          ;   N=[_, _|P],
20430              setarg(2, N, P),
20431              (   P=[Q|_]
20432              ->  setarg(3, Q, N)
20433              ;   true
20434              )
20435          )
20436        ),
20437        detach_unalias_type___2(M, A),
20438        arg(2, E, R),
20439        setarg(2, E, active),
20440        ( arg(4, E, S),
20441          T is S+1,
20442          setarg(4, E, T)
20443        ),
20444        (   R==not_stored_yet
20445        ->  E=suspension(_, _, _, _, _, U, V),
20446            term_variables(term(U, V), W),
20447            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20448                      X),
20449            Y=[E|X],
20450            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20451                     Y),
20452            (   X=[Z|_]
20453            ->  setarg(5, Z, Y)
20454            ;   true
20455            ),
20456            attach_type_alias___2(W, E)
20457        ;   true
20458        ),
20459        unalias_type(K, G),
20460        (   E=suspension(_, active, _, T, _, _, _)
20461        ->  setarg(2, E, inactive),
20462            type_alias___2__1__0__10(B, C, D, E)
20463        ;   true
20464        )
20465    ;   type_alias___2__1__0__10(B, C, D, E)
20466    ).
20467type_alias___2__1(A, B, C) :-
20468    type_alias___2__2(A, B, C).
20469type_alias___2__2(A, B, C) :-
20470    nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
20471              D),
20472    !,
20473    type_alias___2__2__0__12(D, A, B, C).
20474type_alias___2__2__0__12([], A, B, C) :-
20475    type_alias___2__3(A, B, C).
20476type_alias___2__2__0__12([A|B], C, D, E) :-
20477    (   A=suspension(_, active, _, F, G, H, I),
20478        functor(C, J, K),
20479        functor(H, J, K)
20480    ->  A=suspension(_, _, _, _, _, L, _),
20481        setarg(2, A, removed),
20482        term_variables(L, M),
20483        ( arg(3, A, N),
20484          (   var(N)
20485          ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
20486                        O),
20487              O=[_|P],
20488              b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
20489                       P),
20490              (   P=[Q|_]
20491              ->  setarg(3, Q, _)
20492              ;   true
20493              )
20494          ;   N=[_, _|P],
20495              setarg(2, N, P),
20496              (   P=[Q|_]
20497              ->  setarg(3, Q, N)
20498              ;   true
20499              )
20500          )
20501        ),
20502        detach_ast_static_type_check_var___4(M, A),
20503        arg(2, E, R),
20504        setarg(2, E, active),
20505        ( arg(4, E, S),
20506          T is S+1,
20507          setarg(4, E, T)
20508        ),
20509        (   R==not_stored_yet
20510        ->  E=suspension(_, _, _, _, _, U, V),
20511            term_variables(term(U, V), W),
20512            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20513                      X),
20514            Y=[E|X],
20515            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20516                     Y),
20517            (   X=[Z|_]
20518            ->  setarg(5, Z, Y)
20519            ;   true
20520            ),
20521            attach_type_alias___2(W, E)
20522        ;   true
20523        ),
20524        copy_term_nat(C-D, H-A1),
20525        ast_static_type_check_var(F, G, A1, I),
20526        (   E=suspension(_, active, _, T, _, _, _)
20527        ->  setarg(2, E, inactive),
20528            type_alias___2__2__0__12(B, C, D, E)
20529        ;   true
20530        )
20531    ;   type_alias___2__2__0__12(B, C, D, E)
20532    ).
20533type_alias___2__2(A, B, C) :-
20534    type_alias___2__3(A, B, C).
20535type_alias___2__3(A, B, C) :-
20536    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
20537              D),
20538    !,
20539    type_alias___2__3__0__13(D, A, B, C).
20540type_alias___2__3__0__13([], A, B, C) :-
20541    type_alias___2__4(A, B, C).
20542type_alias___2__3__0__13([A|B], C, D, E) :-
20543    (   A=suspension(_, active, _, _),
20544        F=t(236, E, A),
20545        '$novel_production'(E, F),
20546        '$novel_production'(A, F)
20547    ->  '$extend_history'(E, F),
20548        arg(2, E, G),
20549        setarg(2, E, active),
20550        ( arg(4, E, H),
20551          I is H+1,
20552          setarg(4, E, I)
20553        ),
20554        (   G==not_stored_yet
20555        ->  E=suspension(_, _, _, _, _, J, K),
20556            term_variables(term(J, K), L),
20557            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20558                      M),
20559            N=[E|M],
20560            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20561                     N),
20562            (   M=[O|_]
20563            ->  setarg(5, O, N)
20564            ;   true
20565            ),
20566            attach_type_alias___2(L, E)
20567        ;   true
20568        ),
20569        copy_term_nat(C-D, P-Q),
20570        dynamic_type_check_alias_clause(P, Q, R),
20571        dynamic_type_check_clauses([R]),
20572        (   E=suspension(_, active, _, I, _, _, _)
20573        ->  setarg(2, E, inactive),
20574            type_alias___2__3__0__13(B, C, D, E)
20575        ;   true
20576        )
20577    ;   type_alias___2__3__0__13(B, C, D, E)
20578    ).
20579type_alias___2__3(A, B, C) :-
20580    type_alias___2__4(A, B, C).
20581type_alias___2__4(A, B, C) :-
20582    nb_getval('$chr_store_global_list_chr_translate____atomic_type___1', D),
20583    !,
20584    type_alias___2__4__0__14(D, A, B, C).
20585type_alias___2__4__0__14([], A, B, C) :-
20586    type_alias___2__5(A, B, C).
20587type_alias___2__4__0__14([A|B], C, D, E) :-
20588    (   A=suspension(_, active, _, F),
20589        functor(F, G, H),
20590        functor(C, G, H)
20591    ->  A=suspension(_, _, _, I),
20592        setarg(2, A, removed),
20593        term_variables(I, J),
20594        ( arg(3, A, K),
20595          (   var(K)
20596          ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
20597                        L),
20598              L=[_|M],
20599              b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
20600                       M),
20601              (   M=[N|_]
20602              ->  setarg(3, N, _)
20603              ;   true
20604              )
20605          ;   K=[_, _|M],
20606              setarg(2, K, M),
20607              (   M=[N|_]
20608              ->  setarg(3, N, K)
20609              ;   true
20610              )
20611          )
20612        ),
20613        detach_atomic_type___1(J, A),
20614        arg(2, E, O),
20615        setarg(2, E, active),
20616        ( arg(4, E, P),
20617          Q is P+1,
20618          setarg(4, E, Q)
20619        ),
20620        (   O==not_stored_yet
20621        ->  E=suspension(_, _, _, _, _, R, S),
20622            term_variables(term(R, S), T),
20623            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20624                      U),
20625            V=[E|U],
20626            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20627                     V),
20628            (   U=[W|_]
20629            ->  setarg(5, W, V)
20630            ;   true
20631            ),
20632            attach_type_alias___2(T, E)
20633        ;   true
20634        ),
20635        atomic(D),
20636        copy_term_nat(C-D, F-X),
20637        atomic_type(X),
20638        (   E=suspension(_, active, _, Q, _, _, _)
20639        ->  setarg(2, E, inactive),
20640            type_alias___2__4__0__14(B, C, D, E)
20641        ;   true
20642        )
20643    ;   type_alias___2__4__0__14(B, C, D, E)
20644    ).
20645type_alias___2__4(A, B, C) :-
20646    type_alias___2__5(A, B, C).
20647type_alias___2__5(_, _, A) :-
20648    arg(2, A, B),
20649    setarg(2, A, active),
20650    arg(4, A, C),
20651    D is C+1,
20652    setarg(4, A, D),
20653    (   B==not_stored_yet
20654    ->  A=suspension(_, _, _, _, _, E, F),
20655        term_variables(term(E, F), G),
20656        nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20657                  H),
20658        I=[A|H],
20659        b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20660                 I),
20661        (   H=[J|_]
20662        ->  setarg(5, J, I)
20663        ;   true
20664        ),
20665        attach_type_alias___2(G, A)
20666    ;   true
20667    ).
20668constraint_type(A, B) :-
20669    constraint_type___2__0(A, B, _).
20670constraint_type___2__0(A, B, C) :-
20671    nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
20672              D),
20673    !,
20674    C=suspension(E, not_stored_yet, _, A, B),
20675    'chr gen_id'(E),
20676    constraint_type___2__0__0__2(D, A, B, C).
20677constraint_type___2__0__0__2([], A, B, C) :-
20678    constraint_type___2__1(A, B, C).
20679constraint_type___2__0__0__2([A|B], C, D, E) :-
20680    (   A=suspension(_, active, _, _, _)
20681    ->  arg(2, E, F),
20682        setarg(2, E, active),
20683        (   F==not_stored_yet
20684        ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
20685                      G),
20686            H=[E|G],
20687            b_setval('$chr_store_global_ground_chr_translate____constraint_type___2',
20688                     H),
20689            (   G=[I|_]
20690            ->  setarg(3, I, H)
20691            ;   true
20692            ),
20693            nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
20694                      J),
20695            insert_ht(J, C, E)
20696        ;   true
20697        ),
20698        forall(( member(K, D),
20699                 sub_term(K, L)
20700               ),
20701               (   get_type_definition(L, _)
20702               ->  true
20703               ;   chr_error(type_error,
20704                             'Undefined type "~w" used in type declaration of "~w".\n',
20705                             [L, C])
20706               )),
20707        (   E=suspension(_, active, _, _, _)
20708        ->  setarg(2, E, inactive),
20709            constraint_type___2__0__0__2(B, C, D, E)
20710        ;   true
20711        )
20712    ;   constraint_type___2__0__0__2(B, C, D, E)
20713    ).
20714constraint_type___2__0(A, B, C) :-
20715    C=suspension(D, not_stored_yet, _, A, B),
20716    'chr gen_id'(D),
20717    constraint_type___2__1(A, B, C).
20718constraint_type___2__1(A, _, B) :-
20719    arg(2, B, C),
20720    setarg(2, B, active),
20721    (   C==not_stored_yet
20722    ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
20723                  D),
20724        E=[B|D],
20725        b_setval('$chr_store_global_ground_chr_translate____constraint_type___2',
20726                 E),
20727        (   D=[F|_]
20728        ->  setarg(3, F, E)
20729        ;   true
20730        ),
20731        nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
20732                  G),
20733        insert_ht(G, A, B)
20734    ;   true
20735    ).
20736get_type_definition(A, _) :-
20737    \+ ground(A),
20738    !,
20739    chr_error(type_error,
20740              'Non-ground type in constraint definition: "~w".\n',
20741              [A]).
20742get_type_definition(A, B) :-
20743    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', C),
20744    member(D, C),
20745    D=suspension(_, active, _, _, _, E, F),
20746    functor(E, G, H),
20747    functor(A, G, H),
20748    copy_term_nat((E, F), (I, J)),
20749    I=A,
20750    !,
20751    (   get_type_definition(J, B)
20752    ->  true
20753    ;   chr_error(type_error,
20754                  'Could not find type definition for "~w" (accessed via alias "~w").\n',
20755                  [J, I]),
20756        fail
20757    ).
20758get_type_definition(A, B) :-
20759    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20760              C),
20761    member(D, C),
20762    D=suspension(_, active, _, _, _, E, F),
20763    nonvar(E),
20764    functor(E, G, H),
20765    functor(A, G, H),
20766    copy_term_nat((E, F), (I, J)),
20767    I=A,
20768    !,
20769    B=J.
20770get_type_definition(A, B) :-
20771    atomic_builtin_type(A, _, _),
20772    !,
20773    B=[A].
20774get_type_definition(A, B) :-
20775    compound_builtin_type(A, _, _, _),
20776    !,
20777    B=[A].
20778get_type_definition(_, _) :-
20779    fail.
20780get_constraint_type(A, B) :-
20781    nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
20782              C),
20783    lookup_ht(C, A, D),
20784    member(E, D),
20785    E=suspension(_, active, _, _, F),
20786    !,
20787    B=F.
20788get_constraint_type(_, _) :-
20789    fail.
20790unalias_type(A, B) :-
20791    unalias_type___2__0(A, B, _).
20792unalias_type___2__0(A, B, C) :-
20793    var(A),
20794    !,
20795    (   var(C)
20796    ->  true
20797    ;   C=suspension(_, _, _, D, _),
20798        setarg(2, C, removed),
20799        term_variables(D, E),
20800        arg(3, C, F),
20801        (   var(F)
20802        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20803                      G),
20804            G=[_|H],
20805            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20806                     H),
20807            (   H=[I|_]
20808            ->  setarg(3, I, _)
20809            ;   true
20810            )
20811        ;   F=[_, _|H],
20812            setarg(2, F, H),
20813            (   H=[I|_]
20814            ->  setarg(3, I, F)
20815            ;   true
20816            )
20817        ),
20818        detach_unalias_type___2(E, C)
20819    ),
20820    B=A.
20821unalias_type___2__0(A, B, C) :-
20822    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', D),
20823    member(E, D),
20824    E=suspension(_, active, _, _, _, F, G),
20825    functor(F, H, I),
20826    functor(A, H, I),
20827    copy_term_nat((F, G), (J, K)),
20828    A=J,
20829    !,
20830    (   var(C)
20831    ->  true
20832    ;   C=suspension(_, _, _, L, _),
20833        setarg(2, C, removed),
20834        term_variables(L, M),
20835        arg(3, C, N),
20836        (   var(N)
20837        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20838                      O),
20839            O=[_|P],
20840            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20841                     P),
20842            (   P=[Q|_]
20843            ->  setarg(3, Q, _)
20844            ;   true
20845            )
20846        ;   N=[_, _|P],
20847            setarg(2, N, P),
20848            (   P=[Q|_]
20849            ->  setarg(3, Q, N)
20850            ;   true
20851            )
20852        ),
20853        detach_unalias_type___2(M, C)
20854    ),
20855    unalias_type(K, B).
20856unalias_type___2__0(A, B, C) :-
20857    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20858              D),
20859    member(E, D),
20860    E=suspension(_, active, _, _, _, F, _),
20861    nonvar(F),
20862    functor(F, G, H),
20863    functor(A, G, H),
20864    !,
20865    (   var(C)
20866    ->  true
20867    ;   C=suspension(_, _, _, I, _),
20868        setarg(2, C, removed),
20869        term_variables(I, J),
20870        arg(3, C, K),
20871        (   var(K)
20872        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20873                      L),
20874            L=[_|M],
20875            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20876                     M),
20877            (   M=[N|_]
20878            ->  setarg(3, N, _)
20879            ;   true
20880            )
20881        ;   K=[_, _|M],
20882            setarg(2, K, M),
20883            (   M=[N|_]
20884            ->  setarg(3, N, K)
20885            ;   true
20886            )
20887        ),
20888        detach_unalias_type___2(J, C)
20889    ),
20890    B=A.
20891unalias_type___2__0(A, B, C) :-
20892    atomic_builtin_type(A, _, _),
20893    !,
20894    (   var(C)
20895    ->  true
20896    ;   C=suspension(_, _, _, D, _),
20897        setarg(2, C, removed),
20898        term_variables(D, E),
20899        arg(3, C, F),
20900        (   var(F)
20901        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20902                      G),
20903            G=[_|H],
20904            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20905                     H),
20906            (   H=[I|_]
20907            ->  setarg(3, I, _)
20908            ;   true
20909            )
20910        ;   F=[_, _|H],
20911            setarg(2, F, H),
20912            (   H=[I|_]
20913            ->  setarg(3, I, F)
20914            ;   true
20915            )
20916        ),
20917        detach_unalias_type___2(E, C)
20918    ),
20919    B=A.
20920unalias_type___2__0(A, B, C) :-
20921    compound_builtin_type(A, _, _, _),
20922    !,
20923    (   var(C)
20924    ->  true
20925    ;   C=suspension(_, _, _, D, _),
20926        setarg(2, C, removed),
20927        term_variables(D, E),
20928        arg(3, C, F),
20929        (   var(F)
20930        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20931                      G),
20932            G=[_|H],
20933            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20934                     H),
20935            (   H=[I|_]
20936            ->  setarg(3, I, _)
20937            ;   true
20938            )
20939        ;   F=[_, _|H],
20940            setarg(2, F, H),
20941            (   H=[I|_]
20942            ->  setarg(3, I, F)
20943            ;   true
20944            )
20945        ),
20946        detach_unalias_type___2(E, C)
20947    ),
20948    B=A.
20949unalias_type___2__0(A, B, C) :-
20950    (   var(C)
20951    ->  C=suspension(D, active, _, A, B),
20952        term_variables(A, E),
20953        'chr gen_id'(D),
20954        nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20955                  F),
20956        G=[C|F],
20957        b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20958                 G),
20959        (   F=[H|_]
20960        ->  setarg(3, H, G)
20961        ;   true
20962        ),
20963        attach_unalias_type___2(E, C)
20964    ;   setarg(2, C, active)
20965    ).
20966types_modes_condition([], [], A) :-
20967    !,
20968    A=true.
20969types_modes_condition([A|B], [C|D], E) :-
20970    nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
20971              F),
20972    member(G, F),
20973    G=suspension(_, active, _, _, H, I),
20974    H=J/K,
20975    functor(A, J, K),
20976    !,
20977    A=..[_|L],
20978    E=(M, N, O),
20979    modes_condition(I, L, M),
20980    get_constraint_type_det(J/K, P),
20981    C=..[_|Q],
20982    types_condition(P, L, Q, I, N),
20983    types_modes_condition(B, D, O).
20984types_modes_condition([A|_], _, _) :-
20985    !,
20986    functor(A, B, C),
20987    chr_error(internal, 'Mode information missing for ~w.\n', [B/C]).
20988types_modes_condition(A, B, C) :-
20989    D=suspension(E, active, _, A, B, C),
20990    'chr gen_id'(E),
20991    nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
20992              F),
20993    G=[D|F],
20994    b_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
20995             G),
20996    (   F=[H|_]
20997    ->  setarg(3, H, G)
20998    ;   true
20999    ).
21000static_type_check(A, B) :-
21001    static_type_check___2__0(A, B, _).
21002static_type_check___2__0(A, B, C) :-
21003    nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
21004              D),
21005    !,
21006    C=suspension(E, not_stored_yet, _, A, B),
21007    'chr gen_id'(E),
21008    static_type_check___2__0__0__1(D, A, B, C).
21009static_type_check___2__0__0__1([], A, B, C) :-
21010    static_type_check___2__1(A, B, C).
21011static_type_check___2__0__0__1([A|B], C, D, E) :-
21012    (   A=suspension(_, active, _, F, G)
21013    ->  arg(2, E, H),
21014        setarg(2, E, active),
21015        (   H==not_stored_yet
21016        ->  nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
21017                      I),
21018            J=[E|I],
21019            b_setval('$chr_store_global_ground_chr_translate____static_type_check___2',
21020                     J),
21021            (   I=[K|_]
21022            ->  setarg(3, K, J)
21023            ;   true
21024            )
21025        ;   true
21026        ),
21027        forall(( member(L, G),
21028                 sub_term(L, M)
21029               ),
21030               (   get_type_definition(M, _)
21031               ->  true
21032               ;   chr_error(type_error,
21033                             'Undefined type "~w" used in type declaration of "~w".\n',
21034                             [M, F])
21035               )),
21036        (   E=suspension(_, active, _, _, _)
21037        ->  setarg(2, E, inactive),
21038            static_type_check___2__0__0__1(B, C, D, E)
21039        ;   true
21040        )
21041    ;   static_type_check___2__0__0__1(B, C, D, E)
21042    ).
21043static_type_check___2__0(A, B, C) :-
21044    C=suspension(D, not_stored_yet, _, A, B),
21045    'chr gen_id'(D),
21046    static_type_check___2__1(A, B, C).
21047static_type_check___2__1(A, B, C) :-
21048    (   var(C)
21049    ->  true
21050    ;   arg(2, C, D),
21051        setarg(2, C, removed),
21052        (   D==not_stored_yet
21053        ->  true
21054        ;   arg(3, C, E),
21055            (   var(E)
21056            ->  nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
21057                          F),
21058                F=[_|G],
21059                b_setval('$chr_store_global_ground_chr_translate____static_type_check___2',
21060                         G),
21061                (   G=[H|_]
21062                ->  setarg(3, H, _)
21063                ;   true
21064                )
21065            ;   E=[_, _|G],
21066                setarg(2, E, G),
21067                (   G=[H|_]
21068                ->  setarg(3, H, E)
21069                ;   true
21070                )
21071            )
21072        )
21073    ),
21074    maplist(static_type_check_rule, A, B).
21075ast_static_type_check_term(_, _, A) :-
21076    A==any,
21077    !.
21078ast_static_type_check_term(A, B, C) :-
21079    nonvar(B),
21080    B=var(D, E),
21081    !,
21082    ast_static_type_check_var(D, var(D, E), C, A).
21083ast_static_type_check_term(A, B, C) :-
21084    ast_atomic_builtin_type(C, B, D),
21085    !,
21086    (   call(D)
21087    ->  true
21088    ;   throw(type_error(invalid_functor(A, B, C)))
21089    ).
21090ast_static_type_check_term(A, B, C) :-
21091    ast_compound_builtin_type(C, B, D),
21092    !,
21093    (   call(D)
21094    ->  true
21095    ;   throw(type_error(invalid_functor(A, B, C)))
21096    ).
21097ast_static_type_check_term(A, B, C) :-
21098    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', D),
21099    member(E, D),
21100    E=suspension(_, active, _, _, _, F, G),
21101    functor(C, H, I),
21102    functor(F, H, I),
21103    !,
21104    copy_term_nat(F-G, C-J),
21105    ast_static_type_check_term(A, B, J).
21106ast_static_type_check_term(A, B, C) :-
21107    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
21108              D),
21109    member(E, D),
21110    E=suspension(_, active, _, _, _, F, G),
21111    functor(C, H, I),
21112    functor(F, H, I),
21113    !,
21114    copy_term_nat(F-G, C-J),
21115    ast_functor(B, K, L),
21116    (   member(M, J),
21117        functor(M, K, L)
21118    ->  ast_args(B, N),
21119        M=..[_|O],
21120        maplist(ast_static_type_check_term(A), N, O)
21121    ;   throw(type_error(invalid_functor(A, B, C)))
21122    ).
21123ast_static_type_check_term(A, B, C) :-
21124    chr_error(internal,
21125              'Undefined type ~w while type checking term ~w in ~@.\n',
21126              [C, B, chr_translate:format_src(A)]).
21127ast_static_type_check_var(A, B, C, D) :-
21128    ast_static_type_check_var___4__0(A, B, C, D, _).
21129ast_static_type_check_var___4__0(A, B, C, D, E) :-
21130    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', F),
21131    member(G, F),
21132    G=suspension(_, active, _, _, _, H, I),
21133    functor(H, J, K),
21134    functor(C, J, K),
21135    !,
21136    (   var(E)
21137    ->  true
21138    ;   E=suspension(_, _, _, _, _, L, _),
21139        setarg(2, E, removed),
21140        term_variables(L, M),
21141        arg(3, E, N),
21142        (   var(N)
21143        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21144                      O),
21145            O=[_|P],
21146            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21147                     P),
21148            (   P=[Q|_]
21149            ->  setarg(3, Q, _)
21150            ;   true
21151            )
21152        ;   N=[_, _|P],
21153            setarg(2, N, P),
21154            (   P=[Q|_]
21155            ->  setarg(3, Q, N)
21156            ;   true
21157            )
21158        ),
21159        detach_ast_static_type_check_var___4(M, E)
21160    ),
21161    copy_term_nat(H-I, C-R),
21162    ast_static_type_check_var(A, B, R, D).
21163ast_static_type_check_var___4__0(A, B, C, D, E) :-
21164    atomic_builtin_type(C, _, _),
21165    !,
21166    (   var(E)
21167    ->  true
21168    ;   E=suspension(_, _, _, _, _, F, _),
21169        setarg(2, E, removed),
21170        term_variables(F, G),
21171        arg(3, E, H),
21172        (   var(H)
21173        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21174                      I),
21175            I=[_|J],
21176            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21177                     J),
21178            (   J=[K|_]
21179            ->  setarg(3, K, _)
21180            ;   true
21181            )
21182        ;   H=[_, _|J],
21183            setarg(2, H, J),
21184            (   J=[K|_]
21185            ->  setarg(3, K, H)
21186            ;   true
21187            )
21188        ),
21189        detach_ast_static_type_check_var___4(G, E)
21190    ),
21191    ast_static_atomic_builtin_type_check_var(A, B, C, D).
21192ast_static_type_check_var___4__0(_, _, A, _, B) :-
21193    compound_builtin_type(A, _, _, _),
21194    !,
21195    (   var(B)
21196    ->  true
21197    ;   B=suspension(_, _, _, _, _, C, _),
21198        setarg(2, B, removed),
21199        term_variables(C, D),
21200        arg(3, B, E),
21201        (   var(E)
21202        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21203                      F),
21204            F=[_|G],
21205            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21206                     G),
21207            (   G=[H|_]
21208            ->  setarg(3, H, _)
21209            ;   true
21210            )
21211        ;   E=[_, _|G],
21212            setarg(2, E, G),
21213            (   G=[H|_]
21214            ->  setarg(3, H, E)
21215            ;   true
21216            )
21217        ),
21218        detach_ast_static_type_check_var___4(D, B)
21219    ).
21220ast_static_type_check_var___4__0(A, B, C, D, E) :-
21221    nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21222              F),
21223    member(G, F),
21224    G=suspension(_, active, _, H, I, J, K),
21225    H=A,
21226    (   C\==J,
21227        !,
21228        G=suspension(_, _, _, _, _, L, _),
21229        setarg(2, G, removed),
21230        term_variables(L, M),
21231        arg(3, G, N),
21232        (   var(N)
21233        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21234                      O),
21235            O=[_|P],
21236            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21237                     P),
21238            (   P=[Q|_]
21239            ->  setarg(3, Q, _)
21240            ;   true
21241            )
21242        ;   N=[_, _|P],
21243            setarg(2, N, P),
21244            (   P=[Q|_]
21245            ->  setarg(3, Q, N)
21246            ;   true
21247            )
21248        ),
21249        detach_ast_static_type_check_var___4(M, G),
21250        (   var(E)
21251        ->  true
21252        ;   E=suspension(_, _, _, _, _, R, _),
21253            setarg(2, E, removed),
21254            term_variables(R, S),
21255            arg(3, E, T),
21256            (   var(T)
21257            ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21258                          U),
21259                U=[_|V],
21260                b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21261                         V),
21262                (   V=[W|_]
21263                ->  setarg(3, W, _)
21264                ;   true
21265                )
21266            ;   T=[_, _|V],
21267                setarg(2, T, V),
21268                (   V=[W|_]
21269                ->  setarg(3, W, T)
21270                ;   true
21271                )
21272            ),
21273            detach_ast_static_type_check_var___4(S, E)
21274        ),
21275        throw(type_error(type_clash(B, D, K, C, J)))
21276    ;   J\==C,
21277        !,
21278        G=suspension(_, _, _, _, _, X, _),
21279        setarg(2, G, removed),
21280        term_variables(X, Y),
21281        arg(3, G, Z),
21282        (   var(Z)
21283        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21284                      A1),
21285            A1=[_|B1],
21286            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21287                     B1),
21288            (   B1=[C1|_]
21289            ->  setarg(3, C1, _)
21290            ;   true
21291            )
21292        ;   Z=[_, _|B1],
21293            setarg(2, Z, B1),
21294            (   B1=[C1|_]
21295            ->  setarg(3, C1, Z)
21296            ;   true
21297            )
21298        ),
21299        detach_ast_static_type_check_var___4(Y, G),
21300        (   var(E)
21301        ->  true
21302        ;   E=suspension(_, _, _, _, _, D1, _),
21303            setarg(2, E, removed),
21304            term_variables(D1, E1),
21305            arg(3, E, F1),
21306            (   var(F1)
21307            ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21308                          G1),
21309                G1=[_|H1],
21310                b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21311                         H1),
21312                (   H1=[I1|_]
21313                ->  setarg(3, I1, _)
21314                ;   true
21315                )
21316            ;   F1=[_, _|H1],
21317                setarg(2, F1, H1),
21318                (   H1=[I1|_]
21319                ->  setarg(3, I1, F1)
21320                ;   true
21321                )
21322            ),
21323            detach_ast_static_type_check_var___4(E1, E)
21324        ),
21325        throw(type_error(type_clash(I, K, D, J, C)))
21326    ).
21327ast_static_type_check_var___4__0(A, B, C, D, E) :-
21328    (   var(E)
21329    ->  E=suspension(F, active, _, A, B, C, D),
21330        term_variables(C, G),
21331        'chr gen_id'(F),
21332        nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21333                  H),
21334        I=[E|H],
21335        b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21336                 I),
21337        (   H=[J|_]
21338        ->  setarg(3, J, I)
21339        ;   true
21340        ),
21341        attach_ast_static_type_check_var___4(G, E)
21342    ;   setarg(2, E, active)
21343    ).
21344ast_static_atomic_builtin_type_check_var(_, _, any, _) :-
21345    !.
21346ast_static_atomic_builtin_type_check_var(A, B, C, D) :-
21347    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21348              E),
21349    lookup_ht(E, k(A, C), F),
21350    (   member(G, F),
21351        G=suspension(_, active, _, _, _, _),
21352        !
21353    ;   !,
21354        ast_static_atomic_builtin_type_check_var___4__0__0__3(F,
21355                                                              A,
21356                                                              B,
21357                                                              C,
21358                                                              D)
21359    ).
21360ast_static_atomic_builtin_type_check_var___4__0__0__3([], A, B, C, D) :-
21361    ast_static_atomic_builtin_type_check_var___4__1(A,
21362                                                    B,
21363                                                    C,
21364                                                    D).
21365ast_static_atomic_builtin_type_check_var___4__0__0__3([A|B], C, D, E, F) :-
21366    (   A=suspension(_, active, G, _, H, _),
21367        G==C,
21368        H==E
21369    ->  setarg(2, A, removed),
21370        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21371                    I),
21372          delete_ht(I, C, A)
21373        ),
21374        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21375                  J),
21376        delete_ht(J, k(C, E), A),
21377        ast_static_atomic_builtin_type_check_var___4__0__0__3(B,
21378                                                              C,
21379                                                              D,
21380                                                              E,
21381                                                              F)
21382    ;   ast_static_atomic_builtin_type_check_var___4__0__0__3(B,
21383                                                              C,
21384                                                              D,
21385                                                              E,
21386                                                              F)
21387    ).
21388ast_static_atomic_builtin_type_check_var(A, B, C, D) :-
21389    ast_static_atomic_builtin_type_check_var___4__1(A,
21390                                                    B,
21391                                                    C,
21392                                                    D).
21393ast_static_atomic_builtin_type_check_var___4__1(A, _, number, _) :-
21394    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21395              B),
21396    lookup_ht(B, k(A, float), C),
21397    member(D, C),
21398    D=suspension(_, active, _, _, _, _),
21399    !.
21400ast_static_atomic_builtin_type_check_var___4__1(A, B, float, C) :-
21401    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21402              D),
21403    lookup_ht(D, k(A, number), E),
21404    !,
21405    ast_static_atomic_builtin_type_check_var___4__1__0__5(E,
21406                                                          A,
21407                                                          B,
21408                                                          float,
21409                                                          C).
21410ast_static_atomic_builtin_type_check_var___4__1__0__5([], A, B, C, D) :-
21411    ast_static_atomic_builtin_type_check_var___4__8(A,
21412                                                    B,
21413                                                    C,
21414                                                    D).
21415ast_static_atomic_builtin_type_check_var___4__1__0__5([A|B], C, D, E, F) :-
21416    (   A=suspension(_, active, G, _, H, _),
21417        G==C,
21418        H=number
21419    ->  setarg(2, A, removed),
21420        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21421                    I),
21422          delete_ht(I, C, A)
21423        ),
21424        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21425                  J),
21426        delete_ht(J, k(C, number), A),
21427        ast_static_atomic_builtin_type_check_var___4__1__0__5(B,
21428                                                              C,
21429                                                              D,
21430                                                              E,
21431                                                              F)
21432    ;   ast_static_atomic_builtin_type_check_var___4__1__0__5(B,
21433                                                              C,
21434                                                              D,
21435                                                              E,
21436                                                              F)
21437    ).
21438ast_static_atomic_builtin_type_check_var___4__1(A, B, C, D) :-
21439    ast_static_atomic_builtin_type_check_var___4__2(A,
21440                                                    B,
21441                                                    C,
21442                                                    D).
21443ast_static_atomic_builtin_type_check_var___4__2(A, _, number, _) :-
21444    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21445              B),
21446    lookup_ht(B, k(A, int), C),
21447    member(D, C),
21448    D=suspension(_, active, _, _, _, _),
21449    !.
21450ast_static_atomic_builtin_type_check_var___4__2(A, B, int, C) :-
21451    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21452              D),
21453    lookup_ht(D, k(A, number), E),
21454    !,
21455    ast_static_atomic_builtin_type_check_var___4__2__0__7(E,
21456                                                          A,
21457                                                          B,
21458                                                          int,
21459                                                          C).
21460ast_static_atomic_builtin_type_check_var___4__2__0__7([], A, B, C, D) :-
21461    ast_static_atomic_builtin_type_check_var___4__5(A,
21462                                                    B,
21463                                                    C,
21464                                                    D).
21465ast_static_atomic_builtin_type_check_var___4__2__0__7([A|B], C, D, E, F) :-
21466    (   A=suspension(_, active, G, _, H, _),
21467        G==C,
21468        H=number
21469    ->  setarg(2, A, removed),
21470        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21471                    I),
21472          delete_ht(I, C, A)
21473        ),
21474        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21475                  J),
21476        delete_ht(J, k(C, number), A),
21477        ast_static_atomic_builtin_type_check_var___4__2__0__7(B,
21478                                                              C,
21479                                                              D,
21480                                                              E,
21481                                                              F)
21482    ;   ast_static_atomic_builtin_type_check_var___4__2__0__7(B,
21483                                                              C,
21484                                                              D,
21485                                                              E,
21486                                                              F)
21487    ).
21488ast_static_atomic_builtin_type_check_var___4__2(A, B, C, D) :-
21489    ast_static_atomic_builtin_type_check_var___4__3(A,
21490                                                    B,
21491                                                    C,
21492                                                    D).
21493ast_static_atomic_builtin_type_check_var___4__3(A, _, number, _) :-
21494    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21495              B),
21496    lookup_ht(B, k(A, natural), C),
21497    member(D, C),
21498    D=suspension(_, active, _, _, _, _),
21499    !.
21500ast_static_atomic_builtin_type_check_var___4__3(A, B, natural, C) :-
21501    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21502              D),
21503    lookup_ht(D, k(A, number), E),
21504    !,
21505    ast_static_atomic_builtin_type_check_var___4__3__0__9(E,
21506                                                          A,
21507                                                          B,
21508                                                          natural,
21509                                                          C).
21510ast_static_atomic_builtin_type_check_var___4__3__0__9([], A, B, C, D) :-
21511    ast_static_atomic_builtin_type_check_var___4__5(A,
21512                                                    B,
21513                                                    C,
21514                                                    D).
21515ast_static_atomic_builtin_type_check_var___4__3__0__9([A|B], C, D, E, F) :-
21516    (   A=suspension(_, active, G, _, H, _),
21517        G==C,
21518        H=number
21519    ->  setarg(2, A, removed),
21520        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21521                    I),
21522          delete_ht(I, C, A)
21523        ),
21524        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21525                  J),
21526        delete_ht(J, k(C, number), A),
21527        ast_static_atomic_builtin_type_check_var___4__3__0__9(B,
21528                                                              C,
21529                                                              D,
21530                                                              E,
21531                                                              F)
21532    ;   ast_static_atomic_builtin_type_check_var___4__3__0__9(B,
21533                                                              C,
21534                                                              D,
21535                                                              E,
21536                                                              F)
21537    ).
21538ast_static_atomic_builtin_type_check_var___4__3(A, B, C, D) :-
21539    ast_static_atomic_builtin_type_check_var___4__4(A,
21540                                                    B,
21541                                                    C,
21542                                                    D).
21543ast_static_atomic_builtin_type_check_var___4__4(A, _, number, _) :-
21544    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21545              B),
21546    lookup_ht(B, k(A, dense_int), C),
21547    member(D, C),
21548    D=suspension(_, active, _, _, _, _),
21549    !.
21550ast_static_atomic_builtin_type_check_var___4__4(A, B, dense_int, C) :-
21551    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21552              D),
21553    lookup_ht(D, k(A, number), E),
21554    !,
21555    ast_static_atomic_builtin_type_check_var___4__4__0__11(E,
21556                                                           A,
21557                                                           B,
21558                                                           dense_int,
21559                                                           C).
21560ast_static_atomic_builtin_type_check_var___4__4__0__11([], A, B, C, D) :-
21561    ast_static_atomic_builtin_type_check_var___4__6(A,
21562                                                    B,
21563                                                    C,
21564                                                    D).
21565ast_static_atomic_builtin_type_check_var___4__4__0__11([A|B], C, D, E, F) :-
21566    (   A=suspension(_, active, G, _, H, _),
21567        G==C,
21568        H=number
21569    ->  setarg(2, A, removed),
21570        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21571                    I),
21572          delete_ht(I, C, A)
21573        ),
21574        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21575                  J),
21576        delete_ht(J, k(C, number), A),
21577        ast_static_atomic_builtin_type_check_var___4__4__0__11(B,
21578                                                               C,
21579                                                               D,
21580                                                               E,
21581                                                               F)
21582    ;   ast_static_atomic_builtin_type_check_var___4__4__0__11(B,
21583                                                               C,
21584                                                               D,
21585                                                               E,
21586                                                               F)
21587    ).
21588ast_static_atomic_builtin_type_check_var___4__4(A, B, C, D) :-
21589    ast_static_atomic_builtin_type_check_var___4__5(A,
21590                                                    B,
21591                                                    C,
21592                                                    D).
21593ast_static_atomic_builtin_type_check_var___4__5(A, _, int, _) :-
21594    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21595              B),
21596    lookup_ht(B, k(A, natural), C),
21597    member(D, C),
21598    D=suspension(_, active, _, _, _, _),
21599    !.
21600ast_static_atomic_builtin_type_check_var___4__5(A, B, natural, C) :-
21601    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21602              D),
21603    lookup_ht(D, k(A, int), E),
21604    !,
21605    ast_static_atomic_builtin_type_check_var___4__5__0__13(E,
21606                                                           A,
21607                                                           B,
21608                                                           natural,
21609                                                           C).
21610ast_static_atomic_builtin_type_check_var___4__5__0__13([], A, B, C, D) :-
21611    ast_static_atomic_builtin_type_check_var___4__7(A,
21612                                                    B,
21613                                                    C,
21614                                                    D).
21615ast_static_atomic_builtin_type_check_var___4__5__0__13([A|B], C, D, E, F) :-
21616    (   A=suspension(_, active, G, _, H, _),
21617        G==C,
21618        H=int
21619    ->  setarg(2, A, removed),
21620        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21621                    I),
21622          delete_ht(I, C, A)
21623        ),
21624        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21625                  J),
21626        delete_ht(J, k(C, int), A),
21627        ast_static_atomic_builtin_type_check_var___4__5__0__13(B,
21628                                                               C,
21629                                                               D,
21630                                                               E,
21631                                                               F)
21632    ;   ast_static_atomic_builtin_type_check_var___4__5__0__13(B,
21633                                                               C,
21634                                                               D,
21635                                                               E,
21636                                                               F)
21637    ).
21638ast_static_atomic_builtin_type_check_var___4__5(A, B, C, D) :-
21639    ast_static_atomic_builtin_type_check_var___4__6(A,
21640                                                    B,
21641                                                    C,
21642                                                    D).
21643ast_static_atomic_builtin_type_check_var___4__6(A, _, int, _) :-
21644    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21645              B),
21646    lookup_ht(B, k(A, dense_int), C),
21647    member(D, C),
21648    D=suspension(_, active, _, _, _, _),
21649    !.
21650ast_static_atomic_builtin_type_check_var___4__6(A, B, dense_int, C) :-
21651    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21652              D),
21653    lookup_ht(D, k(A, int), E),
21654    !,
21655    ast_static_atomic_builtin_type_check_var___4__6__0__15(E,
21656                                                           A,
21657                                                           B,
21658                                                           dense_int,
21659                                                           C).
21660ast_static_atomic_builtin_type_check_var___4__6__0__15([], A, B, C, D) :-
21661    ast_static_atomic_builtin_type_check_var___4__7(A,
21662                                                    B,
21663                                                    C,
21664                                                    D).
21665ast_static_atomic_builtin_type_check_var___4__6__0__15([A|B], C, D, E, F) :-
21666    (   A=suspension(_, active, G, _, H, _),
21667        G==C,
21668        H=int
21669    ->  setarg(2, A, removed),
21670        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21671                    I),
21672          delete_ht(I, C, A)
21673        ),
21674        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21675                  J),
21676        delete_ht(J, k(C, int), A),
21677        ast_static_atomic_builtin_type_check_var___4__6__0__15(B,
21678                                                               C,
21679                                                               D,
21680                                                               E,
21681                                                               F)
21682    ;   ast_static_atomic_builtin_type_check_var___4__6__0__15(B,
21683                                                               C,
21684                                                               D,
21685                                                               E,
21686                                                               F)
21687    ).
21688ast_static_atomic_builtin_type_check_var___4__6(A, B, C, D) :-
21689    ast_static_atomic_builtin_type_check_var___4__7(A,
21690                                                    B,
21691                                                    C,
21692                                                    D).
21693ast_static_atomic_builtin_type_check_var___4__7(A, _, natural, _) :-
21694    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21695              B),
21696    lookup_ht(B, k(A, dense_int), C),
21697    member(D, C),
21698    D=suspension(_, active, _, _, _, _),
21699    !.
21700ast_static_atomic_builtin_type_check_var___4__7(A, B, dense_int, C) :-
21701    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21702              D),
21703    lookup_ht(D, k(A, natural), E),
21704    !,
21705    ast_static_atomic_builtin_type_check_var___4__7__0__17(E,
21706                                                           A,
21707                                                           B,
21708                                                           dense_int,
21709                                                           C).
21710ast_static_atomic_builtin_type_check_var___4__7__0__17([], A, B, C, D) :-
21711    ast_static_atomic_builtin_type_check_var___4__8(A,
21712                                                    B,
21713                                                    C,
21714                                                    D).
21715ast_static_atomic_builtin_type_check_var___4__7__0__17([A|B], C, D, E, F) :-
21716    (   A=suspension(_, active, G, _, H, _),
21717        G==C,
21718        H=natural
21719    ->  setarg(2, A, removed),
21720        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21721                    I),
21722          delete_ht(I, C, A)
21723        ),
21724        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21725                  J),
21726        delete_ht(J, k(C, natural), A),
21727        ast_static_atomic_builtin_type_check_var___4__7__0__17(B,
21728                                                               C,
21729                                                               D,
21730                                                               E,
21731                                                               F)
21732    ;   ast_static_atomic_builtin_type_check_var___4__7__0__17(B,
21733                                                               C,
21734                                                               D,
21735                                                               E,
21736                                                               F)
21737    ).
21738ast_static_atomic_builtin_type_check_var___4__7(A, B, C, D) :-
21739    ast_static_atomic_builtin_type_check_var___4__8(A,
21740                                                    B,
21741                                                    C,
21742                                                    D).
21743ast_static_atomic_builtin_type_check_var___4__8(A, B, C, D) :-
21744    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21745              E),
21746    lookup_ht(E, A, F),
21747    member(G, F),
21748    G=suspension(_, active, _, _, H, I),
21749    !,
21750    setarg(2, G, removed),
21751    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21752              J),
21753    delete_ht(J, A, G),
21754    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21755              K),
21756    delete_ht(K, k(A, H), G),
21757    throw(type_error(type_clash(B, D, I, C, H))).
21758ast_static_atomic_builtin_type_check_var___4__8(A, B, C, D) :-
21759    E=suspension(F, active, A, B, C, D),
21760    'chr gen_id'(F),
21761    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21762              G),
21763    insert_ht(G, A, E),
21764    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21765              H),
21766    insert_ht(H, k(A, C), E).
21767dynamic_type_check :-
21768    dynamic_type_check___0__0(_).
21769dynamic_type_check___0__0(A) :-
21770    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
21771              B),
21772    !,
21773    A=suspension(C, not_stored_yet, t, _),
21774    'chr gen_id'(C),
21775    dynamic_type_check___0__0__0__1(B, A).
21776dynamic_type_check___0__0__0__1([], A) :-
21777    dynamic_type_check___0__1(A).
21778dynamic_type_check___0__0__0__1([A|B], C) :-
21779    (   A=suspension(_, active, _, _, _, D, E),
21780        F=t(235, A, C),
21781        '$novel_production'(A, F),
21782        '$novel_production'(C, F)
21783    ->  '$extend_history'(C, F),
21784        arg(2, C, G),
21785        setarg(2, C, active),
21786        (   G==not_stored_yet
21787        ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21788                      H),
21789            I=[C|H],
21790            b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21791                     I),
21792            (   H=[J|_]
21793            ->  setarg(4, J, I)
21794            ;   true
21795            )
21796        ;   true
21797        ),
21798        copy_term_nat(D-E, K-L),
21799        maplist(dynamic_type_check_clause(K), L, M),
21800        dynamic_type_check_clauses(M),
21801        (   C=suspension(_, active, _, _)
21802        ->  setarg(2, C, inactive),
21803            dynamic_type_check___0__0__0__1(B, C)
21804        ;   true
21805        )
21806    ;   dynamic_type_check___0__0__0__1(B, C)
21807    ).
21808dynamic_type_check___0__0(A) :-
21809    A=suspension(B, not_stored_yet, t, _),
21810    'chr gen_id'(B),
21811    dynamic_type_check___0__1(A).
21812dynamic_type_check___0__1(A) :-
21813    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', B),
21814    !,
21815    dynamic_type_check___0__1__0__2(B, A).
21816dynamic_type_check___0__1__0__2([], A) :-
21817    dynamic_type_check___0__2(A).
21818dynamic_type_check___0__1__0__2([A|B], C) :-
21819    (   A=suspension(_, active, _, _, _, D, E),
21820        F=t(236, A, C),
21821        '$novel_production'(A, F),
21822        '$novel_production'(C, F)
21823    ->  '$extend_history'(C, F),
21824        arg(2, C, G),
21825        setarg(2, C, active),
21826        (   G==not_stored_yet
21827        ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21828                      H),
21829            I=[C|H],
21830            b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21831                     I),
21832            (   H=[J|_]
21833            ->  setarg(4, J, I)
21834            ;   true
21835            )
21836        ;   true
21837        ),
21838        copy_term_nat(D-E, K-L),
21839        dynamic_type_check_alias_clause(K, L, M),
21840        dynamic_type_check_clauses([M]),
21841        (   C=suspension(_, active, _, _)
21842        ->  setarg(2, C, inactive),
21843            dynamic_type_check___0__1__0__2(B, C)
21844        ;   true
21845        )
21846    ;   dynamic_type_check___0__1__0__2(B, C)
21847    ).
21848dynamic_type_check___0__1(A) :-
21849    dynamic_type_check___0__2(A).
21850dynamic_type_check___0__2(A) :-
21851    (   var(A)
21852    ->  true
21853    ;   arg(2, A, B),
21854        setarg(2, A, removed),
21855        (   B==not_stored_yet
21856        ->  true
21857        ;   arg(4, A, C),
21858            (   var(C)
21859            ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21860                          D),
21861                D=[_|E],
21862                b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21863                         E),
21864                (   E=[F|_]
21865                ->  setarg(4, F, _)
21866                ;   true
21867                )
21868            ;   C=[_, _|E],
21869                setarg(2, C, E),
21870                (   E=[F|_]
21871                ->  setarg(4, F, C)
21872                ;   true
21873                )
21874            )
21875        )
21876    ),
21877    findall(('$dynamic_type_check'(G, H):-I),
21878            (   atomic_builtin_type(G, H, I)
21879            ;   compound_builtin_type(G, H, I, _)
21880            ),
21881            J),
21882    dynamic_type_check_clauses(J).
21883dynamic_type_check_clauses(A) :-
21884    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21885              B),
21886    member(C, B),
21887    C=suspension(_, active, _, D),
21888    !,
21889    setarg(2, C, removed),
21890    arg(3, C, E),
21891    (   var(E)
21892    ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21893                  F),
21894        F=[_|G],
21895        b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21896                 G),
21897        (   G=[H|_]
21898        ->  setarg(3, H, _)
21899        ;   true
21900        )
21901    ;   E=[_, _|G],
21902        setarg(2, E, G),
21903        (   G=[H|_]
21904        ->  setarg(3, H, E)
21905        ;   true
21906        )
21907    ),
21908    append(A, D, I),
21909    dynamic_type_check_clauses(I).
21910dynamic_type_check_clauses(A) :-
21911    B=suspension(C, active, _, A),
21912    'chr gen_id'(C),
21913    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21914              D),
21915    E=[B|D],
21916    b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21917             E),
21918    (   D=[F|_]
21919    ->  setarg(3, F, E)
21920    ;   true
21921    ).
21922get_dynamic_type_check_clauses(A) :-
21923    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21924              B),
21925    member(C, B),
21926    C=suspension(_, active, _, D),
21927    !,
21928    setarg(2, C, removed),
21929    arg(3, C, E),
21930    (   var(E)
21931    ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21932                  F),
21933        F=[_|G],
21934        b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21935                 G),
21936        (   G=[H|_]
21937        ->  setarg(3, H, _)
21938        ;   true
21939        )
21940    ;   E=[_, _|G],
21941        setarg(2, E, G),
21942        (   G=[H|_]
21943        ->  setarg(3, H, E)
21944        ;   true
21945        )
21946    ),
21947    A=D.
21948get_dynamic_type_check_clauses([]).
21949atomic_type(A) :-
21950    atomic_type___1__0(A, _).
21951atomic_type___1__0(A, B) :-
21952    atomic_builtin_type(A, _, _),
21953    !,
21954    (   var(B)
21955    ->  true
21956    ;   B=suspension(_, _, _, C),
21957        setarg(2, B, removed),
21958        term_variables(C, D),
21959        arg(3, B, E),
21960        (   var(E)
21961        ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
21962                      F),
21963            F=[_|G],
21964            b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
21965                     G),
21966            (   G=[H|_]
21967            ->  setarg(3, H, _)
21968            ;   true
21969            )
21970        ;   E=[_, _|G],
21971            setarg(2, E, G),
21972            (   G=[H|_]
21973            ->  setarg(3, H, E)
21974            ;   true
21975            )
21976        ),
21977        detach_atomic_type___1(D, B)
21978    ),
21979    A\==any.
21980atomic_type___1__0(A, B) :-
21981    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
21982              C),
21983    member(D, C),
21984    D=suspension(_, active, _, _, _, E, F),
21985    functor(A, G, H),
21986    functor(E, G, H),
21987    !,
21988    (   var(B)
21989    ->  true
21990    ;   B=suspension(_, _, _, I),
21991        setarg(2, B, removed),
21992        term_variables(I, J),
21993        arg(3, B, K),
21994        (   var(K)
21995        ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
21996                      L),
21997            L=[_|M],
21998            b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
21999                     M),
22000            (   M=[N|_]
22001            ->  setarg(3, N, _)
22002            ;   true
22003            )
22004        ;   K=[_, _|M],
22005            setarg(2, K, M),
22006            (   M=[N|_]
22007            ->  setarg(3, N, K)
22008            ;   true
22009            )
22010        ),
22011        detach_atomic_type___1(J, B)
22012    ),
22013    maplist(atomic, F).
22014atomic_type___1__0(A, B) :-
22015    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', C),
22016    member(D, C),
22017    D=suspension(_, active, _, _, _, E, F),
22018    functor(A, G, H),
22019    functor(E, G, H),
22020    !,
22021    (   var(B)
22022    ->  true
22023    ;   B=suspension(_, _, _, I),
22024        setarg(2, B, removed),
22025        term_variables(I, J),
22026        arg(3, B, K),
22027        (   var(K)
22028        ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
22029                      L),
22030            L=[_|M],
22031            b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
22032                     M),
22033            (   M=[N|_]
22034            ->  setarg(3, N, _)
22035            ;   true
22036            )
22037        ;   K=[_, _|M],
22038            setarg(2, K, M),
22039            (   M=[N|_]
22040            ->  setarg(3, N, K)
22041            ;   true
22042            )
22043        ),
22044        detach_atomic_type___1(J, B)
22045    ),
22046    atomic(F),
22047    copy_term_nat(E-F, A-O),
22048    atomic_type(O).
22049atomic_type___1__0(A, B) :-
22050    (   var(B)
22051    ->  B=suspension(C, active, _, A),
22052        term_variables(A, D),
22053        'chr gen_id'(C),
22054        nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
22055                  E),
22056        F=[B|E],
22057        b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
22058                 F),
22059        (   E=[G|_]
22060        ->  setarg(3, G, F)
22061        ;   true
22062        ),
22063        attach_atomic_type___1(D, B)
22064    ;   setarg(2, B, active)
22065    ).
22066enumerated_atomic_type(A, _) :-
22067    atomic_builtin_type(A, _, _),
22068    !,
22069    fail.
22070enumerated_atomic_type(A, B) :-
22071    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
22072              C),
22073    member(D, C),
22074    D=suspension(_, active, _, _, _, E, F),
22075    functor(A, G, H),
22076    functor(E, G, H),
22077    !,
22078    maplist(atomic, F),
22079    B=F.
22080enumerated_atomic_type(A, B) :-
22081    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', C),
22082    member(D, C),
22083    D=suspension(_, active, _, _, _, E, F),
22084    functor(A, G, H),
22085    functor(E, G, H),
22086    !,
22087    atomic(F),
22088    copy_term_nat(E-F, A-I),
22089    enumerated_atomic_type(I, B).
22090enumerated_atomic_type(_, _) :-
22091    fail.
22092stored(A, B, yes) :-
22093    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
22094              C),
22095    lookup_ht(C, k(A, B), D),
22096    member(E, D),
22097    E=suspension(_, active, _, _, _, _, F, G, _),
22098    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', H),
22099    lookup_ht(H, k(F, G), I),
22100    member(J, I),
22101    J=suspension(_, active, _, _, _),
22102    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22103              K),
22104    lookup_ht(K, A, L),
22105    member(M, L),
22106    M=suspension(_, active, _, _, N, O),
22107    B<N,
22108    !,
22109    setarg(2, M, removed),
22110    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22111              P),
22112    delete_ht(P, k(A, O), M),
22113    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22114              Q),
22115    delete_ht(Q, A, M),
22116    R is O-1,
22117    stored(A, B, maybe),
22118    stored_complete(A, N, R).
22119stored(A, B, yes) :-
22120    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22121              C),
22122    lookup_ht(C, A, D),
22123    member(E, D),
22124    E=suspension(_, active, _, _, F, G),
22125    B<F,
22126    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
22127              H),
22128    lookup_ht(H, k(A, B), I),
22129    member(J, I),
22130    J=suspension(_, active, _, _),
22131    !,
22132    setarg(2, E, removed),
22133    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22134              K),
22135    delete_ht(K, k(A, G), E),
22136    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22137              L),
22138    delete_ht(L, A, E),
22139    M is G-1,
22140    stored(A, B, maybe),
22141    stored_complete(A, F, M).
22142stored(A, B, C) :-
22143    D=suspension(E, active, A, B, C),
22144    'chr gen_id'(E),
22145    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', F),
22146    insert_ht(F, k(A, C), D),
22147    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', G),
22148    insert_ht(G, k(A, B, C), D).
22149stored_completing(A, B, C) :-
22150    ground(A),
22151    ground(B),
22152    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', D),
22153    (   (   lookup_ht(D, k(A, B, yes), E),
22154            member(F, E),
22155            F=suspension(_, active, _, _, _),
22156            !,
22157            G is B+1,
22158            H is C+1,
22159            stored_completing(A, G, H)
22160        ;   lookup_ht(D, k(A, B, maybe), I),
22161            member(J, I),
22162            J=suspension(_, active, _, _, _),
22163            !,
22164            K is B+1,
22165            stored_completing(A, K, C)
22166        )
22167    ;   lookup_ht(D, k(A, B, no), L),
22168        member(M, L),
22169        M=suspension(_, active, _, _, _),
22170        !,
22171        stored_complete(A, B, C)
22172    ).
22173stored_completing(A, B, C) :-
22174    stored_complete(A, B, C).
22175stored_complete(A, B, C) :-
22176    stored_complete___3__0(A, B, C, _).
22177stored_complete___3__0(A, B, C, _) :-
22178    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', D),
22179    lookup_ht(D, A, E),
22180    member(F, E),
22181    F=suspension(_, active, _, _, _, G, H, I, _),
22182    G<B,
22183    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', J),
22184    lookup_ht(J, k(H, I), K),
22185    member(L, K),
22186    L=suspension(_, active, _, _, _),
22187    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', M),
22188    lookup_ht(M, k(A, G, yes), N),
22189    member(O, N),
22190    O=suspension(_, active, _, _, _),
22191    !,
22192    setarg(2, O, removed),
22193    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', P),
22194    delete_ht(P, k(A, yes), O),
22195    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', Q),
22196    delete_ht(Q, k(A, G, yes), O),
22197    R is C-1,
22198    stored(A, G, maybe),
22199    stored_complete(A, B, R).
22200stored_complete___3__0(A, B, C, _) :-
22201    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', D),
22202    lookup_ht(D, k(A, yes), E),
22203    member(F, E),
22204    F=suspension(_, active, _, G, _),
22205    G<B,
22206    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
22207              H),
22208    lookup_ht(H, k(A, G), I),
22209    member(J, I),
22210    J=suspension(_, active, _, _),
22211    !,
22212    setarg(2, F, removed),
22213    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', K),
22214    delete_ht(K, k(A, yes), F),
22215    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', L),
22216    delete_ht(L, k(A, G, yes), F),
22217    M is C-1,
22218    stored(A, G, maybe),
22219    stored_complete(A, B, M).
22220stored_complete___3__0(A, B, 0, C) :-
22221    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22222              D),
22223    lookup_ht(D, A, E),
22224    !,
22225    C=suspension(F, not_stored_yet, t, A, B, 0),
22226    'chr gen_id'(F),
22227    stored_complete___3__0__0__3(E, A, B, 0, C).
22228stored_complete___3__0__0__3([], A, B, C, D) :-
22229    stored_complete___3__1(A, B, C, D).
22230stored_complete___3__0__0__3([A|B], C, D, E, F) :-
22231    (   A=suspension(_, active, _, G, H),
22232        G==C,
22233        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
22234                  I),
22235        lookup_ht(I, C, J)
22236    ->  stored_complete___3__0__1__3(J,
22237                                     H,
22238                                     A,
22239                                     B,
22240                                     C,
22241                                     D,
22242                                     E,
22243                                     F)
22244    ;   stored_complete___3__0__0__3(B, C, D, E, F)
22245    ).
22246stored_complete___3__0__1__3([], _, _, A, B, C, D, E) :-
22247    stored_complete___3__0__0__3(A, B, C, D, E).
22248stored_complete___3__0__1__3([A|B], C, D, E, F, G, H, I) :-
22249    (   A=suspension(_, active, _, _, J, _, K, _, _),
22250        J==F,
22251        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
22252                  L),
22253        lookup_ht(L, K, M)
22254    ->  stored_complete___3__0__2__3(M,
22255                                     K,
22256                                     A,
22257                                     B,
22258                                     C,
22259                                     D,
22260                                     E,
22261                                     F,
22262                                     G,
22263                                     H,
22264                                     I)
22265    ;   stored_complete___3__0__1__3(B,
22266                                     C,
22267                                     D,
22268                                     E,
22269                                     F,
22270                                     G,
22271                                     H,
22272                                     I)
22273    ).
22274stored_complete___3__0__2__3([], _, _, A, B, C, D, E, F, G, H) :-
22275    stored_complete___3__0__1__3(A,
22276                                 B,
22277                                 C,
22278                                 D,
22279                                 E,
22280                                 F,
22281                                 G,
22282                                 H).
22283stored_complete___3__0__2__3([A|B], C, D, E, F, G, H, I, J, K, L) :-
22284    (   A=suspension(_, active, _, _, _, _, M, N, _),
22285        A\==D,
22286        M==C,
22287        O=t(250, A, D, L, G),
22288        '$novel_production'(A, O),
22289        '$novel_production'(D, O),
22290        '$novel_production'(L, O),
22291        '$novel_production'(G, O),
22292        J=<F
22293    ->  '$extend_history'(L, O),
22294        arg(2, L, P),
22295        setarg(2, L, active),
22296        (   P==not_stored_yet
22297        ->  nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22298                      Q),
22299            insert_ht(Q, k(I, K), L),
22300            nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22301                      R),
22302            insert_ht(R, I, L)
22303        ;   true
22304        ),
22305        passive(C, N),
22306        (   L=suspension(_, active, _, _, _, _)
22307        ->  setarg(2, L, inactive),
22308            stored_complete___3__0__2__3(B,
22309                                         C,
22310                                         D,
22311                                         E,
22312                                         F,
22313                                         G,
22314                                         H,
22315                                         I,
22316                                         J,
22317                                         K,
22318                                         L)
22319        ;   true
22320        )
22321    ;   stored_complete___3__0__2__3(B,
22322                                     C,
22323                                     D,
22324                                     E,
22325                                     F,
22326                                     G,
22327                                     H,
22328                                     I,
22329                                     J,
22330                                     K,
22331                                     L)
22332    ).
22333stored_complete___3__0(A, B, C, D) :-
22334    D=suspension(E, not_stored_yet, t, A, B, C),
22335    'chr gen_id'(E),
22336    stored_complete___3__1(A, B, C, D).
22337stored_complete___3__1(A, B, C, D) :-
22338    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', E),
22339    lookup_ht(E, A, F),
22340    !,
22341    stored_complete___3__1__0__4(F, A, B, C, D).
22342stored_complete___3__1__0__4([], A, B, C, D) :-
22343    stored_complete___3__2(A, B, C, D).
22344stored_complete___3__1__0__4([A|B], C, D, E, F) :-
22345    (   A=suspension(_, active, _, _, G, H, I, J, _),
22346        G==C,
22347        K=t(259, F, A),
22348        '$novel_production'(F, K),
22349        '$novel_production'(A, K),
22350        H>D
22351    ->  '$extend_history'(F, K),
22352        arg(2, F, L),
22353        setarg(2, F, active),
22354        (   L==not_stored_yet
22355        ->  nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22356                      M),
22357            insert_ht(M, k(C, E), F),
22358            nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22359                      N),
22360            insert_ht(N, C, F)
22361        ;   true
22362        ),
22363        passive(I, J),
22364        (   F=suspension(_, active, _, _, _, _)
22365        ->  setarg(2, F, inactive),
22366            stored_complete___3__1__0__4(B,
22367                                         C,
22368                                         D,
22369                                         E,
22370                                         F)
22371        ;   true
22372        )
22373    ;   stored_complete___3__1__0__4(B, C, D, E, F)
22374    ).
22375stored_complete___3__1(A, B, C, D) :-
22376    stored_complete___3__2(A, B, C, D).
22377stored_complete___3__2(A, _, B, C) :-
22378    arg(2, C, D),
22379    setarg(2, C, active),
22380    (   D==not_stored_yet
22381    ->  nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22382                  E),
22383        insert_ht(E, k(A, B), C),
22384        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22385                  F),
22386        insert_ht(F, A, C)
22387    ;   true
22388    ).
22389is_stored(A) :-
22390    ground(A),
22391    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22392              B),
22393    lookup_ht(B, A, C),
22394    member(D, C),
22395    D=suspension(_, active, _, _, E),
22396    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22397              F),
22398    lookup_ht(F, k(A, 0), G),
22399    member(H, G),
22400    H=suspension(_, active, _, _, I, _),
22401    I=<E,
22402    !,
22403    fail.
22404is_stored(_).
22405is_finally_stored(A) :-
22406    ground(A),
22407    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22408              B),
22409    lookup_ht(B, A, C),
22410    member(D, C),
22411    D=suspension(_, active, _, _, E),
22412    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22413              F),
22414    lookup_ht(F, A, G),
22415    member(H, G),
22416    H=suspension(_, active, _, _, I, _),
22417    I=<E,
22418    !,
22419    fail.
22420is_finally_stored(_).
22421check_all_passive(A, [B|C]) :-
22422    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', D),
22423    lookup_ht(D, k(A, B), E),
22424    member(F, E),
22425    F=suspension(_, active, _, _, _),
22426    !,
22427    check_all_passive(A, C).
22428check_all_passive(A, []) :-
22429    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', B),
22430    lookup_ht(B, A, C),
22431    member(D, C),
22432    D=suspension(_, active, _, _, _, E),
22433    !,
22434    chr_warning(weird_program,
22435                'All heads passive in ~@.\n\tThis rule never fires. Please check your program.\n',
22436                [format_rule(E)]).
22437check_all_passive(A, B) :-
22438    C=suspension(D, active, A, B),
22439    'chr gen_id'(D),
22440    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
22441              E),
22442    insert_ht(E, k(A, B), C),
22443    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
22444              F),
22445    insert_ht(F, A, C).
22446constraints_code1([], A, B) :-
22447    !,
22448    A=B.
22449constraints_code1([A|B], C, D) :-
22450    !,
22451    constraint_code(A, C, E),
22452    constraints_code1(B, E, D).
22453constraints_code1(A, B, C) :-
22454    D=suspension(E, active, _, A, B, C),
22455    'chr gen_id'(E),
22456    nb_getval('$chr_store_global_ground_chr_translate____constraints_code1___3',
22457              F),
22458    G=[D|F],
22459    b_setval('$chr_store_global_ground_chr_translate____constraints_code1___3',
22460             G),
22461    (   F=[H|_]
22462    ->  setarg(3, H, G)
22463    ;   true
22464    ).
22465constraint_code(A, B, C) :-
22466    (   (   chr_pp_flag(debugable, on)
22467        ;   is_stored(A),
22468            (   has_active_occurrence(A)
22469            ;   chr_pp_flag(late_allocation, off)
22470            ),
22471            (   may_trigger(A)
22472            ;   get_allocation_occurrence(A, D),
22473                get_max_occurrence(A, E),
22474                E>=D
22475            )
22476        )
22477    ->  constraint_prelude(A, F),
22478        add_dummy_location(F, G),
22479        B=[G|H]
22480    ;   B=H
22481    ),
22482    I=[0],
22483    occurrences_code(A, 1, I, J, H, K),
22484    gen_cond_attach_clause(A, J, K, C).
22485has_active_occurrence(A) :-
22486    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
22487              B),
22488    lookup_ht(B, A, C),
22489    member(D, C),
22490    D=suspension(_, active, _),
22491    !.
22492has_active_occurrence(A) :-
22493    has_active_occurrence(A, 1),
22494    memo_has_active_occurrence(A).
22495has_active_occurrence(A, B) :-
22496    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22497              C),
22498    lookup_ht(C, A, D),
22499    member(E, D),
22500    E=suspension(_, active, _, _, F),
22501    B>F,
22502    !,
22503    fail.
22504has_active_occurrence(A, B) :-
22505    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
22506              C),
22507    lookup_ht(C, k(A, B), D),
22508    member(E, D),
22509    E=suspension(_, active, _, _, _, _, F, G, _),
22510    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', H),
22511    lookup_ht(H, k(F, G), I),
22512    member(J, I),
22513    J=suspension(_, active, _, _, _),
22514    !,
22515    K is B+1,
22516    has_active_occurrence(A, K).
22517has_active_occurrence(_, _).
22518memo_has_active_occurrence(A) :-
22519    B=suspension(C, active, A),
22520    'chr gen_id'(C),
22521    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
22522              D),
22523    insert_ht(D, A, B).
22524use_auxiliary_predicate(A) :-
22525    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
22526              B),
22527    lookup_ht(B, A, C),
22528    member(D, C),
22529    D=suspension(_, active, _),
22530    !.
22531use_auxiliary_predicate(A) :-
22532    B=suspension(C, active, A),
22533    'chr gen_id'(C),
22534    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
22535              D),
22536    insert_ht(D, A, B).
22537use_auxiliary_predicate(A, B) :-
22538    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
22539              C),
22540    lookup_ht(C, k(A, B), D),
22541    member(E, D),
22542    E=suspension(_, active, _, _),
22543    !.
22544use_auxiliary_predicate(A, B) :-
22545    C=suspension(D, active, A, B),
22546    'chr gen_id'(D),
22547    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
22548              E),
22549    insert_ht(E, A, C),
22550    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
22551              F),
22552    insert_ht(F, k(A, B), C).
22553is_used_auxiliary_predicate(A) :-
22554    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
22555              B),
22556    lookup_ht(B, A, C),
22557    member(D, C),
22558    D=suspension(_, active, _),
22559    !.
22560is_used_auxiliary_predicate(A) :-
22561    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
22562              B),
22563    lookup_ht(B, A, C),
22564    member(D, C),
22565    D=suspension(_, active, _, _),
22566    !.
22567is_used_auxiliary_predicate(_) :-
22568    fail.
22569is_used_auxiliary_predicate(A, _) :-
22570    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
22571              B),
22572    lookup_ht(B, A, C),
22573    member(D, C),
22574    D=suspension(_, active, _),
22575    !.
22576is_used_auxiliary_predicate(A, B) :-
22577    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
22578              C),
22579    lookup_ht(C, k(A, B), D),
22580    member(E, D),
22581    E=suspension(_, active, _, _),
22582    !.
22583is_used_auxiliary_predicate(_, _) :-
22584    fail.
22585use_auxiliary_module(A) :-
22586    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
22587              B),
22588    lookup_ht(B, A, C),
22589    member(D, C),
22590    D=suspension(_, active, _),
22591    !.
22592use_auxiliary_module(A) :-
22593    B=suspension(C, active, A),
22594    'chr gen_id'(C),
22595    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
22596              D),
22597    insert_ht(D, A, B).
22598is_used_auxiliary_module(A) :-
22599    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
22600              B),
22601    lookup_ht(B, A, C),
22602    member(D, C),
22603    D=suspension(_, active, _),
22604    !.
22605is_used_auxiliary_module(_) :-
22606    fail.
22607occurrences_code(A, B, C, D, E, F) :-
22608    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22609              G),
22610    lookup_ht(G, A, H),
22611    member(I, H),
22612    I=suspension(_, active, _, _, J),
22613    B>J,
22614    !,
22615    D=C,
22616    E=F.
22617occurrences_code(A, B, C, D, E, F) :-
22618    occurrence_code(A, B, C, G, E, H),
22619    I is B+1,
22620    occurrences_code(A, I, G, D, H, F).
22621occurrence_code(A, B, C, D, E, F) :-
22622    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
22623              G),
22624    lookup_ht(G, k(A, B), H),
22625    member(I, H),
22626    I=suspension(_, active, _, _, _, _, J, K, _),
22627    (   nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
22628                  L),
22629        lookup_ht(L, k(J, K), M),
22630        member(N, M),
22631        N=suspension(_, active, _, _, _),
22632        !,
22633        (   named_history(J, _, _)
22634        ->  does_use_history(A, B)
22635        ;   true
22636        ),
22637        D=C,
22638        E=F
22639    ;   nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', O),
22640        lookup_ht(O, J, P),
22641        member(Q, P),
22642        Q=suspension(_, active, _, _, _, R),
22643        !,
22644        R=pragma(rule(S, T, _, _), ids(U, V), _, _, _),
22645        (   select2(K, W, U, S, X, Y)
22646        ->  D=C,
22647            head1_code(W,
22648                       K,
22649                       Y,
22650                       X,
22651                       R,
22652                       A,
22653                       B,
22654                       C,
22655                       E,
22656                       F)
22657        ;   select2(K, Z, V, T, A1, B1)
22658        ->  head2_code(Z,
22659                       K,
22660                       B1,
22661                       A1,
22662                       R,
22663                       A,
22664                       B,
22665                       C,
22666                       E,
22667                       C1),
22668            (   should_skip_to_next_id(A, B)
22669            ->  inc_id(C, D),
22670                (   unconditional_occurrence(A, B)
22671                ->  C1=F
22672                ;   gen_alloc_inc_clause(A,
22673                                         B,
22674                                         C,
22675                                         C1,
22676                                         F)
22677                )
22678            ;   D=C,
22679                C1=F
22680            )
22681        )
22682    ).
22683occurrence_code(A, B, _, _, _, _) :-
22684    chr_error(internal,
22685              'occurrence_code/6: missing information to compile ~w:~w\n',
22686              [A, B]).
22687functional_dependency(A, B, C, D) :-
22688    B>1,
22689    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
22690              E),
22691    lookup_ht(E, A, F),
22692    member(G, F),
22693    G=suspension(_, active, _, _, H),
22694    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
22695              I),
22696    lookup_ht(I, k(A, B), J),
22697    member(K, J),
22698    K=suspension(_, active, _, _, _, L, _, _, _),
22699    H>L,
22700    !,
22701    functional_dependency(A, 1, C, D).
22702functional_dependency(A, B, C, D) :-
22703    E=suspension(F, active, A, B, C, D),
22704    'chr gen_id'(F),
22705    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
22706              G),
22707    insert_ht(G, A, E),
22708    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
22709              H),
22710    insert_ht(H, k(A, B), E).
22711get_functional_dependency(A, B, C, D) :-
22712    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
22713              E),
22714    lookup_ht(E, A, F),
22715    member(G, F),
22716    G=suspension(_, active, _, H, I, J),
22717    B>=H,
22718    !,
22719    C=I,
22720    D=J.
22721get_functional_dependency(_, _, _, _) :-
22722    fail.
22723initial_call_pattern(A) :-
22724    initial_call_pattern___1__0(A, _).
22725initial_call_pattern___1__0(A, _) :-
22726    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
22727              B),
22728    lookup_ht(B, A, C),
22729    member(D, C),
22730    D=suspension(_, active, _, _),
22731    !.
22732initial_call_pattern___1__0(A, B) :-
22733    B=suspension(C, active, t, A),
22734    'chr gen_id'(C),
22735    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
22736              D),
22737    insert_ht(D, A, B),
22738    call_pattern(A),
22739    (   B=suspension(_, active, _, _)
22740    ->  setarg(2, B, inactive),
22741        initial_call_pattern___1__1(A, B)
22742    ;   true
22743    ).
22744initial_call_pattern___1__1(A, B) :-
22745    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
22746              C),
22747    lookup_ht(C, A, D),
22748    !,
22749    initial_call_pattern___1__1__0__4(D, A, B).
22750initial_call_pattern___1__1__0__4([], A, B) :-
22751    initial_call_pattern___1__2(A, B).
22752initial_call_pattern___1__1__0__4([A|B], C, D) :-
22753    (   A=suspension(_, active, _, E, F),
22754        E==C,
22755        nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
22756                  G)
22757    ->  initial_call_pattern___1__1__1__4(G,
22758                                          F,
22759                                          A,
22760                                          B,
22761                                          C,
22762                                          D)
22763    ;   initial_call_pattern___1__1__0__4(B, C, D)
22764    ).
22765initial_call_pattern___1__1__1__4([], _, _, A, B, C) :-
22766    initial_call_pattern___1__1__0__4(A, B, C).
22767initial_call_pattern___1__1__1__4([A|B], C, D, E, F, G) :-
22768    (   A=suspension(_, active, _, H),
22769        I=t(303, G, D, A),
22770        '$novel_production'(G, I),
22771        '$novel_production'(D, I)
22772    ->  '$extend_history'(G, I),
22773        setarg(2, G, active),
22774        ai_observation_schedule_new_calls(H, C),
22775        (   G=suspension(_, active, _, _)
22776        ->  setarg(2, G, inactive),
22777            initial_call_pattern___1__1__1__4(B,
22778                                              C,
22779                                              D,
22780                                              E,
22781                                              F,
22782                                              G)
22783        ;   true
22784        )
22785    ;   initial_call_pattern___1__1__1__4(B,
22786                                          C,
22787                                          D,
22788                                          E,
22789                                          F,
22790                                          G)
22791    ).
22792initial_call_pattern___1__1(A, B) :-
22793    initial_call_pattern___1__2(A, B).
22794initial_call_pattern___1__2(_, A) :-
22795    setarg(2, A, active).
22796call_pattern(A) :-
22797    call_pattern___1__0(A, _).
22798call_pattern___1__0(A, _) :-
22799    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
22800              B),
22801    lookup_ht(B, A, C),
22802    member(D, C),
22803    D=suspension(_, active, _),
22804    !.
22805call_pattern___1__0(A, B) :-
22806    B=suspension(C, active, A),
22807    'chr gen_id'(C),
22808    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
22809              D),
22810    insert_ht(D, A, B),
22811    call_pattern_worker(A),
22812    (   B=suspension(_, active, _)
22813    ->  setarg(2, B, inactive),
22814        call_pattern___1__1(A, B)
22815    ;   true
22816    ).
22817call_pattern___1__1(_, A) :-
22818    setarg(2, A, active).
22819call_pattern_worker(odom([], A)) :-
22820    !,
22821    final_answer_pattern(odom([], A), odom([], A)).
22822call_pattern_worker(odom([A|B], C)) :-
22823    !,
22824    D=odom(A, C),
22825    depends_on_goal(odom([A|B], C), D),
22826    call_pattern(D).
22827call_pattern_worker(odom((A;B), C)) :-
22828    !,
22829    D=odom((A;B), C),
22830    E=odom([], C),
22831    final_answer_pattern(D, E),
22832    F=odom(A, C),
22833    G=odom(B, C),
22834    call_pattern(F),
22835    call_pattern(G),
22836    depends_on_as(D, F, G).
22837call_pattern_worker(odom(builtin, A)) :-
22838    !,
22839    ord_empty(B),
22840    final_answer_pattern(odom(builtin, A), odom([], B)).
22841call_pattern_worker(odom(occ(A, B), C)) :-
22842    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22843              D),
22844    lookup_ht(D, A, E),
22845    member(F, E),
22846    F=suspension(_, active, _, _, G),
22847    B>G,
22848    !,
22849    final_answer_pattern(odom(occ(A, B), C), odom([], C)).
22850call_pattern_worker(odom(A, B)) :-
22851    A=_/_,
22852    !,
22853    C=odom(occ(A, 1), B),
22854    call_pattern(C),
22855    depends_on(odom(A, B), C).
22856call_pattern_worker(odom(occ(A, B), C)) :-
22857    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
22858              D),
22859    lookup_ht(D, k(A, B), E),
22860    member(F, E),
22861    F=suspension(_, active, _, _, _, _, G, H, _),
22862    is_passive(G, H),
22863    !,
22864    I is B+1,
22865    J=odom(occ(A, I), C),
22866    call_pattern(J),
22867    final_answer_pattern(odom(occ(A, B), C), odom([], C)),
22868    depends_on(odom(occ(A, B), C), J).
22869call_pattern_worker(odom(occ(A, B), C)) :-
22870    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
22871              D),
22872    (   lookup_ht(D, k(A, B, simplification), E),
22873        member(F, E),
22874        F=suspension(_, active, _, _, _, _, G, H, _),
22875        \+ is_passive(G, H),
22876        !,
22877        ai_observation_memo_simplification_rest_heads(A, B, I),
22878        ai_observation_observe_set(C, I, J),
22879        ai_observation_memo_abstract_goal(G, K),
22880        call_pattern(odom(K, J)),
22881        L is B+1,
22882        M=odom(occ(A, L), C),
22883        call_pattern(M),
22884        depends_on_as(odom(occ(A, B), C),
22885                      odom(K, J),
22886                      M),
22887        final_answer_pattern(odom(occ(A, B), C),
22888                             odom([], C))
22889    ;   lookup_ht(D, k(A, B, propagation), N),
22890        member(O, N),
22891        O=suspension(_, active, _, _, _, _, P, Q, _),
22892        \+ is_passive(P, Q),
22893        !,
22894        ai_observation_memo_propagation_rest_heads(A, B, R),
22895        ai_observation_observe_set(C, R, S),
22896        ord_add_element(S, A, T),
22897        ai_observation_memo_abstract_goal(P, U),
22898        call_pattern(odom(U, T)),
22899        (   ord_memberchk(A, S)
22900        ->  V=no
22901        ;   V=yes
22902        ),
22903        W is B+1,
22904        X=odom(occ(A, W), C),
22905        call_pattern(X),
22906        depends_on_ap(odom(occ(A, B), C),
22907                      odom(U, T),
22908                      X,
22909                      V)
22910    ).
22911call_pattern_worker(A) :-
22912    chr_error(internal,
22913              'AI observation analysis: unexpected abstract state ~w\n',
22914              [A]).
22915final_answer_pattern(A, B) :-
22916    final_answer_pattern___2__0(A, B, _).
22917final_answer_pattern___2__0(A, B, C) :-
22918    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
22919              D),
22920    lookup_ht(D, A, E),
22921    (   member(F, E),
22922        F=suspension(_, active, _, _, G),
22923        ai_observation_leq(B, G),
22924        !
22925    ;   !,
22926        final_answer_pattern___2__0__0__2(E, A, B, C)
22927    ).
22928final_answer_pattern___2__0__0__2([], A, B, C) :-
22929    final_answer_pattern___2__1(A, B, C).
22930final_answer_pattern___2__0__0__2([A|B], C, D, E) :-
22931    (   A=suspension(_, active, _, F, G),
22932        F==C,
22933        ai_observation_leq(G, D)
22934    ->  setarg(2, A, removed),
22935        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
22936                  H),
22937        delete_ht(H, C, A),
22938        final_answer_pattern___2__0__0__2(B, C, D, E)
22939    ;   final_answer_pattern___2__0__0__2(B, C, D, E)
22940    ).
22941final_answer_pattern___2__0(A, B, C) :-
22942    final_answer_pattern___2__1(A, B, C).
22943final_answer_pattern___2__1(A, B, C) :-
22944    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
22945              D),
22946    lookup_ht(D, A, E),
22947    !,
22948    C=suspension(F, not_stored_yet, t, A, B),
22949    'chr gen_id'(F),
22950    final_answer_pattern___2__1__0__3(E, A, B, C).
22951final_answer_pattern___2__1__0__3([], A, B, C) :-
22952    final_answer_pattern___2__2(A, B, C).
22953final_answer_pattern___2__1__0__3([A|B], C, D, E) :-
22954    (   A=suspension(_, active, _, F),
22955        F==C,
22956        nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
22957                  G)
22958    ->  final_answer_pattern___2__1__1__3(G,
22959                                          A,
22960                                          B,
22961                                          C,
22962                                          D,
22963                                          E)
22964    ;   final_answer_pattern___2__1__0__3(B, C, D, E)
22965    ).
22966final_answer_pattern___2__1__1__3([], _, A, B, C, D) :-
22967    final_answer_pattern___2__1__0__3(A, B, C, D).
22968final_answer_pattern___2__1__1__3([A|B], C, D, E, F, G) :-
22969    (   A=suspension(_, active, _, H),
22970        I=t(303, C, G, A),
22971        '$novel_production'(C, I),
22972        '$novel_production'(G, I)
22973    ->  '$extend_history'(G, I),
22974        arg(2, G, J),
22975        setarg(2, G, active),
22976        (   J==not_stored_yet
22977        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
22978                      K),
22979            insert_ht(K, E, G)
22980        ;   true
22981        ),
22982        ai_observation_schedule_new_calls(H, F),
22983        (   G=suspension(_, active, _, _, _)
22984        ->  setarg(2, G, inactive),
22985            final_answer_pattern___2__1__1__3(B,
22986                                              C,
22987                                              D,
22988                                              E,
22989                                              F,
22990                                              G)
22991        ;   true
22992        )
22993    ;   final_answer_pattern___2__1__1__3(B,
22994                                          C,
22995                                          D,
22996                                          E,
22997                                          F,
22998                                          G)
22999    ).
23000final_answer_pattern___2__1(A, B, C) :-
23001    C=suspension(D, not_stored_yet, t, A, B),
23002    'chr gen_id'(D),
23003    final_answer_pattern___2__2(A, B, C).
23004final_answer_pattern___2__2(A, B, C) :-
23005    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2', D),
23006    lookup_ht(D, A, E),
23007    !,
23008    final_answer_pattern___2__2__0__4(E, A, B, C).
23009final_answer_pattern___2__2__0__4([], A, B, C) :-
23010    final_answer_pattern___2__3(A, B, C).
23011final_answer_pattern___2__2__0__4([A|B], C, D, E) :-
23012    (   A=suspension(_, active, _, F, G),
23013        G==C,
23014        H=t(305, A, E),
23015        '$novel_production'(A, H),
23016        '$novel_production'(E, H)
23017    ->  '$extend_history'(E, H),
23018        arg(2, E, I),
23019        setarg(2, E, active),
23020        (   I==not_stored_yet
23021        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23022                      J),
23023            insert_ht(J, C, E)
23024        ;   true
23025        ),
23026        final_answer_pattern(F, D),
23027        (   E=suspension(_, active, _, _, _)
23028        ->  setarg(2, E, inactive),
23029            final_answer_pattern___2__2__0__4(B, C, D, E)
23030        ;   true
23031        )
23032    ;   final_answer_pattern___2__2__0__4(B, C, D, E)
23033    ).
23034final_answer_pattern___2__2(A, B, C) :-
23035    final_answer_pattern___2__3(A, B, C).
23036final_answer_pattern___2__3(A, B, C) :-
23037    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23038              D),
23039    lookup_ht(D, A, E),
23040    !,
23041    final_answer_pattern___2__3__0__5(E, A, B, C).
23042final_answer_pattern___2__3__0__5([], A, B, C) :-
23043    final_answer_pattern___2__4(A, B, C).
23044final_answer_pattern___2__3__0__5([A|B], C, D, E) :-
23045    (   A=suspension(_, active, _, F, G),
23046        G==C,
23047        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23048                  H),
23049        lookup_ht(H, F, I)
23050    ->  final_answer_pattern___2__3__1__5(I,
23051                                          F,
23052                                          A,
23053                                          B,
23054                                          C,
23055                                          D,
23056                                          E)
23057    ;   final_answer_pattern___2__3__0__5(B, C, D, E)
23058    ).
23059final_answer_pattern___2__3__1__5([], _, _, A, B, C, D) :-
23060    final_answer_pattern___2__3__0__5(A, B, C, D).
23061final_answer_pattern___2__3__1__5([A|B], C, D, E, F, G, H) :-
23062    (   A=suspension(_, active, _, I, J),
23063        I==C
23064    ->  setarg(2, A, removed),
23065        ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23066                    K),
23067          delete_ht(K, C, A)
23068        ),
23069        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
23070                  L),
23071        delete_ht(L, J, A),
23072        final_answer_pattern___2__3__1__5(B,
23073                                          C,
23074                                          D,
23075                                          E,
23076                                          F,
23077                                          G,
23078                                          H)
23079    ;   final_answer_pattern___2__3__1__5(B,
23080                                          C,
23081                                          D,
23082                                          E,
23083                                          F,
23084                                          G,
23085                                          H)
23086    ).
23087final_answer_pattern___2__3(A, B, C) :-
23088    final_answer_pattern___2__4(A, B, C).
23089final_answer_pattern___2__4(A, B, C) :-
23090    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23091              D),
23092    lookup_ht(D, A, E),
23093    !,
23094    final_answer_pattern___2__4__0__6(E, A, B, C).
23095final_answer_pattern___2__4__0__6([], A, B, C) :-
23096    final_answer_pattern___2__5(A, B, C).
23097final_answer_pattern___2__4__0__6([A|B], C, D, E) :-
23098    (   A=suspension(_, active, _, F, G),
23099        G==C,
23100        H=t(310, A, E),
23101        '$novel_production'(A, H),
23102        '$novel_production'(E, H)
23103    ->  '$extend_history'(E, H),
23104        arg(2, E, I),
23105        setarg(2, E, active),
23106        (   I==not_stored_yet
23107        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23108                      J),
23109            insert_ht(J, C, E)
23110        ;   true
23111        ),
23112        F=odom([_|K], _),
23113        D=odom([], L),
23114        M=odom(K, L),
23115        call_pattern(M),
23116        depends_on(F, M),
23117        (   E=suspension(_, active, _, _, _)
23118        ->  setarg(2, E, inactive),
23119            final_answer_pattern___2__4__0__6(B, C, D, E)
23120        ;   true
23121        )
23122    ;   final_answer_pattern___2__4__0__6(B, C, D, E)
23123    ).
23124final_answer_pattern___2__4(A, B, C) :-
23125    final_answer_pattern___2__5(A, B, C).
23126final_answer_pattern___2__5(A, B, C) :-
23127    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
23128              D),
23129    lookup_ht(D, A, E),
23130    !,
23131    final_answer_pattern___2__5__0__7(E, A, B, C).
23132final_answer_pattern___2__5__0__7([], A, B, C) :-
23133    final_answer_pattern___2__6(A, B, C).
23134final_answer_pattern___2__5__0__7([A|B], C, D, E) :-
23135    (   A=suspension(_, active, _, F, G, H),
23136        G==C,
23137        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23138                  I),
23139        lookup_ht(I, H, J)
23140    ->  final_answer_pattern___2__5__1__7(J,
23141                                          F,
23142                                          H,
23143                                          A,
23144                                          B,
23145                                          C,
23146                                          D,
23147                                          E)
23148    ;   final_answer_pattern___2__5__0__7(B, C, D, E)
23149    ).
23150final_answer_pattern___2__5__1__7([], _, _, _, A, B, C, D) :-
23151    final_answer_pattern___2__5__0__7(A, B, C, D).
23152final_answer_pattern___2__5__1__7([A|B], C, D, E, F, G, H, I) :-
23153    (   A=suspension(_, active, _, J, K),
23154        J==D,
23155        L=t(317, E, I, A),
23156        '$novel_production'(E, L),
23157        '$novel_production'(I, L),
23158        '$novel_production'(A, L)
23159    ->  '$extend_history'(I, L),
23160        arg(2, I, M),
23161        setarg(2, I, active),
23162        (   M==not_stored_yet
23163        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23164                      N),
23165            insert_ht(N, G, I)
23166        ;   true
23167        ),
23168        ai_observation_lub(H, K, O),
23169        final_answer_pattern(C, O),
23170        (   I=suspension(_, active, _, _, _)
23171        ->  setarg(2, I, inactive),
23172            final_answer_pattern___2__5__1__7(B,
23173                                              C,
23174                                              D,
23175                                              E,
23176                                              F,
23177                                              G,
23178                                              H,
23179                                              I)
23180        ;   true
23181        )
23182    ;   final_answer_pattern___2__5__1__7(B,
23183                                          C,
23184                                          D,
23185                                          E,
23186                                          F,
23187                                          G,
23188                                          H,
23189                                          I)
23190    ).
23191final_answer_pattern___2__5(A, B, C) :-
23192    final_answer_pattern___2__6(A, B, C).
23193final_answer_pattern___2__6(A, B, C) :-
23194    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
23195              D),
23196    lookup_ht(D, A, E),
23197    !,
23198    final_answer_pattern___2__6__0__8(E, A, B, C).
23199final_answer_pattern___2__6__0__8([], A, B, C) :-
23200    final_answer_pattern___2__7(A, B, C).
23201final_answer_pattern___2__6__0__8([A|B], C, D, E) :-
23202    (   A=suspension(_, active, _, F, G, H),
23203        H==C,
23204        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23205                  I),
23206        lookup_ht(I, G, J)
23207    ->  final_answer_pattern___2__6__1__8(J,
23208                                          F,
23209                                          G,
23210                                          A,
23211                                          B,
23212                                          C,
23213                                          D,
23214                                          E)
23215    ;   final_answer_pattern___2__6__0__8(B, C, D, E)
23216    ).
23217final_answer_pattern___2__6__1__8([], _, _, _, A, B, C, D) :-
23218    final_answer_pattern___2__6__0__8(A, B, C, D).
23219final_answer_pattern___2__6__1__8([A|B], C, D, E, F, G, H, I) :-
23220    (   A=suspension(_, active, _, J, K),
23221        J==D,
23222        L=t(317, E, A, I),
23223        '$novel_production'(E, L),
23224        '$novel_production'(A, L),
23225        '$novel_production'(I, L)
23226    ->  '$extend_history'(I, L),
23227        arg(2, I, M),
23228        setarg(2, I, active),
23229        (   M==not_stored_yet
23230        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23231                      N),
23232            insert_ht(N, G, I)
23233        ;   true
23234        ),
23235        ai_observation_lub(K, H, O),
23236        final_answer_pattern(C, O),
23237        (   I=suspension(_, active, _, _, _)
23238        ->  setarg(2, I, inactive),
23239            final_answer_pattern___2__6__1__8(B,
23240                                              C,
23241                                              D,
23242                                              E,
23243                                              F,
23244                                              G,
23245                                              H,
23246                                              I)
23247        ;   true
23248        )
23249    ;   final_answer_pattern___2__6__1__8(B,
23250                                          C,
23251                                          D,
23252                                          E,
23253                                          F,
23254                                          G,
23255                                          H,
23256                                          I)
23257    ).
23258final_answer_pattern___2__6(A, B, C) :-
23259    final_answer_pattern___2__7(A, B, C).
23260final_answer_pattern___2__7(A, B, C) :-
23261    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23262              D),
23263    lookup_ht(D, A, E),
23264    !,
23265    final_answer_pattern___2__7__0__9(E, A, B, C).
23266final_answer_pattern___2__7__0__9([], A, B, C) :-
23267    final_answer_pattern___2__8(A, B, C).
23268final_answer_pattern___2__7__0__9([A|B], C, D, E) :-
23269    (   A=suspension(_, active, _, F, _, G, _),
23270        G==C,
23271        H=t(325, A, E),
23272        '$novel_production'(A, H),
23273        '$novel_production'(E, H)
23274    ->  '$extend_history'(E, H),
23275        arg(2, E, I),
23276        setarg(2, E, active),
23277        (   I==not_stored_yet
23278        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23279                      J),
23280            insert_ht(J, C, E)
23281        ;   true
23282        ),
23283        final_answer_pattern(F, D),
23284        (   E=suspension(_, active, _, _, _)
23285        ->  setarg(2, E, inactive),
23286            final_answer_pattern___2__7__0__9(B, C, D, E)
23287        ;   true
23288        )
23289    ;   final_answer_pattern___2__7__0__9(B, C, D, E)
23290    ).
23291final_answer_pattern___2__7(A, B, C) :-
23292    final_answer_pattern___2__8(A, B, C).
23293final_answer_pattern___2__8(A, B, C) :-
23294    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
23295              D),
23296    lookup_ht(D, A, E),
23297    !,
23298    final_answer_pattern___2__8__0__10(E, A, B, C).
23299final_answer_pattern___2__8__0__10([], A, B, C) :-
23300    final_answer_pattern___2__9(A, B, C).
23301final_answer_pattern___2__8__0__10([A|B], C, D, E) :-
23302    (   A=suspension(_, active, _, F, G, H, I),
23303        G==C,
23304        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23305                  J),
23306        lookup_ht(J, H, K)
23307    ->  final_answer_pattern___2__8__1__10(K,
23308                                           F,
23309                                           H,
23310                                           I,
23311                                           A,
23312                                           B,
23313                                           C,
23314                                           D,
23315                                           E)
23316    ;   final_answer_pattern___2__8__0__10(B, C, D, E)
23317    ).
23318final_answer_pattern___2__8__1__10([], _, _, _, _, A, B, C, D) :-
23319    final_answer_pattern___2__8__0__10(A, B, C, D).
23320final_answer_pattern___2__8__1__10([A|B], C, D, E, F, G, H, I, J) :-
23321    (   A=suspension(_, active, _, K, L),
23322        K==D,
23323        M=t(326, F, J, A),
23324        '$novel_production'(F, M),
23325        '$novel_production'(J, M),
23326        '$novel_production'(A, M)
23327    ->  '$extend_history'(J, M),
23328        arg(2, J, N),
23329        setarg(2, J, active),
23330        (   N==not_stored_yet
23331        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23332                      O),
23333            insert_ht(O, H, J)
23334        ;   true
23335        ),
23336        C=odom(occ(P, Q), _),
23337        (   ai_observation_is_observed(I, P)
23338        ->  ai_observed_internal(P, Q)
23339        ;   ai_not_observed_internal(P, Q)
23340        ),
23341        (   E==yes
23342        ->  I=odom([], R),
23343            ord_del_element(R, P, S),
23344            T=odom([], S)
23345        ;   T=I
23346        ),
23347        ai_observation_lub(T, L, U),
23348        final_answer_pattern(C, U),
23349        (   J=suspension(_, active, _, _, _)
23350        ->  setarg(2, J, inactive),
23351            final_answer_pattern___2__8__1__10(B,
23352                                               C,
23353                                               D,
23354                                               E,
23355                                               F,
23356                                               G,
23357                                               H,
23358                                               I,
23359                                               J)
23360        ;   true
23361        )
23362    ;   final_answer_pattern___2__8__1__10(B,
23363                                           C,
23364                                           D,
23365                                           E,
23366                                           F,
23367                                           G,
23368                                           H,
23369                                           I,
23370                                           J)
23371    ).
23372final_answer_pattern___2__8(A, B, C) :-
23373    final_answer_pattern___2__9(A, B, C).
23374final_answer_pattern___2__9(A, B, C) :-
23375    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23376              D),
23377    lookup_ht(D, A, E),
23378    !,
23379    final_answer_pattern___2__9__0__11(E, A, B, C).
23380final_answer_pattern___2__9__0__11([], A, B, C) :-
23381    final_answer_pattern___2__10(A, B, C).
23382final_answer_pattern___2__9__0__11([A|B], C, D, E) :-
23383    (   A=suspension(_, active, _, F, G, H, I),
23384        H==C,
23385        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23386                  J),
23387        lookup_ht(J, G, K)
23388    ->  final_answer_pattern___2__9__1__11(K,
23389                                           F,
23390                                           G,
23391                                           I,
23392                                           A,
23393                                           B,
23394                                           C,
23395                                           D,
23396                                           E)
23397    ;   final_answer_pattern___2__9__0__11(B, C, D, E)
23398    ).
23399final_answer_pattern___2__9__1__11([], _, _, _, _, A, B, C, D) :-
23400    final_answer_pattern___2__9__0__11(A, B, C, D).
23401final_answer_pattern___2__9__1__11([A|B], C, D, E, F, G, H, I, J) :-
23402    (   A=suspension(_, active, _, K, L),
23403        K==D,
23404        M=t(326, F, A, J),
23405        '$novel_production'(F, M),
23406        '$novel_production'(A, M),
23407        '$novel_production'(J, M)
23408    ->  '$extend_history'(J, M),
23409        arg(2, J, N),
23410        setarg(2, J, active),
23411        (   N==not_stored_yet
23412        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23413                      O),
23414            insert_ht(O, H, J)
23415        ;   true
23416        ),
23417        C=odom(occ(P, Q), _),
23418        (   ai_observation_is_observed(L, P)
23419        ->  ai_observed_internal(P, Q)
23420        ;   ai_not_observed_internal(P, Q)
23421        ),
23422        (   E==yes
23423        ->  L=odom([], R),
23424            ord_del_element(R, P, S),
23425            T=odom([], S)
23426        ;   T=L
23427        ),
23428        ai_observation_lub(T, I, U),
23429        final_answer_pattern(C, U),
23430        (   J=suspension(_, active, _, _, _)
23431        ->  setarg(2, J, inactive),
23432            final_answer_pattern___2__9__1__11(B,
23433                                               C,
23434                                               D,
23435                                               E,
23436                                               F,
23437                                               G,
23438                                               H,
23439                                               I,
23440                                               J)
23441        ;   true
23442        )
23443    ;   final_answer_pattern___2__9__1__11(B,
23444                                           C,
23445                                           D,
23446                                           E,
23447                                           F,
23448                                           G,
23449                                           H,
23450                                           I,
23451                                           J)
23452    ).
23453final_answer_pattern___2__9(A, B, C) :-
23454    final_answer_pattern___2__10(A, B, C).
23455final_answer_pattern___2__10(A, _, B) :-
23456    arg(2, B, C),
23457    setarg(2, B, active),
23458    (   C==not_stored_yet
23459    ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23460                  D),
23461        insert_ht(D, A, B)
23462    ;   true
23463    ).
23464abstract_constraints(A) :-
23465    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23466              B),
23467    (   member(C, B),
23468        C=suspension(_, active, _, _),
23469        !
23470    ;   !,
23471        abstract_constraints___1__0__0__2(B, A)
23472    ).
23473abstract_constraints___1__0__0__2([], A) :-
23474    abstract_constraints___1__1(A).
23475abstract_constraints___1__0__0__2([A|B], C) :-
23476    (   A=suspension(_, active, _, _)
23477    ->  setarg(2, A, removed),
23478        arg(3, A, D),
23479        (   var(D)
23480        ->  nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23481                      E),
23482            E=[_|F],
23483            b_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23484                     F),
23485            (   F=[G|_]
23486            ->  setarg(3, G, _)
23487            ;   true
23488            )
23489        ;   D=[_, _|F],
23490            setarg(2, D, F),
23491            (   F=[G|_]
23492            ->  setarg(3, G, D)
23493            ;   true
23494            )
23495        ),
23496        abstract_constraints___1__0__0__2(B, C)
23497    ;   abstract_constraints___1__0__0__2(B, C)
23498    ).
23499abstract_constraints(A) :-
23500    abstract_constraints___1__1(A).
23501abstract_constraints___1__1(A) :-
23502    B=suspension(C, active, _, A),
23503    'chr gen_id'(C),
23504    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23505              D),
23506    E=[B|D],
23507    b_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23508             E),
23509    (   D=[F|_]
23510    ->  setarg(3, F, E)
23511    ;   true
23512    ).
23513depends_on(A, B) :-
23514    depends_on___2__0(A, B, _).
23515depends_on___2__0(A, B, C) :-
23516    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23517              D),
23518    lookup_ht(D, B, E),
23519    !,
23520    C=suspension(F, not_stored_yet, t, A, B),
23521    'chr gen_id'(F),
23522    depends_on___2__0__0__1(E, A, B, C).
23523depends_on___2__0__0__1([], A, B, C) :-
23524    depends_on___2__1(A, B, C).
23525depends_on___2__0__0__1([A|B], C, D, E) :-
23526    (   A=suspension(_, active, _, F, G),
23527        F==D,
23528        H=t(305, E, A),
23529        '$novel_production'(E, H),
23530        '$novel_production'(A, H)
23531    ->  '$extend_history'(E, H),
23532        arg(2, E, I),
23533        setarg(2, E, active),
23534        (   I==not_stored_yet
23535        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23536                      J),
23537            insert_ht(J, C, E),
23538            nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
23539                      K),
23540            insert_ht(K, D, E)
23541        ;   true
23542        ),
23543        final_answer_pattern(C, G),
23544        (   E=suspension(_, active, _, _, _)
23545        ->  setarg(2, E, inactive),
23546            depends_on___2__0__0__1(B, C, D, E)
23547        ;   true
23548        )
23549    ;   depends_on___2__0__0__1(B, C, D, E)
23550    ).
23551depends_on___2__0(A, B, C) :-
23552    C=suspension(D, not_stored_yet, t, A, B),
23553    'chr gen_id'(D),
23554    depends_on___2__1(A, B, C).
23555depends_on___2__1(A, B, C) :-
23556    arg(2, C, D),
23557    setarg(2, C, active),
23558    (   D==not_stored_yet
23559    ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23560                  E),
23561        insert_ht(E, A, C),
23562        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
23563                  F),
23564        insert_ht(F, B, C)
23565    ;   true
23566    ).
23567depends_on_ap(A, B, C, D) :-
23568    depends_on_ap___4__0(A, B, C, D, _).
23569depends_on_ap___4__0(A, B, C, D, E) :-
23570    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23571              F),
23572    lookup_ht(F, C, G),
23573    !,
23574    E=suspension(H, not_stored_yet, t, A, B, C, D),
23575    'chr gen_id'(H),
23576    depends_on_ap___4__0__0__1(G,
23577                               A,
23578                               B,
23579                               C,
23580                               D,
23581                               E).
23582depends_on_ap___4__0__0__1([], A, B, C, D, E) :-
23583    depends_on_ap___4__1(A, B, C, D, E).
23584depends_on_ap___4__0__0__1([A|B], C, D, E, F, G) :-
23585    (   A=suspension(_, active, _, H, I),
23586        H==E,
23587        J=t(325, G, A),
23588        '$novel_production'(G, J),
23589        '$novel_production'(A, J)
23590    ->  '$extend_history'(G, J),
23591        arg(2, G, K),
23592        setarg(2, G, active),
23593        (   K==not_stored_yet
23594        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
23595                      L),
23596            insert_ht(L, D, G),
23597            nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23598                      M),
23599            insert_ht(M, E, G)
23600        ;   true
23601        ),
23602        final_answer_pattern(C, I),
23603        (   G=suspension(_, active, _, _, _, _, _)
23604        ->  setarg(2, G, inactive),
23605            depends_on_ap___4__0__0__1(B,
23606                                       C,
23607                                       D,
23608                                       E,
23609                                       F,
23610                                       G)
23611        ;   true
23612        )
23613    ;   depends_on_ap___4__0__0__1(B,
23614                                   C,
23615                                   D,
23616                                   E,
23617                                   F,
23618                                   G)
23619    ).
23620depends_on_ap___4__0(A, B, C, D, E) :-
23621    E=suspension(F, not_stored_yet, t, A, B, C, D),
23622    'chr gen_id'(F),
23623    depends_on_ap___4__1(A, B, C, D, E).
23624depends_on_ap___4__1(A, B, C, D, E) :-
23625    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23626              F),
23627    lookup_ht(F, B, G),
23628    !,
23629    depends_on_ap___4__1__0__2(G,
23630                               A,
23631                               B,
23632                               C,
23633                               D,
23634                               E).
23635depends_on_ap___4__1__0__2([], A, B, C, D, E) :-
23636    depends_on_ap___4__2(A, B, C, D, E).
23637depends_on_ap___4__1__0__2([A|B], C, D, E, F, G) :-
23638    (   A=suspension(_, active, _, H, I),
23639        H==D,
23640        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23641                  J),
23642        lookup_ht(J, E, K)
23643    ->  depends_on_ap___4__1__1__2(K,
23644                                   I,
23645                                   A,
23646                                   B,
23647                                   C,
23648                                   D,
23649                                   E,
23650                                   F,
23651                                   G)
23652    ;   depends_on_ap___4__1__0__2(B,
23653                                   C,
23654                                   D,
23655                                   E,
23656                                   F,
23657                                   G)
23658    ).
23659depends_on_ap___4__1__1__2([], _, _, A, B, C, D, E, F) :-
23660    depends_on_ap___4__1__0__2(A,
23661                               B,
23662                               C,
23663                               D,
23664                               E,
23665                               F).
23666depends_on_ap___4__1__1__2([A|B], C, D, E, F, G, H, I, J) :-
23667    (   A=suspension(_, active, _, K, L),
23668        A\==D,
23669        K==H,
23670        M=t(326, J, D, A),
23671        '$novel_production'(J, M),
23672        '$novel_production'(D, M),
23673        '$novel_production'(A, M)
23674    ->  '$extend_history'(J, M),
23675        arg(2, J, N),
23676        setarg(2, J, active),
23677        (   N==not_stored_yet
23678        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
23679                      O),
23680            insert_ht(O, G, J),
23681            nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23682                      P),
23683            insert_ht(P, H, J)
23684        ;   true
23685        ),
23686        F=odom(occ(Q, R), _),
23687        (   ai_observation_is_observed(C, Q)
23688        ->  ai_observed_internal(Q, R)
23689        ;   ai_not_observed_internal(Q, R)
23690        ),
23691        (   I==yes
23692        ->  C=odom([], S),
23693            ord_del_element(S, Q, T),
23694            U=odom([], T)
23695        ;   U=C
23696        ),
23697        ai_observation_lub(U, L, V),
23698        final_answer_pattern(F, V),
23699        (   J=suspension(_, active, _, _, _, _, _)
23700        ->  setarg(2, J, inactive),
23701            depends_on_ap___4__1__1__2(B,
23702                                       C,
23703                                       D,
23704                                       E,
23705                                       F,
23706                                       G,
23707                                       H,
23708                                       I,
23709                                       J)
23710        ;   true
23711        )
23712    ;   depends_on_ap___4__1__1__2(B,
23713                                   C,
23714                                   D,
23715                                   E,
23716                                   F,
23717                                   G,
23718                                   H,
23719                                   I,
23720                                   J)
23721    ).
23722depends_on_ap___4__1(A, B, C, D, E) :-
23723    depends_on_ap___4__2(A, B, C, D, E).
23724depends_on_ap___4__2(_, A, B, _, C) :-
23725    arg(2, C, D),
23726    setarg(2, C, active),
23727    (   D==not_stored_yet
23728    ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
23729                  E),
23730        insert_ht(E, A, C),
23731        nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23732                  F),
23733        insert_ht(F, B, C)
23734    ;   true
23735    ).
23736depends_on_goal(A, B) :-
23737    depends_on_goal___2__0(A, B, _).
23738depends_on_goal___2__0(A, B, C) :-
23739    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1', D),
23740    lookup_ht(D, A, E),
23741    !,
23742    depends_on_goal___2__0__0__1(E, A, B, C).
23743depends_on_goal___2__0__0__1([], A, B, C) :-
23744    depends_on_goal___2__1(A, B, C).
23745depends_on_goal___2__0__0__1([A|B], C, D, E) :-
23746    (   A=suspension(_, active, _, F, G),
23747        F==C,
23748        ground(D),
23749        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23750                  H),
23751        lookup_ht(H, D, I),
23752        member(J, I),
23753        J=suspension(_, active, _, _, _)
23754    ->  setarg(2, A, removed),
23755        ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23756                    K),
23757          delete_ht(K, C, A)
23758        ),
23759        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
23760                  L),
23761        delete_ht(L, G, A),
23762        depends_on_goal___2__0__0__1(B, C, D, E)
23763    ;   depends_on_goal___2__0__0__1(B, C, D, E)
23764    ).
23765depends_on_goal___2__0(A, B, C) :-
23766    depends_on_goal___2__1(A, B, C).
23767depends_on_goal___2__1(A, B, C) :-
23768    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23769              D),
23770    lookup_ht(D, B, E),
23771    !,
23772    C=suspension(F, not_stored_yet, t, A, B),
23773    'chr gen_id'(F),
23774    depends_on_goal___2__1__0__2(E, A, B, C).
23775depends_on_goal___2__1__0__2([], A, B, C) :-
23776    depends_on_goal___2__2(A, B, C).
23777depends_on_goal___2__1__0__2([A|B], C, D, E) :-
23778    (   A=suspension(_, active, _, F, G),
23779        F==D,
23780        H=t(310, E, A),
23781        '$novel_production'(E, H),
23782        '$novel_production'(A, H)
23783    ->  '$extend_history'(E, H),
23784        arg(2, E, I),
23785        setarg(2, E, active),
23786        (   I==not_stored_yet
23787        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23788                      J),
23789            insert_ht(J, D, E)
23790        ;   true
23791        ),
23792        C=odom([_|K], _),
23793        G=odom([], L),
23794        M=odom(K, L),
23795        call_pattern(M),
23796        depends_on(C, M),
23797        (   E=suspension(_, active, _, _, _)
23798        ->  setarg(2, E, inactive),
23799            depends_on_goal___2__1__0__2(B, C, D, E)
23800        ;   true
23801        )
23802    ;   depends_on_goal___2__1__0__2(B, C, D, E)
23803    ).
23804depends_on_goal___2__1(A, B, C) :-
23805    C=suspension(D, not_stored_yet, t, A, B),
23806    'chr gen_id'(D),
23807    depends_on_goal___2__2(A, B, C).
23808depends_on_goal___2__2(_, A, B) :-
23809    arg(2, B, C),
23810    setarg(2, B, active),
23811    (   C==not_stored_yet
23812    ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23813                  D),
23814        insert_ht(D, A, B)
23815    ;   true
23816    ).
23817ai_observed_internal(A, B) :-
23818    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
23819              C),
23820    lookup_ht(C, k(A, B), D),
23821    !,
23822    ai_observed_internal___2__0__0__1(D, A, B).
23823ai_observed_internal___2__0__0__1([], A, B) :-
23824    ai_observed_internal___2__1(A, B).
23825ai_observed_internal___2__0__0__1([A|B], C, D) :-
23826    (   A=suspension(_, active, _, E, F),
23827        E==C,
23828        F==D
23829    ->  setarg(2, A, removed),
23830        ( arg(3, A, G),
23831          (   var(G)
23832          ->  nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
23833                        H),
23834              H=[_|I],
23835              b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
23836                       I),
23837              (   I=[J|_]
23838              ->  setarg(3, J, _)
23839              ;   true
23840              )
23841          ;   G=[_, _|I],
23842              setarg(2, G, I),
23843              (   I=[J|_]
23844              ->  setarg(3, J, G)
23845              ;   true
23846              )
23847          )
23848        ),
23849        nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
23850                  K),
23851        delete_ht(K, k(C, D), A),
23852        ai_observed_internal___2__0__0__1(B, C, D)
23853    ;   ai_observed_internal___2__0__0__1(B, C, D)
23854    ).
23855ai_observed_internal(A, B) :-
23856    ai_observed_internal___2__1(A, B).
23857ai_observed_internal___2__1(A, B) :-
23858    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
23859              C),
23860    lookup_ht(C, k(A, B), D),
23861    member(E, D),
23862    E=suspension(_, active, _, _, _),
23863    !.
23864ai_observed_internal___2__1(_, _) :-
23865    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
23866              A),
23867    member(B, A),
23868    B=suspension(_, active, _),
23869    !.
23870ai_observed_internal___2__1(A, B) :-
23871    C=suspension(D, active, _, A, B),
23872    'chr gen_id'(D),
23873    nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
23874              E),
23875    F=[C|E],
23876    b_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
23877             F),
23878    (   E=[G|_]
23879    ->  setarg(3, G, F)
23880    ;   true
23881    ),
23882    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
23883              H),
23884    insert_ht(H, k(A, B), C).
23885ai_not_observed_internal(A, B) :-
23886    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
23887              C),
23888    lookup_ht(C, k(A, B), D),
23889    member(E, D),
23890    E=suspension(_, active, _, _, _),
23891    !.
23892ai_not_observed_internal(A, B) :-
23893    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
23894              C),
23895    lookup_ht(C, k(A, B), D),
23896    member(E, D),
23897    E=suspension(_, active, _, _, _),
23898    !.
23899ai_not_observed_internal(A, B) :-
23900    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
23901              C),
23902    member(D, C),
23903    D=suspension(_, active, _),
23904    !,
23905    ai_not_observed(A, B).
23906ai_not_observed_internal(A, B) :-
23907    C=suspension(D, active, _, A, B),
23908    'chr gen_id'(D),
23909    nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
23910              E),
23911    F=[C|E],
23912    b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
23913             F),
23914    (   E=[G|_]
23915    ->  setarg(3, G, F)
23916    ;   true
23917    ),
23918    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
23919              H),
23920    insert_ht(H, k(A, B), C).
23921ai_not_observed(A, B) :-
23922    ai_not_observed___2__0(A, B, _).
23923ai_not_observed___2__0(A, B, C) :-
23924    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', D),
23925    lookup_ht(D, k(A, B, yes), E),
23926    !,
23927    C=suspension(F, not_stored_yet, A, B),
23928    'chr gen_id'(F),
23929    ai_not_observed___2__0__0__1(E, A, B, C).
23930ai_not_observed___2__0__0__1([], A, B, C) :-
23931    ai_not_observed___2__1(A, B, C).
23932ai_not_observed___2__0__0__1([A|B], C, D, E) :-
23933    (   A=suspension(_, active, F, G, H),
23934        F==C,
23935        G==D,
23936        H=yes,
23937        ( ground(C),
23938          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
23939                    I),
23940          lookup_ht(I, C, J)
23941        ),
23942        member(K, J),
23943        K=suspension(_, active, _, _, L, M),
23944        D<L
23945    ->  ( setarg(2, A, removed),
23946          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13',
23947                    N),
23948          delete_ht(N, k(C, yes), A),
23949          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
23950                    O),
23951          delete_ht(O, k(C, D, yes), A)
23952        ),
23953        setarg(2, K, removed),
23954        ( nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
23955                    P),
23956          delete_ht(P, k(C, M), K)
23957        ),
23958        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
23959                  Q),
23960        delete_ht(Q, C, K),
23961        arg(2, E, R),
23962        setarg(2, E, active),
23963        (   R==not_stored_yet
23964        ->  nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
23965                      S),
23966            insert_ht(S, k(C, D), E)
23967        ;   true
23968        ),
23969        T is M-1,
23970        stored(C, D, maybe),
23971        stored_complete(C, L, T),
23972        (   E=suspension(_, active, _, _)
23973        ->  setarg(2, E, inactive),
23974            ai_not_observed___2__0__0__1(B, C, D, E)
23975        ;   true
23976        )
23977    ;   ai_not_observed___2__0__0__1(B, C, D, E)
23978    ).
23979ai_not_observed___2__0(A, B, C) :-
23980    C=suspension(D, not_stored_yet, A, B),
23981    'chr gen_id'(D),
23982    ai_not_observed___2__1(A, B, C).
23983ai_not_observed___2__1(A, B, C) :-
23984    arg(2, C, D),
23985    setarg(2, C, active),
23986    (   D==not_stored_yet
23987    ->  nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
23988                  E),
23989        insert_ht(E, k(A, B), C)
23990    ;   true
23991    ).
23992ai_is_observed(A, B) :-
23993    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
23994              C),
23995    lookup_ht(C, k(A, B), D),
23996    member(E, D),
23997    E=suspension(_, active, _, _),
23998    !,
23999    fail.
24000ai_is_observed(_, _).
24001depends_on_as(A, B, C) :-
24002    depends_on_as___3__0(A, B, C, _).
24003depends_on_as___3__0(A, B, C, D) :-
24004    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24005              E),
24006    lookup_ht(E, B, F),
24007    !,
24008    D=suspension(G, not_stored_yet, t, A, B, C),
24009    'chr gen_id'(G),
24010    depends_on_as___3__0__0__1(F, A, B, C, D).
24011depends_on_as___3__0__0__1([], A, B, C, D) :-
24012    depends_on_as___3__1(A, B, C, D).
24013depends_on_as___3__0__0__1([A|B], C, D, E, F) :-
24014    (   A=suspension(_, active, _, G, H),
24015        G==D,
24016        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24017                  I),
24018        lookup_ht(I, E, J)
24019    ->  depends_on_as___3__0__1__1(J,
24020                                   H,
24021                                   A,
24022                                   B,
24023                                   C,
24024                                   D,
24025                                   E,
24026                                   F)
24027    ;   depends_on_as___3__0__0__1(B, C, D, E, F)
24028    ).
24029depends_on_as___3__0__1__1([], _, _, A, B, C, D, E) :-
24030    depends_on_as___3__0__0__1(A, B, C, D, E).
24031depends_on_as___3__0__1__1([A|B], C, D, E, F, G, H, I) :-
24032    (   A=suspension(_, active, _, J, K),
24033        A\==D,
24034        J==H,
24035        L=t(317, I, D, A),
24036        '$novel_production'(I, L),
24037        '$novel_production'(D, L),
24038        '$novel_production'(A, L)
24039    ->  '$extend_history'(I, L),
24040        arg(2, I, M),
24041        setarg(2, I, active),
24042        (   M==not_stored_yet
24043        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
24044                      N),
24045            insert_ht(N, H, I),
24046            nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
24047                      O),
24048            insert_ht(O, G, I)
24049        ;   true
24050        ),
24051        ai_observation_lub(C, K, P),
24052        final_answer_pattern(F, P),
24053        (   I=suspension(_, active, _, _, _, _)
24054        ->  setarg(2, I, inactive),
24055            depends_on_as___3__0__1__1(B,
24056                                       C,
24057                                       D,
24058                                       E,
24059                                       F,
24060                                       G,
24061                                       H,
24062                                       I)
24063        ;   true
24064        )
24065    ;   depends_on_as___3__0__1__1(B,
24066                                   C,
24067                                   D,
24068                                   E,
24069                                   F,
24070                                   G,
24071                                   H,
24072                                   I)
24073    ).
24074depends_on_as___3__0(A, B, C, D) :-
24075    D=suspension(E, not_stored_yet, t, A, B, C),
24076    'chr gen_id'(E),
24077    depends_on_as___3__1(A, B, C, D).
24078depends_on_as___3__1(_, A, B, C) :-
24079    arg(2, C, D),
24080    setarg(2, C, active),
24081    (   D==not_stored_yet
24082    ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
24083                  E),
24084        insert_ht(E, B, C),
24085        nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
24086                  F),
24087        insert_ht(F, A, C)
24088    ;   true
24089    ).
24090ai_observation_gather_results :-
24091    ai_observation_gather_results___0__0(_).
24092ai_observation_gather_results___0__0(A) :-
24093    nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24094              B),
24095    !,
24096    ai_observation_gather_results___0__0__0__1(B, A).
24097ai_observation_gather_results___0__0__0__1([], A) :-
24098    ai_observation_gather_results___0__1(A).
24099ai_observation_gather_results___0__0__0__1([A|B], C) :-
24100    (   A=suspension(_, active, _, D, E)
24101    ->  setarg(2, A, removed),
24102        ( arg(3, A, F),
24103          (   var(F)
24104          ->  nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24105                        G),
24106              G=[_|H],
24107              b_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24108                       H),
24109              (   H=[I|_]
24110              ->  setarg(3, I, _)
24111              ;   true
24112              )
24113          ;   F=[_, _|H],
24114              setarg(2, F, H),
24115              (   H=[I|_]
24116              ->  setarg(3, I, F)
24117              ;   true
24118              )
24119          )
24120        ),
24121        nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
24122                  J),
24123        delete_ht(J, k(D, E), A),
24124        ai_observation_gather_results___0__0__0__1(B, C)
24125    ;   ai_observation_gather_results___0__0__0__1(B, C)
24126    ).
24127ai_observation_gather_results___0__0(A) :-
24128    ai_observation_gather_results___0__1(A).
24129ai_observation_gather_results___0__1(A) :-
24130    nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24131              B),
24132    !,
24133    A=suspension(C, not_stored_yet, _),
24134    'chr gen_id'(C),
24135    ai_observation_gather_results___0__1__0__2(B, A).
24136ai_observation_gather_results___0__1__0__2([], A) :-
24137    ai_observation_gather_results___0__2(A).
24138ai_observation_gather_results___0__1__0__2([A|B], C) :-
24139    (   A=suspension(_, active, _, D, E)
24140    ->  setarg(2, A, removed),
24141        ( arg(3, A, F),
24142          (   var(F)
24143          ->  nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24144                        G),
24145              G=[_|H],
24146              b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24147                       H),
24148              (   H=[I|_]
24149              ->  setarg(3, I, _)
24150              ;   true
24151              )
24152          ;   F=[_, _|H],
24153              setarg(2, F, H),
24154              (   H=[I|_]
24155              ->  setarg(3, I, F)
24156              ;   true
24157              )
24158          )
24159        ),
24160        nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
24161                  J),
24162        delete_ht(J, k(D, E), A),
24163        arg(2, C, K),
24164        setarg(2, C, active),
24165        (   K==not_stored_yet
24166        ->  nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24167                      L),
24168            M=[C|L],
24169            b_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24170                     M),
24171            (   L=[N|_]
24172            ->  setarg(3, N, M)
24173            ;   true
24174            )
24175        ;   true
24176        ),
24177        ai_not_observed(D, E),
24178        (   C=suspension(_, active, _)
24179        ->  setarg(2, C, inactive),
24180            ai_observation_gather_results___0__1__0__2(B, C)
24181        ;   true
24182        )
24183    ;   ai_observation_gather_results___0__1__0__2(B, C)
24184    ).
24185ai_observation_gather_results___0__1(A) :-
24186    A=suspension(B, not_stored_yet, _),
24187    'chr gen_id'(B),
24188    ai_observation_gather_results___0__2(A).
24189ai_observation_gather_results___0__2(A) :-
24190    (   var(A)
24191    ->  true
24192    ;   arg(2, A, B),
24193        setarg(2, A, removed),
24194        (   B==not_stored_yet
24195        ->  true
24196        ;   arg(3, A, C),
24197            (   var(C)
24198            ->  nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24199                          D),
24200                D=[_|E],
24201                b_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24202                         E),
24203                (   E=[F|_]
24204                ->  setarg(3, F, _)
24205                ;   true
24206                )
24207            ;   C=[_, _|E],
24208                setarg(2, C, E),
24209                (   E=[F|_]
24210                ->  setarg(3, F, C)
24211                ;   true
24212                )
24213            )
24214        )
24215    ).
24216ai_observation_memo_simplification_rest_heads(A, B, C) :-
24217    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
24218              D),
24219    lookup_ht(D, k(A, B), E),
24220    member(F, E),
24221    F=suspension(_, active, _, _, G),
24222    !,
24223    C=G.
24224ai_observation_memo_simplification_rest_heads(A, B, C) :-
24225    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
24226              D),
24227    lookup_ht(D, k(A, B), E),
24228    member(F, E),
24229    F=suspension(_, active, _, _, _, _, G, H, _),
24230    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I),
24231    lookup_ht(I, G, J),
24232    member(K, J),
24233    K=suspension(_, active, _, _, _, L),
24234    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24235              M),
24236    member(N, M),
24237    N=suspension(_, active, _, O),
24238    !,
24239    L=pragma(rule(P, Q, _, _), ids(R, _), _, _, _),
24240    once(select2(H, _, R, P, _, S)),
24241    ai_observation_abstract_constraints(S, O, T),
24242    ai_observation_abstract_constraints(Q, O, U),
24243    append(T, U, V),
24244    sort(V, C),
24245    ai_observation_memoed_simplification_rest_heads(A, B, C).
24246ai_observation_memo_simplification_rest_heads(_, _, _) :-
24247    fail.
24248ai_observation_memoed_simplification_rest_heads(A, B, C) :-
24249    D=suspension(E, active, A, B, C),
24250    'chr gen_id'(E),
24251    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
24252              F),
24253    insert_ht(F, k(A, B), D).
24254ai_observation_memo_propagation_rest_heads(A, B, C) :-
24255    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
24256              D),
24257    lookup_ht(D, k(A, B), E),
24258    member(F, E),
24259    F=suspension(_, active, _, _, G),
24260    !,
24261    C=G.
24262ai_observation_memo_propagation_rest_heads(A, B, C) :-
24263    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
24264              D),
24265    lookup_ht(D, k(A, B), E),
24266    member(F, E),
24267    F=suspension(_, active, _, _, _, _, G, H, _),
24268    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I),
24269    lookup_ht(I, G, J),
24270    member(K, J),
24271    K=suspension(_, active, _, _, _, L),
24272    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24273              M),
24274    member(N, M),
24275    N=suspension(_, active, _, O),
24276    !,
24277    L=pragma(rule(P, Q, _, _), ids(_, R), _, _, _),
24278    once(select2(H, _, R, Q, _, S)),
24279    ai_observation_abstract_constraints(S, O, T),
24280    ai_observation_abstract_constraints(P, O, U),
24281    append(T, U, V),
24282    sort(V, C),
24283    ai_observation_memoed_propagation_rest_heads(A, B, C).
24284ai_observation_memo_propagation_rest_heads(_, _, _) :-
24285    fail.
24286ai_observation_memoed_propagation_rest_heads(A, B, C) :-
24287    D=suspension(E, active, A, B, C),
24288    'chr gen_id'(E),
24289    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
24290              F),
24291    insert_ht(F, k(A, B), D).
24292ai_observation_memoed_abstract_goal(A, B) :-
24293    C=suspension(D, active, A, B),
24294    'chr gen_id'(D),
24295    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
24296              E),
24297    insert_ht(E, A, C).
24298ai_observation_memo_abstract_goal(A, B) :-
24299    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
24300              C),
24301    lookup_ht(C, A, D),
24302    member(E, D),
24303    E=suspension(_, active, _, F),
24304    !,
24305    B=F.
24306ai_observation_memo_abstract_goal(A, B) :-
24307    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', C),
24308    lookup_ht(C, A, D),
24309    member(E, D),
24310    E=suspension(_, active, _, _, _, F),
24311    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24312              G),
24313    member(H, G),
24314    H=suspension(_, active, _, I),
24315    !,
24316    F=pragma(rule(J, K, L, M), _, _, _, _),
24317    ai_observation_abstract_goal_(J,
24318                                  K,
24319                                  L,
24320                                  M,
24321                                  I,
24322                                  N),
24323    B=N,
24324    ai_observation_memoed_abstract_goal(A, N).
24325ai_observation_memo_abstract_goal(A, B) :-
24326    C=suspension(D, active, _, A, B),
24327    'chr gen_id'(D),
24328    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
24329              E),
24330    F=[C|E],
24331    b_setval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
24332             F),
24333    (   E=[G|_]
24334    ->  setarg(3, G, F)
24335    ;   true
24336    ).
24337partial_wake_analysis :-
24338    partial_wake_analysis___0__0(_).
24339partial_wake_analysis___0__0(A) :-
24340    nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
24341              B),
24342    !,
24343    A=suspension(C, not_stored_yet, t, _),
24344    'chr gen_id'(C),
24345    partial_wake_analysis___0__0__0__1(B, A).
24346partial_wake_analysis___0__0__0__1([], A) :-
24347    partial_wake_analysis___0__1(A).
24348partial_wake_analysis___0__0__0__1([A|B], C) :-
24349    (   A=suspension(_, active, _, _, D, _, E, F, G),
24350        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
24351                  H),
24352        lookup_ht(H, D, I)
24353    ->  partial_wake_analysis___0__0__1__1(I,
24354                                           D,
24355                                           E,
24356                                           F,
24357                                           G,
24358                                           A,
24359                                           B,
24360                                           C)
24361    ;   partial_wake_analysis___0__0__0__1(B, C)
24362    ).
24363partial_wake_analysis___0__0__1__1([], _, _, _, _, _, A, B) :-
24364    partial_wake_analysis___0__0__0__1(A, B).
24365partial_wake_analysis___0__0__1__1([A|B], C, D, E, F, G, H, I) :-
24366    (   A=suspension(_, active, _, _, J, K),
24367        J==C,
24368        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', L),
24369        lookup_ht(L, D, M)
24370    ->  partial_wake_analysis___0__0__2__1(M,
24371                                           K,
24372                                           A,
24373                                           B,
24374                                           C,
24375                                           D,
24376                                           E,
24377                                           F,
24378                                           G,
24379                                           H,
24380                                           I)
24381    ;   partial_wake_analysis___0__0__1__1(B,
24382                                           C,
24383                                           D,
24384                                           E,
24385                                           F,
24386                                           G,
24387                                           H,
24388                                           I)
24389    ).
24390partial_wake_analysis___0__0__2__1([], _, _, A, B, C, D, E, F, G, H) :-
24391    partial_wake_analysis___0__0__1__1(A,
24392                                       B,
24393                                       C,
24394                                       D,
24395                                       E,
24396                                       F,
24397                                       G,
24398                                       H).
24399partial_wake_analysis___0__0__2__1([A|B], C, D, E, F, G, H, I, J, K, L) :-
24400    (   A=suspension(_, active, _, _, M, N),
24401        M==G,
24402        O=t(330, L, J, A, D),
24403        '$novel_production'(L, O),
24404        '$novel_production'(J, O),
24405        '$novel_production'(A, O),
24406        '$novel_production'(D, O)
24407    ->  '$extend_history'(L, O),
24408        arg(2, L, P),
24409        setarg(2, L, active),
24410        (   P==not_stored_yet
24411        ->  nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
24412                      Q),
24413            R=[L|Q],
24414            b_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
24415                     R),
24416            (   Q=[S|_]
24417            ->  setarg(4, S, R)
24418            ;   true
24419            )
24420        ;   true
24421        ),
24422        N=pragma(rule(T, U, V, _), _, _, _, _),
24423        (   is_passive(G, H)
24424        ->  true
24425        ;   I==simplification
24426        ->  select(W, T, _),
24427            W=..[_|X],
24428            term_variables(V, Y),
24429            partial_wake_args(X, C, Y, F)
24430        ;   select(W, U, _),
24431            W=..[_|X],
24432            term_variables(V, Y),
24433            partial_wake_args(X, C, Y, F)
24434        ),
24435        (   L=suspension(_, active, _, _)
24436        ->  setarg(2, L, inactive),
24437            partial_wake_analysis___0__0__2__1(B,
24438                                               C,
24439                                               D,
24440                                               E,
24441                                               F,
24442                                               G,
24443                                               H,
24444                                               I,
24445                                               J,
24446                                               K,
24447                                               L)
24448        ;   true
24449        )
24450    ;   partial_wake_analysis___0__0__2__1(B,
24451                                           C,
24452                                           D,
24453                                           E,
24454                                           F,
24455                                           G,
24456                                           H,
24457                                           I,
24458                                           J,
24459                                           K,
24460                                           L)
24461    ).
24462partial_wake_analysis___0__0(A) :-
24463    A=suspension(B, not_stored_yet, t, _),
24464    'chr gen_id'(B),
24465    partial_wake_analysis___0__1(A).
24466partial_wake_analysis___0__1(A) :-
24467    arg(2, A, B),
24468    setarg(2, A, active),
24469    (   B==not_stored_yet
24470    ->  nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
24471                  C),
24472        D=[A|C],
24473        b_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
24474                 D),
24475        (   C=[E|_]
24476        ->  setarg(4, E, D)
24477        ;   true
24478        )
24479    ;   true
24480    ).
24481no_partial_wake(A) :-
24482    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
24483              B),
24484    lookup_ht(B, A, C),
24485    member(D, C),
24486    D=suspension(_, active, _),
24487    !.
24488no_partial_wake(A) :-
24489    B=suspension(C, active, A),
24490    'chr gen_id'(C),
24491    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
24492              D),
24493    insert_ht(D, A, B).
24494wakes_partially(A) :-
24495    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
24496              B),
24497    lookup_ht(B, A, C),
24498    member(D, C),
24499    D=suspension(_, active, _),
24500    !,
24501    fail.
24502wakes_partially(_).
24503phase_end(A) :-
24504    phase_end___1__0(A, _).
24505phase_end___1__0(A, B) :-
24506    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
24507              C),
24508    lookup_ht(C, A, D),
24509    !,
24510    B=suspension(E, not_stored_yet, A),
24511    'chr gen_id'(E),
24512    phase_end___1__0__0__1(D, A, B).
24513phase_end___1__0__0__1([], A, B) :-
24514    phase_end___1__1(A, B).
24515phase_end___1__0__0__1([A|B], C, D) :-
24516    (   A=suspension(_, active, E, F),
24517        E==C
24518    ->  setarg(2, A, removed),
24519        nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
24520                  G),
24521        delete_ht(G, C, A),
24522        arg(2, D, H),
24523        setarg(2, D, active),
24524        (   H==not_stored_yet
24525        ->  nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1',
24526                      I),
24527            insert_ht(I, C, D)
24528        ;   true
24529        ),
24530        call(F),
24531        (   D=suspension(_, active, _)
24532        ->  setarg(2, D, inactive),
24533            phase_end___1__0__0__1(B, C, D)
24534        ;   true
24535        )
24536    ;   phase_end___1__0__0__1(B, C, D)
24537    ).
24538phase_end___1__0(A, B) :-
24539    B=suspension(C, not_stored_yet, A),
24540    'chr gen_id'(C),
24541    phase_end___1__1(A, B).
24542phase_end___1__1(A, B) :-
24543    arg(2, B, C),
24544    setarg(2, B, active),
24545    (   C==not_stored_yet
24546    ->  nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1',
24547                  D),
24548        insert_ht(D, A, B)
24549    ;   true
24550    ).
24551delay_phase_end(A, B) :-
24552    nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1', C),
24553    lookup_ht(C, A, D),
24554    member(E, D),
24555    E=suspension(_, active, _),
24556    !,
24557    call(B).
24558delay_phase_end(A, B) :-
24559    C=suspension(D, active, A, B),
24560    'chr gen_id'(D),
24561    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
24562              E),
24563    insert_ht(E, A, C).
24564does_use_history(A, B) :-
24565    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
24566              C),
24567    lookup_ht(C, k(A, B), D),
24568    member(E, D),
24569    E=suspension(_, active, _, _),
24570    !.
24571does_use_history(A, B) :-
24572    C=suspension(D, active, A, B),
24573    'chr gen_id'(D),
24574    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
24575              E),
24576    insert_ht(E, A, C),
24577    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
24578              F),
24579    insert_ht(F, k(A, B), C).
24580uses_history(A) :-
24581    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
24582              B),
24583    lookup_ht(B, A, C),
24584    member(D, C),
24585    D=suspension(_, active, _, _),
24586    !.
24587uses_history(_) :-
24588    fail.
24589novel_production_call(A, B, C, D) :-
24590    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
24591              E),
24592    lookup_ht(E, k(A, B), F),
24593    member(G, F),
24594    G=suspension(_, active, _, _),
24595    !,
24596    D=C.
24597novel_production_call(_, _, _, true).
24598does_use_field(A, B) :-
24599    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
24600              C),
24601    lookup_ht(C, k(A, B), D),
24602    member(E, D),
24603    E=suspension(_, active, _, _),
24604    !.
24605does_use_field(A, B) :-
24606    C=suspension(D, active, A, B),
24607    'chr gen_id'(D),
24608    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
24609              E),
24610    insert_ht(E, k(A, B), C).
24611uses_field(A, B) :-
24612    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
24613              C),
24614    lookup_ht(C, k(A, B), D),
24615    member(E, D),
24616    E=suspension(_, active, _, _),
24617    !.
24618uses_field(_, _) :-
24619    fail.
24620uses_state(A, B) :-
24621    uses_state___2__0(A, B, _).
24622uses_state___2__0(A, B, _) :-
24623    nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24624              C),
24625    lookup_ht(C, k(A, B), D),
24626    member(E, D),
24627    E=suspension(_, active, _, _),
24628    !.
24629uses_state___2__0(A, B, C) :-
24630    nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24631              D),
24632    !,
24633    C=suspension(E, not_stored_yet, A, B),
24634    'chr gen_id'(E),
24635    uses_state___2__0__0__3(D, A, B, C).
24636uses_state___2__0__0__3([], A, B, C) :-
24637    uses_state___2__1(A, B, C).
24638uses_state___2__0__0__3([A|B], C, D, E) :-
24639    (   A=suspension(_, active, _),
24640        nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24641                  F),
24642        lookup_ht(F, k(C, D), G)
24643    ->  uses_state___2__0__1__3(G,
24644                                A,
24645                                B,
24646                                C,
24647                                D,
24648                                E)
24649    ;   uses_state___2__0__0__3(B, C, D, E)
24650    ).
24651uses_state___2__0__1__3([], _, A, B, C, D) :-
24652    uses_state___2__0__0__3(A, B, C, D).
24653uses_state___2__0__1__3([A|B], C, D, E, F, G) :-
24654    (   A=suspension(_, active, _, H, I, J, _, K),
24655        H==E,
24656        I==F
24657    ->  setarg(2, A, removed),
24658        ( arg(3, A, L),
24659          (   var(L)
24660          ->  nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24661                        M),
24662              M=[_|N],
24663              b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
24664                       N),
24665              (   N=[O|_]
24666              ->  setarg(3, O, _)
24667              ;   true
24668              )
24669          ;   L=[_, _|N],
24670              setarg(2, L, N),
24671              (   N=[O|_]
24672              ->  setarg(3, O, L)
24673              ;   true
24674              )
24675          )
24676        ),
24677        nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24678                  P),
24679        delete_ht(P, k(E, F), A),
24680        arg(2, G, Q),
24681        setarg(2, G, active),
24682        (   Q==not_stored_yet
24683        ->  nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24684                      R),
24685            insert_ht(R, k(E, F), G)
24686        ;   true
24687        ),
24688        K=J,
24689        (   G=suspension(_, active, _, _)
24690        ->  setarg(2, G, inactive),
24691            uses_state___2__0__1__3(B,
24692                                    C,
24693                                    D,
24694                                    E,
24695                                    F,
24696                                    G)
24697        ;   true
24698        )
24699    ;   uses_state___2__0__1__3(B,
24700                                C,
24701                                D,
24702                                E,
24703                                F,
24704                                G)
24705    ).
24706uses_state___2__0(A, B, C) :-
24707    C=suspension(D, not_stored_yet, A, B),
24708    'chr gen_id'(D),
24709    uses_state___2__1(A, B, C).
24710uses_state___2__1(A, B, C) :-
24711    arg(2, C, D),
24712    setarg(2, C, active),
24713    (   D==not_stored_yet
24714    ->  nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24715                  E),
24716        insert_ht(E, k(A, B), C)
24717    ;   true
24718    ).
24719if_used_state(A, B, C, D, E) :-
24720    nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24721              F),
24722    member(G, F),
24723    G=suspension(_, active, _),
24724    (   nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24725                  H),
24726        lookup_ht(H, k(A, B), I),
24727        member(J, I),
24728        J=suspension(_, active, _, _),
24729        !,
24730        E=C
24731    ;   !,
24732        E=D
24733    ).
24734if_used_state(A, B, C, D, E) :-
24735    F=suspension(G, active, _, A, B, C, D, E),
24736    'chr gen_id'(G),
24737    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24738              H),
24739    I=[F|H],
24740    b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
24741             I),
24742    (   H=[J|_]
24743    ->  setarg(3, J, I)
24744    ;   true
24745    ),
24746    nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24747              K),
24748    insert_ht(K, k(A, B), F).
24749used_states_known :-
24750    used_states_known___0__0(_).
24751used_states_known___0__0(A) :-
24752    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24753              B),
24754    !,
24755    A=suspension(C, not_stored_yet, _),
24756    'chr gen_id'(C),
24757    used_states_known___0__0__0__1(B, A).
24758used_states_known___0__0__0__1([], A) :-
24759    used_states_known___0__1(A).
24760used_states_known___0__0__0__1([A|B], C) :-
24761    (   A=suspension(_, active, _, D, E, F, _, G),
24762        ( ground(D),
24763          ground(E)
24764        ),
24765        nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24766                  H),
24767        lookup_ht(H, k(D, E), I),
24768        member(J, I),
24769        J=suspension(_, active, _, _)
24770    ->  setarg(2, A, removed),
24771        ( arg(3, A, K),
24772          (   var(K)
24773          ->  nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24774                        L),
24775              L=[_|M],
24776              b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
24777                       M),
24778              (   M=[N|_]
24779              ->  setarg(3, N, _)
24780              ;   true
24781              )
24782          ;   K=[_, _|M],
24783              setarg(2, K, M),
24784              (   M=[N|_]
24785              ->  setarg(3, N, K)
24786              ;   true
24787              )
24788          )
24789        ),
24790        nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24791                  O),
24792        delete_ht(O, k(D, E), A),
24793        arg(2, C, P),
24794        setarg(2, C, active),
24795        (   P==not_stored_yet
24796        ->  nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24797                      Q),
24798            R=[C|Q],
24799            b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
24800                     R),
24801            (   Q=[S|_]
24802            ->  setarg(3, S, R)
24803            ;   true
24804            )
24805        ;   true
24806        ),
24807        G=F,
24808        (   C=suspension(_, active, _)
24809        ->  setarg(2, C, inactive),
24810            used_states_known___0__0__0__1(B, C)
24811        ;   true
24812        )
24813    ;   used_states_known___0__0__0__1(B, C)
24814    ).
24815used_states_known___0__0(A) :-
24816    A=suspension(B, not_stored_yet, _),
24817    'chr gen_id'(B),
24818    used_states_known___0__1(A).
24819used_states_known___0__1(A) :-
24820    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24821              B),
24822    !,
24823    used_states_known___0__1__0__2(B, A).
24824used_states_known___0__1__0__2([], A) :-
24825    used_states_known___0__2(A).
24826used_states_known___0__1__0__2([A|B], C) :-
24827    (   A=suspension(_, active, _, D, E, _, F, G)
24828    ->  setarg(2, A, removed),
24829        ( arg(3, A, H),
24830          (   var(H)
24831          ->  nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24832                        I),
24833              I=[_|J],
24834              b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
24835                       J),
24836              (   J=[K|_]
24837              ->  setarg(3, K, _)
24838              ;   true
24839              )
24840          ;   H=[_, _|J],
24841              setarg(2, H, J),
24842              (   J=[K|_]
24843              ->  setarg(3, K, H)
24844              ;   true
24845              )
24846          )
24847        ),
24848        nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24849                  L),
24850        delete_ht(L, k(D, E), A),
24851        arg(2, C, M),
24852        setarg(2, C, active),
24853        (   M==not_stored_yet
24854        ->  nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24855                      N),
24856            O=[C|N],
24857            b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
24858                     O),
24859            (   N=[P|_]
24860            ->  setarg(3, P, O)
24861            ;   true
24862            )
24863        ;   true
24864        ),
24865        G=F,
24866        (   C=suspension(_, active, _)
24867        ->  setarg(2, C, inactive),
24868            used_states_known___0__1__0__2(B, C)
24869        ;   true
24870        )
24871    ;   used_states_known___0__1__0__2(B, C)
24872    ).
24873used_states_known___0__1(A) :-
24874    used_states_known___0__2(A).
24875used_states_known___0__2(A) :-
24876    arg(2, A, B),
24877    setarg(2, A, active),
24878    (   B==not_stored_yet
24879    ->  nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24880                  C),
24881        D=[A|C],
24882        b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
24883                 D),
24884        (   C=[E|_]
24885        ->  setarg(3, E, D)
24886        ;   true
24887        )
24888    ;   true
24889    ).
24890stored_assertion(A) :-
24891    B=suspension(C, active, A),
24892    'chr gen_id'(C),
24893    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
24894              D),
24895    insert_ht(D, A, B).
24896never_stored_default(A, B) :-
24897    never_stored_default___2__0(A, B, _).
24898never_stored_default___2__0(A, B, C) :-
24899    nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24900              D),
24901    !,
24902    C=suspension(E, not_stored_yet, A, B),
24903    'chr gen_id'(E),
24904    never_stored_default___2__0__0__1(D, A, B, C).
24905never_stored_default___2__0__0__1([], A, B, C) :-
24906    never_stored_default___2__1(A, B, C).
24907never_stored_default___2__0__0__1([A|B], C, D, E) :-
24908    (   A=suspension(_, active, _, F, G),
24909        F=[H|I],
24910        H==C
24911    ->  setarg(2, A, removed),
24912        arg(3, A, J),
24913        (   var(J)
24914        ->  nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24915                      K),
24916            K=[_|L],
24917            b_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24918                     L),
24919            (   L=[M|_]
24920            ->  setarg(3, M, _)
24921            ;   true
24922            )
24923        ;   J=[_, _|L],
24924            setarg(2, J, L),
24925            (   L=[M|_]
24926            ->  setarg(3, M, J)
24927            ;   true
24928            )
24929        ),
24930        arg(2, E, N),
24931        setarg(2, E, active),
24932        (   N==not_stored_yet
24933        ->  nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
24934                      O),
24935            insert_ht(O, C, E)
24936        ;   true
24937        ),
24938        C=P/Q,
24939        functor(R, P, Q),
24940        inc_rule_count(S),
24941        T=pragma(rule([R], [], true, D), ids([0], []), [], no, S),
24942        G=[T|U],
24943        never_stored_rules(I, U),
24944        (   E=suspension(_, active, _, _)
24945        ->  setarg(2, E, inactive),
24946            never_stored_default___2__0__0__1(B, C, D, E)
24947        ;   true
24948        )
24949    ;   never_stored_default___2__0__0__1(B, C, D, E)
24950    ).
24951never_stored_default___2__0(A, B, C) :-
24952    C=suspension(D, not_stored_yet, A, B),
24953    'chr gen_id'(D),
24954    never_stored_default___2__1(A, B, C).
24955never_stored_default___2__1(A, _, B) :-
24956    arg(2, B, C),
24957    setarg(2, B, active),
24958    (   C==not_stored_yet
24959    ->  nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
24960                  D),
24961        insert_ht(D, A, B)
24962    ;   true
24963    ).
24964never_stored_rules([], A) :-
24965    !,
24966    A=[].
24967never_stored_rules([A|B], C) :-
24968    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
24969              D),
24970    lookup_ht(D, A, E),
24971    member(F, E),
24972    F=suspension(_, active, _, G),
24973    !,
24974    A=H/I,
24975    functor(J, H, I),
24976    inc_rule_count(K),
24977    L=pragma(rule([J], [], true, G), ids([0], []), [], no, K),
24978    C=[L|M],
24979    never_stored_rules(B, M).
24980never_stored_rules([_|A], B) :-
24981    !,
24982    never_stored_rules(A, B).
24983never_stored_rules(A, B) :-
24984    C=suspension(D, active, _, A, B),
24985    'chr gen_id'(D),
24986    nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24987              E),
24988    F=[C|E],
24989    b_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24990             F),
24991    (   E=[G|_]
24992    ->  setarg(3, G, F)
24993    ;   true
24994    ).
24995check_storedness_assertion(A) :-
24996    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
24997              B),
24998    lookup_ht(B, A, C),
24999    member(D, C),
25000    D=suspension(_, active, _),
25001    !,
25002    setarg(2, D, removed),
25003    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
25004              E),
25005    delete_ht(E, A, D),
25006    (   is_stored(A)
25007    ->  true
25008    ;   chr_warning(assertion_failed,
25009                    'Constraint ~w is not stored. However, it was asserted to be stored.\n',
25010                    [A])
25011    ).
25012check_storedness_assertion(A) :-
25013    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
25014              B),
25015    lookup_ht(B, A, C),
25016    member(D, C),
25017    D=suspension(_, active, _, _),
25018    !,
25019    (   is_finally_stored(A)
25020    ->  chr_warning(assertion_failed,
25021                    'Constraint ~w is stored. However, it was asserted not to be stored.\n',
25022                    [A])
25023    ;   is_stored(A)
25024    ->  chr_warning(assertion_failed,
25025                    'Constraint ~w is temporarily stored. However, it was asserted not to be stored.\n',
25026                    [A])
25027    ;   true
25028    ).
25029check_storedness_assertion(A) :-
25030    (   is_finally_stored(A)
25031    ->  chr_warning(assertion_failed,
25032                    'Constraint ~w is stored. However, it was asserted not to be stored.\n',
25033                    [A])
25034    ;   is_stored(A)
25035    ->  chr_warning(assertion_failed,
25036                    'Constraint ~w is temporarily stored. However, it was asserted not to be stored.\n',
25037                    [A])
25038    ;   true
25039    ).
25040continuation_occurrence(A, B, C) :-
25041    D=suspension(E, active, A, B, C),
25042    'chr gen_id'(E),
25043    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
25044              F),
25045    insert_ht(F, k(A, B), D).
25046get_success_continuation_occurrence(A, B, C) :-
25047    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
25048              D),
25049    lookup_ht(D, k(A, B), E),
25050    member(F, E),
25051    F=suspension(_, active, _, _, G),
25052    !,
25053    C=G.
25054get_success_continuation_occurrence(A, B, _) :-
25055    chr_error(internal,
25056              'Success continuation not found for ~w.\n',
25057              [A:B]).
25058skip_to_next_id(A, B) :-
25059    skip_to_next_id___2__0(A, B, _).
25060skip_to_next_id___2__0(A, B, _) :-
25061    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25062              C),
25063    lookup_ht(C, k(A, B), D),
25064    member(E, D),
25065    E=suspension(_, active, _, _, _),
25066    !.
25067skip_to_next_id___2__0(A, B, C) :-
25068    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
25069              D),
25070    lookup_ht(D, k(A, B), E),
25071    !,
25072    C=suspension(F, not_stored_yet, t, A, B),
25073    'chr gen_id'(F),
25074    skip_to_next_id___2__0__0__4(E, A, B, C).
25075skip_to_next_id___2__0__0__4([], A, B, C) :-
25076    skip_to_next_id___2__1(A, B, C).
25077skip_to_next_id___2__0__0__4([A|B], C, D, E) :-
25078    (   A=suspension(_, active, _, _, F, G, H, I, _),
25079        F==C,
25080        G==D,
25081        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
25082                  J),
25083        lookup_ht(J, k(H, I), K)
25084    ->  skip_to_next_id___2__0__1__4(K,
25085                                     H,
25086                                     I,
25087                                     A,
25088                                     B,
25089                                     C,
25090                                     D,
25091                                     E)
25092    ;   skip_to_next_id___2__0__0__4(B, C, D, E)
25093    ).
25094skip_to_next_id___2__0__1__4([], _, _, _, A, B, C, D) :-
25095    skip_to_next_id___2__0__0__4(A, B, C, D).
25096skip_to_next_id___2__0__1__4([A|B], C, D, E, F, G, H, I) :-
25097    (   A=suspension(_, active, _, J, K),
25098        J==C,
25099        K==D,
25100        L=t(362, E, A, I),
25101        '$novel_production'(E, L),
25102        '$novel_production'(A, L),
25103        '$novel_production'(I, L),
25104        H>1
25105    ->  '$extend_history'(I, L),
25106        arg(2, I, M),
25107        setarg(2, I, active),
25108        (   M==not_stored_yet
25109        ->  nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25110                      N),
25111            insert_ht(N, k(G, H), I)
25112        ;   true
25113        ),
25114        O is H-1,
25115        skip_to_next_id(G, O),
25116        (   I=suspension(_, active, _, _, _)
25117        ->  setarg(2, I, inactive),
25118            skip_to_next_id___2__0__1__4(B,
25119                                         C,
25120                                         D,
25121                                         E,
25122                                         F,
25123                                         G,
25124                                         H,
25125                                         I)
25126        ;   true
25127        )
25128    ;   skip_to_next_id___2__0__1__4(B,
25129                                     C,
25130                                     D,
25131                                     E,
25132                                     F,
25133                                     G,
25134                                     H,
25135                                     I)
25136    ).
25137skip_to_next_id___2__0(A, B, C) :-
25138    C=suspension(D, not_stored_yet, t, A, B),
25139    'chr gen_id'(D),
25140    skip_to_next_id___2__1(A, B, C).
25141skip_to_next_id___2__1(A, B, C) :-
25142    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
25143              D),
25144    lookup_ht(D, k(A, B), E),
25145    !,
25146    skip_to_next_id___2__1__0__5(E, A, B, C).
25147skip_to_next_id___2__1__0__5([], A, B, C) :-
25148    skip_to_next_id___2__2(A, B, C).
25149skip_to_next_id___2__1__0__5([A|B], C, D, E) :-
25150    (   A=suspension(_, active, F, G, H),
25151        F==C,
25152        G==D,
25153        ( ground(C),
25154          ground(D)
25155        ),
25156        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
25157                  I),
25158        lookup_ht(I, k(C, D, propagation), J),
25159        member(K, J),
25160        K=suspension(_, active, _, _, _, _, _, _, _)
25161    ->  setarg(2, A, removed),
25162        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
25163                  L),
25164        delete_ht(L, k(C, D), A),
25165        arg(2, E, M),
25166        setarg(2, E, active),
25167        (   M==not_stored_yet
25168        ->  nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25169                      N),
25170            insert_ht(N, k(C, D), E)
25171        ;   true
25172        ),
25173        occurrence_code_id(C, D, H),
25174        O is D+1,
25175        P is H+1,
25176        set_occurrence_code_id(C, O, P),
25177        (   E=suspension(_, active, _, _, _)
25178        ->  setarg(2, E, inactive),
25179            skip_to_next_id___2__1__0__5(B, C, D, E)
25180        ;   true
25181        )
25182    ;   skip_to_next_id___2__1__0__5(B, C, D, E)
25183    ).
25184skip_to_next_id___2__1(A, B, C) :-
25185    skip_to_next_id___2__2(A, B, C).
25186skip_to_next_id___2__2(A, B, C) :-
25187    arg(2, C, D),
25188    setarg(2, C, active),
25189    (   D==not_stored_yet
25190    ->  nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25191                  E),
25192        insert_ht(E, k(A, B), C)
25193    ;   true
25194    ).
25195should_skip_to_next_id(A, B) :-
25196    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25197              C),
25198    lookup_ht(C, k(A, B), D),
25199    member(E, D),
25200    E=suspension(_, active, _, _, _),
25201    !.
25202should_skip_to_next_id(_, _) :-
25203    fail.
25204bulk_propagation(A, B, _) :-
25205    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
25206              C),
25207    lookup_ht(C, A, D),
25208    member(E, D),
25209    E=suspension(_, active, _, _, F),
25210    B>=F,
25211    !,
25212    skip_to_next_id(A, B).
25213bulk_propagation(A, B, C) :-
25214    C=:=B+1,
25215    !,
25216    skip_to_next_id(A, B),
25217    get_max_occurrence(A, D),
25218    E is D+1,
25219    bulk_propagation(A, C, E).
25220bulk_propagation(A, B, _) :-
25221    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
25222              C),
25223    lookup_ht(C, k(A, simplification), D),
25224    member(E, D),
25225    E=suspension(_, active, _, _, _, F, _, _, _),
25226    F=:=B+1,
25227    !,
25228    skip_to_next_id(A, B),
25229    get_max_occurrence(A, G),
25230    H is G+1,
25231    bulk_propagation(A, F, H).
25232bulk_propagation(A, B, C) :-
25233    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
25234              D),
25235    lookup_ht(D, k(A, B), E),
25236    member(F, E),
25237    F=suspension(_, active, _, _, G),
25238    G>B+1,
25239    !,
25240    H is min(C, G),
25241    I is B+1,
25242    bulk_propagation(A, I, H).
25243bulk_propagation(A, B, _) :-
25244    skip_to_next_id(A, B),
25245    get_max_occurrence(A, C),
25246    D is C+1,
25247    E is B+1,
25248    bulk_propagation(A, E, D).
25249set_occurrence_code_id(A, B, C) :-
25250    get_max_occurrence(A, D),
25251    B>D,
25252    !,
25253    occurrence_code_id(A, B, C).
25254set_occurrence_code_id(A, B, C) :-
25255    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
25256              D),
25257    lookup_ht(D, k(A, B), E),
25258    member(F, E),
25259    F=suspension(_, active, _, _, _, _, G, H, _),
25260    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', I),
25261    lookup_ht(I, k(G, H), J),
25262    member(K, J),
25263    K=suspension(_, active, _, _, _),
25264    !,
25265    occurrence_code_id(A, B, C),
25266    L is B+1,
25267    set_occurrence_code_id(A, L, C).
25268set_occurrence_code_id(A, B, C) :-
25269    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
25270              D),
25271    (   (   lookup_ht(D, k(A, B, simplification), E),
25272            member(F, E),
25273            F=suspension(_, active, _, _, _, _, _, _, _),
25274            !,
25275            occurrence_code_id(A, B, C),
25276            G is B+1,
25277            set_occurrence_code_id(A, G, C)
25278        ;   lookup_ht(D, k(A, B, propagation), H),
25279            member(I, H),
25280            I=suspension(_, active, _, _, _, _, _, _, _),
25281            nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25282                      J),
25283            lookup_ht(J, k(A, B), K),
25284            member(L, K),
25285            L=suspension(_, active, _, _, _),
25286            !,
25287            occurrence_code_id(A, B, C),
25288            M is B+1,
25289            N is C+1,
25290            set_occurrence_code_id(A, M, N)
25291        )
25292    ;   lookup_ht(D, k(A, B, propagation), O),
25293        member(P, O),
25294        P=suspension(_, active, _, _, _, _, _, _, _),
25295        !,
25296        occurrence_code_id(A, B, C),
25297        Q is B+1,
25298        set_occurrence_code_id(A, Q, C)
25299    ).
25300set_occurrence_code_id(A, B, C) :-
25301    D=suspension(E, active, A, B, C),
25302    'chr gen_id'(E),
25303    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
25304              F),
25305    insert_ht(F, k(A, B), D).
25306occurrence_code_id(A, B, C) :-
25307    D=suspension(E, active, A, B, C),
25308    'chr gen_id'(E),
25309    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
25310              F),
25311    insert_ht(F, k(A, B), D).
25312get_occurrence_code_id(A, B, C) :-
25313    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
25314              D),
25315    lookup_ht(D, k(A, B), E),
25316    member(F, E),
25317    F=suspension(_, active, _, _, G),
25318    !,
25319    C=G.
25320get_occurrence_code_id(A, B, _) :-
25321    (   B==0
25322    ->  true
25323    ;   format('no occurrence code for ~w!\n', [A:B])
25324    ).
25325chr_constants(A) :-
25326    B=suspension(C, active, _, A),
25327    'chr gen_id'(C),
25328    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25329              D),
25330    E=[B|D],
25331    b_setval('$chr_store_global_ground_chr_translate____chr_constants___1',
25332             E),
25333    (   D=[F|_]
25334    ->  setarg(3, F, E)
25335    ;   true
25336    ).
25337get_chr_constants(A) :-
25338    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25339              B),
25340    member(C, B),
25341    C=suspension(_, active, _, D),
25342    !,
25343    A=D.
25344get_chr_constants(A) :-
25345    chr_warning(internal, 'No constants found for key ~w.\n', [_]),
25346    A=[].
25347add_chr_constants_(A) :-
25348    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25349              B),
25350    member(C, B),
25351    C=suspension(_, active, _, D),
25352    !,
25353    setarg(2, C, removed),
25354    arg(3, C, E),
25355    (   var(E)
25356    ->  nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25357                  F),
25358        F=[_|G],
25359        b_setval('$chr_store_global_ground_chr_translate____chr_constants___1',
25360                 G),
25361        (   G=[H|_]
25362        ->  setarg(3, H, _)
25363        ;   true
25364        )
25365    ;   E=[_, _|G],
25366        setarg(2, E, G),
25367        (   G=[H|_]
25368        ->  setarg(3, H, E)
25369        ;   true
25370        )
25371    ),
25372    sort([A|D], I),
25373    chr_constants(I).
25374add_chr_constants_(A) :-
25375    chr_constants([A]).
25376print_chr_constants :-
25377    print_chr_constants___0__0(_).
25378print_chr_constants___0__0(A) :-
25379    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25380              B),
25381    !,
25382    A=suspension(C, not_stored_yet, _),
25383    'chr gen_id'(C),
25384    print_chr_constants___0__0__0__1(B, A).
25385print_chr_constants___0__0__0__1([], A) :-
25386    print_chr_constants___0__1(A).
25387print_chr_constants___0__0__0__1([A|B], C) :-
25388    (   A=suspension(_, active, _, D)
25389    ->  format('\t* chr_constants : ~w.\n', [D]),
25390        print_chr_constants___0__0__0__1(B, C)
25391    ;   print_chr_constants___0__0__0__1(B, C)
25392    ).
25393print_chr_constants___0__0(A) :-
25394    A=suspension(B, not_stored_yet, _),
25395    'chr gen_id'(B),
25396    print_chr_constants___0__1(A).
25397print_chr_constants___0__1(A) :-
25398    (   var(A)
25399    ->  true
25400    ;   arg(2, A, B),
25401        setarg(2, A, removed),
25402        (   B==not_stored_yet
25403        ->  true
25404        ;   arg(3, A, C),
25405            (   var(C)
25406            ->  nb_getval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
25407                          D),
25408                D=[_|E],
25409                b_setval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
25410                         E),
25411                (   E=[F|_]
25412                ->  setarg(3, F, _)
25413                ;   true
25414                )
25415            ;   C=[_, _|E],
25416                setarg(2, C, E),
25417                (   E=[F|_]
25418                ->  setarg(3, F, C)
25419                ;   true
25420                )
25421            )
25422        )
25423    )