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: Mon Feb 12 15:48:31 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), functor(L, J, K)),
 2432                  M),
 2433    N is I+1,
 2434    trie_step_cases(M,
 2435                    N,
 2436                    A,
 2437                    D,
 2438                    E,
 2439                    B,
 2440                    C,
 2441                    F,
 2442                    G).
 2443trie_step_cases([], _, _, _, _, _, _, A, A).
 2444trie_step_cases([A|B], C, D, E, F, G, H, I, J) :-
 2445    trie_step_case(A,
 2446                   C,
 2447                   D,
 2448                   E,
 2449                   F,
 2450                   G,
 2451                   H,
 2452                   I,
 2453                   K),
 2454    trie_step_cases(B,
 2455                    C,
 2456                    D,
 2457                    E,
 2458                    F,
 2459                    G,
 2460                    H,
 2461                    K,
 2462                    J).
 2463trie_step_case(A/B, C, D, E, F, G, H, [I|J], K) :-
 2464    I=(L:-M),
 2465    N is C+1,
 2466    functor(L, G, N),
 2467    arg(1, L, O),
 2468    L=..[_, _|P],
 2469    once(append(Q, [R], P)),
 2470    functor(O, A, B),
 2471    O=..[_|S],
 2472    append(S, P, T),
 2473    (   T==[R]
 2474    ->  J=K,
 2475        M=true,
 2476        rec_cases(D,
 2477                  _,
 2478                  F,
 2479                  A/B,
 2480                  _,
 2481                  _,
 2482                  U),
 2483        U=[R]
 2484    ;   rec_cases(D,
 2485                  E,
 2486                  F,
 2487                  A/B,
 2488                  V,
 2489                  W,
 2490                  U),
 2491        (   W=[X]
 2492        ->  J=K,
 2493            M=true,
 2494            append([V, X, U], T)
 2495        ;   pairup(V, W, Y),
 2496            common_pattern(Y, Z, A1, B1),
 2497            append(S, Q, [C1|D1]),
 2498            C1-D1=Z,
 2499            fresh_symbol(H, E1),
 2500            append(A1, [R], F1),
 2501            M=..[E1|F1],
 2502            maplist(head_tail, B1, G1, H1),
 2503            trie_step(G1,
 2504                      E1,
 2505                      H,
 2506                      H1,
 2507                      U,
 2508                      J,
 2509                      K)
 2510        )
 2511    ).
 2512head_tail([A|B], A, B).
 2513rec_cases([], [], [], _, [], [], []).
 2514rec_cases([A|B], [C|D], [E|F], G/H, I, J, K) :-
 2515    (   functor(A, G, H),
 2516        A=..[_|L],
 2517        append(L, C, [M|N])
 2518    ->  I=[M|O],
 2519        J=[N|P],
 2520        K=[E|Q],
 2521        rec_cases(B,
 2522                  D,
 2523                  F,
 2524                  G/H,
 2525                  O,
 2526                  P,
 2527                  Q)
 2528    ;   rec_cases(B,
 2529                  D,
 2530                  F,
 2531                  G/H,
 2532                  I,
 2533                  J,
 2534                  K)
 2535    ).
 2536common_pattern(A, B, C, D) :-
 2537    fold1(chr_translate:gct, A, B),
 2538    term_variables(B, C),
 2539    findall(C, member(B, A), D).
 2540gct(A, B, C) :-
 2541    gct_(A, B, C, [], _).
 2542gct_(A, B, C, D, E) :-
 2543    (   nonvar(A),
 2544        nonvar(B),
 2545        functor(A, F, G),
 2546        functor(B, H, I),
 2547        F==H,
 2548        G==I
 2549    ->  functor(C, F, G),
 2550        A=..[_|J],
 2551        B=..[_|K],
 2552        C=..[_|L],
 2553        maplist_dcg(chr_translate:gct_,
 2554                    J,
 2555                    K,
 2556                    L,
 2557                    D,
 2558                    E)
 2559    ;   lookup_eq(D, A+B, C)
 2560    ->  E=D
 2561    ;   E=[A+B-C|D]
 2562    ).
 2563global_list_store_name(A/B, C) :-
 2564    get_target_module(D),
 2565    atom_concat_list([ '$chr_store_global_list_',
 2566                       D,
 2567                       '____',
 2568                       A,
 2569                       '___',
 2570                       B
 2571                     ],
 2572                     C).
 2573global_ground_store_name(A/B, C) :-
 2574    get_target_module(D),
 2575    atom_concat_list([ '$chr_store_global_ground_',
 2576                       D,
 2577                       '____',
 2578                       A,
 2579                       '___',
 2580                       B
 2581                     ],
 2582                     C).
 2583global_singleton_store_name(A/B, C) :-
 2584    get_target_module(D),
 2585    atom_concat_list([ '$chr_store_global_singleton_',
 2586                       D,
 2587                       '____',
 2588                       A,
 2589                       '___',
 2590                       B
 2591                     ],
 2592                     C).
 2593identifier_store_name(A, B) :-
 2594    get_target_module(C),
 2595    atom_concat_list(['$chr_identifier_lookup_', C, '____', A], B).
 2596:- if(current_predicate(user:exception/3)). 2597prolog_global_variables_code([]) :-
 2598    tmp_module,
 2599    !.
 2600prolog_global_variables_code(A) :-
 2601    prolog_global_variables(B),
 2602    (   B==[]
 2603    ->  A=[]
 2604    ;   maplist(wrap_in_functor('$chr_prolog_global_variable'), B, C),
 2605        A=[(:-dynamic user:exception/3), (:-multifile user:exception/3), (user:exception(undefined_global_variable, D, retry):-'$chr_prolog_global_variable'(D), '$chr_initialization')|C]
 2606    ).
 2607tmp_module :-
 2608    prolog_load_context(module, A),
 2609    module_property(A, class(temporary)).
 2610:- else. 2611prolog_global_variables_code([]).
 2612:- endif. 2613sbag_member_call(A, B, member(A, B)).
 2614update_mutable_call(A, B, 'chr update_mutable'(A, B)).
 2615create_mutable_call(A, B, true) :-
 2616    B=mutable(A).
 2617get_suspension_field(A, B, C, D, E) :-
 2618    get_dynamic_suspension_term_field(C, A, B, D, E).
 2619update_suspension_field(A, B, C, D, E) :-
 2620    set_dynamic_suspension_term_field(C, A, B, D, E).
 2621get_update_suspension_field(A, B, C, D, E, true, F, G) :-
 2622    get_dynamic_suspension_term_field(C, A, B, D, F),
 2623    set_dynamic_suspension_term_field(C, A, B, E, G).
 2624create_static_suspension_field(A, B, C, D, true) :-
 2625    get_static_suspension_term_field(C, A, B, D).
 2626get_static_suspension_field(A, B, C, D, true) :-
 2627    get_static_suspension_term_field(C, A, B, D).
 2628get_update_static_suspension_field(A, B, C, D, E, F, true, G) :-
 2629    get_static_suspension_term_field(D, A, C, E),
 2630    set_dynamic_suspension_term_field(D, A, B, F, G).
 2631enumerate_stores_code(A, [B|C]) :-
 2632    D='$enumerate_constraints'(E),
 2633    B=(D:-F),
 2634    enumerate_store_bodies(A, E, C),
 2635    (   C=[]
 2636    ->  F=fail
 2637    ;   F=(nonvar(E)->functor(E, G, _), '$enumerate_constraints'(G, E);'$enumerate_constraints'(_, E))
 2638    ).
 2639enumerate_store_bodies([], _, []).
 2640enumerate_store_bodies([A|B], C, D) :-
 2641    (   is_stored(A)
 2642    ->  get_store_type(A, E),
 2643        (   enumerate_store_body(E, A, F, G)
 2644        ->  true
 2645        ;   chr_error(internal,
 2646                      'Could not generate enumeration code for constraint ~w.\n',
 2647                      [A])
 2648        ),
 2649        get_dynamic_suspension_term_field(arguments,
 2650                                          A,
 2651                                          F,
 2652                                          H,
 2653                                          I),
 2654        A=J/_,
 2655        K=..[J|H],
 2656        L='$enumerate_constraints'(J, C),
 2657        M=(G, I, C=K),
 2658        D=[(L:-M)|N]
 2659    ;   D=N
 2660    ),
 2661    enumerate_store_bodies(B, C, N).
 2662enumerate_store_body(default, A, B, C) :-
 2663    global_list_store_name(A, D),
 2664    sbag_member_call(B, E, F),
 2665    make_get_store_goal_no_error(D, E, G),
 2666    C=(G, F).
 2667enumerate_store_body(multi_inthash([A|_]), B, C, D) :-
 2668    multi_inthash_enumerate_store_body(A, B, C, D).
 2669enumerate_store_body(multi_hash([A|_]), B, C, D) :-
 2670    multi_hash_enumerate_store_body(A, B, C, D).
 2671enumerate_store_body(atomic_constants(A, B, C), D, E, F) :-
 2672    C==complete,
 2673    maplist(enumerate_constant_store_body(D, A, G),
 2674            B,
 2675            H),
 2676    list2disj(H, I),
 2677    F=(I, member(E, G)).
 2678enumerate_constant_store_body(A, B, C, D, nb_getval(E, C)) :-
 2679    constants_store_name(A, B, D, E).
 2680enumerate_store_body(ground_constants(A, B, C), D, E, F) :-
 2681    enumerate_store_body(atomic_constants(A, B, C),
 2682                         D,
 2683                         E,
 2684                         F).
 2685enumerate_store_body(global_ground, A, B, C) :-
 2686    global_ground_store_name(A, D),
 2687    sbag_member_call(B, E, F),
 2688    make_get_store_goal(D, E, G),
 2689    C=(G, F).
 2690enumerate_store_body(var_assoc_store(_, _), _, _, A) :-
 2691    A=fail.
 2692enumerate_store_body(global_singleton, A, B, C) :-
 2693    global_singleton_store_name(A, D),
 2694    make_get_store_goal(D, B, E),
 2695    C=(E, B\==[]).
 2696enumerate_store_body(multi_store(A), B, C, D) :-
 2697    (   memberchk(global_ground, A)
 2698    ->  enumerate_store_body(global_ground, B, C, D)
 2699    ;   once(( member(E, A),
 2700               enumerate_store_body(E, B, C, D)
 2701             ))
 2702    ).
 2703enumerate_store_body(identifier_store(_), _, _, A) :-
 2704    A=fail.
 2705enumerate_store_body(type_indexed_identifier_store(_, _), _, _, A) :-
 2706    A=fail.
 2707multi_inthash_enumerate_store_body(A, B, C, D) :-
 2708    multi_hash_store_name(B, A, E),
 2709    D=(nb_getval(E, F), value_iht(F, C)).
 2710multi_hash_enumerate_store_body(A, B, C, D) :-
 2711    multi_hash_store_name(B, A, E),
 2712    make_get_store_goal(E, F, G),
 2713    D=(G, value_ht(F, C)).
 2714guard_simplification :-
 2715    (   chr_pp_flag(guard_simplification, on)
 2716    ->  precompute_head_matchings,
 2717        simplify_guards(1)
 2718    ;   true
 2719    ).
 2720next_prev_rule(A, B, C) :-
 2721    (   find_min_q(A, _-D)
 2722    ->  D=(-B),
 2723        normalize_heap(A, D, C)
 2724    ;   B=0,
 2725        C=A
 2726    ).
 2727normalize_heap(A, B, C) :-
 2728    (   find_min_q(A, _-B)
 2729    ->  delete_min_q(A, D, tuple(E, F, _)-_),
 2730        (   F>1
 2731        ->  G is F-1,
 2732            get_occurrence(E, G, H, _),
 2733            insert_q(D,
 2734                     tuple(E, G, H)-(-H),
 2735                     I)
 2736        ;   I=D
 2737        ),
 2738        normalize_heap(I, B, C)
 2739    ;   C=A
 2740    ).
 2741head_types_modes_condition([], _, true).
 2742head_types_modes_condition([A|B], C, (D, E)) :-
 2743    types_modes_condition(C, A, D),
 2744    head_types_modes_condition(B, C, E).
 2745add_background_info(A, B) :-
 2746    get_bg_info(C),
 2747    add_background_info2(A, D),
 2748    append(C, D, B).
 2749add_background_info2(A, []) :-
 2750    var(A),
 2751    !.
 2752add_background_info2([], []) :-
 2753    !.
 2754add_background_info2([A|B], C) :-
 2755    !,
 2756    add_background_info2(A, D),
 2757    add_background_info2(B, E),
 2758    append(D, E, C).
 2759add_background_info2(A, B) :-
 2760    (   functor(A, _, C),
 2761        C>0
 2762    ->  A=..[_|D],
 2763        add_background_info2(D, E)
 2764    ;   E=[]
 2765    ),
 2766    get_bg_info(A, F),
 2767    append(F, E, B).
 2768normalize_conj_list(A, B) :-
 2769    list2conj(A, C),
 2770    conj2list(C, B).
 2771compute_derived_info([], _, _, _, _, _, _, _, [], []).
 2772compute_derived_info([A|B], C, D, E, F, G, H, I, [J|K], [L|M]) :-
 2773    copy_term(C-F, N),
 2774    variable_replacement(C-F, N, O),
 2775    append(A, O, P),
 2776    list2conj(C, Q),
 2777    negate_b(Q, R),
 2778    make_head_matchings_explicit_not_negated2(E, D, S),
 2779    list2conj(S, T),
 2780    term_variables(P, U),
 2781    term_variables(C-F-S, V),
 2782    new_vars(V, U, W),
 2783    append(P, W, X),
 2784    (   F==true
 2785    ->  Y=R
 2786    ;   negate_b(F, Z),
 2787        Y=(R;T, Z)
 2788    ),
 2789    copy_with_variable_replacement(Y, J, X),
 2790    copy_with_variable_replacement(F, A1, X),
 2791    copy_with_variable_replacement(C, B1, X),
 2792    list2conj(B1, C1),
 2793    apply_guard_wrt_term(H, A1, D1),
 2794    apply_guard_wrt_term(D1, C1, L),
 2795    compute_derived_info(B,
 2796                         C,
 2797                         D,
 2798                         E,
 2799                         F,
 2800                         G,
 2801                         H,
 2802                         I,
 2803                         K,
 2804                         M).
 2805simplify_guard(A, B, C, D, E) :-
 2806    conj2list(A, F),
 2807    guard_entailment:simplify_guards(C, B, F, G, E),
 2808    list2conj(G, D).
 2809new_vars([], _, []).
 2810new_vars([A|B], C, D) :-
 2811    (   memberchk_eq(A, C)
 2812    ->  new_vars(B, C, D)
 2813    ;   D=[A-E, E-A|F],
 2814        new_vars(B, C, F)
 2815    ).
 2816head_subset(A, B, C) :-
 2817    head_subset(A, B, C, [], _).
 2818head_subset([], A, B, B, A).
 2819head_subset([A|B], C, D, E, F) :-
 2820    head_member(C, A, G, E, H),
 2821    head_subset(B, H, D, G, F).
 2822head_member([A|B], C, D, E, F) :-
 2823    (   variable_replacement(C, A, E, D),
 2824        F=B
 2825    ;   F=[A|G],
 2826        head_member(B, C, D, E, G)
 2827    ).
 2828make_head_matchings_explicit(A, B, C) :-
 2829    make_head_matchings_explicit_memo_lookup(A, D, E),
 2830    copy_term_nat(D-E, B-C).
 2831make_head_matchings_explicit_(A, B, C) :-
 2832    extract_arguments(A, D),
 2833    make_matchings_explicit(D, E, [], [], _, C),
 2834    substitute_arguments(A, E, B).
 2835make_head_matchings_explicit_not_negated(A, B, C) :-
 2836    extract_arguments(A, D),
 2837    make_matchings_explicit_not_negated(D, E, C),
 2838    substitute_arguments(A, E, B).
 2839make_head_matchings_explicit_not_negated2(A, B, C) :-
 2840    extract_arguments(A, D),
 2841    extract_arguments(B, E),
 2842    make_matchings_explicit_not_negated(D, E, C).
 2843extract_arguments([], []).
 2844extract_arguments([A|B], C) :-
 2845    A=..[_|D],
 2846    append(D, E, C),
 2847    extract_arguments(B, E).
 2848substitute_arguments([], [], []).
 2849substitute_arguments([A|B], C, [D|E]) :-
 2850    functor(A, F, G),
 2851    split_at(G, C, H, I),
 2852    D=..[F|H],
 2853    substitute_arguments(B, I, E).
 2854make_matchings_explicit([], [], _, A, A, []).
 2855make_matchings_explicit([A|B], [C|D], E, F, G, H) :-
 2856    (   var(A)
 2857    ->  (   memberchk_eq(A, E)
 2858        ->  list2disj(F, I),
 2859            H=[(I;C==A)|J],
 2860            K=E
 2861        ;   H=J,
 2862            C=A,
 2863            K=[A|E]
 2864        ),
 2865        L=F
 2866    ;   functor(A, M, N),
 2867        A=..[M|O],
 2868        make_matchings_explicit(O,
 2869                                P,
 2870                                E,
 2871                                F,
 2872                                Q,
 2873                                R),
 2874        S=..[M|P],
 2875        (   R==[]
 2876        ->  H=[functor(C, M, N)|J]
 2877        ;   list2conj(R, T),
 2878            list2disj(F, I),
 2879            U=(C\=S;I;T),
 2880            H=[functor(C, M, N), U|J]
 2881        ),
 2882        L=[C\=S|Q],
 2883        term_variables(B, V),
 2884        append(V, E, K)
 2885    ),
 2886    make_matchings_explicit(B, D, K, L, G, J).
 2887make_matchings_explicit_not_negated([], [], []).
 2888make_matchings_explicit_not_negated([A|B], [C|D], E) :-
 2889    E=[C=A|F],
 2890    make_matchings_explicit_not_negated(B, D, F).
 2891apply_guard_wrt_term([], _, []).
 2892apply_guard_wrt_term([A|B], C, [D|E]) :-
 2893    (   var(A)
 2894    ->  apply_guard_wrt_variable(C, A, D)
 2895    ;   A=..[F|G],
 2896        apply_guard_wrt_term(G, C, H),
 2897        D=..[F|H]
 2898    ),
 2899    apply_guard_wrt_term(B, C, E).
 2900apply_guard_wrt_variable((A, B), C, D) :-
 2901    !,
 2902    apply_guard_wrt_variable(A, C, E),
 2903    apply_guard_wrt_variable(B, E, D).
 2904apply_guard_wrt_variable(A, B, C) :-
 2905    (   A=(D=E),
 2906        B==D
 2907    ->  C=E
 2908    ;   A=functor(F, G, H),
 2909        B==F,
 2910        ground(G),
 2911        ground(H)
 2912    ->  functor(C, G, H)
 2913    ;   C=B
 2914    ).
 2915replace_some_heads(A, B, _, [], A, B, _, _, []) :-
 2916    !.
 2917replace_some_heads([], [A|B], [C|D], [E|F], [], [G|H], I, J, K) :-
 2918    !,
 2919    (   C==E
 2920    ->  G=E,
 2921        replace_some_heads([],
 2922                           B,
 2923                           D,
 2924                           F,
 2925                           [],
 2926                           H,
 2927                           I,
 2928                           J,
 2929                           K)
 2930    ;   E=functor(L, M, N),
 2931        C==L
 2932    ->  length(O, N),
 2933        (   var(A)
 2934        ->  P=[],
 2935            G=..[M|O]
 2936        ;   A=..[M|Q],
 2937            use_same_args(Q, O, R, I, J, P),
 2938            G=..[M|R]
 2939        ),
 2940        replace_some_heads([],
 2941                           B,
 2942                           D,
 2943                           F,
 2944                           [],
 2945                           H,
 2946                           I,
 2947                           J,
 2948                           S),
 2949        append(P, S, K)
 2950    ;   G=A,
 2951        replace_some_heads([],
 2952                           B,
 2953                           D,
 2954                           [E|F],
 2955                           [],
 2956                           H,
 2957                           I,
 2958                           J,
 2959                           K)
 2960    ).
 2961replace_some_heads([A|B], C, [D|E], [F|G], [H|I], J, K, L, M) :-
 2962    !,
 2963    (   D==F
 2964    ->  H=F,
 2965        replace_some_heads(B,
 2966                           C,
 2967                           E,
 2968                           G,
 2969                           I,
 2970                           J,
 2971                           K,
 2972                           L,
 2973                           M)
 2974    ;   F=functor(N, O, P),
 2975        D==N
 2976    ->  length(Q, P),
 2977        (   var(A)
 2978        ->  R=[],
 2979            H=..[O|Q]
 2980        ;   A=..[O|S],
 2981            use_same_args(S,
 2982                          Q,
 2983                          T,
 2984                          K,
 2985                          L,
 2986                          R),
 2987            H=..[O|T]
 2988        ),
 2989        replace_some_heads(B,
 2990                           C,
 2991                           E,
 2992                           G,
 2993                           I,
 2994                           J,
 2995                           K,
 2996                           L,
 2997                           U),
 2998        append(R, U, M)
 2999    ;   H=A,
 3000        replace_some_heads(B,
 3001                           C,
 3002                           E,
 3003                           [F|G],
 3004                           I,
 3005                           J,
 3006                           K,
 3007                           L,
 3008                           M)
 3009    ).
 3010use_same_args([], [], [], _, _, []).
 3011use_same_args([A|B], [_|C], [D|E], F, G, H) :-
 3012    var(A),
 3013    !,
 3014    D=A,
 3015    use_same_args(B, C, E, F, G, H).
 3016use_same_args([A|B], [C|D], [E|F], G, H, I) :-
 3017    nonvar(A),
 3018    !,
 3019    (   common_variables(A, H)
 3020    ->  I=[C=A|J]
 3021    ;   I=J
 3022    ),
 3023    E=C,
 3024    use_same_args(B, D, F, G, H, J).
 3025simplify_heads([], _, _, _, [], []).
 3026simplify_heads([A|B], C, D, E, F, G) :-
 3027    A=(H=I),
 3028    (   (   nonvar(I)
 3029        ;   common_variables(I, B-C)
 3030        ),
 3031        guard_entailment:entails_guard(C, H=I)
 3032    ->  (   common_variables(I, D-B-C)
 3033        ->  G=J,
 3034            F=K
 3035        ;   (   common_variables(I, E)
 3036            ->  G=[H=I|J]
 3037            ;   G=J
 3038            ),
 3039            F=[H|K]
 3040        )
 3041    ;   nonvar(I),
 3042        functor(I, L, M),
 3043        guard_entailment:entails_guard([functor(H, L, M)|C], H=I)
 3044    ->  G=J,
 3045        (   common_variables(I, D-B-C)
 3046        ->  F=K
 3047        ;   F=[functor(H, L, M)|K]
 3048        )
 3049    ;   F=K,
 3050        G=J
 3051    ),
 3052    simplify_heads(B, [A|C], D, E, K, J).
 3053common_variables(A, B) :-
 3054    term_variables(A, C),
 3055    term_variables(B, D),
 3056    intersect_eq(C, D, E),
 3057    E\==[].
 3058add_failing_occ(A, B, C, D, E, F, _, G, H) :-
 3059    A=pragma(rule(_, _, I, _), ids(J, K), _, _, _),
 3060    append(K, J, L),
 3061    missing_partner_cond(B,
 3062                         C,
 3063                         L,
 3064                         D,
 3065                         M,
 3066                         N,
 3067                         G),
 3068    copy_term((N, B, C), (O, P, Q)),
 3069    variable_replacement((N, B, C),
 3070                         (O, P, Q),
 3071                         H),
 3072    copy_with_variable_replacement(I, R, H),
 3073    extract_explicit_matchings(R, S),
 3074    negate_b(S, T),
 3075    copy_with_variable_replacement(M, U, H),
 3076    (   subsumes_term(F, O),
 3077        F=O
 3078    ->  E=[(T;U)]
 3079    ;   E=[chr_pp_void_info]
 3080    ).
 3081missing_partner_cond([], [], [], _, fail, _, _).
 3082missing_partner_cond([A|B], [_|C], [D|E], D, F, A, G) :-
 3083    !,
 3084    missing_partner_cond(B,
 3085                         C,
 3086                         E,
 3087                         D,
 3088                         F,
 3089                         A,
 3090                         G).
 3091missing_partner_cond([A|B], [_|C], [_|D], E, F, G, H/I) :-
 3092    F=(chr_pp_not_in_store(A);J),
 3093    missing_partner_cond(B,
 3094                         C,
 3095                         D,
 3096                         E,
 3097                         J,
 3098                         G,
 3099                         H/I).
 3100extract_explicit_matchings((A, B), C) :-
 3101    !,
 3102    (   extract_explicit_matchings(A)
 3103    ->  extract_explicit_matchings(B, C)
 3104    ;   C=(A, D),
 3105        extract_explicit_matchings(B, D)
 3106    ).
 3107extract_explicit_matchings(A, B) :-
 3108    !,
 3109    (   extract_explicit_matchings(A)
 3110    ->  B=true
 3111    ;   B=A
 3112    ).
 3113extract_explicit_matchings(A=B) :-
 3114    var(A),
 3115    var(B),
 3116    !,
 3117    A=B.
 3118extract_explicit_matchings(A==B) :-
 3119    var(A),
 3120    var(B),
 3121    !,
 3122    A=B.
 3123assert_constraint_type(A, B) :-
 3124    (   ground(B)
 3125    ->  constraint_type(A, B)
 3126    ;   chr_error(type_error,
 3127                  'Declared argument types "~w" for constraint "~w" must be ground!\n',
 3128                  [B, A])
 3129    ).
 3130get_type_definition_det(A, B) :-
 3131    (   get_type_definition(A, B)
 3132    ->  true
 3133    ;   chr_error(type,
 3134                  'Could not find type definition for type `~w\'.\n',
 3135                  [A])
 3136    ).
 3137get_constraint_type_det(A, B) :-
 3138    (   get_constraint_type(A, B)
 3139    ->  true
 3140    ;   A=_/C,
 3141        replicate(C, any, B)
 3142    ).
 3143modes_condition([], [], true).
 3144modes_condition([A|B], [C|D], E) :-
 3145    (   A==(+)
 3146    ->  E=(ground(C), F)
 3147    ;   A==(-)
 3148    ->  E=(var(C), F)
 3149    ;   E=F
 3150    ),
 3151    modes_condition(B, D, F).
 3152types_condition([], [], [], [], true).
 3153types_condition([A|B], [C|D], [E|F], [G|H], (I, J)) :-
 3154    (   G==(-)
 3155    ->  K=[true]
 3156    ;   get_type_definition_det(A, L),
 3157        type_condition(L, C, E, G, M),
 3158        (   G==(+)
 3159        ->  K=M
 3160        ;   K=[\+ground(C)|M]
 3161        )
 3162    ),
 3163    list2disj(K, I),
 3164    types_condition(B, D, F, H, J).
 3165type_condition([], _, _, _, []).
 3166type_condition([A|B], C, D, E, [F|G]) :-
 3167    (   var(A)
 3168    ->  chr_error(type, 'Unexpected variable type in type definition!\n', [])
 3169    ;   atomic_builtin_type(A, C, F)
 3170    ->  true
 3171    ;   compound_builtin_type(A, C, F, _)
 3172    ->  true
 3173    ;   type_def_case_condition(A, C, D, E, F)
 3174    ),
 3175    type_condition(B, C, D, E, G).
 3176ast_atomic_builtin_type(A, B, C) :-
 3177    ast_term_to_term(B, D),
 3178    atomic_builtin_type(A, D, C).
 3179ast_compound_builtin_type(A, B, C) :-
 3180    ast_term_to_term(B, D),
 3181    compound_builtin_type(A, D, _, C).
 3182atomic_builtin_type(any, _, true).
 3183atomic_builtin_type(dense_int, A, (integer(A), A>=0)).
 3184atomic_builtin_type(int, A, integer(A)).
 3185atomic_builtin_type(number, A, number(A)).
 3186atomic_builtin_type(float, A, float(A)).
 3187atomic_builtin_type(natural, A, (integer(A), A>=0)).
 3188atomic_builtin_type(chr_identifier, _, true).
 3189compound_builtin_type(chr_constants(_), _, true, true).
 3190compound_builtin_type(chr_constants(_, _), _, true, true).
 3191compound_builtin_type(chr_identifier(_), _, true, true).
 3192compound_builtin_type(chr_enum(A), B, (ground(B), memberchk(B, A)), once((member(C, A), unifiable(B, C, _)))).
 3193compound_builtin_type(chr_enum(_, _), _, true, true).
 3194is_chr_constants_type(chr_constants(A), A, no).
 3195is_chr_constants_type(chr_constants(A, B), A, yes(B)).
 3196is_chr_enum_type(chr_enum(A), A, no).
 3197is_chr_enum_type(chr_enum(A, B), A, yes(B)).
 3198type_def_case_condition(A, B, C, D, E) :-
 3199    (   nonvar(A)
 3200    ->  functor(A, F, G),
 3201        (   G==0
 3202        ->  E=(B=A)
 3203        ;   var(C)
 3204        ->  E=functor(B, F, G)
 3205        ;   functor(C, F, G)
 3206        ->  E=(functor(B, F, G), B=H, I),
 3207            A=..[_|J],
 3208            C=..[_|K],
 3209            functor(H, F, G),
 3210            H=..[_|L],
 3211            replicate(G, D, M),
 3212            types_condition(J, L, K, M, I)
 3213        ;   E=functor(B, F, G)
 3214        )
 3215    ;   chr_error(internal, 'Illegal type definition (must be nonvar).\n', [])
 3216    ).
 3217static_type_check_rule(A, B) :-
 3218    B=ast_rule(C, _, _, D, _),
 3219    (   catch(( ast_static_type_check_head(C),
 3220                ast_static_type_check_body(D)
 3221              ),
 3222              type_error(E),
 3223              (   E=invalid_functor(F, G, H)
 3224              ->  chr_error(type_error,
 3225                            'Invalid functor in ~@ of ~@:\n\t\tfound `~w\',\n\t\texpected type `~w\'!\n',
 3226                            [ chr_translate:format_src(F),
 3227                              format_rule(A),
 3228                              G,
 3229                              H
 3230                            ])
 3231              ;   E=type_clash(I, J, K, L, M)
 3232              ->  chr_error(type_error,
 3233                            'Type clash for variable ~w in ~@:\n\t\texpected type ~w in ~@\n\t\texpected type ~w in ~@\n',
 3234                            [ I,
 3235                              format_rule(A),
 3236                              L,
 3237                              chr_translate:format_src(J),
 3238                              M,
 3239                              chr_translate:format_src(K)
 3240                            ])
 3241              )),
 3242        fail
 3243    ;   true
 3244    ).
 3245ast_static_type_check_head(simplification(A)) :-
 3246    maplist(ast_static_type_check_head_constraint, A).
 3247ast_static_type_check_head(propagation(A)) :-
 3248    maplist(ast_static_type_check_head_constraint, A).
 3249ast_static_type_check_head(simpagation(A, B)) :-
 3250    maplist(ast_static_type_check_head_constraint, A),
 3251    maplist(ast_static_type_check_head_constraint, B).
 3252ast_static_type_check_head_constraint(A) :-
 3253    A=chr_constraint(B, C, _),
 3254    get_constraint_type_det(B, D),
 3255    maplist(ast_static_type_check_term(head(_)), C, D).
 3256ast_static_type_check_body([]).
 3257ast_static_type_check_body([A|B]) :-
 3258    ast_symbol(A, C),
 3259    get_constraint_type_det(C, D),
 3260    ast_args(A, E),
 3261    maplist(ast_static_type_check_term(body(A)), E, D),
 3262    ast_static_type_check_body(B).
 3263format_src(head(A)) :-
 3264    format('head ~w', [A]).
 3265format_src(body(A)) :-
 3266    format('body goal ~w', [A]).
 3267generate_dynamic_type_check_clauses(A) :-
 3268    (   chr_pp_flag(debugable, on)
 3269    ->  dynamic_type_check,
 3270        get_dynamic_type_check_clauses(B),
 3271        append(B,
 3272               [ ('$dynamic_type_check'(C, D):-throw(error(type_error(C, D), context(_, 'CHR Runtime Type Error'))))
 3273               ],
 3274               A)
 3275    ;   A=[]
 3276    ).
 3277dynamic_type_check_clause(A, B, C) :-
 3278    copy_term(A-B, D-E),
 3279    functor(E, F, G),
 3280    functor(H, F, G),
 3281    E=..[_|I],
 3282    H=..[_|J],
 3283    maplist(dynamic_type_check_call, I, J, K),
 3284    list2conj(K, L),
 3285    C=('$dynamic_type_check'(D, H):-L).
 3286dynamic_type_check_alias_clause(A, B, C) :-
 3287    C=('$dynamic_type_check'(A, D):-'$dynamic_type_check'(B, D)).
 3288dynamic_type_check_call(A, B, C) :-
 3289    (   A==any
 3290    ->  C=true
 3291    ;   C=when(nonvar(B), once('$dynamic_type_check'(A, B)))
 3292    ).
 3293atomic_types_suspended_constraint(A) :-
 3294    A=_/B,
 3295    get_constraint_type(A, C),
 3296    get_constraint_mode(A, D),
 3297    numlist(1, B, E),
 3298    maplist(atomic_types_suspended_constraint(A),
 3299            C,
 3300            D,
 3301            E).
 3302atomic_types_suspended_constraint(A, B, C, D) :-
 3303    (   is_indexed_argument(A, D)
 3304    ->  (   C==(?)
 3305        ->  atomic_type(B)
 3306        ;   true
 3307        )
 3308    ;   true
 3309    ).
 3310storage_analysis(A) :-
 3311    (   chr_pp_flag(storage_analysis, on)
 3312    ->  check_constraint_storages(A)
 3313    ;   true
 3314    ).
 3315check_constraint_storages(A) :-
 3316    maplist(check_constraint_storage, A).
 3317check_constraint_storage(A) :-
 3318    get_max_occurrence(A, B),
 3319    check_occurrences_storage(A, 1, B).
 3320check_occurrences_storage(A, B, C) :-
 3321    (   B>C
 3322    ->  stored_completing(A, 1, 0)
 3323    ;   check_occurrence_storage(A, B),
 3324        D is B+1,
 3325        check_occurrences_storage(A, D, C)
 3326    ).
 3327check_occurrence_storage(A, B) :-
 3328    get_occurrence(A, B, C, D, E),
 3329    (   is_passive(C, D)
 3330    ->  stored(A, B, maybe)
 3331    ;   get_rule(C, F),
 3332        F=pragma(rule(G, H, I, J), ids(K, L), _, _, _),
 3333        (   E==simplification,
 3334            select2(D, M, K, G, _, _)
 3335        ->  check_storage_head1(M, B, G, H, I)
 3336        ;   E==propagation,
 3337            select2(D, N, L, H, _, _)
 3338        ->  check_storage_head2(N, B, G, J)
 3339        )
 3340    ).
 3341check_storage_head1(A, B, C, D, E) :-
 3342    functor(A, F, G),
 3343    H=F/G,
 3344    (   C==[A],
 3345        D==[],
 3346        guard_entailment:entails_guard([chr_pp_headvariables(A)], E),
 3347        A=..[_|I],
 3348        no_matching(I, [])
 3349    ->  stored(H, B, no)
 3350    ;   stored(H, B, maybe)
 3351    ).
 3352no_matching([], _).
 3353no_matching([A|B], C) :-
 3354    var(A),
 3355    \+ memberchk_eq(A, C),
 3356    no_matching(B, [A|C]).
 3357check_storage_head2(A, B, C, D) :-
 3358    functor(A, E, F),
 3359    G=E/F,
 3360    (   C\==[],
 3361        D==true
 3362    ->  stored(G, B, maybe)
 3363    ;   stored(G, B, yes)
 3364    ).
 3365constraints_code(A, B) :-
 3366    (   chr_pp_flag(reduced_indexing, on),
 3367        forall(C,
 3368               A,
 3369               chr_translate:only_ground_indexed_arguments(C))
 3370    ->  none_suspended_on_variables
 3371    ;   true
 3372    ),
 3373    constraints_code1(A, B, []).
 3374constraint_prelude(A/B, C) :-
 3375    vars_susp(B, D, E, F),
 3376    G=..[A|D],
 3377    make_suspension_continuation_goal(A/B, F, H),
 3378    build_head(A, B, [0], F, I),
 3379    (   chr_pp_flag(debugable, on)
 3380    ->  insert_constraint_goal(A/B, E, D, J),
 3381        attach_constraint_atom(A/B, K, E, L),
 3382        delay_phase_end(validate_store_type_assumptions,
 3383                        chr_translate:update_suspension_field(A/B, E, state, inactive, M)),
 3384        insert_constraint_internal_constraint_goal(A/B,
 3385                                                   K,
 3386                                                   E,
 3387                                                   H,
 3388                                                   D,
 3389                                                   N),
 3390        (   get_constraint_type(A/B, O)
 3391        ->  maplist(dynamic_type_check_call, O, D, P),
 3392            list2conj(P, Q)
 3393        ;   Q=true
 3394        ),
 3395        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))
 3396    ;   get_allocation_occurrence(A/B, 0)
 3397    ->  gen_insert_constraint_internal_goal(A/B,
 3398                                            R,
 3399                                            F,
 3400                                            D,
 3401                                            E),
 3402        delay_phase_end(validate_store_type_assumptions,
 3403                        chr_translate:update_suspension_field(A/B, E, state, inactive, M)),
 3404        C=(G:-R, M, I)
 3405    ;   C=(G:-I)
 3406    ).
 3407make_suspension_continuation_goal(A/B, C, D) :-
 3408    (   may_trigger(A/B)
 3409    ->  build_head(A, B, [0], C, E),
 3410        (   chr_pp_flag(debugable, off)
 3411        ->  D=E
 3412        ;   get_target_module(F),
 3413            D=F:E
 3414        )
 3415    ;   D=true
 3416    ).
 3417gen_cond_attach_clause(A/B, C, D, E) :-
 3418    (   is_finally_stored(A/B)
 3419    ->  get_allocation_occurrence(A/B, F),
 3420        get_max_occurrence(A/B, G),
 3421        (   chr_pp_flag(debugable, off),
 3422            G<F
 3423        ->  (   only_ground_indexed_arguments(A/B)
 3424            ->  gen_insert_constraint_internal_goal(A/B,
 3425                                                    H,
 3426                                                    I,
 3427                                                    J,
 3428                                                    K)
 3429            ;   gen_cond_attach_goal(A/B,
 3430                                     H,
 3431                                     I,
 3432                                     J,
 3433                                     K)
 3434            )
 3435        ;   vars_susp(B, J, K, I),
 3436            gen_uncond_attach_goal(A/B,
 3437                                   K,
 3438                                   J,
 3439                                   H,
 3440                                   _)
 3441        ),
 3442        build_head(A, B, C, I, L),
 3443        M=(L:-H),
 3444        add_dummy_location(M, N),
 3445        D=[N|E]
 3446    ;   D=E
 3447    ).
 3448gen_cond_attach_goal(A/B, C, D, E, F) :-
 3449    vars_susp(B, E, F, D),
 3450    make_suspension_continuation_goal(A/B, D, G),
 3451    (   get_store_type(A/B, var_assoc_store(_, _))
 3452    ->  H=true
 3453    ;   attach_constraint_atom(A/B, I, F, H)
 3454    ),
 3455    _=..[A|E],
 3456    insert_constraint_goal(A/B, F, E, J),
 3457    insert_constraint_internal_constraint_goal(A/B,
 3458                                               I,
 3459                                               F,
 3460                                               G,
 3461                                               E,
 3462                                               K),
 3463    (   may_trigger(A/B)
 3464    ->  activate_constraint_goal(A/B,
 3465                                 (J, H),
 3466                                 I,
 3467                                 F,
 3468                                 _,
 3469                                 L),
 3470        C=(var(F)->K, J, H;L)
 3471    ;   C=(K, J, H)
 3472    ).
 3473gen_insert_constraint_internal_goal(A/B, C, D, E, F) :-
 3474    vars_susp(B, E, F, D),
 3475    make_suspension_continuation_goal(A/B, D, G),
 3476    (   \+ only_ground_indexed_arguments(A/B),
 3477        \+ get_store_type(A/B, var_assoc_store(_, _))
 3478    ->  attach_constraint_atom(A/B, H, F, I)
 3479    ;   I=true
 3480    ),
 3481    _=..[A|E],
 3482    insert_constraint_goal(A/B, F, E, J),
 3483    insert_constraint_internal_constraint_goal(A/B,
 3484                                               H,
 3485                                               F,
 3486                                               G,
 3487                                               E,
 3488                                               K),
 3489    (   only_ground_indexed_arguments(A/B),
 3490        chr_pp_flag(debugable, off)
 3491    ->  C=(K, J)
 3492    ;   C=(K, J, I)
 3493    ).
 3494gen_uncond_attach_goal(A, B, C, D, E) :-
 3495    (   \+ only_ground_indexed_arguments(A),
 3496        \+ get_store_type(A, var_assoc_store(_, _))
 3497    ->  attach_constraint_atom(A, F, B, G)
 3498    ;   G=true
 3499    ),
 3500    insert_constraint_goal(A, B, C, H),
 3501    (   chr_pp_flag(late_allocation, on)
 3502    ->  activate_constraint_goal(A,
 3503                                 (H, G),
 3504                                 F,
 3505                                 B,
 3506                                 E,
 3507                                 D)
 3508    ;   activate_constraint_goal(A, true, F, B, E, D)
 3509    ).
 3510head1_code(A, B, C, D, E, F, G, H, I, J) :-
 3511    E=pragma(K, _, _, _, L),
 3512    K=rule(_, M, _, _),
 3513    (   M==[]
 3514    ->  reorder_heads(L, A, C, D, N, O),
 3515        simplification_code(A,
 3516                            B,
 3517                            N,
 3518                            O,
 3519                            E,
 3520                            F,
 3521                            G,
 3522                            H,
 3523                            I,
 3524                            J)
 3525    ;   simpagation_head1_code(A,
 3526                               B,
 3527                               C,
 3528                               D,
 3529                               E,
 3530                               F,
 3531                               G,
 3532                               H,
 3533                               I,
 3534                               J)
 3535    ).
 3536head2_code(A, B, C, D, E, F, G, H, I, J) :-
 3537    E=pragma(K, _, _, _, L),
 3538    K=rule(M, _, _, _),
 3539    (   M==[]
 3540    ->  reorder_heads(L, A, C, D, N, O),
 3541        propagation_code(A,
 3542                         B,
 3543                         N,
 3544                         O,
 3545                         K,
 3546                         L,
 3547                         F,
 3548                         G,
 3549                         H,
 3550                         I,
 3551                         J)
 3552    ;   simpagation_head2_code(A,
 3553                               B,
 3554                               C,
 3555                               D,
 3556                               E,
 3557                               F,
 3558                               G,
 3559                               H,
 3560                               I,
 3561                               J)
 3562    ).
 3563gen_alloc_inc_clause(A/B, C, D, E, F) :-
 3564    vars_susp(B, G, H, I),
 3565    build_head(A, B, D, I, J),
 3566    inc_id(D, K),
 3567    build_head(A, B, K, I, L),
 3568    gen_occ_allocation(A/B, C, G, H, M),
 3569    N=(J:-M, L),
 3570    add_dummy_location(N, O),
 3571    E=[O|F].
 3572gen_occ_allocation(A, B, C, D, E) :-
 3573    get_allocation_occurrence(A, F),
 3574    get_occurrence_code_id(A, F, G),
 3575    get_occurrence_code_id(A, B, H),
 3576    (   chr_pp_flag(debugable, off),
 3577        H==G
 3578    ->  allocate_constraint_goal(A, D, C, I),
 3579        (   may_trigger(A)
 3580        ->  E=(var(D)->I;true)
 3581        ;   E=I
 3582        )
 3583    ;   E=true
 3584    ).
 3585gen_occ_allocation_in_guard(A, B, C, D, E) :-
 3586    get_allocation_occurrence(A, F),
 3587    (   chr_pp_flag(debugable, off),
 3588        B<F
 3589    ->  allocate_constraint_goal(A, D, C, G),
 3590        (   may_trigger(A)
 3591        ->  E=(var(D)->G;true)
 3592        ;   E=G
 3593        )
 3594    ;   E=true
 3595    ).
 3596guard_via_reschedule_new(A, B, C, D, E, F) :-
 3597    (   chr_pp_flag(guard_via_reschedule, on)
 3598    ->  guard_via_reschedule_main_new(A,
 3599                                      B,
 3600                                      C,
 3601                                      D,
 3602                                      E,
 3603                                      G),
 3604        list2conj(G, F)
 3605    ;   length(A, H),
 3606        length(E, H),
 3607        length(B, I),
 3608        length(D, I),
 3609        append(E, D, J),
 3610        list2conj(J, F)
 3611    ).
 3612guard_via_reschedule_main_new(A, B, C, D, E, F) :-
 3613    initialize_unit_dictionary(C, G),
 3614    maplist(wrap_in_functor(lookup), A, H),
 3615    maplist(wrap_in_functor(guard), B, I),
 3616    build_units(H, I, G, J),
 3617    dependency_reorder(J, K),
 3618    wrappedunits2lists(K, L, E, F),
 3619    sort(L, M),
 3620    snd_of_pairs(M, D).
 3621wrappedunits2lists([], [], [], []).
 3622wrappedunits2lists([unit(A, B, _, _)|C], D, E, F) :-
 3623    F=[G|H],
 3624    (   B=lookup(I)
 3625    ->  E=[G|J],
 3626        D=K
 3627    ;   B=guard(I)
 3628    ->  D=[A-G|K],
 3629        E=J
 3630    ),
 3631    wrappedunits2lists(C, K, J, H).
 3632guard_splitting(A, B) :-
 3633    A=rule(C, D, E, _),
 3634    append(C, D, F),
 3635    conj2list(E, G),
 3636    term_variables(F, H),
 3637    split_off_simple_guard_new(G, H, I, J),
 3638    append(I, [K], B),
 3639    term_variables(J, L),
 3640    ground_vars(F, M),
 3641    list_difference_eq(H, M, N),
 3642    intersect_eq(N, L, O),
 3643    maplist(chr_lock, O, P),
 3644    maplist(chr_unlock, O, Q),
 3645    list2conj(P, R),
 3646    list2conj(Q, S),
 3647    list2conj(J, T),
 3648    K=(R, T, S).
 3649guard_body_copies3(A, B, C, D, E) :-
 3650    A=rule(_, _, _, F),
 3651    my_term_copy(B, C, G, D),
 3652    my_term_copy(F, G, E).
 3653split_off_simple_guard_new([], _, [], []).
 3654split_off_simple_guard_new([A|B], C, D, E) :-
 3655    (   simple_guard_new(A, C)
 3656    ->  D=[A|F],
 3657        split_off_simple_guard_new(B, C, F, E)
 3658    ;   D=[],
 3659        E=[A|B]
 3660    ).
 3661simple_guard_new(A, B) :-
 3662    builtin_binds_b(A, C),
 3663    not(( member(D, C),
 3664          memberchk_eq(D, B)
 3665        )).
 3666dependency_reorder(A, B) :-
 3667    dependency_reorder(A, [], B).
 3668dependency_reorder([], A, B) :-
 3669    reverse(A, B).
 3670dependency_reorder([A|B], C, D) :-
 3671    A=unit(_, _, E, F),
 3672    (   E==fixed
 3673    ->  G=[A|C]
 3674    ;   dependency_insert(C, A, F, G)
 3675    ),
 3676    dependency_reorder(B, G, D).
 3677dependency_insert([], A, _, [A]).
 3678dependency_insert([A|B], C, D, E) :-
 3679    A=unit(F, _, _, _),
 3680    (   memberchk(F, D)
 3681    ->  E=[C, A|B]
 3682    ;   E=[A|G],
 3683        dependency_insert(B, C, D, G)
 3684    ).
 3685build_units(A, B, C, D) :-
 3686    build_retrieval_units(A, 1, E, C, F, D, G),
 3687    build_guard_units(B, E, F, G).
 3688build_retrieval_units([], A, A, B, B, C, C).
 3689build_retrieval_units([A|B], C, D, E, F, G, H) :-
 3690    term_variables(A, I),
 3691    update_unit_dictionary(I, C, E, J, [], K),
 3692    G=[unit(C, A, fixed, K)|L],
 3693    M is C+1,
 3694    build_retrieval_units(B,
 3695                          M,
 3696                          D,
 3697                          J,
 3698                          F,
 3699                          L,
 3700                          H).
 3701initialize_unit_dictionary(A, B) :-
 3702    term_variables(A, C),
 3703    pair_all_with(C, 0, B).
 3704update_unit_dictionary([], _, A, A, B, B).
 3705update_unit_dictionary([A|B], C, D, E, F, G) :-
 3706    (   lookup_eq(D, A, H)
 3707    ->  (   (   H==C
 3708            ;   memberchk(H, F)
 3709            )
 3710        ->  I=F
 3711        ;   I=[H|F]
 3712        ),
 3713        J=D
 3714    ;   J=[A-C|D],
 3715        I=F
 3716    ),
 3717    update_unit_dictionary(B, C, J, E, I, G).
 3718build_guard_units(A, B, C, D) :-
 3719    (   A=[E]
 3720    ->  D=[unit(B, E, fixed, [])]
 3721    ;   A=[E|F]
 3722    ->  term_variables(E, G),
 3723        update_unit_dictionary2(G, B, C, H, [], I),
 3724        D=[unit(B, E, movable, I)|J],
 3725        K is B+1,
 3726        build_guard_units(F, K, H, J)
 3727    ).
 3728update_unit_dictionary2([], _, A, A, B, B).
 3729update_unit_dictionary2([A|B], C, D, E, F, G) :-
 3730    (   lookup_eq(D, A, H)
 3731    ->  (   (   H==C
 3732            ;   memberchk(H, F)
 3733            )
 3734        ->  I=F
 3735        ;   I=[H|F]
 3736        ),
 3737        J=[A-C|D]
 3738    ;   J=[A-C|D],
 3739        I=F
 3740    ),
 3741    update_unit_dictionary2(B, C, J, E, I, G).
 3742functional_dependency_analysis(A) :-
 3743    (   fail,
 3744        chr_pp_flag(functional_dependency_analysis, on)
 3745    ->  functional_dependency_analysis_main(A)
 3746    ;   true
 3747    ).
 3748functional_dependency_analysis_main([]).
 3749functional_dependency_analysis_main([A|B]) :-
 3750    (   discover_unique_pattern(A, C, D, E, F)
 3751    ->  functional_dependency(C, D, E, F)
 3752    ;   true
 3753    ),
 3754    functional_dependency_analysis_main(B).
 3755discover_unique_pattern(A, B/C, D, E, F) :-
 3756    A=pragma(G, _, _, _, D),
 3757    G=rule(H, I, J, _),
 3758    (   H=[K],
 3759        I=[L]
 3760    ->  true
 3761    ;   H=[K, L],
 3762        I==[]
 3763    ->  true
 3764    ),
 3765    check_unique_constraints(K, L, J, D, M),
 3766    term_variables(K, N),
 3767    \+ ( member(O, N),
 3768         lookup_eq(M, O, P),
 3769         memberchk_eq(P, N)
 3770       ),
 3771    select_pragma_unique_variables(N, M, Q),
 3772    copy_term_nat(K-Q, E-F),
 3773    functor(K, B, C).
 3774select_pragma_unique_variables([], _, []).
 3775select_pragma_unique_variables([A|B], C, D) :-
 3776    (   lookup_eq(C, A, _)
 3777    ->  D=E
 3778    ;   D=[A|E]
 3779    ),
 3780    select_pragma_unique_variables(B, C, E).
 3781set_semantics_rules(A) :-
 3782    (   fail,
 3783        chr_pp_flag(set_semantics_rule, on)
 3784    ->  set_semantics_rules_main(A)
 3785    ;   true
 3786    ).
 3787set_semantics_rules_main([]).
 3788set_semantics_rules_main([A|B]) :-
 3789    set_semantics_rule_main(A),
 3790    set_semantics_rules_main(B).
 3791set_semantics_rule_main(A) :-
 3792    A=pragma(B, C, _, _, D),
 3793    (   B=rule([E], [F], true, _),
 3794        C=ids([G], [H]),
 3795        \+ is_passive(D, G),
 3796        functor(E, I, J),
 3797        get_functional_dependency(I/J, D, K, L),
 3798        copy_term_nat(K-L, E-M),
 3799        copy_term_nat(K-L, F-N),
 3800        M==N
 3801    ->  passive(D, H)
 3802    ;   true
 3803    ).
 3804check_unique_constraints(A, B, C, D, E) :-
 3805    \+ any_passive_head(D),
 3806    variable_replacement(A-B, B-A, E),
 3807    copy_with_variable_replacement(C, F, E),
 3808    negate_b(C, G),
 3809    once(entails_b(G, F)).
 3810symmetry_analysis(A) :-
 3811    (   chr_pp_flag(check_unnecessary_active, off)
 3812    ->  true
 3813    ;   symmetry_analysis_main(A)
 3814    ).
 3815symmetry_analysis_main([]).
 3816symmetry_analysis_main([A|B]) :-
 3817    A=pragma(C, ids(D, E), _, _, F),
 3818    C=rule(G, H, _, _),
 3819    (   (   \+ chr_pp_flag(check_unnecessary_active, simplification)
 3820        ;   H==[]
 3821        ),
 3822        G\==[]
 3823    ->  symmetry_analysis_heads_simplification(G,
 3824                                               D,
 3825                                               [],
 3826                                               [],
 3827                                               C,
 3828                                               F),
 3829        symmetry_analysis_heads_propagation(H,
 3830                                            E,
 3831                                            [],
 3832                                            [],
 3833                                            C,
 3834                                            F)
 3835    ;   true
 3836    ),
 3837    symmetry_analysis_main(B).
 3838symmetry_analysis_heads_simplification([], [], _, _, _, _).
 3839symmetry_analysis_heads_simplification([A|B], [C|D], E, F, G, H) :-
 3840    (   \+ is_passive(H, C),
 3841        member2(E, F, I-J),
 3842        \+ is_passive(H, J),
 3843        variable_replacement(I, A, K),
 3844        copy_with_variable_replacement(G, L, K),
 3845        identical_guarded_rules(G, L)
 3846    ->  passive(H, C)
 3847    ;   true
 3848    ),
 3849    symmetry_analysis_heads_simplification(B,
 3850                                           D,
 3851                                           [A|E],
 3852                                           [C|F],
 3853                                           G,
 3854                                           H).
 3855symmetry_analysis_heads_propagation([], [], _, _, _, _).
 3856symmetry_analysis_heads_propagation([A|B], [C|D], E, F, G, H) :-
 3857    (   \+ is_passive(H, C),
 3858        member2(E, F, I-J),
 3859        \+ is_passive(H, J),
 3860        variable_replacement(I, A, K),
 3861        copy_with_variable_replacement(G, L, K),
 3862        identical_rules(G, L)
 3863    ->  passive(H, C)
 3864    ;   true
 3865    ),
 3866    symmetry_analysis_heads_propagation(B,
 3867                                        D,
 3868                                        [A|E],
 3869                                        [C|F],
 3870                                        G,
 3871                                        H).
 3872simplification_code(A, B, C, D, E, F, G, H, I, J) :-
 3873    E=pragma(K, _, _, _, L),
 3874    head_info1(A, F, _, M, N, O),
 3875    build_head(F, H, N, P),
 3876    get_constraint_mode(F, Q),
 3877    head_arg_matches(O, Q, [], R, S, [], T),
 3878    guard_splitting(K, U),
 3879    (   is_stored_in_guard(F, L)
 3880    ->  V=[_|U]
 3881    ;   V=U
 3882    ),
 3883    guard_via_reschedule_new(C,
 3884                             V,
 3885                             A,
 3886                             W,
 3887                             X,
 3888                             Y),
 3889    rest_heads_retrieval_and_matching(C,
 3890                                      D,
 3891                                      A,
 3892                                      X,
 3893                                      Z,
 3894                                      S,
 3895                                      A1,
 3896                                      [],
 3897                                      [],
 3898                                      [],
 3899                                      T,
 3900                                      _),
 3901    guard_body_copies3(K, V, A1, W, B1),
 3902    (   is_stored_in_guard(F, L)
 3903    ->  gen_occ_allocation_in_guard(F,
 3904                                    G,
 3905                                    C1,
 3906                                    M,
 3907                                    D1),
 3908        gen_uncond_attach_goal(F, M, C1, E1, _),
 3909        W=[F1|_],
 3910        F1=(D1, E1)
 3911    ;   true
 3912    ),
 3913    partner_constraint_detachments(Z, C, A1, G1),
 3914    active_constraint_detachment(H, M, A, A1, H1),
 3915    (   chr_pp_flag(debugable, on)
 3916    ->  K=rule(_, _, I1, J1),
 3917        my_term_copy(I1-J1, A1, K1-L1),
 3918        sort_by_key([M|Z], [B|D], M1),
 3919        N1='chr debug_event'(try(M1, [], K1, L1)),
 3920        O1='chr debug_event'(apply(M1, [], K1, L1)),
 3921        instrument_goal(P1, N1, O1, Q1)
 3922    ;   Q1=P1
 3923    ),
 3924    actual_cut(F, G, P1),
 3925    R1=(P:-R, Y, Q1, G1, H1, B1),
 3926    add_location(R1, L, S1),
 3927    I=[S1|J].
 3928actual_cut(A, B, C) :-
 3929    (   unconditional_occurrence(A, B),
 3930        chr_pp_flag(late_allocation, on)
 3931    ->  C=true
 3932    ;   C=!
 3933    ).
 3934add_location(A, B, C) :-
 3935    (   chr_pp_flag(line_numbers, on)
 3936    ->  get_line_number(B, D:E),
 3937        C='$source_location'(D, E):A
 3938    ;   C=A
 3939    ).
 3940add_dummy_location(A, B) :-
 3941    (   chr_pp_flag(line_numbers, on)
 3942    ->  get_chr_source_file(C),
 3943        B='$source_location'(C, 1):A
 3944    ;   B=A
 3945    ).
 3946head_arg_matches(A, B, C, D, E) :-
 3947    head_arg_matches(A, B, C, D, E, [], _).
 3948head_arg_matches(A, B, C, D, E, F, G) :-
 3949    head_arg_matches_(A, B, C, F, H, E, G),
 3950    list2conj(H, D).
 3951head_arg_matches_([], [], A, B, [], A, B).
 3952head_arg_matches_([silent(A-_)|B], [C|D], E, F, G, H, I) :-
 3953    !,
 3954    (   C==(+)
 3955    ->  term_variables(A, J, F),
 3956        head_arg_matches_(B,
 3957                          D,
 3958                          E,
 3959                          J,
 3960                          G,
 3961                          H,
 3962                          I)
 3963    ;   head_arg_matches_(B,
 3964                          D,
 3965                          E,
 3966                          F,
 3967                          G,
 3968                          H,
 3969                          I)
 3970    ).
 3971head_arg_matches_([A-B|C], [D|E], F, G, H, I, J) :-
 3972    (   var(A)
 3973    ->  (   lookup_eq(F, A, K)
 3974        ->  (   D=(+)
 3975            ->  (   memberchk_eq(A, G)
 3976                ->  H=[B=K|L],
 3977                    M=G
 3978                ;   H=[B==K|L],
 3979                    M=[A|G]
 3980                )
 3981            ;   H=[B==K|L],
 3982                M=G
 3983            ),
 3984            N=F
 3985        ;   N=[A-B|F],
 3986            H=L,
 3987            (   D=(+)
 3988            ->  M=[A|G]
 3989            ;   M=G
 3990            )
 3991        ),
 3992        O=C,
 3993        P=E
 3994    ;   ground(A),
 3995        A='$chr_identifier_match'(Q, R)
 3996    ->  identifier_label_atom(R, B, Q, S),
 3997        H=[S|L],
 3998        F=N,
 3999        M=G,
 4000        O=C,
 4001        P=E
 4002    ;   atomic(A)
 4003    ->  (   D=(+)
 4004        ->  H=[B=A|L]
 4005        ;   H=[B==A|L]
 4006        ),
 4007        F=N,
 4008        M=G,
 4009        O=C,
 4010        P=E
 4011    ;   D==(+),
 4012        is_ground(G, A)
 4013    ->  copy_with_variable_replacement(A, T, F),
 4014        H=[B=T|L],
 4015        F=N,
 4016        M=G,
 4017        O=C,
 4018        P=E
 4019    ;   D==(?),
 4020        is_ground(G, A)
 4021    ->  copy_with_variable_replacement(A, T, F),
 4022        H=[B==T|L],
 4023        F=N,
 4024        M=G,
 4025        O=C,
 4026        P=E
 4027    ;   A=..[_|U],
 4028        functor(A, V, W),
 4029        functor(X, V, W),
 4030        X=..[_|Y],
 4031        (   D=(+)
 4032        ->  H=[B=X|L]
 4033        ;   H=[nonvar(B), B=X|L]
 4034        ),
 4035        pairup(U, Y, Z),
 4036        append(Z, C, O),
 4037        replicate(W, D, A1),
 4038        append(A1, E, P),
 4039        N=F,
 4040        M=G
 4041    ),
 4042    head_arg_matches_(O,
 4043                      P,
 4044                      N,
 4045                      M,
 4046                      L,
 4047                      I,
 4048                      J).
 4049add_heads_types([], A, A).
 4050add_heads_types([A|B], C, D) :-
 4051    add_head_types(A, C, E),
 4052    add_heads_types(B, E, D).
 4053add_head_types(A, B, C) :-
 4054    functor(A, D, E),
 4055    get_constraint_type_det(D/E, F),
 4056    A=..[_|G],
 4057    add_args_types(G, F, B, C).
 4058add_args_types([], [], A, A).
 4059add_args_types([A|B], [C|D], E, F) :-
 4060    add_arg_types(A, C, E, G),
 4061    add_args_types(B, D, G, F).
 4062add_arg_types(A, B, C, D) :-
 4063    (   B==any
 4064    ->  D=C
 4065    ;   var(A)
 4066    ->  (   lookup_eq(C, A, _)
 4067        ->  D=C
 4068        ;   D=[A-B|C]
 4069        )
 4070    ;   D=C
 4071    ).
 4072add_heads_ground_variables([], A, A).
 4073add_heads_ground_variables([A|B], C, D) :-
 4074    add_head_ground_variables(A, C, E),
 4075    add_heads_ground_variables(B, E, D).
 4076add_head_ground_variables(A, B, C) :-
 4077    functor(A, D, E),
 4078    get_constraint_mode(D/E, F),
 4079    A=..[_|G],
 4080    add_arg_ground_variables(G, F, B, C).
 4081add_arg_ground_variables([], [], A, A).
 4082add_arg_ground_variables([A|B], [C|D], E, F) :-
 4083    (   C==(+)
 4084    ->  term_variables(A, G),
 4085        add_var_ground_variables(G, E, H)
 4086    ;   E=H
 4087    ),
 4088    add_arg_ground_variables(B, D, H, F).
 4089add_var_ground_variables([], A, A).
 4090add_var_ground_variables([A|B], C, D) :-
 4091    (   memberchk_eq(A, C)
 4092    ->  E=C
 4093    ;   E=[A|C]
 4094    ),
 4095    add_var_ground_variables(B, E, D).
 4096is_ground(A, B) :-
 4097    (   ground(B)
 4098    ->  true
 4099    ;   compound(B)
 4100    ->  B=..[_|C],
 4101        maplist(is_ground(A), C)
 4102    ;   memberchk_eq(B, A)
 4103    ).
 4104check_ground(A, B, C) :-
 4105    term_variables(B, D),
 4106    check_ground_variables(D, A, C).
 4107check_ground_variables([], _, true).
 4108check_ground_variables([A|B], C, D) :-
 4109    (   memberchk_eq(A, C)
 4110    ->  check_ground_variables(B, C, D)
 4111    ;   D=(ground(A), E),
 4112        check_ground_variables(B, C, E)
 4113    ).
 4114rest_heads_retrieval_and_matching(A, B, C, D, E, F, G, H, I, J) :-
 4115    rest_heads_retrieval_and_matching(A,
 4116                                      B,
 4117                                      C,
 4118                                      D,
 4119                                      E,
 4120                                      F,
 4121                                      G,
 4122                                      H,
 4123                                      I,
 4124                                      J,
 4125                                      [],
 4126                                      _).
 4127rest_heads_retrieval_and_matching(A, B, C, D, E, F, G, H, I, J, K, L) :-
 4128    (   A=[_|_]
 4129    ->  rest_heads_retrieval_and_matching_n(A,
 4130                                            B,
 4131                                            H,
 4132                                            I,
 4133                                            C,
 4134                                            D,
 4135                                            E,
 4136                                            F,
 4137                                            G,
 4138                                            J,
 4139                                            K,
 4140                                            L)
 4141    ;   D=[],
 4142        E=[],
 4143        F=G,
 4144        K=L
 4145    ).
 4146rest_heads_retrieval_and_matching_n([], _, _, _, _, [], [], A, A, _, B, B).
 4147rest_heads_retrieval_and_matching_n([A|B], [_|C], D, E, F, [G|H], [I|J], K, L, _, M, N) :-
 4148    functor(A, O, P),
 4149    head_info(A, P, Q, _, _, R),
 4150    get_store_type(O/P, S),
 4151    (   S==default
 4152    ->  passive_head_via(A, [F|D], K, T, U),
 4153        delay_phase_end(validate_store_type_assumptions,
 4154                        (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))),
 4155        get_constraint_mode(O/P, X),
 4156        head_arg_matches(R,
 4157                         X,
 4158                         K,
 4159                         Y,
 4160                         Z,
 4161                         M,
 4162                         A1),
 4163        B1=R,
 4164        sbag_member_call(I, U, C1),
 4165        D1=(T, C1, I=V, W),
 4166        inline_matching_goal(Y, E1)
 4167    ;   delay_phase_end(validate_store_type_assumptions,
 4168                        (static_suspension_term(O/P, V), get_static_suspension_term_field(arguments, O/P, V, Q))),
 4169        existential_lookup(S,
 4170                           A,
 4171                           [F|D],
 4172                           K,
 4173                           M,
 4174                           V,
 4175                           D1,
 4176                           I,
 4177                           R,
 4178                           B1),
 4179        get_constraint_mode(O/P, X),
 4180        F1=X,
 4181        head_arg_matches(B1,
 4182                         F1,
 4183                         K,
 4184                         Y,
 4185                         Z,
 4186                         M,
 4187                         A1),
 4188        filter_append(B1, Z, G1),
 4189        translate(A1, G1, H1),
 4190        translate(A1, Z, I1),
 4191        inline_matching_goal(Y, E1, H1, I1)
 4192    ),
 4193    different_from_other_susps(A, I, D, E, J1),
 4194    G=(D1, J1, E1),
 4195    rest_heads_retrieval_and_matching_n(B,
 4196                                        C,
 4197                                        [A|D],
 4198                                        [I|E],
 4199                                        F,
 4200                                        H,
 4201                                        J,
 4202                                        Z,
 4203                                        L,
 4204                                        _,
 4205                                        A1,
 4206                                        N).
 4207inline_matching_goal(A, B) :-
 4208    inline_matching_goal(A, B, [], []).
 4209inline_matching_goal(A==B, true, C, D) :-
 4210    memberchk_eq(A, C),
 4211    memberchk_eq(B, D),
 4212    A=B,
 4213    !.
 4214inline_matching_goal((A, B), (C, D), E, F) :-
 4215    !,
 4216    inline_matching_goal(A, C, E, F),
 4217    inline_matching_goal(B, D, E, F).
 4218inline_matching_goal(A, A, _, _).
 4219filter_mode([], _, _, []).
 4220filter_mode([A-B|C], [_-D|E], [F|G], H) :-
 4221    (   B==D
 4222    ->  H=[F|I],
 4223        filter_mode(C, E, G, I)
 4224    ;   filter_mode([A-B|C], E, G, H)
 4225    ).
 4226filter_append([], A, A).
 4227filter_append([A|B], C, D) :-
 4228    (   A=silent(_)
 4229    ->  filter_append(B, C, D)
 4230    ;   D=[A|E],
 4231        filter_append(B, C, E)
 4232    ).
 4233check_unique_keys([], _).
 4234check_unique_keys([A|B], C) :-
 4235    lookup_eq(C, A, _),
 4236    check_unique_keys(B, C).
 4237different_from_other_susps(A, B, C, D, E) :-
 4238    different_from_other_susps_(C, D, A, B, F),
 4239    list2conj(F, E).
 4240different_from_other_susps_(_, [], _, _, []) :-
 4241    !.
 4242different_from_other_susps_([A|B], [C|D], E, F, G) :-
 4243    (   functor(E, H, I),
 4244        functor(A, H, I),
 4245        copy_term_nat(A-E, J-K),
 4246        \+ \+ J=K
 4247    ->  G=[F\==C|L]
 4248    ;   G=L
 4249    ),
 4250    different_from_other_susps_(B, D, E, F, L).
 4251passive_head_via(A, B, C, D, E) :-
 4252    functor(A, F, G),
 4253    get_constraint_index(F/G, _),
 4254    common_variables(A, B, H),
 4255    ground_vars([A], I),
 4256    list_difference_eq(H, I, J),
 4257    global_list_store_name(F/G, K),
 4258    L=nb_getval(K, E),
 4259    get_constraint_mode(F/G, M),
 4260    (   N==[]
 4261    ->  D=L
 4262    ;   member(O, J),
 4263        nth1(P, M, -),
 4264        arg(P, A, Q),
 4265        Q==O
 4266    ->  translate([O], C, [R]),
 4267        gen_get_mod_constraints(F/G, R, S, E),
 4268        D=S
 4269    ;   translate(J, C, N),
 4270        add_heads_types(B, [], T),
 4271        my_term_copy(T, C, U),
 4272        gen_get_mod_constraints(F/G,
 4273                                N,
 4274                                U,
 4275                                V,
 4276                                S,
 4277                                E),
 4278        D=(V->S;L)
 4279    ).
 4280common_variables(A, B, C) :-
 4281    term_variables(A, D),
 4282    term_variables(B, E),
 4283    intersect_eq(D, E, C).
 4284gen_get_mod_constraints(A, B, C, D, E, F) :-
 4285    via_goal(B, C, D, G),
 4286    get_target_module(H),
 4287    E=(get_attr(G, H, I), J),
 4288    get_max_constraint_index(K),
 4289    (   K==1
 4290    ->  J=true,
 4291        F=I
 4292    ;   get_constraint_index(A, L),
 4293        get_suspensions(K, L, I, J, F)
 4294    ).
 4295via_goal(A, B, C, D) :-
 4296    (   A=[]
 4297    ->  C=fail
 4298    ;   A=[E]
 4299    ->  lookup_type(B, E, F),
 4300        (   atomic_type(F)
 4301        ->  C=var(E),
 4302            E=D
 4303        ;   C='chr newvia_1'(E, D)
 4304        )
 4305    ;   A=[E, G]
 4306    ->  C='chr newvia_2'(E, G, D)
 4307    ;   C='chr newvia'(A, D)
 4308    ).
 4309lookup_type(A, B, C) :-
 4310    (   lookup_eq(A, B, C)
 4311    ->  true
 4312    ;   C=any
 4313    ).
 4314gen_get_mod_constraints(A, B, C, D) :-
 4315    get_target_module(E),
 4316    C=(get_attr(B, E, F), G),
 4317    get_max_constraint_index(H),
 4318    (   H==1
 4319    ->  G=true,
 4320        D=F
 4321    ;   get_constraint_index(A, I),
 4322        get_suspensions(H, I, F, G, D)
 4323    ).
 4324guard_body_copies(A, B, C, D) :-
 4325    guard_body_copies2(A, B, E, D),
 4326    list2conj(E, C).
 4327guard_body_copies2(A, B, C, D) :-
 4328    A=rule(_, E, F, G),
 4329    conj2list(F, H),
 4330    split_off_simple_guard(H, B, I, J),
 4331    my_term_copy(I-J, B, K, L-M),
 4332    append(L, [N], C),
 4333    term_variables(J, O),
 4334    term_variables(M, P),
 4335    ground_vars(E, Q),
 4336    list_difference_eq(O, Q, R),
 4337    (   chr_pp_flag(guard_locks, off)
 4338    ->  S=[],
 4339        T=[]
 4340    ;   bagof(U-V,
 4341              W^X^(lists:member(W, R), pairlist:lookup_eq(B, W, X), memberchk_eq(X, P), chr_lock(X, U), chr_unlock(X, V)),
 4342              Y)
 4343    ->  once(pairup(S, T, Y))
 4344    ;   S=[],
 4345        T=[]
 4346    ),
 4347    list2conj(S, Z),
 4348    list2conj(T, A1),
 4349    list2conj(M, B1),
 4350    N=(Z, B1, A1),
 4351    my_term_copy(G, K, D).
 4352split_off_simple_guard([], _, [], []).
 4353split_off_simple_guard([A|B], C, D, E) :-
 4354    (   simple_guard(A, C)
 4355    ->  D=[A|F],
 4356        split_off_simple_guard(B, C, F, E)
 4357    ;   D=[],
 4358        E=[A|B]
 4359    ).
 4360simple_guard(A, B) :-
 4361    binds_b(A, C),
 4362    \+ ( member(D, C),
 4363         lookup_eq(B, D, _)
 4364       ).
 4365active_constraint_detachment(A, B, C, D, E) :-
 4366    functor(C, F, G),
 4367    H=F/G,
 4368    (   is_stored(H)
 4369    ->  (   (   A==[0],
 4370                chr_pp_flag(store_in_guards, off)
 4371            ;   get_allocation_occurrence(H, I),
 4372                get_max_occurrence(H, J),
 4373                J<I
 4374            ),
 4375            only_ground_indexed_arguments(H),
 4376            chr_pp_flag(late_allocation, on)
 4377        ->  E=true
 4378        ;   gen_uncond_susp_detachment(C,
 4379                                       B,
 4380                                       active,
 4381                                       D,
 4382                                       K),
 4383            (   chr_pp_flag(late_allocation, on)
 4384            ->  E=(var(B)->true;K)
 4385            ;   E=K
 4386            )
 4387        )
 4388    ;   E=true
 4389    ).
 4390partner_constraint_detachments([], [], _, true).
 4391partner_constraint_detachments([A|B], [C|D], E, (F, G)) :-
 4392    gen_uncond_susp_detachment(C, A, partner, E, F),
 4393    partner_constraint_detachments(B, D, E, G).
 4394gen_uncond_susp_detachment(A, B, C, D, E) :-
 4395    functor(A, F, G),
 4396    H=F/G,
 4397    (   is_stored(H)
 4398    ->  E=(I, J),
 4399        (   chr_pp_flag(debugable, on)
 4400        ->  I='chr debug_event'(remove(B))
 4401        ;   I=true
 4402        ),
 4403        remove_constraint_goal(H,
 4404                               B,
 4405                               K,
 4406                               true,
 4407                               (L, M),
 4408                               C,
 4409                               J),
 4410        delete_constraint_goal(A, B, D, L),
 4411        (   \+ only_ground_indexed_arguments(H),
 4412            \+ get_store_type(H, var_assoc_store(_, _))
 4413        ->  detach_constraint_atom(H, K, B, M)
 4414        ;   M=true
 4415        )
 4416    ;   E=true
 4417    ).
 4418simpagation_head1_code(A, B, C, D, E, F/G, _, H, I, J) :-
 4419    E=pragma(K, ids(_, L), _, _, M),
 4420    K=rule(_, N, O, P),
 4421    head_info(A, G, Q, R, S, T),
 4422    get_constraint_mode(F/G, U),
 4423    head_arg_matches(T, U, [], V, W, [], X),
 4424    build_head(F, G, H, S, Y),
 4425    append(C, N, Z),
 4426    append(D, L, A1),
 4427    reorder_heads(M, A, Z, A1, B1, C1),
 4428    guard_splitting(K, D1),
 4429    (   is_stored_in_guard(F/G, M)
 4430    ->  E1=[_|D1]
 4431    ;   E1=D1
 4432    ),
 4433    guard_via_reschedule_new(B1,
 4434                             E1,
 4435                             A,
 4436                             F1,
 4437                             G1,
 4438                             H1),
 4439    rest_heads_retrieval_and_matching(B1,
 4440                                      C1,
 4441                                      A,
 4442                                      G1,
 4443                                      I1,
 4444                                      W,
 4445                                      J1,
 4446                                      [],
 4447                                      [],
 4448                                      [],
 4449                                      X,
 4450                                      _),
 4451    split_by_ids(C1,
 4452                 I1,
 4453                 D,
 4454                 K1,
 4455                 L1,
 4456                 M1,
 4457                 N1),
 4458    guard_body_copies3(K, E1, J1, F1, O1),
 4459    (   is_stored_in_guard(F/G, M)
 4460    ->  gen_uncond_attach_goal(F/G,
 4461                               R,
 4462                               Q,
 4463                               P1,
 4464                               _),
 4465        F1=[Q1|_],
 4466        Q1=P1
 4467    ;   true
 4468    ),
 4469    sort_by_key(K1, L1, R1),
 4470    partner_constraint_detachments(R1, C, J1, S1),
 4471    active_constraint_detachment(H, R, A, J1, T1),
 4472    (   chr_pp_flag(debugable, on)
 4473    ->  my_term_copy(O-P, J1, U1-V1),
 4474        sort_by_key([R|K1], [B|L1], W1),
 4475        sort_by_key(M1, N1, X1),
 4476        Y1='chr debug_event'(try(W1, X1, U1, V1)),
 4477        Z1='chr debug_event'(apply(W1, X1, U1, V1)),
 4478        instrument_goal(!, Y1, Z1, A2)
 4479    ;   A2=!
 4480    ),
 4481    B2=(Y:-V, H1, A2, S1, T1, O1),
 4482    add_location(B2, M, C2),
 4483    I=[C2|J].
 4484split_by_ids([], [], _, [], []).
 4485split_by_ids([A|B], [C|D], E, F, G) :-
 4486    (   memberchk_eq(A, E)
 4487    ->  F=[C|H],
 4488        G=I
 4489    ;   F=H,
 4490        G=[C|I]
 4491    ),
 4492    split_by_ids(B, D, E, H, I).
 4493split_by_ids([], [], _, [], [], [], []).
 4494split_by_ids([A|B], [C|D], E, F, G, H, I) :-
 4495    (   memberchk_eq(A, E)
 4496    ->  F=[C|J],
 4497        G=[A|K],
 4498        H=L,
 4499        I=M
 4500    ;   F=J,
 4501        G=K,
 4502        H=[C|L],
 4503        I=[A|M]
 4504    ),
 4505    split_by_ids(B, D, E, J, K, L, M).
 4506simpagation_head2_code(A, B, C, D, E, F, G, H, I, J) :-
 4507    E=pragma(K, ids(L, M), _, _, N),
 4508    K=rule(O, _, P, Q),
 4509    append(O, C, R),
 4510    append(L, D, S),
 4511    reorder_heads(N,
 4512                  A,
 4513                  R,
 4514                  S,
 4515                  [T|U],
 4516                  [V|W]),
 4517    simpagation_head2_prelude(A,
 4518                              T,
 4519                              [U, P, Q],
 4520                              F,
 4521                              G,
 4522                              H,
 4523                              I,
 4524                              X),
 4525    extend_id(H, Y),
 4526    (   memberchk_eq(V, M)
 4527    ->  simpagation_universal_searches(U,
 4528                                       W,
 4529                                       M,
 4530                                       [T, A],
 4531                                       K,
 4532                                       F,
 4533                                       G,
 4534                                       Z,
 4535                                       A1,
 4536                                       B1,
 4537                                       Y,
 4538                                       C1,
 4539                                       X,
 4540                                       D1)
 4541    ;   X=D1,
 4542        Y=C1,
 4543        Z=U,
 4544        A1=[T, A],
 4545        B1=W
 4546    ),
 4547    universal_search_iterator_end(A1,
 4548                                  Z,
 4549                                  K,
 4550                                  F,
 4551                                  G,
 4552                                  C1,
 4553                                  D1,
 4554                                  E1),
 4555    simpagation_head2_worker(A1,
 4556                             Z,
 4557                             B1,
 4558                             B,
 4559                             E,
 4560                             F,
 4561                             G,
 4562                             C1,
 4563                             E1,
 4564                             J).
 4565simpagation_universal_searches([], [], _, A, _, _, _, [], A, [], B, B, C, C).
 4566simpagation_universal_searches(A, [B|C], D, E, F, G, H, I, J, K, L, M, N, O) :-
 4567    A=[P|Q],
 4568    inc_id(L, R),
 4569    universal_search_iterator_end(E,
 4570                                  A,
 4571                                  F,
 4572                                  G,
 4573                                  H,
 4574                                  L,
 4575                                  N,
 4576                                  S),
 4577    universal_search_iterator(A,
 4578                              E,
 4579                              F,
 4580                              G,
 4581                              H,
 4582                              L,
 4583                              S,
 4584                              T),
 4585    (   memberchk_eq(B, D)
 4586    ->  simpagation_universal_searches(Q,
 4587                                       C,
 4588                                       D,
 4589                                       [P|E],
 4590                                       F,
 4591                                       G,
 4592                                       H,
 4593                                       I,
 4594                                       J,
 4595                                       K,
 4596                                       R,
 4597                                       M,
 4598                                       T,
 4599                                       O)
 4600    ;   M=R,
 4601        T=O,
 4602        I=Q,
 4603        J=[P|E],
 4604        C=K
 4605    ).
 4606simpagation_head2_prelude(A, B, C, D/E, F, G, H, I) :-
 4607    head_info(A, E, J, K, L, M),
 4608    build_head(D, E, G, L, N),
 4609    get_constraint_mode(D/E, O),
 4610    head_arg_matches(M, O, [], P, Q, [], R),
 4611    lookup_passive_head(B, [A], Q, R, S, T),
 4612    gen_occ_allocation(D/E, F, J, K, U),
 4613    extend_id(G, V),
 4614    extra_active_delegate_variables(A,
 4615                                    [B|C],
 4616                                    Q,
 4617                                    W),
 4618    append([T|L], W, X),
 4619    build_head(D, E, [F|V], X, Y),
 4620    Z=(N:-P, S, !, U, Y),
 4621    add_dummy_location(Z, A1),
 4622    H=[A1|I].
 4623extra_active_delegate_variables(A, B, C, D) :-
 4624    A=..[_|E],
 4625    delegate_variables(A, B, C, E, D).
 4626passive_delegate_variables(A, B, C, D, E) :-
 4627    term_variables(B, F),
 4628    delegate_variables(A, C, D, F, E).
 4629delegate_variables(A, B, C, D, E) :-
 4630    term_variables(A, F),
 4631    term_variables(B, G),
 4632    intersect_eq(F, G, H),
 4633    list_difference_eq(H, D, I),
 4634    translate(I, C, E).
 4635simpagation_head2_worker([A|B], C, D, _, E, F/G, H, I, J, K) :-
 4636    E=pragma(L, ids(M, _), N, _, O),
 4637    L=rule(_, _, P, Q),
 4638    get_prop_inner_loop_vars(B,
 4639                             [A, C, P, Q],
 4640                             R,
 4641                             S,
 4642                             T,
 4643                             U,
 4644                             V),
 4645    gen_var(W),
 4646    gen_var(X),
 4647    functor(A, Y, Z),
 4648    gen_vars(Z, A1),
 4649    head_info(A, Z, A1, W, _, B1),
 4650    get_constraint_mode(Y/Z, C1),
 4651    head_arg_matches(B1, C1, S, D1, E1, [], _),
 4652    delay_phase_end(validate_store_type_assumptions,
 4653                    (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))),
 4654    different_from_other_susps(A, W, B, V, H1),
 4655    I1=(W=F1, G1, H1, D1),
 4656    J1=[[W|X]|R],
 4657    build_head(F, G, [H|I], J1, K1),
 4658    guard_splitting(L, L1),
 4659    (   is_stored_in_guard(F/G, O)
 4660    ->  M1=[_|L1]
 4661    ;   M1=L1
 4662    ),
 4663    guard_via_reschedule_new(C,
 4664                             M1,
 4665                             [A|B],
 4666                             N1,
 4667                             O1,
 4668                             P1),
 4669    rest_heads_retrieval_and_matching(C,
 4670                                      D,
 4671                                      [A|B],
 4672                                      O1,
 4673                                      Q1,
 4674                                      E1,
 4675                                      R1,
 4676                                      [A|B],
 4677                                      [W|V],
 4678                                      []),
 4679    split_by_ids(D, Q1, M, S1, T1),
 4680    split_by_ids(D, C, M, U1, _),
 4681    partner_constraint_detachments([W|S1],
 4682                                   [A|U1],
 4683                                   R1,
 4684                                   V1),
 4685    W1=[X|R],
 4686    build_head(F, G, [H|I], W1, X1),
 4687    Y1=[[]|R],
 4688    build_head(F, G, [H|I], Y1, Z1),
 4689    guard_body_copies3(L, M1, R1, N1, A2),
 4690    (   is_stored_in_guard(F/G, O)
 4691    ->  N1=[B2|_]
 4692    ;   true
 4693    ),
 4694    (   is_observed(F/G, H)
 4695    ->  gen_uncond_attach_goal(F/G,
 4696                               T,
 4697                               U,
 4698                               C2,
 4699                               D2),
 4700        gen_state_cond_call(T,
 4701                            F/G,
 4702                            X1,
 4703                            D2,
 4704                            E2),
 4705        gen_state_cond_call(T,
 4706                            F/G,
 4707                            Z1,
 4708                            D2,
 4709                            F2)
 4710    ;   C2=true,
 4711        E2=X1,
 4712        F2=Z1
 4713    ),
 4714    (   chr_pp_flag(debugable, on)
 4715    ->  my_term_copy(P-Q, S, G2-H2),
 4716        I2='chr debug_event'(try([W|S1], [T|T1], G2, H2)),
 4717        J2='chr debug_event'(apply([W|S1], [T|T1], G2, H2))
 4718    ;   I2=true,
 4719        J2=true
 4720    ),
 4721    (   is_stored_in_guard(F/G, O)
 4722    ->  B2=C2,
 4723        K2=true
 4724    ;   B2=true,
 4725        K2=C2
 4726    ),
 4727    (   member(unique(_, L2), N),
 4728        check_unique_keys(L2, S)
 4729    ->  M2=(K1:-I1->(P1, I2->J2, V1, K2, A2, F2;Z1);X1)
 4730    ;   M2=(K1:-I1, P1, I2->J2, V1, K2, A2, E2;X1)
 4731    ),
 4732    add_location(M2, O, N2),
 4733    J=[N2|K].
 4734gen_state_cond_call(A, B, C, D, E) :-
 4735    (   may_trigger(B)
 4736    ->  does_use_field(B, generation),
 4737        delay_phase_end(validate_store_type_assumptions,
 4738                        (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)))
 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_term_field(arguments, B, F, J))),
 4741        I=true
 4742    ),
 4743    E=(A=F, G, I->H, C;true).
 4744propagation_code(A, B, C, D, E, F, G, H, I, J, K) :-
 4745    (   C==[]
 4746    ->  propagation_single_headed(A,
 4747                                  B,
 4748                                  E,
 4749                                  F,
 4750                                  G,
 4751                                  H,
 4752                                  I,
 4753                                  J,
 4754                                  K)
 4755    ;   propagation_multi_headed(A,
 4756                                 C,
 4757                                 D,
 4758                                 E,
 4759                                 F,
 4760                                 G,
 4761                                 H,
 4762                                 I,
 4763                                 J,
 4764                                 K)
 4765    ).
 4766propagation_single_headed(A, _, B, C, D/E, F, G, H, I) :-
 4767    head_info(A, E, J, K, L, M),
 4768    build_head(D, E, G, L, N),
 4769    inc_id(G, O),
 4770    build_head(D, E, O, L, P),
 4771    get_constraint_mode(D/E, Q),
 4772    head_arg_matches(M, Q, [], R, S, [], _),
 4773    guard_body_copies(B, S, T, U),
 4774    V=P,
 4775    actual_cut(D/E, F, W),
 4776    B=rule(_, _, X, Y),
 4777    (   chr_pp_flag(debugable, on)
 4778    ->  my_term_copy(X-Y, S, Z-A1),
 4779        B1='chr debug_event'(try([], [K], Z, A1)),
 4780        C1='chr debug_event'(apply([], [K], Z, A1)),
 4781        instrument_goal(W, B1, C1, D1)
 4782    ;   D1=W
 4783    ),
 4784    (   may_trigger(D/E),
 4785        \+ has_no_history(C)
 4786    ->  use_auxiliary_predicate(novel_production),
 4787        use_auxiliary_predicate(extend_history),
 4788        does_use_history(D/E, F),
 4789        gen_occ_allocation(D/E, F, J, K, E1),
 4790        (   named_history(C, F1, G1)
 4791        ->  (   G1==[]
 4792            ->  empty_named_history_novel_production(F1, H1),
 4793                empty_named_history_extend_history(F1, I1)
 4794            ;   J1=F1
 4795            )
 4796        ;   J1=C
 4797        ),
 4798        (   var(H1)
 4799        ->  H1='$novel_production'(K, J1),
 4800            I1='$extend_history'(K, J1)
 4801        ;   true
 4802        ),
 4803        (   is_observed(D/E, F)
 4804        ->  gen_uncond_attach_goal(D/E,
 4805                                   K,
 4806                                   J,
 4807                                   K1,
 4808                                   L1),
 4809            gen_state_cond_call(K,
 4810                                D/E,
 4811                                V,
 4812                                L1,
 4813                                M1)
 4814        ;   K1=true,
 4815            M1=V
 4816        )
 4817    ;   E1=true,
 4818        H1=true,
 4819        I1=true,
 4820        (   is_observed(D/E, F)
 4821        ->  get_allocation_occurrence(D/E, N1),
 4822            (   F==N1
 4823            ->  gen_insert_constraint_internal_goal(D/E,
 4824                                                    K1,
 4825                                                    L,
 4826                                                    J,
 4827                                                    K),
 4828                L1=0
 4829            ;   K1=(O1, P1),
 4830                gen_occ_allocation(D/E,
 4831                                   F,
 4832                                   J,
 4833                                   K,
 4834                                   O1),
 4835                gen_uncond_attach_goal(D/E,
 4836                                       K,
 4837                                       J,
 4838                                       P1,
 4839                                       L1)
 4840            ),
 4841            gen_state_cond_call(K,
 4842                                D/E,
 4843                                V,
 4844                                L1,
 4845                                M1)
 4846        ;   gen_occ_allocation(D/E,
 4847                               F,
 4848                               J,
 4849                               K,
 4850                               K1),
 4851            M1=V
 4852        )
 4853    ),
 4854    (   is_stored_in_guard(D/E, C)
 4855    ->  Q1=K1,
 4856        R1=true
 4857    ;   Q1=true,
 4858        R1=K1
 4859    ),
 4860    S1=(N:-R, E1, H1, Q1, T, D1, I1, R1, U, M1),
 4861    add_location(S1, C, T1),
 4862    H=[T1|I].
 4863propagation_multi_headed(A, B, C, D, E, F, G, H, I, J) :-
 4864    B=[K|L],
 4865    propagation_prelude(A,
 4866                        B,
 4867                        D,
 4868                        F,
 4869                        G,
 4870                        H,
 4871                        I,
 4872                        M),
 4873    extend_id(H, N),
 4874    propagation_nested_code(L,
 4875                            [K, A],
 4876                            C,
 4877                            D,
 4878                            E,
 4879                            F,
 4880                            G,
 4881                            N,
 4882                            M,
 4883                            J).
 4884propagation_prelude(A, [B|C], D, E/F, G, H, I, J) :-
 4885    head_info(A, F, K, L, M, N),
 4886    build_head(E, F, H, M, O),
 4887    get_constraint_mode(E/F, P),
 4888    head_arg_matches(N, P, [], Q, R, [], S),
 4889    D=rule(_, _, T, U),
 4890    extra_active_delegate_variables(A,
 4891                                    [B, C, T, U],
 4892                                    R,
 4893                                    V),
 4894    lookup_passive_head(B, [A], R, S, W, X),
 4895    gen_occ_allocation(E/F, G, K, L, Y),
 4896    extend_id(H, Z),
 4897    append([X|M], V, A1),
 4898    build_head(E, F, [G|Z], A1, B1),
 4899    C1=B1,
 4900    D1=(O:-Q, W, !, Y, C1),
 4901    add_dummy_location(D1, E1),
 4902    I=[E1|J].
 4903propagation_nested_code([], [A|B], C, D, E, F, G, H, I, J) :-
 4904    universal_search_iterator_end([A|B],
 4905                                  [],
 4906                                  D,
 4907                                  F,
 4908                                  G,
 4909                                  H,
 4910                                  I,
 4911                                  K),
 4912    propagation_body(A,
 4913                     B,
 4914                     C,
 4915                     D,
 4916                     E,
 4917                     F,
 4918                     G,
 4919                     H,
 4920                     K,
 4921                     J).
 4922propagation_nested_code([A|B], C, D, E, F, G, H, I, J, K) :-
 4923    universal_search_iterator_end(C,
 4924                                  [A|B],
 4925                                  E,
 4926                                  G,
 4927                                  H,
 4928                                  I,
 4929                                  J,
 4930                                  L),
 4931    universal_search_iterator([A|B],
 4932                              C,
 4933                              E,
 4934                              G,
 4935                              H,
 4936                              I,
 4937                              L,
 4938                              M),
 4939    inc_id(I, N),
 4940    propagation_nested_code(B,
 4941                            [A|C],
 4942                            D,
 4943                            E,
 4944                            F,
 4945                            G,
 4946                            H,
 4947                            N,
 4948                            M,
 4949                            K).
 4950check_fd_lookup_condition(A, B, _, _) :-
 4951    get_store_type(A/B, global_singleton),
 4952    !.
 4953check_fd_lookup_condition(A, B, C, D) :-
 4954    \+ may_trigger(A/B),
 4955    get_functional_dependency(A/B, 1, E, F),
 4956    copy_term(E-F, C-G),
 4957    term_variables(D, H),
 4958    intersect_eq(G, H, G),
 4959    !.
 4960propagation_body(A, B, C, D, E, F/G, H, I, J, K) :-
 4961    D=rule(_, L, M, N),
 4962    gen_var_susp_list_for_b(B,
 4963                            [A, M, N],
 4964                            O,
 4965                            P,
 4966                            Q,
 4967                            R,
 4968                            S),
 4969    flatten(P, T),
 4970    init(R, U),
 4971    last(R, V),
 4972    gen_var(W),
 4973    gen_var(X),
 4974    functor(A, Y, Z),
 4975    gen_vars(Z, A1),
 4976    delay_phase_end(validate_store_type_assumptions,
 4977                    (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))),
 4978    D1=(W=B1, C1),
 4979    E1=[[W|X]|T],
 4980    build_head(F, G, [H|I], E1, F1),
 4981    (   check_fd_lookup_condition(Y, Z, A, B)
 4982    ->  universal_search_iterator_failure_vars(B,
 4983                                               I,
 4984                                               P,
 4985                                               Q,
 4986                                               S,
 4987                                               G1,
 4988                                               H1),
 4989        I1=G1
 4990    ;   I1=[X|T],
 4991        H1=I
 4992    ),
 4993    (   H1=[_]
 4994    ->  J1=H1
 4995    ;   J1=[H|H1]
 4996    ),
 4997    build_head(F, G, J1, I1, K1),
 4998    L1=K1,
 4999    A=..[_|M1],
 5000    pairup(M1, A1, N1),
 5001    get_constraint_mode(Y/Z, O1),
 5002    head_arg_matches(N1, O1, O, P1, Q1),
 5003    different_from_other_susps(A, W, B, U, R1),
 5004    guard_body_copies(D, Q1, S1, T1),
 5005    get_occurrence(F/G, H, _, U1),
 5006    (   is_observed(F/G, H)
 5007    ->  init(Q, V1),
 5008        gen_uncond_attach_goal(F/G,
 5009                               V,
 5010                               V1,
 5011                               W1,
 5012                               X1),
 5013        gen_state_cond_call(V,
 5014                            F/G,
 5015                            L1,
 5016                            X1,
 5017                            Y1)
 5018    ;   W1=true,
 5019        Y1=L1
 5020    ),
 5021    (   (   is_least_occurrence(E)
 5022        ;   has_no_history(E)
 5023        )
 5024    ->  Z1=true,
 5025        A2=true
 5026    ;   \+ may_trigger(F/G),
 5027        maplist(is_passive(E), C)
 5028    ->  Z1=true,
 5029        A2=true
 5030    ;   get_occurrence(F/G, H, _, U1),
 5031        use_auxiliary_predicate(novel_production),
 5032        use_auxiliary_predicate(extend_history),
 5033        does_use_history(F/G, H),
 5034        (   named_history(E, B2, C2)
 5035        ->  (   C2==[]
 5036            ->  empty_named_history_novel_production(B2, Z1),
 5037                empty_named_history_extend_history(B2, A2)
 5038            ;   reverse([W|U], D2),
 5039                named_history_susps(C2,
 5040                                    [U1|C],
 5041                                    [V|D2],
 5042                                    E2),
 5043                E2=[F2|_],
 5044                (   length(C2, 1)
 5045                ->  A2='$extend_history'(F2, B2),
 5046                    Z1='$novel_production'(F2, B2)
 5047                ;   findall(G2,
 5048                            ( member(H2, C2),
 5049                              get_occurrence_from_id(G2,
 5050                                                     _,
 5051                                                     E,
 5052                                                     H2)
 5053                            ),
 5054                            I2),
 5055                    J2=..[t, B2|E2]
 5056                )
 5057            )
 5058        ;   F2=V,
 5059            maplist(extract_symbol, L, I2),
 5060            sort([U1|C], C2),
 5061            history_susps(C,
 5062                          [W|U],
 5063                          V,
 5064                          U1,
 5065                          E2),
 5066            J2=..[t, E|E2]
 5067        ),
 5068        (   var(Z1)
 5069        ->  novel_production_calls(I2,
 5070                                   C2,
 5071                                   E2,
 5072                                   E,
 5073                                   K2,
 5074                                   L2),
 5075            A2='$extend_history'(F2, K2),
 5076            Z1=(K2=J2, L2)
 5077        ;   true
 5078        )
 5079    ),
 5080    (   chr_pp_flag(debugable, on)
 5081    ->  D=rule(_, _, M, N),
 5082        my_term_copy(M-N, Q1, M2-N2),
 5083        get_occurrence(F/G, H, _, U1),
 5084        sort_by_key([V, W|U], [U1|C], O2),
 5085        P2='chr debug_event'(try([], O2, M2, N2)),
 5086        Q2='chr debug_event'(apply([], O2, M2, N2))
 5087    ;   P2=true,
 5088        Q2=true
 5089    ),
 5090    (   is_stored_in_guard(F/G, E)
 5091    ->  R2=W1,
 5092        S2=true
 5093    ;   R2=true,
 5094        S2=W1
 5095    ),
 5096    T2=(F1:-D1, R1, P1, Z1, R2, S1, P2->Q2, A2, S2, T1, Y1;L1),
 5097    add_location(T2, E, U2),
 5098    J=[U2|K].
 5099extract_symbol(A, B/C) :-
 5100    functor(A, B, C).
 5101novel_production_calls([], [], [], _, _, true).
 5102novel_production_calls([A|B], [C|D], [E|F], G, H, (I, J)) :-
 5103    get_occurrence_from_id(A, K, G, C),
 5104    delay_phase_end(validate_store_type_assumptions,
 5105                    novel_production_call(A,
 5106                                          K,
 5107                                          '$novel_production'(E, H),
 5108                                          I)),
 5109    novel_production_calls(B, D, F, G, H, J).
 5110history_susps(A, B, C, D, E) :-
 5111    reverse(B, F),
 5112    sort_by_key([C|F], [D|A], E).
 5113named_history_susps([], _, _, []).
 5114named_history_susps([A|B], C, D, [E|F]) :-
 5115    select2(A, E, C, D, G, H),
 5116    !,
 5117    named_history_susps(B, G, H, F).
 5118gen_var_susp_list_for([A], B, C, D, E, F) :-
 5119    !,
 5120    functor(A, G, H),
 5121    head_info(A, H, _, F, E, I),
 5122    get_constraint_mode(G/H, J),
 5123    head_arg_matches(I, J, [], _, C),
 5124    extra_active_delegate_variables(A, B, C, K),
 5125    append(E, K, D).
 5126gen_var_susp_list_for([A|B], C, D, E, F, G) :-
 5127    gen_var_susp_list_for(B,
 5128                          [A|C],
 5129                          H,
 5130                          F,
 5131                          _,
 5132                          _),
 5133    functor(A, I, J),
 5134    gen_var(G),
 5135    head_info(A, J, _, K, _, L),
 5136    get_constraint_mode(I/J, M),
 5137    head_arg_matches(L, M, H, _, D),
 5138    passive_delegate_variables(A, B, C, D, N),
 5139    append(N, [K, G|F], E).
 5140gen_var_susp_list_for_b([A], B, C, [D], E, [F], []) :-
 5141    !,
 5142    functor(A, G, H),
 5143    head_info(A, H, _, F, E, I),
 5144    get_constraint_mode(G/H, J),
 5145    head_arg_matches(I, J, [], _, C),
 5146    extra_active_delegate_variables(A, B, C, K),
 5147    append(E, K, D).
 5148gen_var_susp_list_for_b([A|B], C, D, [E|F], G, [H|I], [J|K]) :-
 5149    gen_var_susp_list_for_b(B,
 5150                            [A|C],
 5151                            L,
 5152                            F,
 5153                            G,
 5154                            I,
 5155                            K),
 5156    functor(A, M, N),
 5157    gen_var(J),
 5158    head_info(A, N, _, H, _, O),
 5159    get_constraint_mode(M/N, P),
 5160    head_arg_matches(O, P, L, _, D),
 5161    passive_delegate_variables(A, B, C, D, Q),
 5162    append(Q, [H, J], E).
 5163get_prop_inner_loop_vars([A], B, C, D, E, F, []) :-
 5164    !,
 5165    functor(A, G, H),
 5166    head_info(A, H, F, E, I, J),
 5167    get_constraint_mode(G/H, K),
 5168    head_arg_matches(J, K, [], _, D),
 5169    extra_active_delegate_variables(A, B, D, L),
 5170    append(I, L, C).
 5171get_prop_inner_loop_vars([A|B], C, D, E, F, G, [H|I]) :-
 5172    get_prop_inner_loop_vars(B,
 5173                             [A|C],
 5174                             J,
 5175                             K,
 5176                             F,
 5177                             G,
 5178                             I),
 5179    functor(A, L, M),
 5180    gen_var(N),
 5181    head_info(A, M, _, H, _, O),
 5182    get_constraint_mode(L/M, P),
 5183    head_arg_matches(O, P, K, _, E),
 5184    passive_delegate_variables(A, B, C, E, Q),
 5185    append(Q, [H, N|J], D).
 5186reorder_heads(A, B, C, D, E, F) :-
 5187    (   chr_pp_flag(reorder_heads, on),
 5188        length(C, G),
 5189        G=<6
 5190    ->  reorder_heads_main(A, B, C, D, E, F)
 5191    ;   E=C,
 5192        F=D
 5193    ).
 5194reorder_heads_main(A, B, C, D, E, F) :-
 5195    term_variables(B, G),
 5196    H=entry([], [], G, C, D, A),
 5197    copy_term_nat(H, I),
 5198    a_star(I,
 5199           J^(chr_translate:final_data(J)),
 5200           K^L^M^(chr_translate:expand_data(K, L, M)),
 5201           N),
 5202    I=H,
 5203    N=entry(O, P, _, _, _, _),
 5204    reverse(O, E),
 5205    reverse(P, F).
 5206final_data(A) :-
 5207    A=entry(_, _, _, _, [], _).
 5208expand_data(A, B, C) :-
 5209    A=entry(D, E, F, G, H, I),
 5210    select2(J, K, G, H, L, M),
 5211    term_variables([J|F], N),
 5212    B=entry([J|D], [K|E], N, L, M, I),
 5213    order_score(J, K, F, L, I, C).
 5214order_score(A, B, C, D, E, F) :-
 5215    functor(A, G, H),
 5216    get_store_type(G/H, I),
 5217    order_score(I, A, B, C, D, E, 99999, F).
 5218order_score(default, A, _, B, C, _, D, E) :-
 5219    term_variables(A, F),
 5220    term_variables(C, G),
 5221    ground_vars([A], H),
 5222    list_difference_eq(F, H, I),
 5223    order_score_vars(I, B, G, J),
 5224    E is min(D, J).
 5225order_score(multi_inthash(A), B, _, C, _, _, D, E) :-
 5226    (   D=<100
 5227    ->  E=D
 5228    ;   order_score_indexes(A, B, C, E)
 5229    ).
 5230order_score(multi_hash(A), B, _, C, _, _, D, E) :-
 5231    (   D=<100
 5232    ->  E=D
 5233    ;   order_score_indexes(A, B, C, E)
 5234    ).
 5235order_score(global_ground, A, _, B, C, _, D, E) :-
 5236    term_variables(A, F),
 5237    term_variables(C, G),
 5238    order_score_vars(F, B, G, H),
 5239    I is H*200,
 5240    E is min(D, I).
 5241order_score(var_assoc_store(_, _), _, _, _, _, _, _, 1).
 5242order_score(global_singleton, _, _, _, _, _, _, A) :-
 5243    A=1.
 5244order_score(multi_store(A), B, C, D, E, F, G, H) :-
 5245    multi_order_score(A,
 5246                      B,
 5247                      C,
 5248                      D,
 5249                      E,
 5250                      F,
 5251                      G,
 5252                      H).
 5253multi_order_score([], _, _, _, _, _, A, A).
 5254multi_order_score([A|B], C, D, E, F, G, H, I) :-
 5255    (   order_score(A,
 5256                    C,
 5257                    D,
 5258                    E,
 5259                    F,
 5260                    G,
 5261                    H,
 5262                    J)
 5263    ->  true
 5264    ;   J=H
 5265    ),
 5266    multi_order_score(B,
 5267                      C,
 5268                      D,
 5269                      E,
 5270                      F,
 5271                      G,
 5272                      J,
 5273                      I).
 5274order_score(identifier_store(A), B, _, C, _, _, D, E) :-
 5275    arg(A, B, F),
 5276    memberchk_eq(F, C),
 5277    E is min(D, 10).
 5278order_score(type_indexed_identifier_store(A, _), B, _, C, _, _, D, E) :-
 5279    arg(A, B, F),
 5280    memberchk_eq(F, C),
 5281    E is min(D, 10).
 5282order_score_indexes(A, B, C, D) :-
 5283    copy_term_nat(B+C, E+F),
 5284    numbervars(F, 0, _),
 5285    order_score_indexes(A, E, D).
 5286order_score_indexes([A|B], C, D) :-
 5287    args(A, C, E),
 5288    (   maplist(ground, E)
 5289    ->  D=100
 5290    ;   order_score_indexes(B, C, D)
 5291    ).
 5292memberchk_eq_flip(A, B) :-
 5293    memberchk_eq(B, A).
 5294order_score_vars(A, B, C, D) :-
 5295    order_score_count_vars(A, B, C, E-F-G),
 5296    (   E-F-G==0-0-0
 5297    ->  D=0
 5298    ;   E>0
 5299    ->  D is max(10-E, 0)
 5300    ;   F>0
 5301    ->  D is max(10-F, 1)*100
 5302    ;   D is max(10-G, 1)*1000
 5303    ).
 5304order_score_count_vars([], _, _, 0-0-0).
 5305order_score_count_vars([A|B], C, D, E-F-G) :-
 5306    order_score_count_vars(B, C, D, H-I-J),
 5307    (   memberchk_eq(A, C)
 5308    ->  E is H+1,
 5309        F=I,
 5310        G=J
 5311    ;   memberchk_eq(A, D)
 5312    ->  F is I+1,
 5313        E=H,
 5314        G=J
 5315    ;   G is J+1,
 5316        E=H,
 5317        F=I
 5318    ).
 5319create_get_mutable_ref(A, B, C) :-
 5320    C=(B=mutable(A)).
 5321create_get_mutable(A, B, C) :-
 5322    B=mutable(A),
 5323    C=true.
 5324gen_var(_).
 5325gen_vars(A, B) :-
 5326    length(B, A).
 5327ast_head_info1(A, B, C, D, E) :-
 5328    A=chr_constraint(_/F, G, _),
 5329    vars_susp(F, B, C, D),
 5330    pairup(G, B, E).
 5331head_info1(A, _/B, C, D, E, F) :-
 5332    vars_susp(B, C, D, E),
 5333    A=..[_|G],
 5334    pairup(G, C, F).
 5335head_info(A, B, C, D, E, F) :-
 5336    vars_susp(B, C, D, E),
 5337    A=..[_|G],
 5338    pairup(G, C, F).
 5339inc_id([A|B], [C|B]) :-
 5340    C is A+1.
 5341dec_id([A|B], [C|B]) :-
 5342    C is A-1.
 5343extend_id(A, [0|A]).
 5344next_id([_, A|B], [C|B]) :-
 5345    C is A+1.
 5346build_head(A/B, C, D, E) :-
 5347    build_head(A, B, C, D, E).
 5348build_head(A, B, C, D, E) :-
 5349    buildName(A, B, C, F),
 5350    (   (   chr_pp_flag(debugable, on)
 5351        ;   is_stored(A/B),
 5352            (   has_active_occurrence(A/B)
 5353            ;   chr_pp_flag(late_allocation, off)
 5354            ),
 5355            (   may_trigger(A/B)
 5356            ;   get_allocation_occurrence(A/B, G),
 5357                get_max_occurrence(A/B, H),
 5358                H>=G
 5359            )
 5360        )
 5361    ->  E=..[F|D]
 5362    ;   init(D, I),
 5363        E=..[F|I]
 5364    ).
 5365buildName(A, B, C, D) :-
 5366    (   (   chr_pp_flag(debugable, on)
 5367        ;   once((   is_stored(A/B),
 5368                     (   has_active_occurrence(A/B)
 5369                     ;   chr_pp_flag(late_allocation, off)
 5370                     ),
 5371                     (   may_trigger(A/B)
 5372                     ;   get_allocation_occurrence(A/B, E),
 5373                         get_max_occurrence(A/B, F),
 5374                         F>=E
 5375                     )
 5376                 ;   C\=[0]
 5377                 ))
 5378        )
 5379    ->  atom_concat(A, '___', G),
 5380        atomic_concat(G, B, H),
 5381        buildName_(C, H, D)
 5382    ;   D=A
 5383    ).
 5384buildName_([], A, A).
 5385buildName_([A|B], C, D) :-
 5386    buildName_(B, C, E),
 5387    atom_concat(E, '__', F),
 5388    atomic_concat(F, A, D).
 5389vars_susp(A, B, C, D) :-
 5390    length(B, A),
 5391    append(B, [C], D).
 5392or_pattern(A, B) :-
 5393    C is A-1,
 5394    B is 1<<C.
 5395and_pattern(A, B) :-
 5396    C is A-1,
 5397    D is 1<<C,
 5398    B is -1*(D+1).
 5399make_name(A, B/C, D) :-
 5400    atom_concat_list([A, B, '___', C], D).
 5401make_attr(A, B, C, D) :-
 5402    length(C, A),
 5403    D=..[v, B|C].
 5404get_all_suspensions2(A, B, C) :-
 5405    chr_pp_flag(dynattr, off),
 5406    !,
 5407    make_attr(A, _, C, B).
 5408get_all_suspensions2(A, B, C, D) :-
 5409    length(D, A),
 5410    C='chr all_suspensions'(D, 1, B).
 5411normalize_attr(A, B, C) :-
 5412    B='chr normalize_attr'(A, C).
 5413get_suspensions(A, B, C, C=D, E) :-
 5414    chr_pp_flag(dynattr, off),
 5415    !,
 5416    make_attr(A, _, F, D),
 5417    nth1(B, F, E).
 5418get_suspensions(_, A, B, C, D) :-
 5419    C=(memberchk(A-D, B)->true;D=[]).
 5420singleton_attr(A, B, C, D) :-
 5421    chr_pp_flag(dynattr, off),
 5422    !,
 5423    or_pattern(C, E),
 5424    make_attr(A, E, F, D),
 5425    nth1(C, F, [B], G),
 5426    set_elems(G, []).
 5427singleton_attr(_, A, B, C) :-
 5428    C=[B-[A]].
 5429add_attr(A, B, C, D, E, F) :-
 5430    chr_pp_flag(dynattr, off),
 5431    !,
 5432    make_attr(A, G, H, I),
 5433    or_pattern(C, J),
 5434    nth1(C, H, K),
 5435    substitute_eq(K, H, [B|K], L),
 5436    make_attr(A, G, L, M),
 5437    substitute_eq(K, H, [B], N),
 5438    make_attr(A, O, N, P),
 5439    E=(D=I, (G/\J=:=J->F=M;O is G\/J, F=P)),
 5440    !.
 5441add_attr(_, A, B, C, D, E) :-
 5442    D=('chr select'(C, B-F, G)->E=[B-[A|F]|G];E=[B-[A]|C]).
 5443rem_attr(A, B, C, D, E, F) :-
 5444    chr_pp_flag(dynattr, off),
 5445    chr_pp_flag(experiment, off),
 5446    !,
 5447    or_pattern(D, G),
 5448    and_pattern(D, H),
 5449    make_attr(A, I, J, K),
 5450    nth1(D, J, L),
 5451    substitute_eq(L, J, [], M),
 5452    make_attr(A, N, M, O),
 5453    substitute_eq(L, J, P, Q),
 5454    make_attr(A, I, Q, R),
 5455    get_target_module(S),
 5456    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)),
 5457    !.
 5458rem_attr(_, A, B, C, D, E) :-
 5459    chr_pp_flag(dynattr, off),
 5460    chr_pp_flag(experiment, on),
 5461    !,
 5462    or_pattern(C, F),
 5463    and_pattern(C, G),
 5464    H is C+1,
 5465    get_target_module(I),
 5466    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)),
 5467    !.
 5468rem_attr(_, A, B, C, D, E) :-
 5469    get_target_module(F),
 5470    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).
 5471merge_attributes(A, B, C, D, E) :-
 5472    chr_pp_flag(dynattr, off),
 5473    !,
 5474    make_attr(A, F, G, H),
 5475    merge_attributes2(A, F, G, C, I, E),
 5476    D=(B=H, I).
 5477merge_attributes(_, A, B, C, D) :-
 5478    C=(sort(A, E), sort(B, F), 'chr new_merge_attributes'(E, F, D)).
 5479merge_attributes2(A, B, C, D, E, F) :-
 5480    make_attr(A, G, H, I),
 5481    bagof(J,
 5482          K^L^M^N^(member2(C, H, K-L), J=(sort(L, M), 'chr merge_attributes'(K, M, N))),
 5483          O),
 5484    list2conj(O, P),
 5485    bagof(Q,
 5486          R^S^T^member((R, 'chr merge_attributes'(S, T, Q)), O),
 5487          U),
 5488    make_attr(A, V, U, F),
 5489    E=(D=I, P, V is B\/G).
 5490lookup_passive_head(A, B, C, D, E) :-
 5491    functor(A, F, G),
 5492    get_store_type(F/G, H),
 5493    lookup_passive_head(H, A, B, C, [], D, E).
 5494lookup_passive_head(A, B, C, D, E, F) :-
 5495    functor(A, G, H),
 5496    get_store_type(G/H, I),
 5497    lookup_passive_head(I,
 5498                        A,
 5499                        B,
 5500                        C,
 5501                        D,
 5502                        E,
 5503                        F).
 5504lookup_passive_head(default, A, B, C, _, D, E) :-
 5505    functor(A, F, G),
 5506    passive_head_via(A, B, C, D, E),
 5507    update_store_type(F/G, default).
 5508lookup_passive_head(multi_inthash(A), B, _, C, D, E, F) :-
 5509    hash_lookup_passive_head(inthash,
 5510                             A,
 5511                             B,
 5512                             C,
 5513                             D,
 5514                             E,
 5515                             F,
 5516                             _).
 5517lookup_passive_head(multi_hash(A), B, _, C, D, E, F) :-
 5518    hash_lookup_passive_head(hash,
 5519                             A,
 5520                             B,
 5521                             C,
 5522                             D,
 5523                             E,
 5524                             F,
 5525                             _).
 5526lookup_passive_head(global_ground, A, _, _, _, B, C) :-
 5527    functor(A, D, E),
 5528    global_ground_store_name(D/E, F),
 5529    make_get_store_goal(F, C, B),
 5530    update_store_type(D/E, global_ground).
 5531lookup_passive_head(var_assoc_store(A, B), C, _, D, _, E, F) :-
 5532    arg(A, C, G),
 5533    arg(B, C, H),
 5534    translate([G, H], D, [I, J]),
 5535    get_target_module(K),
 5536    E=(get_attr(I, K, L), lookup_assoc_store(L, J, F)).
 5537lookup_passive_head(global_singleton, A, _, _, _, B, C) :-
 5538    functor(A, D, E),
 5539    global_singleton_store_name(D/E, F),
 5540    make_get_store_goal(F, G, H),
 5541    B=(H, G\==[], C=[G]),
 5542    update_store_type(D/E, global_singleton).
 5543lookup_passive_head(multi_store(A), B, C, D, E, F, G) :-
 5544    once(( member(H, A),
 5545           lookup_passive_head(H,
 5546                               B,
 5547                               C,
 5548                               D,
 5549                               E,
 5550                               F,
 5551                               G)
 5552         )).
 5553lookup_passive_head(identifier_store(A), B, _, C, _, D, E) :-
 5554    functor(B, F, G),
 5555    arg(A, B, H),
 5556    translate([H], C, [I]),
 5557    delay_phase_end(validate_store_type_assumptions,
 5558                    identifier_lookup(F/G,
 5559                                      A,
 5560                                      E,
 5561                                      I,
 5562                                      D)),
 5563    update_store_type(F/G, identifier_store(A)),
 5564    get_identifier_index(F/G, A, _).
 5565lookup_passive_head(type_indexed_identifier_store(A, B), C, _, D, _, E, F) :-
 5566    functor(C, G, H),
 5567    arg(A, C, I),
 5568    (   var(I)
 5569    ->  translate([I], D, [J]),
 5570        E=K
 5571    ;   ground(I),
 5572        I='$chr_identifier_match'(L, _)
 5573    ->  lookup_only_identifier_atom(B, L, J, M),
 5574        E=(M, K)
 5575    ),
 5576    delay_phase_end(validate_store_type_assumptions,
 5577                    type_indexed_identifier_lookup(G/H,
 5578                                                   A,
 5579                                                   B,
 5580                                                   F,
 5581                                                   J,
 5582                                                   K)),
 5583    update_store_type(G/H,
 5584                      type_indexed_identifier_store(A, B)),
 5585    get_type_indexed_identifier_index(B,
 5586                                      G/H,
 5587                                      A,
 5588                                      _).
 5589identifier_lookup(A, B, C, D, E) :-
 5590    get_identifier_size(F),
 5591    functor(G, struct, F),
 5592    get_identifier_index(A, B, H),
 5593    arg(H, G, C),
 5594    E=(D=G).
 5595type_indexed_identifier_lookup(A, B, C, D, E, F) :-
 5596    type_indexed_identifier_structure(C, G),
 5597    get_type_indexed_identifier_index(C, A, B, H),
 5598    arg(H, G, D),
 5599    F=(E=G).
 5600hash_lookup_passive_head(A, B, C, D, E, F, G, H) :-
 5601    pick_hash_index(B, C, D, H, I, J),
 5602    (   J=[K]
 5603    ->  true
 5604    ;   K=..[k|J]
 5605    ),
 5606    functor(C, L, M),
 5607    multi_hash_lookup_goal(L/M,
 5608                           A,
 5609                           H,
 5610                           K,
 5611                           G,
 5612                           N),
 5613    check_ground(E, I, O),
 5614    my_term_copy(O, D, P),
 5615    F=(P, N),
 5616    (   A==inthash
 5617    ->  update_store_type(L/M, multi_inthash([H]))
 5618    ;   update_store_type(L/M, multi_hash([H]))
 5619    ).
 5620pick_hash_index(A, B, C, D, E, F) :-
 5621    member(D, A),
 5622    args(D, B, E),
 5623    key_in_scope(E, C, F),
 5624    !.
 5625key_in_scope([], _, []).
 5626key_in_scope([A|B], C, [D|E]) :-
 5627    term_variables(A, F),
 5628    translate(F, C, G),
 5629    copy_term(A/F, D/G),
 5630    key_in_scope(B, C, E).
 5631existential_lookup(var_assoc_store(A, B), C, D, E, F, G, H, I, J, J) :-
 5632    !,
 5633    lookup_passive_head(var_assoc_store(A, B),
 5634                        C,
 5635                        D,
 5636                        E,
 5637                        F,
 5638                        K,
 5639                        L),
 5640    sbag_member_call(I, L, M),
 5641    functor(C, N, O),
 5642    delay_phase_end(validate_store_type_assumptions,
 5643                    (static_suspension_term(N/O, G), get_static_suspension_field(N/O, G, state, active, P))),
 5644    H=(K, M, I=G, P).
 5645existential_lookup(global_singleton, A, _, _, _, B, C, D, E, E) :-
 5646    !,
 5647    functor(A, F, G),
 5648    global_singleton_store_name(F/G, H),
 5649    make_get_store_goal(H, D, I),
 5650    C=(I, D\==[], D=B),
 5651    update_store_type(F/G, global_singleton).
 5652existential_lookup(multi_store(A), B, C, D, E, F, G, H, I, J) :-
 5653    !,
 5654    once(( member(K, A),
 5655           existential_lookup(K,
 5656                              B,
 5657                              C,
 5658                              D,
 5659                              E,
 5660                              F,
 5661                              G,
 5662                              H,
 5663                              I,
 5664                              J)
 5665         )).
 5666existential_lookup(multi_inthash(A), B, _, C, D, E, F, G, H, I) :-
 5667    !,
 5668    existential_hash_lookup(inthash,
 5669                            A,
 5670                            B,
 5671                            C,
 5672                            D,
 5673                            E,
 5674                            F,
 5675                            G,
 5676                            H,
 5677                            I).
 5678existential_lookup(multi_hash(A), B, _, C, D, E, F, G, H, I) :-
 5679    !,
 5680    existential_hash_lookup(hash,
 5681                            A,
 5682                            B,
 5683                            C,
 5684                            D,
 5685                            E,
 5686                            F,
 5687                            G,
 5688                            H,
 5689                            I).
 5690existential_lookup(identifier_store(A), B, C, D, E, F, G, H, I, J) :-
 5691    !,
 5692    lookup_passive_head(identifier_store(A),
 5693                        B,
 5694                        C,
 5695                        D,
 5696                        E,
 5697                        K,
 5698                        L),
 5699    hash_index_filter(I, [A], J),
 5700    functor(B, M, N),
 5701    (   check_fd_lookup_condition(M, N, B, _)
 5702    ->  O=(L=[H])
 5703    ;   sbag_member_call(H, L, O)
 5704    ),
 5705    delay_phase_end(validate_store_type_assumptions,
 5706                    (static_suspension_term(M/N, F), get_static_suspension_field(M/N, F, state, active, P))),
 5707    G=(K, O, H=F, P).
 5708existential_lookup(type_indexed_identifier_store(A, B), C, D, E, F, G, H, I, J, K) :-
 5709    !,
 5710    lookup_passive_head(type_indexed_identifier_store(A, B),
 5711                        C,
 5712                        D,
 5713                        E,
 5714                        F,
 5715                        L,
 5716                        M),
 5717    hash_index_filter(J, [A], K),
 5718    functor(C, N, O),
 5719    (   check_fd_lookup_condition(N, O, C, _)
 5720    ->  P=(M=[I])
 5721    ;   sbag_member_call(I, M, P)
 5722    ),
 5723    delay_phase_end(validate_store_type_assumptions,
 5724                    (static_suspension_term(N/O, G), get_static_suspension_field(N/O, G, state, active, Q))),
 5725    H=(L, P, I=G, Q).
 5726existential_lookup(A, B, C, D, E, F, G, H, I, I) :-
 5727    lookup_passive_head(A,
 5728                        B,
 5729                        C,
 5730                        D,
 5731                        E,
 5732                        J,
 5733                        K),
 5734    sbag_member_call(H, K, L),
 5735    functor(B, M, N),
 5736    delay_phase_end(validate_store_type_assumptions,
 5737                    (static_suspension_term(M/N, F), get_static_suspension_field(M/N, F, state, active, O))),
 5738    G=(J, L, H=F, O).
 5739existential_hash_lookup(A, B, C, D, E, F, G, H, I, J) :-
 5740    hash_lookup_passive_head(A,
 5741                             B,
 5742                             C,
 5743                             D,
 5744                             E,
 5745                             K,
 5746                             L,
 5747                             M),
 5748    hash_index_filter(I, M, J),
 5749    functor(C, N, O),
 5750    (   check_fd_lookup_condition(N, O, C, _)
 5751    ->  P=(L=[H])
 5752    ;   sbag_member_call(H, L, P)
 5753    ),
 5754    delay_phase_end(validate_store_type_assumptions,
 5755                    (static_suspension_term(N/O, F), get_static_suspension_field(N/O, F, state, active, Q))),
 5756    G=(K, P, H=F, Q).
 5757hash_index_filter(A, B, C) :-
 5758    hash_index_filter(A, B, 1, C).
 5759hash_index_filter([], _, _, []).
 5760hash_index_filter([A|B], C, D, E) :-
 5761    (   C=[F|G]
 5762    ->  H is D+1,
 5763        (   F>D
 5764        ->  E=[A|I],
 5765            hash_index_filter(B, [F|G], H, I)
 5766        ;   F==D
 5767        ->  E=[silent(A)|I],
 5768            hash_index_filter(B, G, H, I)
 5769        )
 5770    ;   E=[A|B]
 5771    ).
 5772assume_constraint_stores([]).
 5773assume_constraint_stores([A|B]) :-
 5774    (   chr_pp_flag(debugable, off),
 5775        (   only_ground_indexed_arguments(A)
 5776        ;   chr_pp_flag(mixed_stores, on)
 5777        ),
 5778        is_stored(A),
 5779        get_store_type(A, default)
 5780    ->  get_indexed_arguments(A, C),
 5781        get_constraint_mode(A, D),
 5782        aggregate_all(bag(E)-count,
 5783                      (member(E, C), nth1(E, D, +)),
 5784                      F-G),
 5785        (   G>10
 5786        ->  findall([E], member(E, F), H)
 5787        ;   findall(E,
 5788                    ( sublist(E, F),
 5789                      E\==[]
 5790                    ),
 5791                    I),
 5792            predsort(longer_list, I, H)
 5793        ),
 5794        (   get_functional_dependency(A, 1, J, K),
 5795            all_distinct_var_args(J),
 5796            K==[]
 5797        ->  assumed_store_type(A, global_singleton)
 5798        ;   (   only_ground_indexed_arguments(A)
 5799            ;   G>0
 5800            )
 5801        ->  get_constraint_type_det(A, L),
 5802            partition_indexes(H,
 5803                              L,
 5804                              M,
 5805                              N,
 5806                              O,
 5807                              P),
 5808            (   N=[]
 5809            ->  Q=R
 5810            ;   Q=[multi_inthash(N)|R]
 5811            ),
 5812            (   M=[]
 5813            ->  R=S
 5814            ;   R=[multi_hash(M)|S]
 5815            ),
 5816            (   O=[]
 5817            ->  S=T
 5818            ;   maplist(wrap_in_functor(identifier_store), O, U),
 5819                append(U, T, S)
 5820            ),
 5821            append(P, V, T),
 5822            (   only_ground_indexed_arguments(A)
 5823            ->  V=[global_ground]
 5824            ;   V=[default]
 5825            ),
 5826            assumed_store_type(A, multi_store(Q))
 5827        ;   true
 5828        )
 5829    ;   true
 5830    ),
 5831    assume_constraint_stores(B).
 5832partition_indexes([], _, [], [], [], []).
 5833partition_indexes([A|B], C, D, E, F, G) :-
 5834    (   A=[H],
 5835        nth1(H, C, I),
 5836        unalias_type(I, J),
 5837        J==chr_identifier
 5838    ->  F=[H|K],
 5839        E=L,
 5840        D=M,
 5841        G=N
 5842    ;   A=[H],
 5843        nth1(H, C, I),
 5844        unalias_type(I, J),
 5845        nonvar(J),
 5846        J=chr_identifier(O)
 5847    ->  G=[type_indexed_identifier_store(H, O)|N],
 5848        F=K,
 5849        E=L,
 5850        D=M
 5851    ;   A=[H],
 5852        nth1(H, C, I),
 5853        unalias_type(I, J),
 5854        J==dense_int
 5855    ->  E=[A|L],
 5856        D=M,
 5857        F=K,
 5858        G=N
 5859    ;   member(H, A),
 5860        nth1(H, C, I),
 5861        unalias_type(I, J),
 5862        nonvar(J),
 5863        J=chr_identifier(_)
 5864    ->  E=L,
 5865        D=M,
 5866        F=K,
 5867        G=N
 5868    ;   E=L,
 5869        D=[A|M],
 5870        F=K,
 5871        G=N
 5872    ),
 5873    partition_indexes(B, C, M, L, K, N).
 5874longer_list(A, B, C) :-
 5875    length(B, D),
 5876    length(C, E),
 5877    compare(F, E, D),
 5878    (   F==(=)
 5879    ->  compare(A, B, C)
 5880    ;   A=F
 5881    ).
 5882all_distinct_var_args(A) :-
 5883    copy_term_nat(A, B),
 5884    functor(A, C, D),
 5885    functor(E, C, D),
 5886    E=@=B.
 5887get_indexed_arguments(A, B) :-
 5888    A=_/C,
 5889    get_indexed_arguments(1, C, A, B).
 5890get_indexed_arguments(A, B, C, D) :-
 5891    (   A>B
 5892    ->  D=[]
 5893    ;   (   is_indexed_argument(C, A)
 5894        ->  D=[A|E]
 5895        ;   D=E
 5896        ),
 5897        F is A+1,
 5898        get_indexed_arguments(F, B, C, E)
 5899    ).
 5900validate_store_type_assumptions([]).
 5901validate_store_type_assumptions([A|B]) :-
 5902    validate_store_type_assumption(A),
 5903    validate_store_type_assumptions(B).
 5904universal_search_iterator_end([A|B], C, D, E/F, G, H, I, J) :-
 5905    D=rule(_, _, K, L),
 5906    gen_var_susp_list_for_b(B,
 5907                            [A, C, K, L],
 5908                            _,
 5909                            M,
 5910                            N,
 5911                            _,
 5912                            O),
 5913    universal_search_iterator_failure_vars(B,
 5914                                           H,
 5915                                           M,
 5916                                           N,
 5917                                           O,
 5918                                           P,
 5919                                           Q),
 5920    flatten(M, R),
 5921    S=[[]|R],
 5922    build_head(E, F, [G|H], S, T),
 5923    (   Q=[_]
 5924    ->  get_success_continuation_code_id(E/F, G, U),
 5925        V=[U]
 5926    ;   V=[G|Q]
 5927    ),
 5928    build_head(E, F, V, P, W),
 5929    X=(T:-W),
 5930    add_dummy_location(X, Y),
 5931    I=[Y|J].
 5932universal_search_iterator_failure_vars(A, B, C, D, E, F, G) :-
 5933    (   B=[0|_]
 5934    ->  next_id(B, G),
 5935        F=D
 5936    ;   C=[_|H],
 5937        dec_id(B, I),
 5938        (   A=[J|K],
 5939            functor(J, L, M),
 5940            check_fd_lookup_condition(L, M, J, K)
 5941        ->  E=[_|N],
 5942            universal_search_iterator_failure_vars(K,
 5943                                                   I,
 5944                                                   H,
 5945                                                   D,
 5946                                                   N,
 5947                                                   F,
 5948                                                   G)
 5949        ;   G=I,
 5950            flatten(H, O),
 5951            E=[P|_],
 5952            F=[P|O]
 5953        )
 5954    ).
 5955universal_search_iterator([A|B], [C|D], E, F/G, H, I, J, K) :-
 5956    E=rule(_, _, L, M),
 5957    gen_var_susp_list_for_b(D,
 5958                            [C, A, B, L, M],
 5959                            N,
 5960                            O,
 5961                            P,
 5962                            Q,
 5963                            R),
 5964    init(Q, S),
 5965    flatten(O, T),
 5966    gen_var(U),
 5967    functor(C, V, W),
 5968    gen_vars(W, X),
 5969    head_info(C, W, X, Y, _, Z),
 5970    get_constraint_mode(V/W, A1),
 5971    head_arg_matches(Z, A1, N, B1, C1),
 5972    delay_phase_end(validate_store_type_assumptions,
 5973                    (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))),
 5974    different_from_other_susps(C, Y, D, S, F1),
 5975    G1=(Y=D1, E1, F1, B1),
 5976    add_heads_ground_variables([C|D], [], H1),
 5977    lookup_passive_head(A,
 5978                        [C|D],
 5979                        C1,
 5980                        H1,
 5981                        I1,
 5982                        J1),
 5983    inc_id(I, K1),
 5984    L1=[[Y|U]|T],
 5985    build_head(F, G, [H|I], L1, M1),
 5986    passive_delegate_variables(C,
 5987                               D,
 5988                               [A, B, L, M],
 5989                               C1,
 5990                               N1),
 5991    append([J1|N1], [Y, U|T], O1),
 5992    build_head(F, G, [H|K1], O1, P1),
 5993    (   check_fd_lookup_condition(V, W, C, D)
 5994    ->  universal_search_iterator_failure_vars(D,
 5995                                               I,
 5996                                               O,
 5997                                               P,
 5998                                               R,
 5999                                               Q1,
 6000                                               R1),
 6001        S1=Q1
 6002    ;   S1=[U|T],
 6003        R1=I
 6004    ),
 6005    (   R1=[_]
 6006    ->  T1=R1
 6007    ;   T1=[H|R1]
 6008    ),
 6009    build_head(F, G, T1, S1, U1),
 6010    V1=(M1:-G1, I1->P1;U1),
 6011    add_dummy_location(V1, W1),
 6012    J=[W1|K].
 6013ai_observation_analysis(A) :-
 6014    (   chr_pp_flag(ai_observation_analysis, on),
 6015        get_target_module(_),
 6016        '$chr_compiled_with_version'(3)
 6017    ->  list_to_ord_set(A, B),
 6018        abstract_constraints(B),
 6019        ai_observation_schedule_initial_calls(B, B),
 6020        ai_observation_gather_results
 6021    ;   true
 6022    ).
 6023ai_observation_schedule_initial_calls([], _).
 6024ai_observation_schedule_initial_calls([A|B], C) :-
 6025    ai_observation_schedule_initial_call(A, C),
 6026    ai_observation_schedule_initial_calls(B, C).
 6027ai_observation_schedule_initial_call(A, _) :-
 6028    ai_observation_top(A, B),
 6029    initial_call_pattern(B).
 6030ai_observation_schedule_new_calls([], _).
 6031ai_observation_schedule_new_calls([A|B], C) :-
 6032    C=odom(_, D),
 6033    initial_call_pattern(odom(A, D)),
 6034    ai_observation_schedule_new_calls(B, C).
 6035ai_observation_lub(odom(A, B), odom(A, C), odom(A, D)) :-
 6036    ord_intersection(B, C, D).
 6037ai_observation_bot(A, B, odom(A, B)).
 6038ai_observation_top(A, odom(A, B)) :-
 6039    ord_empty(B).
 6040ai_observation_leq(odom(A, B), odom(A, C)) :-
 6041    ord_subset(C, B).
 6042ai_observation_observe_set(A, B, C) :-
 6043    ord_subtract(A, B, C).
 6044ai_observation_abstract_constraint(A, B, C) :-
 6045    functor(A, D, E),
 6046    C=D/E,
 6047    memberchk(C, B).
 6048ai_observation_abstract_constraints(A, B, C) :-
 6049    findall(D,
 6050            ( member(E, A),
 6051              ai_observation_abstract_constraint(E, B, D)
 6052            ),
 6053            C).
 6054ai_observation_abstract_goal_(A, B, C, D, E, F) :-
 6055    term_variables((A, B, C), G),
 6056    append(A, B, H),
 6057    ground_vars(H, I),
 6058    list_difference_eq(G, I, J),
 6059    ai_observation_abstract_goal(D, E, F, [], J),
 6060    !.
 6061ground_vars([], []).
 6062ground_vars([A|B], C) :-
 6063    functor(A, D, E),
 6064    get_constraint_mode(D/E, F),
 6065    head_info(A, E, _, _, _, G),
 6066    head_arg_matches(G, F, [], _, _, [], H),
 6067    ground_vars(B, I),
 6068    append(H, I, C).
 6069ai_observation_abstract_goal((A, B), C, D, E, F) :-
 6070    !,
 6071    ai_observation_abstract_goal(A, C, D, G, F),
 6072    ai_observation_abstract_goal(B, C, G, E, F).
 6073ai_observation_abstract_goal((A;B), C, [(D;E)|F], F, G) :-
 6074    !,
 6075    ai_observation_abstract_goal(A, C, D, [], G),
 6076    ai_observation_abstract_goal(B, C, E, [], G).
 6077ai_observation_abstract_goal((A->B), C, D, E, F) :-
 6078    !,
 6079    ai_observation_abstract_goal(A, C, D, G, F),
 6080    ai_observation_abstract_goal(B, C, G, E, F).
 6081ai_observation_abstract_goal(A, B, [C|D], D, _) :-
 6082    ai_observation_abstract_constraint(A, B, C),
 6083    !.
 6084ai_observation_abstract_goal(true, _, A, A, _) :-
 6085    !.
 6086ai_observation_abstract_goal(writeln(_), _, A, A, _) :-
 6087    !.
 6088ai_observation_abstract_goal(A, _, B, B, C) :-
 6089    builtin_binds_b(A, D),
 6090    intersect_eq(D, C, []),
 6091    !.
 6092ai_observation_abstract_goal(_, _, [A|B], B, _) :-
 6093    A=builtin.
 6094ai_observation_is_observed(odom(_, A), B) :-
 6095    \+ ord_memberchk(B, A).
 6096unconditional_occurrence(A, B) :-
 6097    get_occurrence(A, B, C, _),
 6098    get_rule(C, D),
 6099    D=pragma(E, _, _, _, _),
 6100    copy_term_nat(E, F),
 6101    F=rule(G, H, I, _),
 6102    guard_entailment:entails_guard([chr_pp_headvariables(G, H)], I),
 6103    once((   G=[J],
 6104             H==[]
 6105         ;   H=[J],
 6106             G==[],
 6107             \+ may_trigger(A)
 6108         )),
 6109    all_distinct_var_args(J).
 6110partial_wake_args([], _, _, _).
 6111partial_wake_args([A|B], [C|D], E, F) :-
 6112    (   C\==(+)
 6113    ->  (   nonvar(A)
 6114        ->  no_partial_wake(F)
 6115        ;   memberchk_eq(A, E)
 6116        ->  no_partial_wake(F)
 6117        ;   true
 6118        )
 6119    ;   true
 6120    ),
 6121    partial_wake_args(B, D, E, F).
 6122generate_show_constraint(A, B, C, D) :-
 6123    (   chr_pp_flag(show, on)
 6124    ->  B=['$show'/0|A],
 6125        generate_show_rules(A, D, [E|C]),
 6126        inc_rule_count(F),
 6127        E=pragma(rule(['$show'], [], true, true), ids([0], []), [], no, F)
 6128    ;   B=A,
 6129        D=C
 6130    ).
 6131generate_show_rules([], A, A).
 6132generate_show_rules([A/B|C], [D|E], F) :-
 6133    functor(G, A, B),
 6134    inc_rule_count(H),
 6135    D=pragma(rule([], ['$show', G], true, writeln(G)), ids([], [0, 1]), [passive(1)], no, H),
 6136    generate_show_rules(C, E, F).
 6137static_suspension_term(A/B, C) :-
 6138    suspension_term_base(A/B, D),
 6139    E is D+B,
 6140    functor(C, suspension, E).
 6141has_suspension_field(A, B) :-
 6142    suspension_term_base_fields(A, C),
 6143    memberchk(B, C).
 6144suspension_term_base(A, B) :-
 6145    suspension_term_base_fields(A, C),
 6146    length(C, B).
 6147suspension_term_base_fields(A, B) :-
 6148    (   chr_pp_flag(debugable, on)
 6149    ->  B=[id, state, history, generation, continuation, functor]
 6150    ;   (   uses_history(A)
 6151        ->  B=[id, state, history|C]
 6152        ;   only_ground_indexed_arguments(A),
 6153            get_functional_dependency(A, 1, _, _)
 6154        ->  B=[state|C]
 6155        ;   B=[id, state|C]
 6156        ),
 6157        (   only_ground_indexed_arguments(A)
 6158        ->  get_store_type(A, D),
 6159            basic_store_types(D, E),
 6160            (   memberchk(global_ground, E)
 6161            ->  C=[global_list_prev|F]
 6162            ;   C=F
 6163            ),
 6164            (   chr_pp_flag(ht_removal, on)
 6165            ->  ht_prev_fields(E, F)
 6166            ;   F=[]
 6167            )
 6168        ;   may_trigger(A)
 6169        ->  (   uses_field(A, generation)
 6170            ->  C=[generation, global_list_prev|F]
 6171            ;   C=[global_list_prev|F]
 6172            ),
 6173            (   chr_pp_flag(mixed_stores, on),
 6174                chr_pp_flag(ht_removal, on)
 6175            ->  get_store_type(A, D),
 6176                basic_store_types(D, E),
 6177                ht_prev_fields(E, F)
 6178            ;   F=[]
 6179            )
 6180        ;   C=[global_list_prev|F],
 6181            (   chr_pp_flag(mixed_stores, on),
 6182                chr_pp_flag(ht_removal, on)
 6183            ->  get_store_type(A, D),
 6184                basic_store_types(D, E),
 6185                ht_prev_fields(E, F)
 6186            ;   F=[]
 6187            )
 6188        )
 6189    ).
 6190ht_prev_fields(A, B) :-
 6191    ht_prev_fields_int(A, C),
 6192    append(C, B).
 6193ht_prev_fields_int([], []).
 6194ht_prev_fields_int([A|B], C) :-
 6195    (   A=multi_hash(D)
 6196    ->  maplist(ht_prev_field, D, E),
 6197        C=[E|F]
 6198    ;   C=F
 6199    ),
 6200    ht_prev_fields_int(B, F).
 6201ht_prev_field(A, B) :-
 6202    atomic_list_concat(['multi_hash_prev-'|A], B).
 6203get_static_suspension_term_field(A, B, C, D) :-
 6204    suspension_term_base_fields(B, E),
 6205    nth1(F, E, A),
 6206    !,
 6207    arg(F, C, D).
 6208get_static_suspension_term_field(arguments, A, B, C) :-
 6209    !,
 6210    suspension_term_base(A, D),
 6211    B=..[_|E],
 6212    drop(D, E, C).
 6213get_static_suspension_term_field(A, B, _, _) :-
 6214    chr_error(internal,
 6215              'Trying to obtain field ~w of ~w, wich does not have it!',
 6216              [A, B]).
 6217get_dynamic_suspension_term_field(A, B, C, D, E) :-
 6218    suspension_term_base_fields(B, F),
 6219    nth1(G, F, A),
 6220    !,
 6221    E=arg(G, C, D).
 6222get_dynamic_suspension_term_field(arguments, A, B, C, D) :-
 6223    !,
 6224    static_suspension_term(A, E),
 6225    get_static_suspension_term_field(arguments, A, E, C),
 6226    D=(B=E).
 6227get_dynamic_suspension_term_field(argument(A), B, C, D, E) :-
 6228    !,
 6229    suspension_term_base(B, F),
 6230    G is A+F,
 6231    E=arg(G, C, D).
 6232get_dynamic_suspension_term_field(A, B, _, _, _) :-
 6233    chr_error(internal,
 6234              'Dynamic goal to get ~w of ~w, which does not have this field!',
 6235              [A, B]).
 6236set_dynamic_suspension_term_field(A, B, C, D, E) :-
 6237    suspension_term_base_fields(B, F),
 6238    nth1(G, F, A),
 6239    !,
 6240    E=setarg(G, C, D).
 6241set_dynamic_suspension_term_field(A, B, _, _, _) :-
 6242    chr_error(internal,
 6243              'Dynamic goal to set ~w of ~w, which does not have this field!',
 6244              [A, B]).
 6245basic_store_types(multi_store(A), A) :-
 6246    !.
 6247basic_store_types(A, [A]).
 6248generate_never_stored_rules(A, B) :-
 6249    (   chr_pp_flag(declare_stored_constraints, on)
 6250    ->  never_stored_rules(A, B)
 6251    ;   B=[]
 6252    ).
 6253check_storedness_assertions(A) :-
 6254    (   chr_pp_flag(storage_analysis, on),
 6255        chr_pp_flag(declare_stored_constraints, on)
 6256    ->  forall(B, A, check_storedness_assertion(B))
 6257    ;   true
 6258    ).
 6259continuation_analysis(A) :-
 6260    maplist(analyse_continuations, A).
 6261analyse_continuations(A) :-
 6262    continuation_analysis(A, 1),
 6263    get_max_occurrence(A, B),
 6264    C is B+1,
 6265    bulk_propagation(A, 1, C),
 6266    set_occurrence_code_id(A, 1, 0).
 6267continuation_analysis(A, B) :-
 6268    get_max_occurrence(A, C),
 6269    (   B>C
 6270    ->  true
 6271    ;   B==C
 6272    ->  D is B+1,
 6273        continuation_occurrence(A, B, D)
 6274    ;   constraint_continuation(A, B, C, D),
 6275        continuation_occurrence(A, B, D),
 6276        E is B+1,
 6277        continuation_analysis(A, E)
 6278    ).
 6279constraint_continuation(A, B, C, D) :-
 6280    (   get_occurrence_head(A, B, E)
 6281    ->  F is B+1,
 6282        (   between(F, C, D),
 6283            get_occurrence_head(A, D, G),
 6284            unifiable(E, G, _)
 6285        ->  true
 6286        ;   D is C+1
 6287        )
 6288    ;   D=C
 6289    ).
 6290get_occurrence_head(A, B, C) :-
 6291    get_occurrence(A, B, D, E),
 6292    \+ is_passive(D, E),
 6293    get_rule(D, F),
 6294    F=pragma(rule(G, H, _, _), ids(I, J), _, _, _),
 6295    (   select2(E, C, I, G, _, _)
 6296    ->  true
 6297    ;   select2(E, C, J, H, _, _)
 6298    ).
 6299get_success_continuation_code_id(A, B, C) :-
 6300    get_success_continuation_occurrence(A, B, D),
 6301    get_occurrence_code_id(A, D, C).
 6302collect_constants(_, A, B, C) :-
 6303    (   not_restarted,
 6304        chr_pp_flag(experiment, on)
 6305    ->  (   chr_pp_flag(sss, on)
 6306        ->  D=[fep/4-[2, 3]-[[a, b]-fep1, [c, d]-fep2]-no],
 6307            copy_term_nat(C, E),
 6308            flatten_clauses(E, D, F),
 6309            install_new_declarations_and_restart(F)
 6310        ;   maplist(collect_rule_constants(B), A),
 6311            (   chr_pp_flag(verbose, on)
 6312            ->  print_chr_constants
 6313            ;   true
 6314            ),
 6315            (   chr_pp_flag(experiment, on)
 6316            ->  flattening_dictionary(B, D),
 6317                copy_term_nat(C, E),
 6318                flatten_clauses(E, D, F),
 6319                install_new_declarations_and_restart(F)
 6320            ;   true
 6321            )
 6322        )
 6323    ;   true
 6324    ).
 6325collect_rule_constants(A, B) :-
 6326    B=ast_rule(C, _, _, D, _),
 6327    collect_head_constants(C),
 6328    collect_body_constants(D, A).
 6329collect_head_constants(simplification(A)) :-
 6330    maplist(collect_constraint_constants, A).
 6331collect_head_constants(propagation(A)) :-
 6332    maplist(collect_constraint_constants, A).
 6333collect_head_constants(simpagation(A, B)) :-
 6334    maplist(collect_constraint_constants, A),
 6335    maplist(collect_constraint_constants, B).
 6336collect_body_constants(A, B) :-
 6337    maplist(collect_goal_constants(B), A).
 6338collect_goal_constants(A, B) :-
 6339    (   ast_nonvar(B)
 6340    ->  ast_symbol(B, C),
 6341        (   memberchk(C, A)
 6342        ->  ast_term_to_term(B, D),
 6343            ast_args(B, E),
 6344            collect_constraint_constants(chr_constraint(C,
 6345                                                        E,
 6346                                                        D))
 6347        ;   C==(:)/2,
 6348            ast_args(B, [F, G]),
 6349            F=atomic(H),
 6350            get_target_module(I),
 6351            H==I,
 6352            ast_nonvar(G),
 6353            ast_symbol(G, J),
 6354            memberchk(J, A)
 6355        ->  ast_term_to_term(G, K),
 6356            ast_args(G, L),
 6357            collect_constraint_constants(chr_constraint(J,
 6358                                                        L,
 6359                                                        K))
 6360        ;   true
 6361        )
 6362    ;   true
 6363    ).
 6364collect_constraint_constants(A) :-
 6365    A=chr_constraint(B, C, _),
 6366    get_constraint_type_det(B, D),
 6367    collect_all_arg_constants(C, D, []).
 6368collect_all_arg_constants([], [], A) :-
 6369    (   A\==[]
 6370    ->  add_chr_constants(A)
 6371    ;   true
 6372    ).
 6373collect_all_arg_constants([A|B], [C|D], E) :-
 6374    unalias_type(C, F),
 6375    (   is_chr_constants_type(F, G, _)
 6376    ->  (   ast_ground(A)
 6377        ->  ast_term_to_term(A, H),
 6378            collect_all_arg_constants(B,
 6379                                      D,
 6380                                      [G-H|E])
 6381        ;   true
 6382        )
 6383    ;   collect_all_arg_constants(B, D, E)
 6384    ).
 6385add_chr_constants(A) :-
 6386    keysort(A, B),
 6387    add_chr_constants_(B).
 6388flattening_dictionary([], []).
 6389flattening_dictionary([A|B], C) :-
 6390    (   flattening_dictionary_entry(A, D)
 6391    ->  C=[D|E]
 6392    ;   C=E
 6393    ),
 6394    flattening_dictionary(B, E).
 6395flattening_dictionary_entry(A, B) :-
 6396    get_constraint_type_det(A, C),
 6397    constant_positions(C, 1, D, E, F, G),
 6398    (   D\==[]
 6399    ->  pairup(E, H, I),
 6400        keysort(I, J),
 6401        B=A-D-K-F,
 6402        get_chr_constants(L),
 6403        findall(M,
 6404                ( member(J, L),
 6405                  flat_spec(A, D, H, M)
 6406                ),
 6407                K)
 6408    ;   G==yes
 6409    ->  enum_positions(C, 1, N, O, P),
 6410        B=A-N-K-P,
 6411        findall(M,
 6412                ( cartesian_product(Q, O),
 6413                  flat_spec(A, N, Q, M)
 6414                ),
 6415                K)
 6416    ).
 6417constant_positions([], _, [], [], no, no).
 6418constant_positions([A|B], C, D, E, F, G) :-
 6419    unalias_type(A, H),
 6420    (   is_chr_constants_type(H, I, J)
 6421    ->  compose_error_handlers(J, K, F),
 6422        D=[C|L],
 6423        E=[I|M],
 6424        G=N
 6425    ;   (   is_chr_enum_type(H, _, _)
 6426        ->  G=yes
 6427        ;   G=N
 6428        ),
 6429        L=D,
 6430        M=E,
 6431        K=F
 6432    ),
 6433    O is C+1,
 6434    constant_positions(B, O, L, M, K, N).
 6435compose_error_handlers(no, A, A).
 6436compose_error_handlers(yes(A), _, yes(A)).
 6437enum_positions([], _, [], [], no).
 6438enum_positions([A|B], C, D, E, F) :-
 6439    unalias_type(A, G),
 6440    (   is_chr_enum_type(G, H, I)
 6441    ->  compose_error_handlers(I, J, F),
 6442        D=[C|K],
 6443        E=[H|L]
 6444    ;   D=K,
 6445        E=L,
 6446        F=J
 6447    ),
 6448    M is C+1,
 6449    enum_positions(B, M, K, L, J).
 6450cartesian_product([], []).
 6451cartesian_product([A|B], [C|D]) :-
 6452    member(A, C),
 6453    cartesian_product(B, D).
 6454flat_spec(A/B, C, D, E) :-
 6455    E=D-F,
 6456    term_to_atom(D, G),
 6457    term_to_atom(C, H),
 6458    atom_concat_list(['$flat_', A, /, B, '___', H, '___', G],
 6459                     F).
 6460restart_after_flattening(A, A) :-
 6461    nb_setval('$chr_restart_after_flattening', started).
 6462restart_after_flattening(_, A) :-
 6463    nb_getval('$chr_restart_after_flattening', restart(A)),
 6464    nb_setval('$chr_restart_after_flattening', restarted).
 6465not_restarted :-
 6466    nb_getval('$chr_restart_after_flattening', started).
 6467install_new_declarations_and_restart(A) :-
 6468    nb_setval('$chr_restart_after_flattening', restart(A)),
 6469    fail.
 6470flatten_clauses(A, B, C) :-
 6471    flatten_readcontent(A,
 6472                        D,
 6473                        E,
 6474                        F,
 6475                        _,
 6476                        G,
 6477                        H),
 6478    flatten_clauses_(B, D, H, E, F, G, C).
 6479flatten_clauses_(A, B, C, D, E, F, G) :-
 6480    auxiliary_constraints_declarations(A, E, F, H),
 6481    dispatching_rules(A, I),
 6482    declarations(D, A, E, F, J),
 6483    flatten_rules(B, A, K),
 6484    append([C, H, I, J, K], G).
 6485declarations(A, B, C, D, E) :-
 6486    findall(F,
 6487            ( member(F, A),
 6488              \+ memberchk(F-_-_-_, B)
 6489            ),
 6490            G),
 6491    maplist(declaration(C, D), G, H),
 6492    flatten(H, E).
 6493declaration(A, B, C, [(:-chr_constraint C), (:-chr_option(mode, D)), (:-chr_option(type_declaration, E))]) :-
 6494    C=F/G,
 6495    functor(D, F, G),
 6496    (   memberchk(D, A)
 6497    ->  true
 6498    ;   replicate(G, ?, H),
 6499        D=..[_|H]
 6500    ),
 6501    functor(E, F, G),
 6502    (   memberchk(E, B)
 6503    ->  true
 6504    ;   replicate(G, any, I),
 6505        E=..[_|I]
 6506    ).
 6507flatten_readcontent([], [], [], [], [], [], []).
 6508flatten_readcontent([A|B], C, D, E, F, G, H) :-
 6509    (   A==end_of_file
 6510    ->  C=[],
 6511        D=[],
 6512        E=[],
 6513        G=[],
 6514        F=[],
 6515        H=[]
 6516    ;   crude_is_rule(A)
 6517    ->  C=[A|I],
 6518        flatten_readcontent(B,
 6519                            I,
 6520                            D,
 6521                            E,
 6522                            F,
 6523                            G,
 6524                            H)
 6525    ;   pure_is_declaration(A, J, K, L)
 6526    ->  append(J, M, D),
 6527        append(K, N, E),
 6528        append(L, O, G),
 6529        flatten_readcontent(B,
 6530                            C,
 6531                            M,
 6532                            N,
 6533                            F,
 6534                            O,
 6535                            H)
 6536    ;   is_mode_declaration(A, P)
 6537    ->  E=[P|N],
 6538        flatten_readcontent(B,
 6539                            C,
 6540                            D,
 6541                            N,
 6542                            F,
 6543                            G,
 6544                            H)
 6545    ;   is_type_declaration(A, Q)
 6546    ->  G=[Q|O],
 6547        flatten_readcontent(B,
 6548                            C,
 6549                            D,
 6550                            E,
 6551                            F,
 6552                            O,
 6553                            H)
 6554    ;   is_type_definition(A, R)
 6555    ->  H=[A|S],
 6556        F=[R|T],
 6557        flatten_readcontent(B,
 6558                            C,
 6559                            D,
 6560                            E,
 6561                            T,
 6562                            G,
 6563                            S)
 6564    ;   (   A=(:-op(U, V, W))
 6565        ->  op(U, V, W)
 6566        ;   true
 6567        ),
 6568        H=[A|S],
 6569        flatten_readcontent(B,
 6570                            C,
 6571                            D,
 6572                            E,
 6573                            F,
 6574                            G,
 6575                            S)
 6576    ).
 6577crude_is_rule(@(_, _)).
 6578crude_is_rule(pragma(_, _)).
 6579crude_is_rule(==>(_, _)).
 6580crude_is_rule(<=>(_, _)).
 6581pure_is_declaration(A, B, C, D) :-
 6582    A=(:-E),
 6583    E=..[F, G],
 6584    F==(chr_constraint),
 6585    conj2list(G, H),
 6586    pure_extract_type_mode(H, B, C, D).
 6587pure_extract_type_mode([], [], [], []).
 6588pure_extract_type_mode([A/B|C], [A/B|D], E, F) :-
 6589    !,
 6590    pure_extract_type_mode(C, D, E, F).
 6591pure_extract_type_mode([A|B], [C|D], [E|F], G) :-
 6592    functor(A, H, I),
 6593    C=H/I,
 6594    A=..[_|J],
 6595    extract_types_and_modes(J, K, L),
 6596    E=..[H|L],
 6597    (   forall(member(M, K), M==any)
 6598    ->  G=N
 6599    ;   G=[O|N],
 6600        O=..[H|K]
 6601    ),
 6602    pure_extract_type_mode(B, D, F, N).
 6603is_mode_declaration((:-chr_option(mode, A)), A).
 6604is_type_declaration((:-chr_option(type_declaration, A)), A).
 6605auxiliary_constraints_declarations(A, B, C, D) :-
 6606    findall(E,
 6607            auxiliary_constraints_declaration(A, B, C, E),
 6608            F),
 6609    flatten(F, D).
 6610auxiliary_constraints_declaration(A, B, C, [(:-chr_constraint D), (:-chr_option(mode, E)), (:-chr_option(type_declaration, F))]) :-
 6611    member(G/H-I-J-_, A),
 6612    arg_modes(G, H, B, K),
 6613    specialize_modes(K, I, L),
 6614    arg_types(G, H, C, M),
 6615    specialize_types(M, I, N),
 6616    length(I, O),
 6617    P is H-O,
 6618    member(_-Q, J),
 6619    D=Q/P,
 6620    E=..[Q|L],
 6621    F=..[Q|N].
 6622arg_modes(A, B, C, D) :-
 6623    functor(E, A, B),
 6624    (   memberchk(E, C)
 6625    ->  E=..[_|D]
 6626    ;   replicate(B, ?, D)
 6627    ).
 6628specialize_modes(A, B, C) :-
 6629    split_args(B, A, _, C).
 6630arg_types(A, B, C, D) :-
 6631    functor(E, A, B),
 6632    (   memberchk(E, C)
 6633    ->  E=..[_|D]
 6634    ;   replicate(B, any, D)
 6635    ).
 6636specialize_types(A, B, C) :-
 6637    split_args(B, A, _, C).
 6638dispatching_rules([], []).
 6639dispatching_rules([A-B-C-D|E], F) :-
 6640    constraint_dispatching_rule(C,
 6641                                A,
 6642                                B,
 6643                                D,
 6644                                F,
 6645                                G),
 6646    dispatching_rules(E, G).
 6647constraint_dispatching_rule(A, B/C, D, E, F, G) :-
 6648    (   increasing_numbers(D, 1)
 6649    ->  H=F,
 6650        I=B/C
 6651    ;   functor(J, B, C),
 6652        J=..[_|K],
 6653        split_args(D, K, L, M),
 6654        append(L, M, N),
 6655        atom_concat(B, '_$shuffled', O),
 6656        P=..[O|N],
 6657        [(J:-P)|H]=F,
 6658        I=O/C
 6659    ),
 6660    Q=swap(B, D),
 6661    dispatching_rule_term_cases(A,
 6662                                D,
 6663                                I,
 6664                                E,
 6665                                Q,
 6666                                H,
 6667                                G).
 6668increasing_numbers([], _).
 6669increasing_numbers([A|B], A) :-
 6670    C is A+1,
 6671    increasing_numbers(B, C).
 6672dispatching_rule_term_cases(A, B, C/D, E, F, G, H) :-
 6673    length(B, I),
 6674    once(pairup(J, K, A)),
 6675    maplist(head_tail, J, L, M),
 6676    N is D-I,
 6677    maplist(wrap_in_functor(dispatching_action), K, O),
 6678    dispatch_trie_index(L,
 6679                        M,
 6680                        N,
 6681                        E,
 6682                        F,
 6683                        O,
 6684                        C,
 6685                        G,
 6686                        H).
 6687dispatching_action(A, B, C) :-
 6688    C=..[A|B].
 6689dispatch_trie_index(A, B, C, D, E, F, G, H, I) :-
 6690    dispatch_trie_step(A,
 6691                       G,
 6692                       G,
 6693                       B,
 6694                       C,
 6695                       D,
 6696                       E,
 6697                       F,
 6698                       H,
 6699                       I).
 6700dispatch_trie_step([], _, _, _, [], _, _, [], A, A) :-
 6701    !.
 6702dispatch_trie_step(A, B, C, D, E, F, G, H, I, J) :-
 6703    D=[K|_],
 6704    length(K, L),
 6705    aggregate_all(set(M/N),
 6706                  (member(O, A), functor(O, M, N)),
 6707                  P),
 6708    Q is L+1,
 6709    dispatch_trie_step_cases(P,
 6710                             Q,
 6711                             A,
 6712                             D,
 6713                             E,
 6714                             F,
 6715                             G,
 6716                             H,
 6717                             B,
 6718                             C,
 6719                             I,
 6720                             J).
 6721dispatch_trie_step_cases([], A, _, _, B, C, D, _, E, _, F, G) :-
 6722    (   C=yes(H)
 6723    ->  F=[I|G],
 6724        I=(J:-K),
 6725        L is A+B,
 6726        functor(J, E, L),
 6727        reconstruct_original_term(D, J, M),
 6728        K=..[H, M]
 6729    ;   F=G
 6730    ).
 6731dispatch_trie_step_cases([A|B], C, D, E, F, G, H, I, J, K, L, M) :-
 6732    dispatch_trie_step_case(A,
 6733                            C,
 6734                            D,
 6735                            E,
 6736                            F,
 6737                            G,
 6738                            H,
 6739                            I,
 6740                            J,
 6741                            K,
 6742                            L,
 6743                            N),
 6744    dispatch_trie_step_cases(B,
 6745                             C,
 6746                             D,
 6747                             E,
 6748                             F,
 6749                             G,
 6750                             H,
 6751                             I,
 6752                             J,
 6753                             K,
 6754                             N,
 6755                             M).
 6756dispatch_trie_step_case(A/B, C, D, E, F, G, H, I, J, K, [L|M], N) :-
 6757    L=(O:-P, Q),
 6758    (   G=yes(_)
 6759    ->  P=!
 6760    ;   P=true
 6761    ),
 6762    R is C+F,
 6763    functor(O, J, R),
 6764    arg(1, O, S),
 6765    O=..[_, _|T],
 6766    length(U, F),
 6767    once(append(V, U, T)),
 6768    functor(S, A, B),
 6769    W=index_functor(A, B, H),
 6770    S=..[_|X],
 6771    append(X, T, Y),
 6772    (   Y==U
 6773    ->  M=N,
 6774        rec_cases(D,
 6775                  _,
 6776                  I,
 6777                  A/B,
 6778                  _,
 6779                  _,
 6780                  Z),
 6781        Z=[A1],
 6782        call(A1, U, Q)
 6783    ;   rec_cases(D,
 6784                  E,
 6785                  I,
 6786                  A/B,
 6787                  B1,
 6788                  C1,
 6789                  Z),
 6790        (   Z=[D1]
 6791        ->  C1=[E1],
 6792            append([B1, E1, U], Y),
 6793            M=N,
 6794            call(D1, U, Q)
 6795        ;   pairup(B1, C1, F1),
 6796            common_pattern(F1, G1, H1, I1),
 6797            append(X, V, [J1|K1]),
 6798            J1-K1=G1,
 6799            L1=gct([J1|K1], W),
 6800            fresh_symbol(K, M1),
 6801            append(H1, U, N1),
 6802            Q=..[M1|N1],
 6803            findall(O1-P1,
 6804                    member([O1|P1], I1),
 6805                    Q1),
 6806            once(pairup(R1, S1, Q1)),
 6807            dispatch_trie_step(R1,
 6808                               M1,
 6809                               K,
 6810                               S1,
 6811                               F,
 6812                               G,
 6813                               L1,
 6814                               Z,
 6815                               M,
 6816                               N)
 6817        )
 6818    ).
 6819split([A|B], C, D, E, F) :-
 6820    (   C==1
 6821    ->  D=[],
 6822        E=A,
 6823        F=B
 6824    ;   G is C-1,
 6825        D=[A|H],
 6826        split(B, G, H, E, F)
 6827    ).
 6828reconstruct_original_term(swap(A, B), C, D) :-
 6829    functor(C, _, E),
 6830    functor(D, A, E),
 6831    D=..[_|F],
 6832    split_args(B, F, G, H),
 6833    C=..[_|I],
 6834    append(G, H, I).
 6835reconstruct_original_term(index_functor(A, B, C), D, E) :-
 6836    D=..[F|G],
 6837    split_at(B, G, H, I),
 6838    J=..[A|H],
 6839    K=..[F, J|I],
 6840    reconstruct_original_term(C, K, E).
 6841reconstruct_original_term(gct(A, B), C, D) :-
 6842    copy_term_nat(A, E),
 6843    term_variables(E, F),
 6844    C=..[G|H],
 6845    append(F, I, H),
 6846    append(E, I, J),
 6847    K=..[G|J],
 6848    reconstruct_original_term(B, K, D).
 6849flatten_rules(A, B, C) :-
 6850    flatten_rules1(A, B, D),
 6851    flatten(D, C).
 6852flatten_rules1([], _, []).
 6853flatten_rules1([A|B], C, [D|E]) :-
 6854    findall(F, flatten_rule(A, C, F), D),
 6855    flatten_rules1(B, C, E).
 6856flatten_rule(@(A, B), C, @(A, D)) :-
 6857    !,
 6858    flatten_rule(B, C, D).
 6859flatten_rule(pragma(A, B), C, pragma(D, B)) :-
 6860    !,
 6861    flatten_rule(A, C, D).
 6862flatten_rule(==>(A, B), C, ==>(D, E)) :-
 6863    !,
 6864    flatten_heads(A, C, D),
 6865    flatten_body(B, C, E).
 6866flatten_rule(<=>(\(A, B), C), D, <=>(\(E, F), G)) :-
 6867    !,
 6868    flatten_heads((A, B), D, (E, F)),
 6869    flatten_body(C, D, G).
 6870flatten_rule(<=>(A, B), C, <=>(D, E)) :-
 6871    flatten_heads(A, C, D),
 6872    flatten_body(B, C, E).
 6873flatten_heads((A, B), C, (D, E)) :-
 6874    !,
 6875    flatten_heads(A, C, D),
 6876    flatten_heads(B, C, E).
 6877flatten_heads(#(A, B), C, #(D, B)) :-
 6878    !,
 6879    flatten_heads(A, C, D).
 6880flatten_heads(A, B, C) :-
 6881    (   functor(A, D, E),
 6882        memberchk(D/E-F-G-_, B)
 6883    ->  A=..[_|H],
 6884        split_args(F, H, I, J),
 6885        member(I-K, G),
 6886        C=..[K|J]
 6887    ;   C=A
 6888    ).
 6889flatten_body((A| B), C, (D| E)) :-
 6890    !,
 6891    conj2list(A, F),
 6892    maplist(flatten_goal(C), F, G),
 6893    list2conj(G, D),
 6894    conj2list(B, H),
 6895    maplist(flatten_goal(C), H, I),
 6896    list2conj(I, E).
 6897flatten_body(A, B, C) :-
 6898    conj2list(A, D),
 6899    maplist(flatten_goal(B), D, E),
 6900    list2conj(E, C).
 6901flatten_goal(_, A, B) :-
 6902    var(A),
 6903    !,
 6904    B=A.
 6905flatten_goal(A, B, C) :-
 6906    (   is_specializable_goal(B, A, D)
 6907    ->  specialize_goal(B, D, C)
 6908    ;   B=E:F,
 6909        get_target_module(G),
 6910        E==G,
 6911        nonvar(F),
 6912        is_specializable_goal(F, A, D)
 6913    ->  specialize_goal(F, D, H),
 6914        C=E:H
 6915    ;   partial_eval(B, C)
 6916    ->  true
 6917    ;   C=B
 6918    ).
 6919is_specializable_goal(A, B, C) :-
 6920    functor(A, D, E),
 6921    memberchk(D/E-C-_-_, B),
 6922    args(C, A, F),
 6923    ground(F).
 6924specialize_goal(A, B, C) :-
 6925    functor(A, D, E),
 6926    A=..[_|F],
 6927    split_args(B, F, G, H),
 6928    flat_spec(D/E, B, G, _-I),
 6929    C=..[I|H].
 6930partial_eval(append(A, B, C), D) :-
 6931    (   A==[]
 6932    ->  D=(C=B)
 6933    ;   B==[]
 6934    ->  D=(C=A)
 6935    ).
 6936partial_eval(flatten_path(A, B), C) :-
 6937    (   nonvar(A),
 6938        flatten(A, D),
 6939        D\==A
 6940    ->  C=flatten_path(D, B)
 6941    ).
 6942dump_code(A) :-
 6943    (   chr_pp_flag(dump, on)
 6944    ->  maplist(portray_clause, A)
 6945    ;   true
 6946    ).
 6947chr_banner :-
 6948    chr_info(banner,
 6949             '\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',
 6950             []).
 6951chr_none_locked(A, B) :-
 6952    chr_pp_flag(guard_locks, C),
 6953    (   C==off
 6954    ->  B=true
 6955    ;   C==on
 6956    ->  B='chr none_locked'(A)
 6957    ;   C==error
 6958    ->  B='chr none_error_locked'(A)
 6959    ).
 6960chr_not_locked(A, B) :-
 6961    chr_pp_flag(guard_locks, C),
 6962    (   C==off
 6963    ->  B=true
 6964    ;   C==on
 6965    ->  B='chr not_locked'(A)
 6966    ;   C==error
 6967    ->  B='chr not_error_locked'(A)
 6968    ).
 6969chr_lock(A, B) :-
 6970    chr_pp_flag(guard_locks, C),
 6971    (   C==off
 6972    ->  B=true
 6973    ;   C==on
 6974    ->  B='chr lock'(A)
 6975    ;   C==error
 6976    ->  B='chr error_lock'(A)
 6977    ).
 6978chr_unlock(A, B) :-
 6979    chr_pp_flag(guard_locks, C),
 6980    (   C==off
 6981    ->  B=true
 6982    ;   C==on
 6983    ->  B='chr unlock'(A)
 6984    ;   C==error
 6985    ->  B='chr unerror_lock'(A)
 6986    ).
 6987term_to_ast_term(A, B, C, D) :-
 6988    (   atomic(A)
 6989    ->  B=atomic(A),
 6990        D=C
 6991    ;   compound(A)
 6992    ->  functor(A, E, F),
 6993        B=compound(E, F, G, A),
 6994        A=..[_|H],
 6995        maplist_dcg(chr_translate:term_to_ast_term,
 6996                    H,
 6997                    G,
 6998                    C,
 6999                    D)
 7000    ;   var(A)
 7001    ->  var_to_ast_term(A, C, B, D)
 7002    ).
 7003var_to_ast_term(A, B, C, D) :-
 7004    B=E-F,
 7005    (   lookup_eq(E, A, C)
 7006    ->  D=B
 7007    ;   C=var(F, A),
 7008        G is F+1,
 7009        H=[A-C|E],
 7010        D=H-G
 7011    ).
 7012chr_constraint_to_ast_constraint(A, B, C, D) :-
 7013    B=chr_constraint(E/F, G, A),
 7014    functor(A, E, F),
 7015    A=..[_|H],
 7016    maplist_dcg(chr_translate:term_to_ast_term,
 7017                H,
 7018                G,
 7019                C,
 7020                D).
 7021rule_to_ast_rule(A, B) :-
 7022    B=ast_rule(C, D, E, F, G),
 7023    A=rule(H, I, E, G),
 7024    J=[]-1,
 7025    (   H==[]
 7026    ->  C=propagation(K),
 7027        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7028                    I,
 7029                    K,
 7030                    J,
 7031                    L)
 7032    ;   I==[]
 7033    ->  C=simplification(K),
 7034        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7035                    H,
 7036                    K,
 7037                    J,
 7038                    L)
 7039    ;   C=simpagation(M, N),
 7040        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7041                    H,
 7042                    M,
 7043                    J,
 7044                    O),
 7045        maplist_dcg(chr_translate:chr_constraint_to_ast_constraint,
 7046                    I,
 7047                    N,
 7048                    O,
 7049                    L)
 7050    ),
 7051    conj2list(E, P),
 7052    maplist_dcg(chr_translate:term_to_ast_term,
 7053                P,
 7054                D,
 7055                L,
 7056                Q),
 7057    conj2list(G, R),
 7058    maplist_dcg(chr_translate:term_to_ast_term,
 7059                R,
 7060                F,
 7061                Q,
 7062                _).
 7063pragma_rule_to_ast_rule(pragma(A, _, _, _, _), B) :-
 7064    rule_to_ast_rule(A, B).
 7065check_rule_to_ast_rule(A) :-
 7066    (   rule_to_ast_rule(A, B)
 7067    ->  writeln(B)
 7068    ;   writeln(failed(rule_to_ast_rule(A, B)))
 7069    ).
 7070ast_term_to_term(var(_, A), A).
 7071ast_term_to_term(atomic(A), A).
 7072ast_term_to_term(compound(_, _, _, A), A).
 7073ast_nonvar(atomic(_)).
 7074ast_nonvar(compound(_, _, _, _)).
 7075ast_ground(atomic(_)).
 7076ast_ground(compound(_, _, A, _)) :-
 7077    maplist(ast_ground, A).
 7078ast_is_ground(A, B) :-
 7079    ast_is_ground_(B, A).
 7080ast_is_ground_(var(A, _), B) :-
 7081    tree_set_memberchk(A, B).
 7082ast_is_ground_(atomic(_), _).
 7083ast_is_ground_(compound(_, _, A, _), B) :-
 7084    maplist(ast_is_ground(B), A).
 7085ast_functor(atomic(A), A, 0).
 7086ast_functor(compound(A, B, _, _), A, B).
 7087ast_symbol(atomic(A), A/0).
 7088ast_symbol(compound(A, B, _, _), A/B).
 7089ast_args(atomic(_), []).
 7090ast_args(compound(_, _, A, _), A).
 7091ast_term_variables(atomic(_), A, A).
 7092ast_term_variables(compound(_, _, A, _), B, C) :-
 7093    ast_term_list_variables(A, B, C).
 7094ast_term_variables(var(A, _), B, C) :-
 7095    tree_set_add(B, A, C).
 7096ast_term_list_variables(A, B, C) :-
 7097    fold(A, chr_translate:ast_term_variables, B, C).
 7098ast_constraint_variables(chr_constraint(_, A, _), B, C) :-
 7099    ast_term_list_variables(A, B, C).
 7100ast_constraint_list_variables(A, B, C) :-
 7101    fold(A, chr_translate:ast_constraint_variables, B, C).
 7102ast_head_variables(simplification(A), B, C) :-
 7103    ast_constraint_list_variables(A, B, C).
 7104ast_head_variables(propagation(A), B, C) :-
 7105    ast_constraint_list_variables(A, B, C).
 7106ast_head_variables(simpagation(A, B), C, D) :-
 7107    ast_constraint_list_variables(A, C, E),
 7108    ast_constraint_list_variables(B, E, D).
 7109ast_var_memberchk(var(A, _), B) :-
 7110    tree_set_memberchk(A, B).
 7111ast_instantiate(A, B, C) :-
 7112    ast_instantiate_(B, A, C).
 7113ast_instantiate_(var(A, _), B, C) :-
 7114    get_assoc(A, B, C).
 7115ast_instantiate_(atomic(A), _, A).
 7116ast_instantiate_(compound(A, B, C, _), D, E) :-
 7117    functor(E, A, B),
 7118    E=..[_|F],
 7119    maplist(ast_instantiate(D), C, F).
 7120ast_head_arg_matches_([], [], A, B, [], A, B).
 7121ast_head_arg_matches_([silent(A-_)|B], [C|D], E, F, G, H, I) :-
 7122    !,
 7123    (   C==(+)
 7124    ->  ast_term_variables(A, J, F),
 7125        ast_head_arg_matches_(B,
 7126                              D,
 7127                              E,
 7128                              J,
 7129                              G,
 7130                              H,
 7131                              I)
 7132    ;   ast_head_arg_matches_(B,
 7133                              D,
 7134                              E,
 7135                              F,
 7136                              G,
 7137                              H,
 7138                              I)
 7139    ).
 7140ast_head_arg_matches_([A-B|C], [D|E], F, G, H, I, J) :-
 7141    (   A=var(K, _)
 7142    ->  (   get_assoc(K, F, L)
 7143        ->  (   D=(+)
 7144            ->  (   tree_set_memberchk(K, G)
 7145                ->  H=[B=L|M],
 7146                    N=G
 7147                ;   H=[B==L|M],
 7148                    tree_set_add(G, K, N)
 7149                )
 7150            ;   H=[B==L|M],
 7151                N=G
 7152            ),
 7153            O=F
 7154        ;   put_assoc(K, F, B, O),
 7155            H=M,
 7156            (   D=(+)
 7157            ->  tree_set_add(G, K, N)
 7158            ;   N=G
 7159            )
 7160        ),
 7161        P=C,
 7162        Q=E
 7163    ;   ground(A),
 7164        A='$chr_identifier_match'(R, S)
 7165    ->  identifier_label_atom(S, B, R, T),
 7166        H=[T|M],
 7167        F=O,
 7168        N=G,
 7169        P=C,
 7170        Q=E
 7171    ;   A=atomic(U)
 7172    ->  (   D=(+)
 7173        ->  H=[B=U|M]
 7174        ;   H=[B==U|M]
 7175        ),
 7176        F=O,
 7177        N=G,
 7178        P=C,
 7179        Q=E
 7180    ;   D==(+),
 7181        ast_is_ground(G, A)
 7182    ->  ast_instantiate(F, A, V),
 7183        H=[B=V|M],
 7184        F=O,
 7185        N=G,
 7186        P=C,
 7187        Q=E
 7188    ;   D==(?),
 7189        ast_is_ground(G, A)
 7190    ->  ast_instantiate(F, A, V),
 7191        H=[B==V|M],
 7192        F=O,
 7193        N=G,
 7194        P=C,
 7195        Q=E
 7196    ;   A=compound(W, X, Y, _),
 7197        functor(Z, W, X),
 7198        Z=..[_|A1],
 7199        (   D=(+)
 7200        ->  H=[B=Z|M]
 7201        ;   H=[nonvar(B), B=Z|M]
 7202        ),
 7203        pairup(Y, A1, B1),
 7204        append(B1, C, P),
 7205        replicate(_, D, C1),
 7206        append(C1, E, Q),
 7207        O=F,
 7208        N=G
 7209    ),
 7210    ast_head_arg_matches_(P,
 7211                          Q,
 7212                          O,
 7213                          N,
 7214                          M,
 7215                          I,
 7216                          J).
 7217:- use_module(chr(chr_runtime)). 7218:- use_module(chr(chr_hashtable_store)). 7219attach_generate_empty_named_history_initialisation___1([], _).
 7220attach_generate_empty_named_history_initialisation___1([A|B], C) :-
 7221    (   get_attr(A, chr_translate, D)
 7222    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7223        (   E/\1=:=1
 7224        ->  P=v(E, [C|F], G, H, I, J, K, L, M, N, O)
 7225        ;   Q is E\/1,
 7226            P=v(Q, [C], G, H, I, J, K, L, M, N, O)
 7227        ),
 7228        put_attr(A, chr_translate, P)
 7229    ;   put_attr(A,
 7230                 chr_translate,
 7231                 v(1, [C], [], [], [], [], [], [], [], [], []))
 7232    ),
 7233    attach_generate_empty_named_history_initialisation___1(B, C).
 7234detach_generate_empty_named_history_initialisation___1([], _).
 7235detach_generate_empty_named_history_initialisation___1([A|B], C) :-
 7236    (   get_attr(A, chr_translate, D)
 7237    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7238        (   E/\1=:=1
 7239        ->  'chr sbag_del_element'(F, C, P),
 7240            (   P==[]
 7241            ->  Q is E/\ -2,
 7242                (   Q==0
 7243                ->  del_attr(A, chr_translate)
 7244                ;   put_attr(A,
 7245                             chr_translate,
 7246                             v(Q,
 7247                               [],
 7248                               G,
 7249                               H,
 7250                               I,
 7251                               J,
 7252                               K,
 7253                               L,
 7254                               M,
 7255                               N,
 7256                               O))
 7257                )
 7258            ;   put_attr(A,
 7259                         chr_translate,
 7260                         v(E,
 7261                           P,
 7262                           G,
 7263                           H,
 7264                           I,
 7265                           J,
 7266                           K,
 7267                           L,
 7268                           M,
 7269                           N,
 7270                           O))
 7271            )
 7272        ;   true
 7273        )
 7274    ;   true
 7275    ),
 7276    detach_generate_empty_named_history_initialisation___1(B, C).
 7277attach_symbol_count___2([], _).
 7278attach_symbol_count___2([A|B], C) :-
 7279    (   get_attr(A, chr_translate, D)
 7280    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7281        (   E/\2=:=2
 7282        ->  P=v(E, F, [C|G], H, I, J, K, L, M, N, O)
 7283        ;   Q is E\/2,
 7284            P=v(Q, F, [C], H, I, J, K, L, M, N, O)
 7285        ),
 7286        put_attr(A, chr_translate, P)
 7287    ;   put_attr(A,
 7288                 chr_translate,
 7289                 v(2, [], [C], [], [], [], [], [], [], [], []))
 7290    ),
 7291    attach_symbol_count___2(B, C).
 7292detach_symbol_count___2([], _).
 7293detach_symbol_count___2([A|B], C) :-
 7294    (   get_attr(A, chr_translate, D)
 7295    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7296        (   E/\2=:=2
 7297        ->  'chr sbag_del_element'(G, C, P),
 7298            (   P==[]
 7299            ->  Q is E/\ -3,
 7300                (   Q==0
 7301                ->  del_attr(A, chr_translate)
 7302                ;   put_attr(A,
 7303                             chr_translate,
 7304                             v(Q,
 7305                               F,
 7306                               [],
 7307                               H,
 7308                               I,
 7309                               J,
 7310                               K,
 7311                               L,
 7312                               M,
 7313                               N,
 7314                               O))
 7315                )
 7316            ;   put_attr(A,
 7317                         chr_translate,
 7318                         v(E,
 7319                           F,
 7320                           P,
 7321                           H,
 7322                           I,
 7323                           J,
 7324                           K,
 7325                           L,
 7326                           M,
 7327                           N,
 7328                           O))
 7329            )
 7330        ;   true
 7331        )
 7332    ;   true
 7333    ),
 7334    detach_symbol_count___2(B, C).
 7335attach_fresh_symbol___2([], _).
 7336attach_fresh_symbol___2([A|B], C) :-
 7337    (   get_attr(A, chr_translate, D)
 7338    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7339        (   E/\4=:=4
 7340        ->  P=v(E, F, G, [C|H], I, J, K, L, M, N, O)
 7341        ;   Q is E\/4,
 7342            P=v(Q, F, G, [C], I, J, K, L, M, N, O)
 7343        ),
 7344        put_attr(A, chr_translate, P)
 7345    ;   put_attr(A,
 7346                 chr_translate,
 7347                 v(4, [], [], [C], [], [], [], [], [], [], []))
 7348    ),
 7349    attach_fresh_symbol___2(B, C).
 7350detach_fresh_symbol___2([], _).
 7351detach_fresh_symbol___2([A|B], C) :-
 7352    (   get_attr(A, chr_translate, D)
 7353    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7354        (   E/\4=:=4
 7355        ->  'chr sbag_del_element'(H, C, P),
 7356            (   P==[]
 7357            ->  Q is E/\ -5,
 7358                (   Q==0
 7359                ->  del_attr(A, chr_translate)
 7360                ;   put_attr(A,
 7361                             chr_translate,
 7362                             v(Q,
 7363                               F,
 7364                               G,
 7365                               [],
 7366                               I,
 7367                               J,
 7368                               K,
 7369                               L,
 7370                               M,
 7371                               N,
 7372                               O))
 7373                )
 7374            ;   put_attr(A,
 7375                         chr_translate,
 7376                         v(E,
 7377                           F,
 7378                           G,
 7379                           P,
 7380                           I,
 7381                           J,
 7382                           K,
 7383                           L,
 7384                           M,
 7385                           N,
 7386                           O))
 7387            )
 7388        ;   true
 7389        )
 7390    ;   true
 7391    ),
 7392    detach_fresh_symbol___2(B, C).
 7393attach_background_info___2([], _).
 7394attach_background_info___2([A|B], C) :-
 7395    (   get_attr(A, chr_translate, D)
 7396    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7397        (   E/\8=:=8
 7398        ->  P=v(E, F, G, H, [C|I], J, K, L, M, N, O)
 7399        ;   Q is E\/8,
 7400            P=v(Q, F, G, H, [C], J, K, L, M, N, O)
 7401        ),
 7402        put_attr(A, chr_translate, P)
 7403    ;   put_attr(A,
 7404                 chr_translate,
 7405                 v(8, [], [], [], [C], [], [], [], [], [], []))
 7406    ),
 7407    attach_background_info___2(B, C).
 7408detach_background_info___2([], _).
 7409detach_background_info___2([A|B], C) :-
 7410    (   get_attr(A, chr_translate, D)
 7411    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7412        (   E/\8=:=8
 7413        ->  'chr sbag_del_element'(I, C, P),
 7414            (   P==[]
 7415            ->  Q is E/\ -9,
 7416                (   Q==0
 7417                ->  del_attr(A, chr_translate)
 7418                ;   put_attr(A,
 7419                             chr_translate,
 7420                             v(Q,
 7421                               F,
 7422                               G,
 7423                               H,
 7424                               [],
 7425                               J,
 7426                               K,
 7427                               L,
 7428                               M,
 7429                               N,
 7430                               O))
 7431                )
 7432            ;   put_attr(A,
 7433                         chr_translate,
 7434                         v(E,
 7435                           F,
 7436                           G,
 7437                           H,
 7438                           P,
 7439                           J,
 7440                           K,
 7441                           L,
 7442                           M,
 7443                           N,
 7444                           O))
 7445            )
 7446        ;   true
 7447        )
 7448    ;   true
 7449    ),
 7450    detach_background_info___2(B, C).
 7451attach_get_bg_info___2([], _).
 7452attach_get_bg_info___2([A|B], C) :-
 7453    (   get_attr(A, chr_translate, D)
 7454    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7455        (   E/\16=:=16
 7456        ->  P=v(E, F, G, H, I, [C|J], K, L, M, N, O)
 7457        ;   Q is E\/16,
 7458            P=v(Q, F, G, H, I, [C], K, L, M, N, O)
 7459        ),
 7460        put_attr(A, chr_translate, P)
 7461    ;   put_attr(A,
 7462                 chr_translate,
 7463                 v(16, [], [], [], [], [C], [], [], [], [], []))
 7464    ),
 7465    attach_get_bg_info___2(B, C).
 7466detach_get_bg_info___2([], _).
 7467detach_get_bg_info___2([A|B], C) :-
 7468    (   get_attr(A, chr_translate, D)
 7469    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7470        (   E/\16=:=16
 7471        ->  'chr sbag_del_element'(J, C, P),
 7472            (   P==[]
 7473            ->  Q is E/\ -17,
 7474                (   Q==0
 7475                ->  del_attr(A, chr_translate)
 7476                ;   put_attr(A,
 7477                             chr_translate,
 7478                             v(Q,
 7479                               F,
 7480                               G,
 7481                               H,
 7482                               I,
 7483                               [],
 7484                               K,
 7485                               L,
 7486                               M,
 7487                               N,
 7488                               O))
 7489                )
 7490            ;   put_attr(A,
 7491                         chr_translate,
 7492                         v(E,
 7493                           F,
 7494                           G,
 7495                           H,
 7496                           I,
 7497                           P,
 7498                           K,
 7499                           L,
 7500                           M,
 7501                           N,
 7502                           O))
 7503            )
 7504        ;   true
 7505        )
 7506    ;   true
 7507    ),
 7508    detach_get_bg_info___2(B, C).
 7509attach_type_definition___2([], _).
 7510attach_type_definition___2([A|B], C) :-
 7511    (   get_attr(A, chr_translate, D)
 7512    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7513        (   E/\32=:=32
 7514        ->  P=v(E, F, G, H, I, J, [C|K], L, M, N, O)
 7515        ;   Q is E\/32,
 7516            P=v(Q, F, G, H, I, J, [C], L, M, N, O)
 7517        ),
 7518        put_attr(A, chr_translate, P)
 7519    ;   put_attr(A,
 7520                 chr_translate,
 7521                 v(32, [], [], [], [], [], [C], [], [], [], []))
 7522    ),
 7523    attach_type_definition___2(B, C).
 7524detach_type_definition___2([], _).
 7525detach_type_definition___2([A|B], C) :-
 7526    (   get_attr(A, chr_translate, D)
 7527    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7528        (   E/\32=:=32
 7529        ->  'chr sbag_del_element'(K, C, P),
 7530            (   P==[]
 7531            ->  Q is E/\ -33,
 7532                (   Q==0
 7533                ->  del_attr(A, chr_translate)
 7534                ;   put_attr(A,
 7535                             chr_translate,
 7536                             v(Q,
 7537                               F,
 7538                               G,
 7539                               H,
 7540                               I,
 7541                               J,
 7542                               [],
 7543                               L,
 7544                               M,
 7545                               N,
 7546                               O))
 7547                )
 7548            ;   put_attr(A,
 7549                         chr_translate,
 7550                         v(E,
 7551                           F,
 7552                           G,
 7553                           H,
 7554                           I,
 7555                           J,
 7556                           P,
 7557                           L,
 7558                           M,
 7559                           N,
 7560                           O))
 7561            )
 7562        ;   true
 7563        )
 7564    ;   true
 7565    ),
 7566    detach_type_definition___2(B, C).
 7567attach_type_alias___2([], _).
 7568attach_type_alias___2([A|B], C) :-
 7569    (   get_attr(A, chr_translate, D)
 7570    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7571        (   E/\64=:=64
 7572        ->  P=v(E, F, G, H, I, J, K, [C|L], M, N, O)
 7573        ;   Q is E\/64,
 7574            P=v(Q, F, G, H, I, J, K, [C], M, N, O)
 7575        ),
 7576        put_attr(A, chr_translate, P)
 7577    ;   put_attr(A,
 7578                 chr_translate,
 7579                 v(64, [], [], [], [], [], [], [C], [], [], []))
 7580    ),
 7581    attach_type_alias___2(B, C).
 7582detach_type_alias___2([], _).
 7583detach_type_alias___2([A|B], C) :-
 7584    (   get_attr(A, chr_translate, D)
 7585    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7586        (   E/\64=:=64
 7587        ->  'chr sbag_del_element'(L, C, P),
 7588            (   P==[]
 7589            ->  Q is E/\ -65,
 7590                (   Q==0
 7591                ->  del_attr(A, chr_translate)
 7592                ;   put_attr(A,
 7593                             chr_translate,
 7594                             v(Q,
 7595                               F,
 7596                               G,
 7597                               H,
 7598                               I,
 7599                               J,
 7600                               K,
 7601                               [],
 7602                               M,
 7603                               N,
 7604                               O))
 7605                )
 7606            ;   put_attr(A,
 7607                         chr_translate,
 7608                         v(E,
 7609                           F,
 7610                           G,
 7611                           H,
 7612                           I,
 7613                           J,
 7614                           K,
 7615                           P,
 7616                           M,
 7617                           N,
 7618                           O))
 7619            )
 7620        ;   true
 7621        )
 7622    ;   true
 7623    ),
 7624    detach_type_alias___2(B, C).
 7625attach_unalias_type___2([], _).
 7626attach_unalias_type___2([A|B], C) :-
 7627    (   get_attr(A, chr_translate, D)
 7628    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7629        (   E/\128=:=128
 7630        ->  P=v(E, F, G, H, I, J, K, L, [C|M], N, O)
 7631        ;   Q is E\/128,
 7632            P=v(Q, F, G, H, I, J, K, L, [C], N, O)
 7633        ),
 7634        put_attr(A, chr_translate, P)
 7635    ;   put_attr(A,
 7636                 chr_translate,
 7637                 v(128, [], [], [], [], [], [], [], [C], [], []))
 7638    ),
 7639    attach_unalias_type___2(B, C).
 7640detach_unalias_type___2([], _).
 7641detach_unalias_type___2([A|B], C) :-
 7642    (   get_attr(A, chr_translate, D)
 7643    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7644        (   E/\128=:=128
 7645        ->  'chr sbag_del_element'(M, C, P),
 7646            (   P==[]
 7647            ->  Q is E/\ -129,
 7648                (   Q==0
 7649                ->  del_attr(A, chr_translate)
 7650                ;   put_attr(A,
 7651                             chr_translate,
 7652                             v(Q,
 7653                               F,
 7654                               G,
 7655                               H,
 7656                               I,
 7657                               J,
 7658                               K,
 7659                               L,
 7660                               [],
 7661                               N,
 7662                               O))
 7663                )
 7664            ;   put_attr(A,
 7665                         chr_translate,
 7666                         v(E,
 7667                           F,
 7668                           G,
 7669                           H,
 7670                           I,
 7671                           J,
 7672                           K,
 7673                           L,
 7674                           P,
 7675                           N,
 7676                           O))
 7677            )
 7678        ;   true
 7679        )
 7680    ;   true
 7681    ),
 7682    detach_unalias_type___2(B, C).
 7683attach_ast_static_type_check_var___4([], _).
 7684attach_ast_static_type_check_var___4([A|B], C) :-
 7685    (   get_attr(A, chr_translate, D)
 7686    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7687        (   E/\256=:=256
 7688        ->  P=v(E, F, G, H, I, J, K, L, M, [C|N], O)
 7689        ;   Q is E\/256,
 7690            P=v(Q, F, G, H, I, J, K, L, M, [C], O)
 7691        ),
 7692        put_attr(A, chr_translate, P)
 7693    ;   put_attr(A,
 7694                 chr_translate,
 7695                 v(256, [], [], [], [], [], [], [], [], [C], []))
 7696    ),
 7697    attach_ast_static_type_check_var___4(B, C).
 7698detach_ast_static_type_check_var___4([], _).
 7699detach_ast_static_type_check_var___4([A|B], C) :-
 7700    (   get_attr(A, chr_translate, D)
 7701    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7702        (   E/\256=:=256
 7703        ->  'chr sbag_del_element'(N, C, P),
 7704            (   P==[]
 7705            ->  Q is E/\ -257,
 7706                (   Q==0
 7707                ->  del_attr(A, chr_translate)
 7708                ;   put_attr(A,
 7709                             chr_translate,
 7710                             v(Q,
 7711                               F,
 7712                               G,
 7713                               H,
 7714                               I,
 7715                               J,
 7716                               K,
 7717                               L,
 7718                               M,
 7719                               [],
 7720                               O))
 7721                )
 7722            ;   put_attr(A,
 7723                         chr_translate,
 7724                         v(E,
 7725                           F,
 7726                           G,
 7727                           H,
 7728                           I,
 7729                           J,
 7730                           K,
 7731                           L,
 7732                           M,
 7733                           P,
 7734                           O))
 7735            )
 7736        ;   true
 7737        )
 7738    ;   true
 7739    ),
 7740    detach_ast_static_type_check_var___4(B, C).
 7741attach_atomic_type___1([], _).
 7742attach_atomic_type___1([A|B], C) :-
 7743    (   get_attr(A, chr_translate, D)
 7744    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7745        (   E/\512=:=512
 7746        ->  P=v(E, F, G, H, I, J, K, L, M, N, [C|O])
 7747        ;   Q is E\/512,
 7748            P=v(Q, F, G, H, I, J, K, L, M, N, [C])
 7749        ),
 7750        put_attr(A, chr_translate, P)
 7751    ;   put_attr(A,
 7752                 chr_translate,
 7753                 v(512, [], [], [], [], [], [], [], [], [], [C]))
 7754    ),
 7755    attach_atomic_type___1(B, C).
 7756detach_atomic_type___1([], _).
 7757detach_atomic_type___1([A|B], C) :-
 7758    (   get_attr(A, chr_translate, D)
 7759    ->  D=v(E, F, G, H, I, J, K, L, M, N, O),
 7760        (   E/\512=:=512
 7761        ->  'chr sbag_del_element'(O, C, P),
 7762            (   P==[]
 7763            ->  Q is E/\ -513,
 7764                (   Q==0
 7765                ->  del_attr(A, chr_translate)
 7766                ;   put_attr(A,
 7767                             chr_translate,
 7768                             v(Q,
 7769                               F,
 7770                               G,
 7771                               H,
 7772                               I,
 7773                               J,
 7774                               K,
 7775                               L,
 7776                               M,
 7777                               N,
 7778                               []))
 7779                )
 7780            ;   put_attr(A,
 7781                         chr_translate,
 7782                         v(E,
 7783                           F,
 7784                           G,
 7785                           H,
 7786                           I,
 7787                           J,
 7788                           K,
 7789                           L,
 7790                           M,
 7791                           N,
 7792                           P))
 7793            )
 7794        ;   true
 7795        )
 7796    ;   true
 7797    ),
 7798    detach_atomic_type___1(B, C).
 7799attach_increment([], _).
 7800attach_increment([A|B], C) :-
 7801    (   get_attr(A, chr_translate, D)
 7802    ->  C=v(E, F, G, H, I, J, K, L, M, N, O),
 7803        D=v(P, Q, R, S, T, U, V, W, X, Y, Z),
 7804        ( sort(Q, A1),
 7805          'chr merge_attributes'(F, A1, B1),
 7806          sort(R, C1),
 7807          'chr merge_attributes'(G, C1, D1),
 7808          sort(S, E1),
 7809          'chr merge_attributes'(H, E1, F1),
 7810          sort(T, G1),
 7811          'chr merge_attributes'(I, G1, H1),
 7812          sort(U, I1),
 7813          'chr merge_attributes'(J, I1, J1),
 7814          sort(V, K1),
 7815          'chr merge_attributes'(K, K1, L1),
 7816          sort(W, M1),
 7817          'chr merge_attributes'(L, M1, N1),
 7818          sort(X, O1),
 7819          'chr merge_attributes'(M, O1, P1),
 7820          sort(Y, Q1),
 7821          'chr merge_attributes'(N, Q1, R1),
 7822          sort(Z, S1),
 7823          'chr merge_attributes'(O, S1, T1)
 7824        ),
 7825        U1 is E\/P,
 7826        put_attr(A,
 7827                 chr_translate,
 7828                 v(U1,
 7829                   B1,
 7830                   D1,
 7831                   F1,
 7832                   H1,
 7833                   J1,
 7834                   L1,
 7835                   N1,
 7836                   P1,
 7837                   R1,
 7838                   T1))
 7839    ;   put_attr(A, chr_translate, C)
 7840    ),
 7841    attach_increment(B, C).
 7842attribute_goals(_, A, A).
 7843attr_unify_hook(v(A, B, C, D, E, F, G, H, I, J, K), L) :-
 7844    sort(B, M),
 7845    sort(C, N),
 7846    sort(D, O),
 7847    sort(E, P),
 7848    sort(F, Q),
 7849    sort(G, R),
 7850    sort(H, S),
 7851    sort(I, T),
 7852    sort(J, U),
 7853    sort(K, V),
 7854    (   var(L)
 7855    ->  (   get_attr(L, chr_translate, W)
 7856        ->  W=v(X, Y, Z, A1, B1, C1, D1, E1, F1, G1, H1),
 7857            ( sort(Y, I1),
 7858              'chr merge_attributes'(M, I1, J1),
 7859              sort(Z, K1),
 7860              'chr merge_attributes'(N, K1, L1),
 7861              sort(A1, M1),
 7862              'chr merge_attributes'(O, M1, N1),
 7863              sort(B1, O1),
 7864              'chr merge_attributes'(P, O1, P1),
 7865              sort(C1, Q1),
 7866              'chr merge_attributes'(Q, Q1, R1),
 7867              sort(D1, S1),
 7868              'chr merge_attributes'(R, S1, T1),
 7869              sort(E1, U1),
 7870              'chr merge_attributes'(S, U1, V1),
 7871              sort(F1, W1),
 7872              'chr merge_attributes'(T, W1, X1),
 7873              sort(G1, Y1),
 7874              'chr merge_attributes'(U, Y1, Z1),
 7875              sort(H1, A2),
 7876              'chr merge_attributes'(V, A2, B2)
 7877            ),
 7878            C2 is A\/X,
 7879            put_attr(L,
 7880                     chr_translate,
 7881                     v(C2,
 7882                       J1,
 7883                       L1,
 7884                       N1,
 7885                       P1,
 7886                       R1,
 7887                       T1,
 7888                       V1,
 7889                       X1,
 7890                       Z1,
 7891                       B2)),
 7892            '$run_suspensions_generate_empty_named_history_initialisation___1'(M),
 7893            '$run_suspensions_symbol_count___2'(N),
 7894            '$run_suspensions_fresh_symbol___2'(O),
 7895            '$run_suspensions_background_info___2'(P1),
 7896            '$run_suspensions_get_bg_info___2'(R1),
 7897            '$run_suspensions_type_definition___2'(T1),
 7898            '$run_suspensions_type_alias___2'(V1),
 7899            '$run_suspensions_unalias_type___2'(X1),
 7900            '$run_suspensions_ast_static_type_check_var___4'(Z1),
 7901            '$run_suspensions_atomic_type___1'(B2)
 7902        ;   put_attr(L,
 7903                     chr_translate,
 7904                     v(A,
 7905                       M,
 7906                       N,
 7907                       O,
 7908                       P,
 7909                       Q,
 7910                       R,
 7911                       S,
 7912                       T,
 7913                       U,
 7914                       V)),
 7915            '$run_suspensions_generate_empty_named_history_initialisation___1'(M),
 7916            '$run_suspensions_symbol_count___2'(N),
 7917            '$run_suspensions_fresh_symbol___2'(O),
 7918            '$run_suspensions_background_info___2'(P),
 7919            '$run_suspensions_get_bg_info___2'(Q),
 7920            '$run_suspensions_type_definition___2'(R),
 7921            '$run_suspensions_type_alias___2'(S),
 7922            '$run_suspensions_unalias_type___2'(T),
 7923            '$run_suspensions_ast_static_type_check_var___4'(U),
 7924            '$run_suspensions_atomic_type___1'(V)
 7925        )
 7926    ;   (   compound(L)
 7927        ->  term_variables(L, D2),
 7928            attach_increment(D2,
 7929                             v(A,
 7930                               M,
 7931                               N,
 7932                               O,
 7933                               P,
 7934                               Q,
 7935                               R,
 7936                               S,
 7937                               T,
 7938                               U,
 7939                               V))
 7940        ;   true
 7941        ),
 7942        '$run_suspensions_generate_empty_named_history_initialisation___1'(M),
 7943        '$run_suspensions_symbol_count___2'(N),
 7944        '$run_suspensions_fresh_symbol___2'(O),
 7945        '$run_suspensions_background_info___2'(P),
 7946        '$run_suspensions_get_bg_info___2'(Q),
 7947        '$run_suspensions_type_definition___2'(R),
 7948        '$run_suspensions_type_alias___2'(S),
 7949        '$run_suspensions_unalias_type___2'(T),
 7950        '$run_suspensions_ast_static_type_check_var___4'(U),
 7951        '$run_suspensions_atomic_type___1'(V)
 7952    ).
 7953'$novel_production'(A, B) :-
 7954    arg(3, A, C),
 7955    (   hprolog:get_ds(B, C, _)
 7956    ->  fail
 7957    ;   true
 7958    ).
 7959'$extend_history'(A, B) :-
 7960    arg(3, A, C),
 7961    hprolog:put_ds(B, C, x, D),
 7962    setarg(3, A, D).
 7963'$run_suspensions_generate_empty_named_history_initialisation___1'([]).
 7964'$run_suspensions_generate_empty_named_history_initialisation___1'([A|B]) :-
 7965    A=suspension(_, C, D, _, E),
 7966    (   C==active
 7967    ->  setarg(2, A, triggered),
 7968        F is D+1,
 7969        setarg(3, A, F),
 7970        generate_empty_named_history_initialisation___1__0(E, A),
 7971        (   C==triggered
 7972        ->  setarg(2, A, active)
 7973        ;   true
 7974        )
 7975    ;   true
 7976    ),
 7977    '$run_suspensions_generate_empty_named_history_initialisation___1'(B).
 7978'$run_suspensions_symbol_count___2'([]).
 7979'$run_suspensions_symbol_count___2'([A|B]) :-
 7980    A=suspension(_, C, _, D, E),
 7981    (   C==active
 7982    ->  setarg(2, A, triggered),
 7983        symbol_count___2__0(D, E, A),
 7984        (   C==triggered
 7985        ->  setarg(2, A, active)
 7986        ;   true
 7987        )
 7988    ;   true
 7989    ),
 7990    '$run_suspensions_symbol_count___2'(B).
 7991'$run_suspensions_fresh_symbol___2'([]).
 7992'$run_suspensions_fresh_symbol___2'([A|B]) :-
 7993    A=suspension(_, C, _, D, _, E, F),
 7994    (   C==active
 7995    ->  setarg(2, A, triggered),
 7996        G is D+1,
 7997        setarg(4, A, G),
 7998        fresh_symbol___2__0(E, F, A),
 7999        (   C==triggered
 8000        ->  setarg(2, A, active)
 8001        ;   true
 8002        )
 8003    ;   true
 8004    ),
 8005    '$run_suspensions_fresh_symbol___2'(B).
 8006'$run_suspensions_background_info___2'([]).
 8007'$run_suspensions_background_info___2'([A|B]) :-
 8008    A=suspension(_, C, _, D, _, E, F),
 8009    setarg(2, A, triggered),
 8010    G is D+1,
 8011    setarg(4, A, G),
 8012    background_info___2__0(E, F, A),
 8013    (   C==triggered
 8014    ->  setarg(2, A, active)
 8015    ;   true
 8016    ),
 8017    '$run_suspensions_background_info___2'(B).
 8018'$run_suspensions_get_bg_info___2'([]).
 8019'$run_suspensions_get_bg_info___2'([A|B]) :-
 8020    A=suspension(_, C, _, D, _, E, F),
 8021    (   C==active
 8022    ->  setarg(2, A, triggered),
 8023        G is D+1,
 8024        setarg(4, A, G),
 8025        get_bg_info___2__0(E, F, A),
 8026        (   C==triggered
 8027        ->  setarg(2, A, active)
 8028        ;   true
 8029        )
 8030    ;   true
 8031    ),
 8032    '$run_suspensions_get_bg_info___2'(B).
 8033'$run_suspensions_type_definition___2'([]).
 8034'$run_suspensions_type_definition___2'([A|B]) :-
 8035    A=suspension(_, C, _, D, _, E, F),
 8036    (   C==active
 8037    ->  setarg(2, A, triggered),
 8038        G is D+1,
 8039        setarg(4, A, G),
 8040        type_definition___2__0(E, F, A),
 8041        (   C==triggered
 8042        ->  setarg(2, A, active)
 8043        ;   true
 8044        )
 8045    ;   true
 8046    ),
 8047    '$run_suspensions_type_definition___2'(B).
 8048'$run_suspensions_type_alias___2'([]).
 8049'$run_suspensions_type_alias___2'([A|B]) :-
 8050    A=suspension(_, C, _, D, _, E, F),
 8051    (   C==active
 8052    ->  setarg(2, A, triggered),
 8053        G is D+1,
 8054        setarg(4, A, G),
 8055        type_alias___2__0(E, F, A),
 8056        (   C==triggered
 8057        ->  setarg(2, A, active)
 8058        ;   true
 8059        )
 8060    ;   true
 8061    ),
 8062    '$run_suspensions_type_alias___2'(B).
 8063'$run_suspensions_unalias_type___2'([]).
 8064'$run_suspensions_unalias_type___2'([A|B]) :-
 8065    A=suspension(_, C, _, D, E),
 8066    (   C==active
 8067    ->  setarg(2, A, triggered),
 8068        unalias_type___2__0(D, E, A),
 8069        (   C==triggered
 8070        ->  setarg(2, A, active)
 8071        ;   true
 8072        )
 8073    ;   true
 8074    ),
 8075    '$run_suspensions_unalias_type___2'(B).
 8076'$run_suspensions_ast_static_type_check_var___4'([]).
 8077'$run_suspensions_ast_static_type_check_var___4'([A|B]) :-
 8078    A=suspension(_, C, _, D, E, F, G),
 8079    (   C==active
 8080    ->  setarg(2, A, triggered),
 8081        ast_static_type_check_var___4__0(D,
 8082                                         E,
 8083                                         F,
 8084                                         G,
 8085                                         A),
 8086        (   C==triggered
 8087        ->  setarg(2, A, active)
 8088        ;   true
 8089        )
 8090    ;   true
 8091    ),
 8092    '$run_suspensions_ast_static_type_check_var___4'(B).
 8093'$run_suspensions_atomic_type___1'([]).
 8094'$run_suspensions_atomic_type___1'([A|B]) :-
 8095    A=suspension(_, C, _, D),
 8096    (   C==active
 8097    ->  setarg(2, A, triggered),
 8098        atomic_type___1__0(D, A),
 8099        (   C==triggered
 8100        ->  setarg(2, A, active)
 8101        ;   true
 8102        )
 8103    ;   true
 8104    ),
 8105    '$run_suspensions_atomic_type___1'(B).
 8106'$enumerate_constraints'(A) :-
 8107    (   nonvar(A)
 8108    ->  functor(A, B, _),
 8109        '$enumerate_constraints'(B, A)
 8110    ;   '$enumerate_constraints'(_, A)
 8111    ).
 8112'$enumerate_constraints'(chr_source_file, A) :-
 8113    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 8114              B),
 8115    member(C, B),
 8116    C=suspension(_, _, _, D),
 8117    A=chr_source_file(D).
 8118'$enumerate_constraints'(target_module, A) :-
 8119    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 8120              B),
 8121    member(C, B),
 8122    C=suspension(_, _, _, D),
 8123    A=target_module(D).
 8124'$enumerate_constraints'(source_location, A) :-
 8125    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 8126              B),
 8127    value_ht(B, C),
 8128    C=suspension(_, _, D, E),
 8129    A=source_location(D, E).
 8130'$enumerate_constraints'(indexed_argument, A) :-
 8131    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 8132              B),
 8133    value_ht(B, C),
 8134    C=suspension(_, _, D, E),
 8135    A=indexed_argument(D, E).
 8136'$enumerate_constraints'(constraint_mode, A) :-
 8137    nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 8138              B),
 8139    member(C, B),
 8140    C=suspension(_, _, _, _, D, E),
 8141    A=constraint_mode(D, E).
 8142'$enumerate_constraints'(none_suspended_on_variables, A) :-
 8143    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
 8144              B),
 8145    member(C, B),
 8146    C=suspension(_, _, _),
 8147    A=none_suspended_on_variables.
 8148'$enumerate_constraints'(store_type, A) :-
 8149    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', B),
 8150    value_ht(B, C),
 8151    C=suspension(_, _, D, E),
 8152    A=store_type(D, E).
 8153'$enumerate_constraints'(actual_store_types, A) :-
 8154    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
 8155              B),
 8156    value_ht(B, C),
 8157    C=suspension(_, _, D, E),
 8158    A=actual_store_types(D, E).
 8159'$enumerate_constraints'(assumed_store_type, A) :-
 8160    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
 8161              B),
 8162    value_ht(B, C),
 8163    C=suspension(_, _, D, E),
 8164    A=assumed_store_type(D, E).
 8165'$enumerate_constraints'(validate_store_type_assumption, A) :-
 8166    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
 8167              B),
 8168    value_ht(B, C),
 8169    C=suspension(_, _, D),
 8170    A=validate_store_type_assumption(D).
 8171'$enumerate_constraints'(rule_count, A) :-
 8172    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
 8173              B),
 8174    member(C, B),
 8175    C=suspension(_, _, _, D),
 8176    A=rule_count(D).
 8177'$enumerate_constraints'(passive, A) :-
 8178    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', B),
 8179    value_ht(B, C),
 8180    C=suspension(_, _, _, D, E),
 8181    A=passive(D, E).
 8182'$enumerate_constraints'(occurrence, A) :-
 8183    nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
 8184              B),
 8185    member(C, B),
 8186    C=suspension(_, _, _, _, D, E, F, G, H),
 8187    A=occurrence(D, E, F, G, H).
 8188'$enumerate_constraints'(max_occurrence, A) :-
 8189    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
 8190              B),
 8191    value_ht(B, C),
 8192    C=suspension(_, _, _, D, E),
 8193    A=max_occurrence(D, E).
 8194'$enumerate_constraints'(allocation_occurrence, A) :-
 8195    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
 8196              B),
 8197    value_ht(B, C),
 8198    C=suspension(_, _, _, D, E),
 8199    A=allocation_occurrence(D, E).
 8200'$enumerate_constraints'(rule, A) :-
 8201    nb_getval('$chr_store_global_ground_chr_translate____rule___2', B),
 8202    member(C, B),
 8203    C=suspension(_, _, _, _, D, E),
 8204    A=rule(D, E).
 8205'$enumerate_constraints'(least_occurrence, A) :-
 8206    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
 8207              B),
 8208    value_ht(B, C),
 8209    C=suspension(_, _, D, E),
 8210    A=least_occurrence(D, E).
 8211'$enumerate_constraints'(constraint_index, A) :-
 8212    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
 8213              B),
 8214    value_ht(B, C),
 8215    C=suspension(_, _, D, E),
 8216    A=constraint_index(D, E).
 8217'$enumerate_constraints'(max_constraint_index, A) :-
 8218    nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
 8219              B),
 8220    member(C, B),
 8221    C=suspension(_, _, _, D),
 8222    A=max_constraint_index(D).
 8223'$enumerate_constraints'(identifier_size, A) :-
 8224    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
 8225              B),
 8226    member(C, B),
 8227    C=suspension(_, _, _, D),
 8228    A=identifier_size(D).
 8229'$enumerate_constraints'(identifier_index, A) :-
 8230    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
 8231              B),
 8232    value_ht(B, C),
 8233    C=suspension(_, _, D, E, F),
 8234    A=identifier_index(D, E, F).
 8235'$enumerate_constraints'(type_indexed_identifier_size, A) :-
 8236    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
 8237              B),
 8238    value_ht(B, C),
 8239    C=suspension(_, _, D, E),
 8240    A=type_indexed_identifier_size(D, E).
 8241'$enumerate_constraints'(type_indexed_identifier_index, A) :-
 8242    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
 8243              B),
 8244    value_ht(B, C),
 8245    C=suspension(_, _, D, E, F, G),
 8246    A=type_indexed_identifier_index(D, E, F, G).
 8247'$enumerate_constraints'(no_history, A) :-
 8248    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', B),
 8249    value_ht(B, C),
 8250    C=suspension(_, _, D),
 8251    A=no_history(D).
 8252'$enumerate_constraints'(history, A) :-
 8253    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', B),
 8254    value_ht(B, C),
 8255    C=suspension(_, _, _, D, E, F),
 8256    A=history(D, E, F).
 8257'$enumerate_constraints'(indexing_spec, A) :-
 8258    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
 8259              B),
 8260    value_ht(B, C),
 8261    C=suspension(_, _, D, E),
 8262    A=indexing_spec(D, E).
 8263'$enumerate_constraints'(observation_analysis, A) :-
 8264    nb_getval('$chr_store_global_ground_chr_translate____observation_analysis___1',
 8265              B),
 8266    member(C, B),
 8267    C=suspension(_, _, _, D),
 8268    A=observation_analysis(D).
 8269'$enumerate_constraints'(spawns, A) :-
 8270    nb_getval('$chr_store_global_ground_chr_translate____spawns___3', B),
 8271    member(C, B),
 8272    C=suspension(_, _, _, _, D, E, F),
 8273    A=spawns(D, E, F).
 8274'$enumerate_constraints'(spawns_all, A) :-
 8275    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1', B),
 8276    value_ht(B, C),
 8277    C=suspension(_, _, D, E),
 8278    A=spawns_all(D, E).
 8279'$enumerate_constraints'(spawns_all_triggers, A) :-
 8280    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
 8281              B),
 8282    member(C, B),
 8283    C=suspension(_, _, _, _, D, E),
 8284    A=spawns_all_triggers(D, E).
 8285'$enumerate_constraints'(spawns_all_triggers_implies_spawns_all, A) :-
 8286    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
 8287              B),
 8288    member(C, B),
 8289    C=suspension(_, _, _),
 8290    A=spawns_all_triggers_implies_spawns_all.
 8291'$enumerate_constraints'(empty_named_history_initialisations, A) :-
 8292    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
 8293              B),
 8294    member(C, B),
 8295    C=suspension(_, _, _, D, E),
 8296    A=empty_named_history_initialisations(D, E).
 8297'$enumerate_constraints'(generate_empty_named_history_initialisation, A) :-
 8298    nb_current('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
 8299               B),
 8300    member(C, B),
 8301    C=suspension(_, _, _, _, D),
 8302    A=generate_empty_named_history_initialisation(D).
 8303'$enumerate_constraints'(find_empty_named_histories, A) :-
 8304    nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
 8305              B),
 8306    member(C, B),
 8307    C=suspension(_, _, _, _),
 8308    A=find_empty_named_histories.
 8309'$enumerate_constraints'(module_initializer, A) :-
 8310    nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
 8311              B),
 8312    member(C, B),
 8313    C=suspension(_, _, _, D),
 8314    A=module_initializer(D).
 8315'$enumerate_constraints'(actual_atomic_multi_hash_keys, A) :-
 8316    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
 8317              B),
 8318    value_ht(B, C),
 8319    C=suspension(_, _, D, E, F),
 8320    A=actual_atomic_multi_hash_keys(D, E, F).
 8321'$enumerate_constraints'(actual_ground_multi_hash_keys, A) :-
 8322    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
 8323              B),
 8324    value_ht(B, C),
 8325    C=suspension(_, _, D, E, F),
 8326    A=actual_ground_multi_hash_keys(D, E, F).
 8327'$enumerate_constraints'(actual_non_ground_multi_hash_key, A) :-
 8328    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
 8329              B),
 8330    value_ht(B, C),
 8331    C=suspension(_, _, D, E),
 8332    A=actual_non_ground_multi_hash_key(D, E).
 8333'$enumerate_constraints'(symbol_count, A) :-
 8334    nb_current('$chr_store_global_list_chr_translate____symbol_count___2',
 8335               B),
 8336    member(C, B),
 8337    C=suspension(_, _, _, D, E),
 8338    A=symbol_count(D, E).
 8339'$enumerate_constraints'(fresh_symbol, A) :-
 8340    nb_current('$chr_store_global_list_chr_translate____fresh_symbol___2',
 8341               B),
 8342    member(C, B),
 8343    C=suspension(_, _, _, _, _, D, E),
 8344    A=fresh_symbol(D, E).
 8345'$enumerate_constraints'(prolog_global_variable, A) :-
 8346    nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
 8347              B),
 8348    member(C, B),
 8349    C=suspension(_, _, _, D),
 8350    A=prolog_global_variable(D).
 8351'$enumerate_constraints'(background_info, A) :-
 8352    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
 8353              B),
 8354    member(C, B),
 8355    C=suspension(_, _, _, D),
 8356    A=background_info(D).
 8357'$enumerate_constraints'(background_info, A) :-
 8358    nb_current('$chr_store_global_list_chr_translate____background_info___2',
 8359               B),
 8360    member(C, B),
 8361    C=suspension(_, _, _, _, _, D, E),
 8362    A=background_info(D, E).
 8363'$enumerate_constraints'(get_bg_info, A) :-
 8364    nb_current('$chr_store_global_list_chr_translate____get_bg_info___2',
 8365               B),
 8366    member(C, B),
 8367    C=suspension(_, _, _, _, _, D, E),
 8368    A=get_bg_info(D, E).
 8369'$enumerate_constraints'(get_bg_info_answer, A) :-
 8370    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
 8371              B),
 8372    member(C, B),
 8373    C=suspension(_, _, _, D),
 8374    A=get_bg_info_answer(D).
 8375'$enumerate_constraints'(prev_guard_list, A) :-
 8376    nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
 8377              B),
 8378    member(C, B),
 8379    C=suspension(_, _, _, _, D, E, F, G, H, I),
 8380    A=prev_guard_list(D, E, F, G, H, I).
 8381'$enumerate_constraints'(set_all_passive, A) :-
 8382    nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
 8383              B),
 8384    value_ht(B, C),
 8385    C=suspension(_, _, _, D),
 8386    A=set_all_passive(D).
 8387'$enumerate_constraints'(precompute_head_matchings, A) :-
 8388    nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
 8389              B),
 8390    member(C, B),
 8391    C=suspension(_, _, _, _),
 8392    A=precompute_head_matchings.
 8393'$enumerate_constraints'(make_head_matchings_explicit_memo_table, A) :-
 8394    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
 8395              B),
 8396    value_ht(B, C),
 8397    C=suspension(_, _, D, E, F),
 8398    A=make_head_matchings_explicit_memo_table(D, E, F).
 8399'$enumerate_constraints'(multiple_occ_constraints_checked, A) :-
 8400    nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
 8401              B),
 8402    member(C, B),
 8403    C=suspension(_, _, _, D),
 8404    A=multiple_occ_constraints_checked(D).
 8405'$enumerate_constraints'(type_definition, A) :-
 8406    nb_current('$chr_store_global_list_chr_translate____type_definition___2',
 8407               B),
 8408    member(C, B),
 8409    C=suspension(_, _, _, _, _, D, E),
 8410    A=type_definition(D, E).
 8411'$enumerate_constraints'(type_alias, A) :-
 8412    nb_current('$chr_store_global_list_chr_translate____type_alias___2', B),
 8413    member(C, B),
 8414    C=suspension(_, _, _, _, _, D, E),
 8415    A=type_alias(D, E).
 8416'$enumerate_constraints'(constraint_type, A) :-
 8417    nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
 8418              B),
 8419    member(C, B),
 8420    C=suspension(_, _, _, D, E),
 8421    A=constraint_type(D, E).
 8422'$enumerate_constraints'(unalias_type, A) :-
 8423    nb_current('$chr_store_global_list_chr_translate____unalias_type___2',
 8424               B),
 8425    member(C, B),
 8426    C=suspension(_, _, _, D, E),
 8427    A=unalias_type(D, E).
 8428'$enumerate_constraints'(types_modes_condition, A) :-
 8429    nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 8430              B),
 8431    member(C, B),
 8432    C=suspension(_, _, _, D, E, F),
 8433    A=types_modes_condition(D, E, F).
 8434'$enumerate_constraints'(static_type_check, A) :-
 8435    nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
 8436              B),
 8437    member(C, B),
 8438    C=suspension(_, _, _, D, E),
 8439    A=static_type_check(D, E).
 8440'$enumerate_constraints'(ast_static_type_check_var, A) :-
 8441    nb_current('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
 8442               B),
 8443    member(C, B),
 8444    C=suspension(_, _, _, D, E, F, G),
 8445    A=ast_static_type_check_var(D, E, F, G).
 8446'$enumerate_constraints'(ast_static_atomic_builtin_type_check_var, A) :-
 8447    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
 8448              B),
 8449    value_ht(B, C),
 8450    C=suspension(_, _, D, E, F, G),
 8451    A=ast_static_atomic_builtin_type_check_var(D, E, F, G).
 8452'$enumerate_constraints'(dynamic_type_check, A) :-
 8453    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
 8454              B),
 8455    member(C, B),
 8456    C=suspension(_, _, _, _),
 8457    A=dynamic_type_check.
 8458'$enumerate_constraints'(dynamic_type_check_clauses, A) :-
 8459    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
 8460              B),
 8461    member(C, B),
 8462    C=suspension(_, _, _, D),
 8463    A=dynamic_type_check_clauses(D).
 8464'$enumerate_constraints'(atomic_type, A) :-
 8465    nb_current('$chr_store_global_list_chr_translate____atomic_type___1',
 8466               B),
 8467    member(C, B),
 8468    C=suspension(_, _, _, D),
 8469    A=atomic_type(D).
 8470'$enumerate_constraints'(stored, A) :-
 8471    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', B),
 8472    value_ht(B, C),
 8473    C=suspension(_, _, D, E, F),
 8474    A=stored(D, E, F).
 8475'$enumerate_constraints'(stored_complete, A) :-
 8476    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
 8477              B),
 8478    value_ht(B, C),
 8479    C=suspension(_, _, _, D, E, F),
 8480    A=stored_complete(D, E, F).
 8481'$enumerate_constraints'(check_all_passive, A) :-
 8482    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
 8483              B),
 8484    value_ht(B, C),
 8485    C=suspension(_, _, D, E),
 8486    A=check_all_passive(D, E).
 8487'$enumerate_constraints'(constraints_code1, A) :-
 8488    nb_getval('$chr_store_global_ground_chr_translate____constraints_code1___3',
 8489              B),
 8490    member(C, B),
 8491    C=suspension(_, _, _, D, E, F),
 8492    A=constraints_code1(D, E, F).
 8493'$enumerate_constraints'(memo_has_active_occurrence, A) :-
 8494    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
 8495              B),
 8496    value_ht(B, C),
 8497    C=suspension(_, _, D),
 8498    A=memo_has_active_occurrence(D).
 8499'$enumerate_constraints'(use_auxiliary_predicate, A) :-
 8500    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
 8501              B),
 8502    value_ht(B, C),
 8503    C=suspension(_, _, D),
 8504    A=use_auxiliary_predicate(D).
 8505'$enumerate_constraints'(use_auxiliary_predicate, A) :-
 8506    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
 8507              B),
 8508    value_ht(B, C),
 8509    C=suspension(_, _, D, E),
 8510    A=use_auxiliary_predicate(D, E).
 8511'$enumerate_constraints'(use_auxiliary_module, A) :-
 8512    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
 8513              B),
 8514    value_ht(B, C),
 8515    C=suspension(_, _, D),
 8516    A=use_auxiliary_module(D).
 8517'$enumerate_constraints'(functional_dependency, A) :-
 8518    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
 8519              B),
 8520    value_ht(B, C),
 8521    C=suspension(_, _, D, E, F, G),
 8522    A=functional_dependency(D, E, F, G).
 8523'$enumerate_constraints'(initial_call_pattern, A) :-
 8524    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
 8525              B),
 8526    value_ht(B, C),
 8527    C=suspension(_, _, _, D),
 8528    A=initial_call_pattern(D).
 8529'$enumerate_constraints'(call_pattern, A) :-
 8530    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
 8531              B),
 8532    value_ht(B, C),
 8533    C=suspension(_, _, D),
 8534    A=call_pattern(D).
 8535'$enumerate_constraints'(final_answer_pattern, A) :-
 8536    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
 8537              B),
 8538    value_ht(B, C),
 8539    C=suspension(_, _, _, D, E),
 8540    A=final_answer_pattern(D, E).
 8541'$enumerate_constraints'(abstract_constraints, A) :-
 8542    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
 8543              B),
 8544    member(C, B),
 8545    C=suspension(_, _, _, D),
 8546    A=abstract_constraints(D).
 8547'$enumerate_constraints'(depends_on, A) :-
 8548    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1', B),
 8549    value_ht(B, C),
 8550    C=suspension(_, _, _, D, E),
 8551    A=depends_on(D, E).
 8552'$enumerate_constraints'(depends_on_ap, A) :-
 8553    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
 8554              B),
 8555    value_ht(B, C),
 8556    C=suspension(_, _, _, D, E, F, G),
 8557    A=depends_on_ap(D, E, F, G).
 8558'$enumerate_constraints'(depends_on_goal, A) :-
 8559    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
 8560              B),
 8561    value_ht(B, C),
 8562    C=suspension(_, _, _, D, E),
 8563    A=depends_on_goal(D, E).
 8564'$enumerate_constraints'(ai_observed_internal, A) :-
 8565    nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
 8566              B),
 8567    member(C, B),
 8568    C=suspension(_, _, _, D, E),
 8569    A=ai_observed_internal(D, E).
 8570'$enumerate_constraints'(ai_not_observed_internal, A) :-
 8571    nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
 8572              B),
 8573    member(C, B),
 8574    C=suspension(_, _, _, D, E),
 8575    A=ai_not_observed_internal(D, E).
 8576'$enumerate_constraints'(ai_not_observed, A) :-
 8577    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
 8578              B),
 8579    value_ht(B, C),
 8580    C=suspension(_, _, D, E),
 8581    A=ai_not_observed(D, E).
 8582'$enumerate_constraints'(depends_on_as, A) :-
 8583    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
 8584              B),
 8585    value_ht(B, C),
 8586    C=suspension(_, _, _, D, E, F),
 8587    A=depends_on_as(D, E, F).
 8588'$enumerate_constraints'(ai_observation_gather_results, A) :-
 8589    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
 8590              B),
 8591    member(C, B),
 8592    C=suspension(_, _, _),
 8593    A=ai_observation_gather_results.
 8594'$enumerate_constraints'(ai_observation_memoed_simplification_rest_heads, A) :-
 8595    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
 8596              B),
 8597    value_ht(B, C),
 8598    C=suspension(_, _, D, E, F),
 8599    A=ai_observation_memoed_simplification_rest_heads(D, E, F).
 8600'$enumerate_constraints'(ai_observation_memoed_propagation_rest_heads, A) :-
 8601    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
 8602              B),
 8603    value_ht(B, C),
 8604    C=suspension(_, _, D, E, F),
 8605    A=ai_observation_memoed_propagation_rest_heads(D, E, F).
 8606'$enumerate_constraints'(ai_observation_memoed_abstract_goal, A) :-
 8607    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
 8608              B),
 8609    value_ht(B, C),
 8610    C=suspension(_, _, D, E),
 8611    A=ai_observation_memoed_abstract_goal(D, E).
 8612'$enumerate_constraints'(ai_observation_memo_abstract_goal, A) :-
 8613    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
 8614              B),
 8615    member(C, B),
 8616    C=suspension(_, _, _, D, E),
 8617    A=ai_observation_memo_abstract_goal(D, E).
 8618'$enumerate_constraints'(partial_wake_analysis, A) :-
 8619    nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
 8620              B),
 8621    member(C, B),
 8622    C=suspension(_, _, _, _),
 8623    A=partial_wake_analysis.
 8624'$enumerate_constraints'(no_partial_wake, A) :-
 8625    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
 8626              B),
 8627    value_ht(B, C),
 8628    C=suspension(_, _, D),
 8629    A=no_partial_wake(D).
 8630'$enumerate_constraints'(phase_end, A) :-
 8631    nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1', B),
 8632    value_ht(B, C),
 8633    C=suspension(_, _, D),
 8634    A=phase_end(D).
 8635'$enumerate_constraints'(delay_phase_end, A) :-
 8636    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
 8637              B),
 8638    value_ht(B, C),
 8639    C=suspension(_, _, D, E),
 8640    A=delay_phase_end(D, E).
 8641'$enumerate_constraints'(does_use_history, A) :-
 8642    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
 8643              B),
 8644    value_ht(B, C),
 8645    C=suspension(_, _, D, E),
 8646    A=does_use_history(D, E).
 8647'$enumerate_constraints'(does_use_field, A) :-
 8648    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
 8649              B),
 8650    value_ht(B, C),
 8651    C=suspension(_, _, D, E),
 8652    A=does_use_field(D, E).
 8653'$enumerate_constraints'(uses_state, A) :-
 8654    nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
 8655              B),
 8656    value_ht(B, C),
 8657    C=suspension(_, _, D, E),
 8658    A=uses_state(D, E).
 8659'$enumerate_constraints'(if_used_state, A) :-
 8660    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
 8661              B),
 8662    member(C, B),
 8663    C=suspension(_, _, _, D, E, F, G, H),
 8664    A=if_used_state(D, E, F, G, H).
 8665'$enumerate_constraints'(used_states_known, A) :-
 8666    nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
 8667              B),
 8668    member(C, B),
 8669    C=suspension(_, _, _),
 8670    A=used_states_known.
 8671'$enumerate_constraints'(stored_assertion, A) :-
 8672    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
 8673              B),
 8674    value_ht(B, C),
 8675    C=suspension(_, _, D),
 8676    A=stored_assertion(D).
 8677'$enumerate_constraints'(never_stored_default, A) :-
 8678    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
 8679              B),
 8680    value_ht(B, C),
 8681    C=suspension(_, _, D, E),
 8682    A=never_stored_default(D, E).
 8683'$enumerate_constraints'(never_stored_rules, A) :-
 8684    nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
 8685              B),
 8686    member(C, B),
 8687    C=suspension(_, _, _, D, E),
 8688    A=never_stored_rules(D, E).
 8689'$enumerate_constraints'(continuation_occurrence, A) :-
 8690    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
 8691              B),
 8692    value_ht(B, C),
 8693    C=suspension(_, _, D, E, F),
 8694    A=continuation_occurrence(D, E, F).
 8695'$enumerate_constraints'(skip_to_next_id, A) :-
 8696    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
 8697              B),
 8698    value_ht(B, C),
 8699    C=suspension(_, _, _, D, E),
 8700    A=skip_to_next_id(D, E).
 8701'$enumerate_constraints'(set_occurrence_code_id, A) :-
 8702    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
 8703              B),
 8704    value_ht(B, C),
 8705    C=suspension(_, _, D, E, F),
 8706    A=set_occurrence_code_id(D, E, F).
 8707'$enumerate_constraints'(occurrence_code_id, A) :-
 8708    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
 8709              B),
 8710    value_ht(B, C),
 8711    C=suspension(_, _, D, E, F),
 8712    A=occurrence_code_id(D, E, F).
 8713'$enumerate_constraints'(chr_constants, A) :-
 8714    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
 8715              B),
 8716    member(C, B),
 8717    C=suspension(_, _, _, D),
 8718    A=chr_constants(D).
 8719'$enumerate_constraints'(print_chr_constants, A) :-
 8720    nb_getval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
 8721              B),
 8722    member(C, B),
 8723    C=suspension(_, _, _),
 8724    A=print_chr_constants.
 8725'$via1_multi_hash_source_location___2-1'(A, B) :-
 8726    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 8727              C),
 8728    lookup_ht(C, A, B).
 8729'$via1_multi_hash_indexed_argument___2-1'(A, B) :-
 8730    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 8731              C),
 8732    lookup_ht(C, A, B).
 8733'$via1_multi_hash_indexed_argument___2-12'(A, B) :-
 8734    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 8735              C),
 8736    lookup_ht(C, A, B).
 8737'$via1_multi_hash_constraint_mode___2-1'(A, B) :-
 8738    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 8739              C),
 8740    lookup_ht(C, A, B).
 8741'$via1_multi_hash_store_type___2-1'(A, B) :-
 8742    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', C),
 8743    lookup_ht(C, A, B).
 8744'$via1_multi_hash_actual_store_types___2-1'(A, B) :-
 8745    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
 8746              C),
 8747    lookup_ht(C, A, B).
 8748'$via1_multi_hash_assumed_store_type___2-1'(A, B) :-
 8749    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
 8750              C),
 8751    lookup_ht(C, A, B).
 8752'$via1_multi_hash_validate_store_type_assumption___1-1'(A, B) :-
 8753    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
 8754              C),
 8755    lookup_ht(C, A, B).
 8756'$via1_multi_hash_passive___2-1'(A, B) :-
 8757    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', C),
 8758    lookup_ht(C, A, B).
 8759'$via1_multi_hash_passive___2-12'(A, B) :-
 8760    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', C),
 8761    lookup_ht(C, A, B).
 8762'$via1_multi_hash_occurrence___5-15'(A, B) :-
 8763    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
 8764              C),
 8765    lookup_ht(C, A, B).
 8766'$via1_multi_hash_occurrence___5-125'(A, B) :-
 8767    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
 8768              C),
 8769    lookup_ht(C, A, B).
 8770'$via1_multi_hash_occurrence___5-134'(A, B) :-
 8771    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
 8772              C),
 8773    lookup_ht(C, A, B).
 8774'$via1_multi_hash_occurrence___5-12'(A, B) :-
 8775    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
 8776              C),
 8777    lookup_ht(C, A, B).
 8778'$via1_multi_hash_occurrence___5-3'(A, B) :-
 8779    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', C),
 8780    lookup_ht(C, A, B).
 8781'$via1_multi_hash_occurrence___5-13'(A, B) :-
 8782    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
 8783              C),
 8784    lookup_ht(C, A, B).
 8785'$via1_multi_hash_occurrence___5-34'(A, B) :-
 8786    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
 8787              C),
 8788    lookup_ht(C, A, B).
 8789'$via1_multi_hash_occurrence___5-1'(A, B) :-
 8790    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', C),
 8791    lookup_ht(C, A, B).
 8792'$via1_multi_hash_max_occurrence___2-1'(A, B) :-
 8793    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
 8794              C),
 8795    lookup_ht(C, A, B).
 8796'$via1_multi_hash_allocation_occurrence___2-1'(A, B) :-
 8797    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
 8798              C),
 8799    lookup_ht(C, A, B).
 8800'$via1_multi_hash_allocation_occurrence___2-12'(A, B) :-
 8801    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
 8802              C),
 8803    lookup_ht(C, A, B).
 8804'$via1_multi_hash_rule___2-1'(A, B) :-
 8805    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', C),
 8806    lookup_ht(C, A, B).
 8807'$via1_multi_hash_least_occurrence___2-12'(A, B) :-
 8808    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
 8809              C),
 8810    lookup_ht(C, A, B).
 8811'$via1_multi_hash_least_occurrence___2-1'(A, B) :-
 8812    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
 8813              C),
 8814    lookup_ht(C, A, B).
 8815'$via1_multi_hash_constraint_index___2-2'(A, B) :-
 8816    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
 8817              C),
 8818    lookup_ht(C, A, B).
 8819'$via1_multi_hash_constraint_index___2-1'(A, B) :-
 8820    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
 8821              C),
 8822    lookup_ht(C, A, B).
 8823'$via1_multi_hash_identifier_index___3-12'(A, B) :-
 8824    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
 8825              C),
 8826    lookup_ht(C, A, B).
 8827'$via1_multi_hash_type_indexed_identifier_size___2-1'(A, B) :-
 8828    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
 8829              C),
 8830    lookup_ht(C, A, B).
 8831'$via1_multi_hash_type_indexed_identifier_index___4-123'(A, B) :-
 8832    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
 8833              C),
 8834    lookup_ht(C, A, B).
 8835'$via1_multi_hash_type_indexed_identifier_index___4-23'(A, B) :-
 8836    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
 8837              C),
 8838    lookup_ht(C, A, B).
 8839'$via1_multi_hash_no_history___1-1'(A, B) :-
 8840    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', C),
 8841    lookup_ht(C, A, B).
 8842'$chr_store_constants_chr_translate____history___3___[3]'([], '$chr_store_constants_chr_translate____history___3___[3]___[]').
 8843'$via1_multi_hash_history___3-2'(A, B) :-
 8844    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', C),
 8845    lookup_ht(C, A, B).
 8846'$via1_multi_hash_history___3-1'(A, B) :-
 8847    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', C),
 8848    lookup_ht(C, A, B).
 8849'$via1_multi_hash_indexing_spec___2-1'(A, B) :-
 8850    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
 8851              C),
 8852    lookup_ht(C, A, B).
 8853'$via1_multi_hash_spawns___3-13'(A, B) :-
 8854    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13', C),
 8855    lookup_ht(C, A, B).
 8856'$via1_multi_hash_spawns___3-12'(A, B) :-
 8857    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', C),
 8858    lookup_ht(C, A, B).
 8859'$via1_multi_hash_spawns___3-1'(A, B) :-
 8860    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1', C),
 8861    lookup_ht(C, A, B).
 8862'$via1_multi_hash_spawns___3-3'(A, B) :-
 8863    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', C),
 8864    lookup_ht(C, A, B).
 8865'$via1_multi_hash_spawns___3-123'(A, B) :-
 8866    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', C),
 8867    lookup_ht(C, A, B).
 8868'$via1_multi_hash_spawns_all___2-1'(A, B) :-
 8869    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1', C),
 8870    lookup_ht(C, A, B).
 8871'$via1_multi_hash_spawns_all___2-12'(A, B) :-
 8872    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
 8873              C),
 8874    lookup_ht(C, A, B).
 8875'$via1_multi_hash_spawns_all_triggers___2-1'(A, B) :-
 8876    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
 8877              C),
 8878    lookup_ht(C, A, B).
 8879'$via1_multi_hash_spawns_all_triggers___2-12'(A, B) :-
 8880    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
 8881              C),
 8882    lookup_ht(C, A, B).
 8883'$via1_multi_hash_actual_atomic_multi_hash_keys___3-12'(A, B) :-
 8884    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
 8885              C),
 8886    lookup_ht(C, A, B).
 8887'$via1_multi_hash_actual_atomic_multi_hash_keys___3-1'(A, B) :-
 8888    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
 8889              C),
 8890    lookup_ht(C, A, B).
 8891'$via1_multi_hash_actual_ground_multi_hash_keys___3-12'(A, B) :-
 8892    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
 8893              C),
 8894    lookup_ht(C, A, B).
 8895'$via1_multi_hash_actual_ground_multi_hash_keys___3-1'(A, B) :-
 8896    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
 8897              C),
 8898    lookup_ht(C, A, B).
 8899'$via1_multi_hash_actual_non_ground_multi_hash_key___2-12'(A, B) :-
 8900    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
 8901              C),
 8902    lookup_ht(C, A, B).
 8903'$via1_multi_hash_prolog_global_variable___1-1'(A, B) :-
 8904    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
 8905              C),
 8906    lookup_ht(C, A, B).
 8907'$via1_multi_hash_prev_guard_list___6-1'(A, B) :-
 8908    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
 8909              C),
 8910    lookup_ht(C, A, B).
 8911'$via1_multi_hash_set_all_passive___1-1'(A, B) :-
 8912    nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
 8913              C),
 8914    lookup_ht(C, A, B).
 8915'$via1_multi_hash_make_head_matchings_explicit_memo_table___3-1'(A, B) :-
 8916    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
 8917              C),
 8918    lookup_ht(C, A, B).
 8919'$via1_multi_hash_constraint_type___2-1'(A, B) :-
 8920    nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
 8921              C),
 8922    lookup_ht(C, A, B).
 8923'$via1_multi_hash_ast_static_atomic_builtin_type_check_var___4-1'(A, B) :-
 8924    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
 8925              C),
 8926    lookup_ht(C, A, B).
 8927'$via1_multi_hash_ast_static_atomic_builtin_type_check_var___4-13'(A, B) :-
 8928    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
 8929              C),
 8930    lookup_ht(C, A, B).
 8931'$via1_multi_hash_stored___3-13'(A, B) :-
 8932    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', C),
 8933    lookup_ht(C, A, B).
 8934'$via1_multi_hash_stored___3-123'(A, B) :-
 8935    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', C),
 8936    lookup_ht(C, A, B).
 8937'$via1_multi_hash_stored_complete___3-13'(A, B) :-
 8938    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
 8939              C),
 8940    lookup_ht(C, A, B).
 8941'$via1_multi_hash_stored_complete___3-1'(A, B) :-
 8942    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
 8943              C),
 8944    lookup_ht(C, A, B).
 8945'$via1_multi_hash_check_all_passive___2-12'(A, B) :-
 8946    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
 8947              C),
 8948    lookup_ht(C, A, B).
 8949'$via1_multi_hash_check_all_passive___2-1'(A, B) :-
 8950    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
 8951              C),
 8952    lookup_ht(C, A, B).
 8953'$via1_multi_hash_memo_has_active_occurrence___1-1'(A, B) :-
 8954    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
 8955              C),
 8956    lookup_ht(C, A, B).
 8957'$via1_multi_hash_use_auxiliary_predicate___1-1'(A, B) :-
 8958    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
 8959              C),
 8960    lookup_ht(C, A, B).
 8961'$via1_multi_hash_use_auxiliary_predicate___2-1'(A, B) :-
 8962    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
 8963              C),
 8964    lookup_ht(C, A, B).
 8965'$via1_multi_hash_use_auxiliary_predicate___2-12'(A, B) :-
 8966    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
 8967              C),
 8968    lookup_ht(C, A, B).
 8969'$via1_multi_hash_use_auxiliary_module___1-1'(A, B) :-
 8970    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
 8971              C),
 8972    lookup_ht(C, A, B).
 8973'$via1_multi_hash_functional_dependency___4-1'(A, B) :-
 8974    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
 8975              C),
 8976    lookup_ht(C, A, B).
 8977'$via1_multi_hash_functional_dependency___4-12'(A, B) :-
 8978    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
 8979              C),
 8980    lookup_ht(C, A, B).
 8981'$via1_multi_hash_initial_call_pattern___1-1'(A, B) :-
 8982    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
 8983              C),
 8984    lookup_ht(C, A, B).
 8985'$via1_multi_hash_call_pattern___1-1'(A, B) :-
 8986    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
 8987              C),
 8988    lookup_ht(C, A, B).
 8989'$via1_multi_hash_final_answer_pattern___2-1'(A, B) :-
 8990    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
 8991              C),
 8992    lookup_ht(C, A, B).
 8993'$via1_multi_hash_depends_on___2-1'(A, B) :-
 8994    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1', C),
 8995    lookup_ht(C, A, B).
 8996'$via1_multi_hash_depends_on___2-2'(A, B) :-
 8997    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2', C),
 8998    lookup_ht(C, A, B).
 8999'$via1_multi_hash_depends_on_ap___4-2'(A, B) :-
 9000    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
 9001              C),
 9002    lookup_ht(C, A, B).
 9003'$via1_multi_hash_depends_on_ap___4-3'(A, B) :-
 9004    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
 9005              C),
 9006    lookup_ht(C, A, B).
 9007'$via1_multi_hash_depends_on_goal___2-2'(A, B) :-
 9008    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
 9009              C),
 9010    lookup_ht(C, A, B).
 9011'$via1_multi_hash_ai_observed_internal___2-12'(A, B) :-
 9012    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
 9013              C),
 9014    lookup_ht(C, A, B).
 9015'$via1_multi_hash_ai_not_observed_internal___2-12'(A, B) :-
 9016    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
 9017              C),
 9018    lookup_ht(C, A, B).
 9019'$via1_multi_hash_ai_not_observed___2-12'(A, B) :-
 9020    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
 9021              C),
 9022    lookup_ht(C, A, B).
 9023'$via1_multi_hash_depends_on_as___3-3'(A, B) :-
 9024    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
 9025              C),
 9026    lookup_ht(C, A, B).
 9027'$via1_multi_hash_depends_on_as___3-2'(A, B) :-
 9028    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
 9029              C),
 9030    lookup_ht(C, A, B).
 9031'$via1_multi_hash_ai_observation_memoed_simplification_rest_heads___3-12'(A, B) :-
 9032    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
 9033              C),
 9034    lookup_ht(C, A, B).
 9035'$via1_multi_hash_ai_observation_memoed_propagation_rest_heads___3-12'(A, B) :-
 9036    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
 9037              C),
 9038    lookup_ht(C, A, B).
 9039'$via1_multi_hash_ai_observation_memoed_abstract_goal___2-1'(A, B) :-
 9040    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
 9041              C),
 9042    lookup_ht(C, A, B).
 9043'$via1_multi_hash_no_partial_wake___1-1'(A, B) :-
 9044    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
 9045              C),
 9046    lookup_ht(C, A, B).
 9047'$via1_multi_hash_phase_end___1-1'(A, B) :-
 9048    nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1', C),
 9049    lookup_ht(C, A, B).
 9050'$via1_multi_hash_delay_phase_end___2-1'(A, B) :-
 9051    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
 9052              C),
 9053    lookup_ht(C, A, B).
 9054'$via1_multi_hash_does_use_history___2-1'(A, B) :-
 9055    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
 9056              C),
 9057    lookup_ht(C, A, B).
 9058'$via1_multi_hash_does_use_history___2-12'(A, B) :-
 9059    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
 9060              C),
 9061    lookup_ht(C, A, B).
 9062'$via1_multi_hash_does_use_field___2-12'(A, B) :-
 9063    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
 9064              C),
 9065    lookup_ht(C, A, B).
 9066'$via1_multi_hash_uses_state___2-12'(A, B) :-
 9067    nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
 9068              C),
 9069    lookup_ht(C, A, B).
 9070'$via1_multi_hash_if_used_state___5-12'(A, B) :-
 9071    nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
 9072              C),
 9073    lookup_ht(C, A, B).
 9074'$via1_multi_hash_stored_assertion___1-1'(A, B) :-
 9075    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
 9076              C),
 9077    lookup_ht(C, A, B).
 9078'$via1_multi_hash_never_stored_default___2-1'(A, B) :-
 9079    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
 9080              C),
 9081    lookup_ht(C, A, B).
 9082'$via1_multi_hash_continuation_occurrence___3-12'(A, B) :-
 9083    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
 9084              C),
 9085    lookup_ht(C, A, B).
 9086'$via1_multi_hash_skip_to_next_id___2-12'(A, B) :-
 9087    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
 9088              C),
 9089    lookup_ht(C, A, B).
 9090'$via1_multi_hash_set_occurrence_code_id___3-12'(A, B) :-
 9091    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
 9092              C),
 9093    lookup_ht(C, A, B).
 9094'$via1_multi_hash_occurrence_code_id___3-12'(A, B) :-
 9095    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
 9096              C),
 9097    lookup_ht(C, A, B).
 9098'$chr_initialization' :-
 9099    nb_setval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
 9100              []),
 9101    nb_setval('$chr_store_global_ground_chr_translate____chr_constants___1', []),
 9102    new_ht(A),
 9103    nb_setval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
 9104              A),
 9105    new_ht(B),
 9106    nb_setval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
 9107              B),
 9108    new_ht(C),
 9109    nb_setval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
 9110              C),
 9111    new_ht(D),
 9112    nb_setval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
 9113              D),
 9114    nb_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
 9115              []),
 9116    new_ht(E),
 9117    nb_setval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
 9118              E),
 9119    new_ht(F),
 9120    nb_setval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
 9121              F),
 9122    nb_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
 9123              []),
 9124    new_ht(G),
 9125    nb_setval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
 9126              G),
 9127    nb_setval('$chr_store_global_ground_chr_translate____if_used_state___5', []),
 9128    new_ht(H),
 9129    nb_setval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
 9130              H),
 9131    new_ht(I),
 9132    nb_setval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
 9133              I),
 9134    new_ht(J),
 9135    nb_setval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
 9136              J),
 9137    new_ht(K),
 9138    nb_setval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
 9139              K),
 9140    new_ht(L),
 9141    nb_setval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
 9142              L),
 9143    new_ht(M),
 9144    nb_setval('$chr_store_multi_hash_chr_translate____phase_end___1-1', M),
 9145    new_ht(N),
 9146    nb_setval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
 9147              N),
 9148    nb_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
 9149              []),
 9150    nb_setval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
 9151              []),
 9152    new_ht(O),
 9153    nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
 9154              O),
 9155    new_ht(P),
 9156    nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
 9157              P),
 9158    new_ht(Q),
 9159    nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
 9160              Q),
 9161    nb_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
 9162              []),
 9163    new_ht(R),
 9164    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
 9165              R),
 9166    new_ht(S),
 9167    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
 9168              S),
 9169    new_ht(T),
 9170    nb_setval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
 9171              T),
 9172    new_ht(U),
 9173    nb_setval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
 9174              U),
 9175    nb_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
 9176              []),
 9177    new_ht(V),
 9178    nb_setval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
 9179              V),
 9180    nb_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
 9181              []),
 9182    new_ht(W),
 9183    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
 9184              W),
 9185    new_ht(X),
 9186    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
 9187              X),
 9188    new_ht(Y),
 9189    nb_setval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
 9190              Y),
 9191    new_ht(Z),
 9192    nb_setval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
 9193              Z),
 9194    new_ht(A1),
 9195    nb_setval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
 9196              A1),
 9197    nb_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
 9198              []),
 9199    new_ht(B1),
 9200    nb_setval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
 9201              B1),
 9202    new_ht(C1),
 9203    nb_setval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
 9204              C1),
 9205    new_ht(D1),
 9206    nb_setval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
 9207              D1),
 9208    new_ht(E1),
 9209    nb_setval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
 9210              E1),
 9211    new_ht(F1),
 9212    nb_setval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
 9213              F1),
 9214    new_ht(G1),
 9215    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
 9216              G1),
 9217    new_ht(H1),
 9218    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
 9219              H1),
 9220    new_ht(I1),
 9221    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
 9222              I1),
 9223    new_ht(J1),
 9224    nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
 9225              J1),
 9226    new_ht(K1),
 9227    nb_setval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
 9228              K1),
 9229    nb_setval('$chr_store_global_ground_chr_translate____constraints_code1___3',
 9230              []),
 9231    new_ht(L1),
 9232    nb_setval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
 9233              L1),
 9234    new_ht(M1),
 9235    nb_setval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
 9236              M1),
 9237    new_ht(N1),
 9238    nb_setval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
 9239              N1),
 9240    new_ht(O1),
 9241    nb_setval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
 9242              O1),
 9243    new_ht(P1),
 9244    nb_setval('$chr_store_multi_hash_chr_translate____stored___3-123', P1),
 9245    new_ht(Q1),
 9246    nb_setval('$chr_store_multi_hash_chr_translate____stored___3-13', Q1),
 9247    nb_setval('$chr_store_global_list_chr_translate____atomic_type___1', []),
 9248    nb_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
 9249              []),
 9250    nb_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
 9251              []),
 9252    new_ht(R1),
 9253    nb_setval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
 9254              R1),
 9255    new_ht(S1),
 9256    nb_setval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
 9257              S1),
 9258    nb_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
 9259              []),
 9260    nb_setval('$chr_store_global_ground_chr_translate____static_type_check___2',
 9261              []),
 9262    nb_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9263              []),
 9264    nb_setval('$chr_store_global_list_chr_translate____unalias_type___2', []),
 9265    new_ht(T1),
 9266    nb_setval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
 9267              T1),
 9268    nb_setval('$chr_store_global_ground_chr_translate____constraint_type___2',
 9269              []),
 9270    nb_setval('$chr_store_global_list_chr_translate____type_alias___2', []),
 9271    nb_setval('$chr_store_global_list_chr_translate____type_definition___2', []),
 9272    nb_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
 9273              []),
 9274    new_ht(U1),
 9275    nb_setval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
 9276              U1),
 9277    nb_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
 9278              []),
 9279    new_ht(V1),
 9280    nb_setval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
 9281              V1),
 9282    new_ht(W1),
 9283    nb_setval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
 9284              W1),
 9285    nb_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
 9286              []),
 9287    nb_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
 9288              []),
 9289    nb_setval('$chr_store_global_list_chr_translate____get_bg_info___2', []),
 9290    nb_setval('$chr_store_global_list_chr_translate____background_info___2', []),
 9291    nb_setval('$chr_store_global_ground_chr_translate____background_info___1',
 9292              []),
 9293    new_ht(X1),
 9294    nb_setval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
 9295              X1),
 9296    nb_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
 9297              []),
 9298    nb_setval('$chr_store_global_list_chr_translate____fresh_symbol___2', []),
 9299    nb_setval('$chr_store_global_list_chr_translate____symbol_count___2', []),
 9300    new_ht(Y1),
 9301    nb_setval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
 9302              Y1),
 9303    new_ht(Z1),
 9304    nb_setval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
 9305              Z1),
 9306    new_ht(A2),
 9307    nb_setval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
 9308              A2),
 9309    new_ht(B2),
 9310    nb_setval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
 9311              B2),
 9312    new_ht(C2),
 9313    nb_setval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
 9314              C2),
 9315    nb_setval('$chr_store_global_ground_chr_translate____module_initializer___1',
 9316              []),
 9317    nb_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
 9318              []),
 9319    nb_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
 9320              []),
 9321    nb_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
 9322              []),
 9323    nb_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
 9324              []),
 9325    new_ht(D2),
 9326    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
 9327              D2),
 9328    new_ht(E2),
 9329    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
 9330              E2),
 9331    nb_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
 9332              []),
 9333    new_ht(F2),
 9334    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
 9335              F2),
 9336    new_ht(G2),
 9337    nb_setval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
 9338              G2),
 9339    new_ht(H2),
 9340    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-123', H2),
 9341    new_ht(I2),
 9342    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-3', I2),
 9343    new_ht(J2),
 9344    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-1', J2),
 9345    new_ht(K2),
 9346    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-12', K2),
 9347    nb_setval('$chr_store_global_ground_chr_translate____spawns___3', []),
 9348    new_ht(L2),
 9349    nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-13', L2),
 9350    nb_setval('$chr_store_global_ground_chr_translate____observation_analysis___1',
 9351              []),
 9352    new_ht(M2),
 9353    nb_setval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
 9354              M2),
 9355    new_ht(N2),
 9356    nb_setval('$chr_store_multi_hash_chr_translate____history___3-1', N2),
 9357    new_ht(O2),
 9358    nb_setval('$chr_store_multi_hash_chr_translate____history___3-2', O2),
 9359    nb_setval('$chr_store_constants_chr_translate____history___3___[3]___[]', []),
 9360    new_ht(P2),
 9361    nb_setval('$chr_store_multi_hash_chr_translate____no_history___1-1',
 9362              P2),
 9363    new_ht(Q2),
 9364    nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
 9365              Q2),
 9366    new_ht(R2),
 9367    nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
 9368              R2),
 9369    new_ht(S2),
 9370    nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
 9371              S2),
 9372    new_ht(T2),
 9373    nb_setval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
 9374              T2),
 9375    nb_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
 9376              []),
 9377    nb_setval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
 9378              []),
 9379    new_ht(U2),
 9380    nb_setval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
 9381              U2),
 9382    new_ht(V2),
 9383    nb_setval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
 9384              V2),
 9385    new_ht(W2),
 9386    nb_setval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
 9387              W2),
 9388    new_ht(X2),
 9389    nb_setval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
 9390              X2),
 9391    new_ht(Y2),
 9392    nb_setval('$chr_store_multi_hash_chr_translate____rule___2-1', Y2),
 9393    nb_setval('$chr_store_global_ground_chr_translate____rule___2', []),
 9394    new_ht(Z2),
 9395    nb_setval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
 9396              Z2),
 9397    new_ht(A3),
 9398    nb_setval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
 9399              A3),
 9400    new_ht(B3),
 9401    nb_setval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
 9402              B3),
 9403    new_ht(C3),
 9404    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
 9405              C3),
 9406    new_ht(D3),
 9407    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
 9408              D3),
 9409    new_ht(E3),
 9410    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
 9411              E3),
 9412    new_ht(F3),
 9413    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
 9414              F3),
 9415    new_ht(G3),
 9416    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
 9417              G3),
 9418    new_ht(H3),
 9419    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
 9420              H3),
 9421    new_ht(I3),
 9422    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
 9423              I3),
 9424    nb_setval('$chr_store_global_ground_chr_translate____occurrence___5', []),
 9425    new_ht(J3),
 9426    nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
 9427              J3),
 9428    new_ht(K3),
 9429    nb_setval('$chr_store_multi_hash_chr_translate____passive___2-12', K3),
 9430    new_ht(L3),
 9431    nb_setval('$chr_store_multi_hash_chr_translate____passive___2-1', L3),
 9432    nb_setval('$chr_store_global_ground_chr_translate____rule_count___1', []),
 9433    new_ht(M3),
 9434    nb_setval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
 9435              M3),
 9436    new_ht(N3),
 9437    nb_setval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
 9438              N3),
 9439    new_ht(O3),
 9440    nb_setval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
 9441              O3),
 9442    new_ht(P3),
 9443    nb_setval('$chr_store_multi_hash_chr_translate____store_type___2-1',
 9444              P3),
 9445    nb_setval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
 9446              []),
 9447    new_ht(Q3),
 9448    nb_setval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9449              Q3),
 9450    nb_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9451              []),
 9452    new_ht(R3),
 9453    nb_setval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9454              R3),
 9455    new_ht(S3),
 9456    nb_setval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 9457              S3),
 9458    new_ht(T3),
 9459    nb_setval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9460              T3),
 9461    nb_setval('$chr_store_global_ground_chr_translate____target_module___1', []),
 9462    nb_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9463              []).
 9464:- (initialization'$chr_initialization'). 9465:- (dynamic user:exception/3). 9466:- (multifile user:exception/3). 9467user:exception(undefined_global_variable, A, retry) :-
 9468    '$chr_prolog_global_variable'(A),
 9469    '$chr_initialization'.
 9470'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____print_chr_constants___0').
 9471'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____chr_constants___1').
 9472'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12').
 9473'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12').
 9474'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12').
 9475'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12').
 9476'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____never_stored_rules___2').
 9477'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____never_stored_default___2-1').
 9478'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_assertion___1-1').
 9479'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____used_states_known___0').
 9480'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____if_used_state___5-12').
 9481'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____if_used_state___5').
 9482'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____uses_state___2-12').
 9483'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_field___2-12').
 9484'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_history___2-12').
 9485'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_history___2-1').
 9486'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1').
 9487'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____phase_end___1-1').
 9488'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1').
 9489'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____partial_wake_analysis___0').
 9490'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2').
 9491'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1').
 9492'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12').
 9493'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12').
 9494'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0').
 9495'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_as___3-2').
 9496'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_as___3-3').
 9497'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12').
 9498'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12').
 9499'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2').
 9500'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12').
 9501'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observed_internal___2').
 9502'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2').
 9503'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3').
 9504'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2').
 9505'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on___2-2').
 9506'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on___2-1').
 9507'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____abstract_constraints___1').
 9508'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1').
 9509'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____call_pattern___1-1').
 9510'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1').
 9511'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____functional_dependency___4-12').
 9512'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____functional_dependency___4-1').
 9513'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1').
 9514'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12').
 9515'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1').
 9516'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1').
 9517'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1').
 9518'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraints_code1___3').
 9519'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____check_all_passive___2-1').
 9520'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____check_all_passive___2-12').
 9521'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_complete___3-1').
 9522'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_complete___3-13').
 9523'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored___3-123').
 9524'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored___3-13').
 9525'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____atomic_type___1').
 9526'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1').
 9527'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____dynamic_type_check___0').
 9528'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13').
 9529'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1').
 9530'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____ast_static_type_check_var___4').
 9531'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____static_type_check___2').
 9532'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____types_modes_condition___3').
 9533'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____unalias_type___2').
 9534'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_type___2-1').
 9535'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraint_type___2').
 9536'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____type_alias___2').
 9537'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____type_definition___2').
 9538'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1').
 9539'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1').
 9540'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____precompute_head_matchings___0').
 9541'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____set_all_passive___1-1').
 9542'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1').
 9543'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____prev_guard_list___6').
 9544'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____get_bg_info_answer___1').
 9545'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____get_bg_info___2').
 9546'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____background_info___2').
 9547'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____background_info___1').
 9548'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1').
 9549'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____prolog_global_variable___1').
 9550'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____fresh_symbol___2').
 9551'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____symbol_count___2').
 9552'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12').
 9553'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1').
 9554'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12').
 9555'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1').
 9556'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12').
 9557'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____module_initializer___1').
 9558'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____find_empty_named_histories___0').
 9559'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1').
 9560'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2').
 9561'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0').
 9562'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12').
 9563'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1').
 9564'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns_all_triggers___2').
 9565'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all___2-12').
 9566'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all___2-1').
 9567'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-123').
 9568'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-3').
 9569'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-1').
 9570'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-12').
 9571'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns___3').
 9572'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-13').
 9573'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____observation_analysis___1').
 9574'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexing_spec___2-1').
 9575'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____history___3-1').
 9576'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____history___3-2').
 9577'$chr_prolog_global_variable'('$chr_store_constants_chr_translate____history___3___[3]___[]').
 9578'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____no_history___1-1').
 9579'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23').
 9580'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123').
 9581'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1').
 9582'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____identifier_index___3-12').
 9583'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____identifier_size___1').
 9584'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____max_constraint_index___1').
 9585'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_index___2-1').
 9586'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_index___2-2').
 9587'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____least_occurrence___2-1').
 9588'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____least_occurrence___2-12').
 9589'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____rule___2-1').
 9590'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____rule___2').
 9591'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12').
 9592'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1').
 9593'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____max_occurrence___2-1').
 9594'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-1').
 9595'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-34').
 9596'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-13').
 9597'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-3').
 9598'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-12').
 9599'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-134').
 9600'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-125').
 9601'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____occurrence___5').
 9602'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-15').
 9603'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____passive___2-12').
 9604'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____passive___2-1').
 9605'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____rule_count___1').
 9606'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1').
 9607'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1').
 9608'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_store_types___2-1').
 9609'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____store_type___2-1').
 9610'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0').
 9611'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_mode___2-1').
 9612'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraint_mode___2').
 9613'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexed_argument___2-12').
 9614'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexed_argument___2-1').
 9615'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____source_location___2-1').
 9616'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____target_module___1').
 9617'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____chr_source_file___1').
 9618chr_source_file(A) :-
 9619    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9620              B),
 9621    (   member(C, B),
 9622        C=suspension(_, active, _, _),
 9623        !
 9624    ;   !,
 9625        chr_source_file___1__0__0__2(B, A)
 9626    ).
 9627chr_source_file___1__0__0__2([], A) :-
 9628    chr_source_file___1__1(A).
 9629chr_source_file___1__0__0__2([A|B], C) :-
 9630    (   A=suspension(_, active, _, _)
 9631    ->  setarg(2, A, removed),
 9632        arg(3, A, D),
 9633        (   var(D)
 9634        ->  nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9635                      E),
 9636            E=[_|F],
 9637            b_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9638                     F),
 9639            (   F=[G|_]
 9640            ->  setarg(3, G, _)
 9641            ;   true
 9642            )
 9643        ;   D=[_, _|F],
 9644            setarg(2, D, F),
 9645            (   F=[G|_]
 9646            ->  setarg(3, G, D)
 9647            ;   true
 9648            )
 9649        ),
 9650        chr_source_file___1__0__0__2(B, C)
 9651    ;   chr_source_file___1__0__0__2(B, C)
 9652    ).
 9653chr_source_file(A) :-
 9654    chr_source_file___1__1(A).
 9655chr_source_file___1__1(A) :-
 9656    B=suspension(C, active, _, A),
 9657    'chr gen_id'(C),
 9658    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9659              D),
 9660    E=[B|D],
 9661    b_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9662             E),
 9663    (   D=[F|_]
 9664    ->  setarg(3, F, E)
 9665    ;   true
 9666    ).
 9667get_chr_source_file(A) :-
 9668    nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',
 9669              B),
 9670    member(C, B),
 9671    C=suspension(_, active, _, D),
 9672    !,
 9673    A=D.
 9674get_chr_source_file(user).
 9675target_module(A) :-
 9676    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9677              B),
 9678    (   member(C, B),
 9679        C=suspension(_, active, _, _),
 9680        !
 9681    ;   !,
 9682        target_module___1__0__0__2(B, A)
 9683    ).
 9684target_module___1__0__0__2([], A) :-
 9685    target_module___1__1(A).
 9686target_module___1__0__0__2([A|B], C) :-
 9687    (   A=suspension(_, active, _, _)
 9688    ->  setarg(2, A, removed),
 9689        arg(3, A, D),
 9690        (   var(D)
 9691        ->  nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9692                      E),
 9693            E=[_|F],
 9694            b_setval('$chr_store_global_ground_chr_translate____target_module___1',
 9695                     F),
 9696            (   F=[G|_]
 9697            ->  setarg(3, G, _)
 9698            ;   true
 9699            )
 9700        ;   D=[_, _|F],
 9701            setarg(2, D, F),
 9702            (   F=[G|_]
 9703            ->  setarg(3, G, D)
 9704            ;   true
 9705            )
 9706        ),
 9707        target_module___1__0__0__2(B, C)
 9708    ;   target_module___1__0__0__2(B, C)
 9709    ).
 9710target_module(A) :-
 9711    target_module___1__1(A).
 9712target_module___1__1(A) :-
 9713    B=suspension(C, active, _, A),
 9714    'chr gen_id'(C),
 9715    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9716              D),
 9717    E=[B|D],
 9718    b_setval('$chr_store_global_ground_chr_translate____target_module___1',
 9719             E),
 9720    (   D=[F|_]
 9721    ->  setarg(3, F, E)
 9722    ;   true
 9723    ).
 9724get_target_module(A) :-
 9725    nb_getval('$chr_store_global_ground_chr_translate____target_module___1',
 9726              B),
 9727    member(C, B),
 9728    C=suspension(_, active, _, D),
 9729    !,
 9730    A=D.
 9731get_target_module(user).
 9732source_location(A, B) :-
 9733    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9734              C),
 9735    lookup_ht(C, A, D),
 9736    (   member(E, D),
 9737        E=suspension(_, active, _, _),
 9738        !
 9739    ;   !,
 9740        source_location___2__0__0__2(D, A, B)
 9741    ).
 9742source_location___2__0__0__2([], A, B) :-
 9743    source_location___2__1(A, B).
 9744source_location___2__0__0__2([A|B], C, D) :-
 9745    (   A=suspension(_, active, E, _),
 9746        E==C
 9747    ->  setarg(2, A, removed),
 9748        nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9749                  F),
 9750        delete_ht(F, C, A),
 9751        source_location___2__0__0__2(B, C, D)
 9752    ;   source_location___2__0__0__2(B, C, D)
 9753    ).
 9754source_location(A, B) :-
 9755    source_location___2__1(A, B).
 9756source_location___2__1(A, B) :-
 9757    C=suspension(D, active, A, B),
 9758    'chr gen_id'(D),
 9759    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9760              E),
 9761    insert_ht(E, A, C).
 9762get_line_number(A, B) :-
 9763    nb_getval('$chr_store_multi_hash_chr_translate____source_location___2-1',
 9764              C),
 9765    lookup_ht(C, A, D),
 9766    member(E, D),
 9767    E=suspension(_, active, _, F),
 9768    !,
 9769    B=F.
 9770get_line_number(_, (?):0).
 9771indexed_argument(A, B) :-
 9772    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9773              C),
 9774    lookup_ht(C, k(A, B), D),
 9775    member(E, D),
 9776    E=suspension(_, active, _, _),
 9777    !.
 9778indexed_argument(A, B) :-
 9779    C=suspension(D, active, A, B),
 9780    'chr gen_id'(D),
 9781    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
 9782              E),
 9783    insert_ht(E, A, C),
 9784    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9785              F),
 9786    insert_ht(F, k(A, B), C).
 9787is_indexed_argument(A, B) :-
 9788    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',
 9789              C),
 9790    lookup_ht(C, k(A, B), D),
 9791    member(E, D),
 9792    E=suspension(_, active, _, _),
 9793    !.
 9794is_indexed_argument(_, _) :-
 9795    fail.
 9796constraint_mode(A, B) :-
 9797    constraint_mode___2__0(A, B, _).
 9798constraint_mode___2__0(A, B, C) :-
 9799    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9800              D),
 9801    lookup_ht(D, A, E),
 9802    (   member(F, E),
 9803        F=suspension(_, active, _, _, _, _),
 9804        !
 9805    ;   !,
 9806        constraint_mode___2__0__0__2(E, A, B, C)
 9807    ).
 9808constraint_mode___2__0__0__2([], A, B, C) :-
 9809    constraint_mode___2__1(A, B, C).
 9810constraint_mode___2__0__0__2([A|B], C, D, E) :-
 9811    (   A=suspension(_, active, _, _, F, _),
 9812        F==C
 9813    ->  setarg(2, A, removed),
 9814        ( arg(4, A, G),
 9815          (   var(G)
 9816          ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9817                        H),
 9818              H=[_|I],
 9819              b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9820                       I),
 9821              (   I=[J|_]
 9822              ->  setarg(4, J, _)
 9823              ;   true
 9824              )
 9825          ;   G=[_, _|I],
 9826              setarg(2, G, I),
 9827              (   I=[J|_]
 9828              ->  setarg(4, J, G)
 9829              ;   true
 9830              )
 9831          )
 9832        ),
 9833        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9834                  K),
 9835        delete_ht(K, C, A),
 9836        constraint_mode___2__0__0__2(B, C, D, E)
 9837    ;   constraint_mode___2__0__0__2(B, C, D, E)
 9838    ).
 9839constraint_mode___2__0(A, B, C) :-
 9840    constraint_mode___2__1(A, B, C).
 9841constraint_mode___2__1(A, B, C) :-
 9842    A=D/E,
 9843    nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9844              F),
 9845    !,
 9846    C=suspension(G, not_stored_yet, t, _, A, B),
 9847    'chr gen_id'(G),
 9848    constraint_mode___2__1__0__7(F,
 9849                                 A,
 9850                                 B,
 9851                                 C,
 9852                                 D,
 9853                                 E).
 9854constraint_mode___2__1__0__7([], A, B, C, _, _) :-
 9855    constraint_mode___2__2(A, B, C).
 9856constraint_mode___2__1__0__7([A|B], C, D, E, F, G) :-
 9857    (   A=suspension(_, active, _, H, I, J),
 9858        H=[K|L],
 9859        I=[M|N],
 9860        functor(K, F, G)
 9861    ->  setarg(2, A, removed),
 9862        arg(3, A, O),
 9863        (   var(O)
 9864        ->  nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9865                      P),
 9866            P=[_|Q],
 9867            b_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
 9868                     Q),
 9869            (   Q=[R|_]
 9870            ->  setarg(3, R, _)
 9871            ;   true
 9872            )
 9873        ;   O=[_, _|Q],
 9874            setarg(2, O, Q),
 9875            (   Q=[R|_]
 9876            ->  setarg(3, R, O)
 9877            ;   true
 9878            )
 9879        ),
 9880        arg(2, E, S),
 9881        setarg(2, E, active),
 9882        (   S==not_stored_yet
 9883        ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9884                      T),
 9885            U=[E|T],
 9886            b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9887                     U),
 9888            (   T=[V|_]
 9889            ->  setarg(4, V, U)
 9890            ;   true
 9891            ),
 9892            nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
 9893                      W),
 9894            insert_ht(W, C, E)
 9895        ;   true
 9896        ),
 9897        K=..[_|X],
 9898        J=(Y, Z, A1),
 9899        modes_condition(D, X, Y),
 9900        get_constraint_type_det(F/G, B1),
 9901        M=..[_|C1],
 9902        types_condition(B1, X, C1, D, Z),
 9903        types_modes_condition(L, N, A1),
 9904        (   E=suspension(_, active, _, _, _, _)
 9905        ->  setarg(2, E, inactive),
 9906            constraint_mode___2__1__0__7(B,
 9907                                         C,
 9908                                         D,
 9909                                         E,
 9910                                         F,
 9911                                         G)
 9912        ;   true
 9913        )
 9914    ;   constraint_mode___2__1__0__7(B,
 9915                                     C,
 9916                                     D,
 9917                                     E,
 9918                                     F,
 9919                                     G)
 9920    ).
 9921constraint_mode___2__1(A, B, C) :-
 9922    C=suspension(D, not_stored_yet, t, _, A, B),
 9923    'chr gen_id'(D),
 9924    constraint_mode___2__2(A, B, C).
 9925constraint_mode___2__2(A, B, C) :-
 9926    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', D),
 9927    lookup_ht(D, A, E),
 9928    !,
 9929    constraint_mode___2__2__0__8(E, A, B, C).
 9930constraint_mode___2__2__0__8([], A, B, C) :-
 9931    constraint_mode___2__3(A, B, C).
 9932constraint_mode___2__2__0__8([A|B], C, D, E) :-
 9933    (   A=suspension(_, active, _, _, F, _, G, H, I),
 9934        F==C,
 9935        nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
 9936                  J)
 9937    ->  constraint_mode___2__2__1__8(J,
 9938                                     G,
 9939                                     H,
 9940                                     I,
 9941                                     A,
 9942                                     B,
 9943                                     C,
 9944                                     D,
 9945                                     E)
 9946    ;   constraint_mode___2__2__0__8(B, C, D, E)
 9947    ).
 9948constraint_mode___2__2__1__8([], _, _, _, _, A, B, C, D) :-
 9949    constraint_mode___2__2__0__8(A, B, C, D).
 9950constraint_mode___2__2__1__8([A|B], C, D, E, F, G, H, I, J) :-
 9951    (   A=suspension(_, active, _, _),
 9952        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', K),
 9953        lookup_ht(K, C, L)
 9954    ->  constraint_mode___2__2__2__8(L,
 9955                                     A,
 9956                                     B,
 9957                                     C,
 9958                                     D,
 9959                                     E,
 9960                                     F,
 9961                                     G,
 9962                                     H,
 9963                                     I,
 9964                                     J)
 9965    ;   constraint_mode___2__2__1__8(B,
 9966                                     C,
 9967                                     D,
 9968                                     E,
 9969                                     F,
 9970                                     G,
 9971                                     H,
 9972                                     I,
 9973                                     J)
 9974    ).
 9975constraint_mode___2__2__2__8([], _, A, B, C, D, E, F, G, H, I) :-
 9976    constraint_mode___2__2__1__8(A,
 9977                                 B,
 9978                                 C,
 9979                                 D,
 9980                                 E,
 9981                                 F,
 9982                                 G,
 9983                                 H,
 9984                                 I).
 9985constraint_mode___2__2__2__8([A|B], C, D, E, F, G, H, I, J, K, L) :-
 9986    (   A=suspension(_, active, _, _, M, N),
 9987        M==E,
 9988        O=t(330, C, H, A, L),
 9989        '$novel_production'(C, O),
 9990        '$novel_production'(H, O),
 9991        '$novel_production'(A, O),
 9992        '$novel_production'(L, O)
 9993    ->  '$extend_history'(L, O),
 9994        arg(2, L, P),
 9995        setarg(2, L, active),
 9996        (   P==not_stored_yet
 9997        ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
 9998                      Q),
 9999            R=[L|Q],
10000            b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10001                     R),
10002            (   Q=[S|_]
10003            ->  setarg(4, S, R)
10004            ;   true
10005            ),
10006            nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10007                      T),
10008            insert_ht(T, J, L)
10009        ;   true
10010        ),
10011        N=pragma(rule(U, V, W, _), _, _, _, _),
10012        (   is_passive(E, F)
10013        ->  true
10014        ;   G==simplification
10015        ->  select(X, U, _),
10016            X=..[_|Y],
10017            term_variables(W, Z),
10018            partial_wake_args(Y, K, Z, J)
10019        ;   select(X, V, _),
10020            X=..[_|Y],
10021            term_variables(W, Z),
10022            partial_wake_args(Y, K, Z, J)
10023        ),
10024        (   L=suspension(_, active, _, _, _, _)
10025        ->  setarg(2, L, inactive),
10026            constraint_mode___2__2__2__8(B,
10027                                         C,
10028                                         D,
10029                                         E,
10030                                         F,
10031                                         G,
10032                                         H,
10033                                         I,
10034                                         J,
10035                                         K,
10036                                         L)
10037        ;   true
10038        )
10039    ;   constraint_mode___2__2__2__8(B,
10040                                     C,
10041                                     D,
10042                                     E,
10043                                     F,
10044                                     G,
10045                                     H,
10046                                     I,
10047                                     J,
10048                                     K,
10049                                     L)
10050    ).
10051constraint_mode___2__2(A, B, C) :-
10052    constraint_mode___2__3(A, B, C).
10053constraint_mode___2__3(A, _, B) :-
10054    arg(2, B, C),
10055    setarg(2, B, active),
10056    (   C==not_stored_yet
10057    ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10058                  D),
10059        E=[B|D],
10060        b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',
10061                 E),
10062        (   D=[F|_]
10063        ->  setarg(4, F, E)
10064        ;   true
10065        ),
10066        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10067                  G),
10068        insert_ht(G, A, B)
10069    ;   true
10070    ).
10071get_constraint_mode(A, B) :-
10072    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10073              C),
10074    lookup_ht(C, A, D),
10075    member(E, D),
10076    E=suspension(_, active, _, _, _, F),
10077    !,
10078    B=F.
10079get_constraint_mode(_/A, B) :-
10080    replicate(A, ?, B).
10081may_trigger(A) :-
10082    \+ has_active_occurrence(A),
10083    !,
10084    fail.
10085may_trigger(A) :-
10086    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10087              B),
10088    lookup_ht(B, A, C),
10089    member(D, C),
10090    D=suspension(_, active, _, _, _, E),
10091    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
10092              F),
10093    lookup_ht(F, A, G),
10094    member(H, G),
10095    H=suspension(_, active, _, I),
10096    nth1(I, E, J),
10097    J\==(+),
10098    !,
10099    is_stored(A).
10100may_trigger(_) :-
10101    chr_pp_flag(debugable, on).
10102only_ground_indexed_arguments(A) :-
10103    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
10104              B),
10105    lookup_ht(B, A, C),
10106    member(D, C),
10107    D=suspension(_, active, _, _, _, E),
10108    nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',
10109              F),
10110    lookup_ht(F, A, G),
10111    member(H, G),
10112    H=suspension(_, active, _, I),
10113    nth1(I, E, J),
10114    J\==(+),
10115    !,
10116    fail.
10117only_ground_indexed_arguments(_).
10118none_suspended_on_variables :-
10119    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10120              A),
10121    member(B, A),
10122    B=suspension(_, active, _),
10123    !.
10124none_suspended_on_variables :-
10125    A=suspension(B, active, _),
10126    'chr gen_id'(B),
10127    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10128              C),
10129    D=[A|C],
10130    b_setval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10131             D),
10132    (   C=[E|_]
10133    ->  setarg(3, E, D)
10134    ;   true
10135    ).
10136are_none_suspended_on_variables :-
10137    nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',
10138              A),
10139    member(B, A),
10140    B=suspension(_, active, _),
10141    !.
10142are_none_suspended_on_variables :-
10143    fail.
10144store_type(A, B) :-
10145    store_type___2__0(A, B, _).
10146store_type___2__0(A, B, C) :-
10147    chr_pp_flag(verbose, on),
10148    !,
10149    C=suspension(D, active, A, B),
10150    'chr gen_id'(D),
10151    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', E),
10152    insert_ht(E, A, C),
10153    format('The indexes for ~w are:\n', [A]),
10154    format_storetype(B),
10155    (   C=suspension(_, active, _, _)
10156    ->  setarg(2, C, inactive),
10157        store_type___2__1(A, B, C)
10158    ;   true
10159    ).
10160store_type___2__0(A, B, C) :-
10161    C=suspension(D, not_stored_yet, A, B),
10162    'chr gen_id'(D),
10163    store_type___2__1(A, B, C).
10164store_type___2__1(A, _, B) :-
10165    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10166              C),
10167    lookup_ht(C, A, D),
10168    member(E, D),
10169    E=suspension(_, active, _),
10170    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10171              F),
10172    lookup_ht(F, A, G),
10173    member(H, G),
10174    H=suspension(_, active, _, I),
10175    !,
10176    setarg(2, E, removed),
10177    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10178              J),
10179    delete_ht(J, A, E),
10180    setarg(2, H, removed),
10181    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10182              K),
10183    delete_ht(K, A, H),
10184    (   var(B)
10185    ->  true
10186    ;   arg(2, B, L),
10187        setarg(2, B, removed),
10188        (   L==not_stored_yet
10189        ->  true
10190        ;   nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10191                      M),
10192            delete_ht(M, A, B)
10193        )
10194    ),
10195    store_type(A, multi_store(I)).
10196store_type___2__1(A, _, B) :-
10197    arg(2, B, C),
10198    setarg(2, B, active),
10199    (   C==not_stored_yet
10200    ->  nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10201                  D),
10202        insert_ht(D, A, B)
10203    ;   true
10204    ).
10205get_store_type(A, B) :-
10206    nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1', C),
10207    lookup_ht(C, A, D),
10208    member(E, D),
10209    E=suspension(_, active, _, F),
10210    !,
10211    B=F.
10212get_store_type(A, B) :-
10213    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10214              C),
10215    lookup_ht(C, A, D),
10216    member(E, D),
10217    E=suspension(_, active, _, F),
10218    !,
10219    B=F.
10220get_store_type(_, default).
10221update_store_type(A, B) :-
10222    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10223              C),
10224    lookup_ht(C, A, D),
10225    member(E, D),
10226    E=suspension(_, active, _, F),
10227    (   memberchk(B, F),
10228        !
10229    ;   !,
10230        setarg(2, E, removed),
10231        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10232                  G),
10233        delete_ht(G, A, E),
10234        actual_store_types(A, [B|F])
10235    ).
10236update_store_type(A, B) :-
10237    actual_store_types(A, [B]).
10238actual_store_types(A, B) :-
10239    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10240              C),
10241    lookup_ht(C, A, D),
10242    member(E, D),
10243    E=suspension(_, active, _, F, G),
10244    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10245              H),
10246    lookup_ht(H, A, I),
10247    member(J, I),
10248    J=suspension(_, active, _),
10249    !,
10250    setarg(2, E, removed),
10251    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
10252              K),
10253    delete_ht(K, k(A, F), E),
10254    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10255              L),
10256    delete_ht(L, A, E),
10257    selectchk(multi_hash([F]), B, M),
10258    F=[N],
10259    (   get_constraint_arg_type(A, N, O),
10260        enumerated_atomic_type(O, P)
10261    ->  Q=P,
10262        R=complete
10263    ;   Q=G,
10264        R=incomplete
10265    ),
10266    actual_store_types(A,
10267                       [atomic_constants(F, Q, R)|M]).
10268actual_store_types(A, B) :-
10269    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10270              C),
10271    lookup_ht(C, A, D),
10272    member(E, D),
10273    E=suspension(_, active, _, F, G),
10274    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10275              H),
10276    lookup_ht(H, A, I),
10277    member(J, I),
10278    J=suspension(_, active, _),
10279    !,
10280    setarg(2, E, removed),
10281    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
10282              K),
10283    delete_ht(K, k(A, F), E),
10284    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10285              L),
10286    delete_ht(L, A, E),
10287    (   F=[M],
10288        get_constraint_arg_type(A, M, N),
10289        N=chr_enum(O)
10290    ->  P=complete
10291    ;   O=G,
10292        P=incomplete
10293    ),
10294    selectchk(multi_hash([F]), B, Q),
10295    actual_store_types(A,
10296                       [ground_constants(F, O, P)|Q]).
10297actual_store_types(A, B) :-
10298    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10299              C),
10300    lookup_ht(C, A, D),
10301    member(E, D),
10302    E=suspension(_, active, _),
10303    (   (   memberchk(multi_hash([[F]]), B),
10304            (   get_constraint_type(A, G),
10305                nth1(F, G, H),
10306                enumerated_atomic_type(H, I),
10307                !,
10308                selectchk(multi_hash([[F]]), B, J),
10309                actual_store_types(A,
10310                                   [ atomic_constants([F],
10311                                                      I,
10312                                                      complete)
10313                                   | J
10314                                   ])
10315            ;   get_constraint_arg_type(A, F, K),
10316                K=chr_enum(L),
10317                !,
10318                selectchk(multi_hash([[F]]), B, M),
10319                actual_store_types(A,
10320                                   [ ground_constants([F],
10321                                                      L,
10322                                                      complete)
10323                                   | M
10324                                   ])
10325            )
10326        ;   nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10327                      N),
10328            lookup_ht(N, A, O),
10329            member(P, O),
10330            P=suspension(_, active, _, _),
10331            !,
10332            setarg(2, E, removed),
10333            nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10334                      Q),
10335            delete_ht(Q, A, E),
10336            setarg(2, P, removed),
10337            nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10338                      R),
10339            delete_ht(R, A, P),
10340            (   maplist(partial_store, B)
10341            ->  S=[global_ground|B]
10342            ;   S=B
10343            ),
10344            store_type(A, multi_store(S))
10345        )
10346    ;   nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10347                  T),
10348        lookup_ht(T, A, U),
10349        member(V, U),
10350        V=suspension(_, active, _, _),
10351        !,
10352        setarg(2, E, removed),
10353        nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10354                  W),
10355        delete_ht(W, A, E),
10356        setarg(2, V, removed),
10357        nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10358                  X),
10359        delete_ht(X, A, V),
10360        store_type(A, multi_store(B))
10361    ).
10362actual_store_types(A, B) :-
10363    C=suspension(D, active, A, B),
10364    'chr gen_id'(D),
10365    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10366              E),
10367    insert_ht(E, A, C).
10368assumed_store_type(A, _) :-
10369    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10370              B),
10371    lookup_ht(B, A, C),
10372    member(D, C),
10373    D=suspension(_, active, _),
10374    (   (   nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10375                      E),
10376            lookup_ht(E, A, F),
10377            member(G, F),
10378            G=suspension(_, active, _, H),
10379            !,
10380            setarg(2, D, removed),
10381            nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10382                      I),
10383            delete_ht(I, A, D),
10384            setarg(2, G, removed),
10385            nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10386                      J),
10387            delete_ht(J, A, G),
10388            (   maplist(partial_store, H)
10389            ->  K=[global_ground|H]
10390            ;   K=H
10391            ),
10392            store_type(A, multi_store(K))
10393        ;   chr_pp_flag(debugable, on),
10394            !,
10395            setarg(2, D, removed),
10396            nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10397                      L),
10398            delete_ht(L, A, D),
10399            store_type(A, default)
10400        )
10401    ;   !,
10402        setarg(2, D, removed),
10403        nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10404                  M),
10405        delete_ht(M, A, D),
10406        store_type(A, global_ground)
10407    ).
10408assumed_store_type(A, B) :-
10409    C=suspension(D, active, A, B),
10410    'chr gen_id'(D),
10411    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10412              E),
10413    insert_ht(E, A, C).
10414validate_store_type_assumption(A) :-
10415    validate_store_type_assumption___1__0(A, _).
10416validate_store_type_assumption___1__0(A, B) :-
10417    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10418              C),
10419    lookup_ht(C, A, D),
10420    !,
10421    B=suspension(E, not_stored_yet, A),
10422    'chr gen_id'(E),
10423    validate_store_type_assumption___1__0__0__1(D, A, B).
10424validate_store_type_assumption___1__0__0__1([], A, B) :-
10425    validate_store_type_assumption___1__1(A, B).
10426validate_store_type_assumption___1__0__0__1([A|B], C, D) :-
10427    (   A=suspension(_, active, E, F),
10428        E==C,
10429        ground(C),
10430        nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10431                  G),
10432        lookup_ht(G, C, H),
10433        member(I, H),
10434        I=suspension(_, active, _, J, K)
10435    ->  ( setarg(2, A, removed),
10436          nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10437                    L),
10438          delete_ht(L, C, A)
10439        ),
10440        setarg(2, I, removed),
10441        ( nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
10442                    M),
10443          delete_ht(M, k(C, J), I)
10444        ),
10445        nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
10446                  N),
10447        delete_ht(N, C, I),
10448        arg(2, D, O),
10449        setarg(2, D, active),
10450        (   O==not_stored_yet
10451        ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10452                      P),
10453            insert_ht(P, C, D)
10454        ;   true
10455        ),
10456        selectchk(multi_hash([J]), F, Q),
10457        J=[R],
10458        (   get_constraint_arg_type(C, R, S),
10459            enumerated_atomic_type(S, T)
10460        ->  U=T,
10461            V=complete
10462        ;   U=K,
10463            V=incomplete
10464        ),
10465        actual_store_types(C,
10466                           [ atomic_constants(J, U, V)
10467                           | Q
10468                           ]),
10469        (   D=suspension(_, active, _)
10470        ->  setarg(2, D, inactive),
10471            validate_store_type_assumption___1__0__0__1(B,
10472                                                        C,
10473                                                        D)
10474        ;   true
10475        )
10476    ;   validate_store_type_assumption___1__0__0__1(B, C, D)
10477    ).
10478validate_store_type_assumption___1__0(A, B) :-
10479    B=suspension(C, not_stored_yet, A),
10480    'chr gen_id'(C),
10481    validate_store_type_assumption___1__1(A, B).
10482validate_store_type_assumption___1__1(A, B) :-
10483    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10484              C),
10485    lookup_ht(C, A, D),
10486    !,
10487    validate_store_type_assumption___1__1__0__2(D, A, B).
10488validate_store_type_assumption___1__1__0__2([], A, B) :-
10489    validate_store_type_assumption___1__2(A, B).
10490validate_store_type_assumption___1__1__0__2([A|B], C, D) :-
10491    (   A=suspension(_, active, E, F),
10492        E==C,
10493        ground(C),
10494        nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10495                  G),
10496        lookup_ht(G, C, H),
10497        member(I, H),
10498        I=suspension(_, active, _, J, K)
10499    ->  ( setarg(2, A, removed),
10500          nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10501                    L),
10502          delete_ht(L, C, A)
10503        ),
10504        setarg(2, I, removed),
10505        ( nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
10506                    M),
10507          delete_ht(M, k(C, J), I)
10508        ),
10509        nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
10510                  N),
10511        delete_ht(N, C, I),
10512        arg(2, D, O),
10513        setarg(2, D, active),
10514        (   O==not_stored_yet
10515        ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10516                      P),
10517            insert_ht(P, C, D)
10518        ;   true
10519        ),
10520        (   J=[Q],
10521            get_constraint_arg_type(C, Q, R),
10522            R=chr_enum(S)
10523        ->  T=complete
10524        ;   S=K,
10525            T=incomplete
10526        ),
10527        selectchk(multi_hash([J]), F, U),
10528        actual_store_types(C,
10529                           [ ground_constants(J, S, T)
10530                           | U
10531                           ]),
10532        (   D=suspension(_, active, _)
10533        ->  setarg(2, D, inactive),
10534            validate_store_type_assumption___1__1__0__2(B,
10535                                                        C,
10536                                                        D)
10537        ;   true
10538        )
10539    ;   validate_store_type_assumption___1__1__0__2(B, C, D)
10540    ).
10541validate_store_type_assumption___1__1(A, B) :-
10542    validate_store_type_assumption___1__2(A, B).
10543validate_store_type_assumption___1__2(A, B) :-
10544    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10545              C),
10546    lookup_ht(C, A, D),
10547    !,
10548    validate_store_type_assumption___1__2__0__3(D, A, B).
10549validate_store_type_assumption___1__2__0__3([], A, B) :-
10550    validate_store_type_assumption___1__3(A, B).
10551validate_store_type_assumption___1__2__0__3([A|B], C, D) :-
10552    (   A=suspension(_, active, E, F),
10553        E==C,
10554        memberchk(multi_hash([[G]]), F),
10555        get_constraint_type(C, H),
10556        nth1(G, H, I),
10557        enumerated_atomic_type(I, J)
10558    ->  setarg(2, A, removed),
10559        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10560                  K),
10561        delete_ht(K, C, A),
10562        arg(2, D, L),
10563        setarg(2, D, active),
10564        (   L==not_stored_yet
10565        ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10566                      M),
10567            insert_ht(M, C, D)
10568        ;   true
10569        ),
10570        selectchk(multi_hash([[G]]), F, N),
10571        actual_store_types(C,
10572                           [ atomic_constants([G], J, complete)
10573                           | N
10574                           ]),
10575        (   D=suspension(_, active, _)
10576        ->  setarg(2, D, inactive),
10577            validate_store_type_assumption___1__2__0__3(B,
10578                                                        C,
10579                                                        D)
10580        ;   true
10581        )
10582    ;   validate_store_type_assumption___1__2__0__3(B, C, D)
10583    ).
10584validate_store_type_assumption___1__2(A, B) :-
10585    validate_store_type_assumption___1__3(A, B).
10586validate_store_type_assumption___1__3(A, B) :-
10587    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10588              C),
10589    lookup_ht(C, A, D),
10590    !,
10591    validate_store_type_assumption___1__3__0__4(D, A, B).
10592validate_store_type_assumption___1__3__0__4([], A, B) :-
10593    validate_store_type_assumption___1__4(A, B).
10594validate_store_type_assumption___1__3__0__4([A|B], C, D) :-
10595    (   A=suspension(_, active, E, F),
10596        E==C,
10597        memberchk(multi_hash([[G]]), F),
10598        get_constraint_arg_type(C, G, H),
10599        H=chr_enum(I)
10600    ->  setarg(2, A, removed),
10601        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10602                  J),
10603        delete_ht(J, C, A),
10604        arg(2, D, K),
10605        setarg(2, D, active),
10606        (   K==not_stored_yet
10607        ->  nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10608                      L),
10609            insert_ht(L, C, D)
10610        ;   true
10611        ),
10612        selectchk(multi_hash([[G]]), F, M),
10613        actual_store_types(C,
10614                           [ ground_constants([G], I, complete)
10615                           | M
10616                           ]),
10617        (   D=suspension(_, active, _)
10618        ->  setarg(2, D, inactive),
10619            validate_store_type_assumption___1__3__0__4(B,
10620                                                        C,
10621                                                        D)
10622        ;   true
10623        )
10624    ;   validate_store_type_assumption___1__3__0__4(B, C, D)
10625    ).
10626validate_store_type_assumption___1__3(A, B) :-
10627    validate_store_type_assumption___1__4(A, B).
10628validate_store_type_assumption___1__4(A, B) :-
10629    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10630              C),
10631    lookup_ht(C, A, D),
10632    member(E, D),
10633    E=suspension(_, active, _, F),
10634    (   nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10635                  G),
10636        lookup_ht(G, A, H),
10637        member(I, H),
10638        I=suspension(_, active, _, _),
10639        !,
10640        setarg(2, E, removed),
10641        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10642                  J),
10643        delete_ht(J, A, E),
10644        setarg(2, I, removed),
10645        nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10646                  K),
10647        delete_ht(K, A, I),
10648        (   var(B)
10649        ->  true
10650        ;   arg(2, B, L),
10651            setarg(2, B, removed),
10652            (   L==not_stored_yet
10653            ->  true
10654            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10655                          M),
10656                delete_ht(M, A, B)
10657            )
10658        ),
10659        (   maplist(partial_store, F)
10660        ->  N=[global_ground|F]
10661        ;   N=F
10662        ),
10663        store_type(A, multi_store(N))
10664    ;   nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10665                  O),
10666        lookup_ht(O, A, P),
10667        member(Q, P),
10668        Q=suspension(_, active, _, _),
10669        !,
10670        setarg(2, E, removed),
10671        nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
10672                  R),
10673        delete_ht(R, A, E),
10674        setarg(2, Q, removed),
10675        nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',
10676                  S),
10677        delete_ht(S, A, Q),
10678        (   var(B)
10679        ->  true
10680        ;   arg(2, B, T),
10681            setarg(2, B, removed),
10682            (   T==not_stored_yet
10683            ->  true
10684            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10685                          U),
10686                delete_ht(U, A, B)
10687            )
10688        ),
10689        store_type(A, multi_store(F))
10690    ).
10691validate_store_type_assumption___1__4(A, B) :-
10692    nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10693              C),
10694    lookup_ht(C, A, D),
10695    member(E, D),
10696    E=suspension(_, active, _, _),
10697    (   chr_pp_flag(debugable, on),
10698        !,
10699        setarg(2, E, removed),
10700        nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10701                  F),
10702        delete_ht(F, A, E),
10703        (   var(B)
10704        ->  true
10705        ;   arg(2, B, G),
10706            setarg(2, B, removed),
10707            (   G==not_stored_yet
10708            ->  true
10709            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10710                          H),
10711                delete_ht(H, A, B)
10712            )
10713        ),
10714        store_type(A, default)
10715    ;   !,
10716        setarg(2, E, removed),
10717        nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',
10718                  I),
10719        delete_ht(I, A, E),
10720        (   var(B)
10721        ->  true
10722        ;   arg(2, B, J),
10723            setarg(2, B, removed),
10724            (   J==not_stored_yet
10725            ->  true
10726            ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10727                          K),
10728                delete_ht(K, A, B)
10729            )
10730        ),
10731        store_type(A, global_ground)
10732    ).
10733validate_store_type_assumption___1__4(A, B) :-
10734    (   var(B)
10735    ->  true
10736    ;   arg(2, B, C),
10737        setarg(2, B, removed),
10738        (   C==not_stored_yet
10739        ->  true
10740        ;   nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
10741                      D),
10742            delete_ht(D, A, B)
10743        )
10744    ).
10745rule_count(A) :-
10746    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10747              B),
10748    (   member(C, B),
10749        C=suspension(_, active, _, _),
10750        !
10751    ;   !,
10752        rule_count___1__0__0__2(B, A)
10753    ).
10754rule_count___1__0__0__2([], A) :-
10755    rule_count___1__1(A).
10756rule_count___1__0__0__2([A|B], C) :-
10757    (   A=suspension(_, active, _, _)
10758    ->  setarg(2, A, removed),
10759        arg(3, A, D),
10760        (   var(D)
10761        ->  nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10762                      E),
10763            E=[_|F],
10764            b_setval('$chr_store_global_ground_chr_translate____rule_count___1',
10765                     F),
10766            (   F=[G|_]
10767            ->  setarg(3, G, _)
10768            ;   true
10769            )
10770        ;   D=[_, _|F],
10771            setarg(2, D, F),
10772            (   F=[G|_]
10773            ->  setarg(3, G, D)
10774            ;   true
10775            )
10776        ),
10777        rule_count___1__0__0__2(B, C)
10778    ;   rule_count___1__0__0__2(B, C)
10779    ).
10780rule_count(A) :-
10781    rule_count___1__1(A).
10782rule_count___1__1(A) :-
10783    B=suspension(C, active, _, A),
10784    'chr gen_id'(C),
10785    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10786              D),
10787    E=[B|D],
10788    b_setval('$chr_store_global_ground_chr_translate____rule_count___1', E),
10789    (   D=[F|_]
10790    ->  setarg(3, F, E)
10791    ;   true
10792    ).
10793inc_rule_count(A) :-
10794    nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10795              B),
10796    member(C, B),
10797    C=suspension(_, active, _, D),
10798    !,
10799    setarg(2, C, removed),
10800    arg(3, C, E),
10801    (   var(E)
10802    ->  nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',
10803                  F),
10804        F=[_|G],
10805        b_setval('$chr_store_global_ground_chr_translate____rule_count___1',
10806                 G),
10807        (   G=[H|_]
10808        ->  setarg(3, H, _)
10809        ;   true
10810        )
10811    ;   E=[_, _|G],
10812        setarg(2, E, G),
10813        (   G=[H|_]
10814        ->  setarg(3, H, E)
10815        ;   true
10816        )
10817    ),
10818    A is D+1,
10819    rule_count(A).
10820inc_rule_count(1) :-
10821    rule_count(1).
10822passive(A, B) :-
10823    passive___2__0(A, B, _).
10824passive___2__0(A, B, _) :-
10825    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', C),
10826    lookup_ht(C, k(A, B), D),
10827    member(E, D),
10828    E=suspension(_, active, _, _, _),
10829    !.
10830passive___2__0(A, B, C) :-
10831    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
10832              D),
10833    lookup_ht(D, A, E),
10834    !,
10835    C=suspension(F, not_stored_yet, t, A, B),
10836    'chr gen_id'(F),
10837    passive___2__0__0__6(E, A, B, C).
10838passive___2__0__0__6([], A, B, C) :-
10839    passive___2__1(A, B, C).
10840passive___2__0__0__6([A|B], C, D, E) :-
10841    (   A=suspension(_, active, F, G),
10842        F==C,
10843        G=[H|I],
10844        H==D,
10845        ground(C),
10846        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', J),
10847        lookup_ht(J, C, K),
10848        member(L, K),
10849        L=suspension(_, active, _, _, _, _)
10850    ->  setarg(2, A, removed),
10851        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
10852                    M),
10853          delete_ht(M, k(C, [D|I]), A)
10854        ),
10855        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
10856                  N),
10857        delete_ht(N, C, A),
10858        arg(2, E, O),
10859        setarg(2, E, active),
10860        (   O==not_stored_yet
10861        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
10862                      P),
10863            insert_ht(P, C, E),
10864            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
10865                      Q),
10866            insert_ht(Q, k(C, D), E)
10867        ;   true
10868        ),
10869        least_occurrence(C, I),
10870        (   E=suspension(_, active, _, _, _)
10871        ->  setarg(2, E, inactive),
10872            passive___2__0__0__6(B, C, D, E)
10873        ;   true
10874        )
10875    ;   passive___2__0__0__6(B, C, D, E)
10876    ).
10877passive___2__0(A, B, C) :-
10878    C=suspension(D, not_stored_yet, t, A, B),
10879    'chr gen_id'(D),
10880    passive___2__1(A, B, C).
10881passive___2__1(A, B, C) :-
10882    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
10883              D),
10884    lookup_ht(D, k(A, B), E),
10885    !,
10886    passive___2__1__0__8(E, A, B, C).
10887passive___2__1__0__8([], A, B, C) :-
10888    passive___2__2(A, B, C).
10889passive___2__1__0__8([A|B], C, D, E) :-
10890    (   A=suspension(_, active, _, _, F, G, H, I, _),
10891        H==C,
10892        I==D,
10893        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
10894                  J),
10895        lookup_ht(J, F, K)
10896    ->  passive___2__1__1__8(K,
10897                             F,
10898                             G,
10899                             A,
10900                             B,
10901                             C,
10902                             D,
10903                             E)
10904    ;   passive___2__1__0__8(B, C, D, E)
10905    ).
10906passive___2__1__1__8([], _, _, _, A, B, C, D) :-
10907    passive___2__1__0__8(A, B, C, D).
10908passive___2__1__1__8([A|B], C, D, E, F, G, H, I) :-
10909    (   A=suspension(_, active, _, J, K, L),
10910        J==C,
10911        D<K,
10912        ( ground(C),
10913          ground(D)
10914        ),
10915        nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
10916                  M),
10917        lookup_ht(M, k(C, D, yes), N),
10918        member(O, N),
10919        O=suspension(_, active, _, _, _)
10920    ->  ( setarg(2, A, removed),
10921          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
10922                    P),
10923          delete_ht(P, k(C, L), A),
10924          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
10925                    Q),
10926          delete_ht(Q, C, A)
10927        ),
10928        setarg(2, O, removed),
10929        ( nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13',
10930                    R),
10931          delete_ht(R, k(C, yes), O)
10932        ),
10933        nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
10934                  S),
10935        delete_ht(S, k(C, D, yes), O),
10936        arg(2, I, T),
10937        setarg(2, I, active),
10938        (   T==not_stored_yet
10939        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
10940                      U),
10941            insert_ht(U, G, I),
10942            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
10943                      V),
10944            insert_ht(V, k(G, H), I)
10945        ;   true
10946        ),
10947        W is L-1,
10948        stored(C, D, maybe),
10949        stored_complete(C, K, W),
10950        (   I=suspension(_, active, _, _, _)
10951        ->  setarg(2, I, inactive),
10952            passive___2__1__1__8(B,
10953                                 C,
10954                                 D,
10955                                 E,
10956                                 F,
10957                                 G,
10958                                 H,
10959                                 I)
10960        ;   true
10961        )
10962    ;   passive___2__1__1__8(B,
10963                             C,
10964                             D,
10965                             E,
10966                             F,
10967                             G,
10968                             H,
10969                             I)
10970    ).
10971passive___2__1(A, B, C) :-
10972    passive___2__2(A, B, C).
10973passive___2__2(A, B, C) :-
10974    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', D),
10975    lookup_ht(D, A, E),
10976    !,
10977    passive___2__2__0__9(E, A, B, C).
10978passive___2__2__0__9([], A, B, C) :-
10979    passive___2__3(A, B, C).
10980passive___2__2__0__9([A|B], C, D, E) :-
10981    (   A=suspension(_, active, _, _, F, G),
10982        F==C,
10983        H=t(251, A, E),
10984        '$novel_production'(A, H),
10985        '$novel_production'(E, H),
10986        G=pragma(rule(_, _, _, _), ids([D|I], J), _, _, C)
10987    ->  '$extend_history'(E, H),
10988        arg(2, E, K),
10989        setarg(2, E, active),
10990        (   K==not_stored_yet
10991        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
10992                      L),
10993            insert_ht(L, C, E),
10994            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
10995                      M),
10996            insert_ht(M, k(C, D), E)
10997        ;   true
10998        ),
10999        append(I, J, N),
11000        check_all_passive(C, N),
11001        (   E=suspension(_, active, _, _, _)
11002        ->  setarg(2, E, inactive),
11003            passive___2__2__0__9(B, C, D, E)
11004        ;   true
11005        )
11006    ;   passive___2__2__0__9(B, C, D, E)
11007    ).
11008passive___2__2(A, B, C) :-
11009    passive___2__3(A, B, C).
11010passive___2__3(A, B, C) :-
11011    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', D),
11012    lookup_ht(D, A, E),
11013    !,
11014    passive___2__3__0__10(E, A, B, C).
11015passive___2__3__0__10([], A, B, C) :-
11016    passive___2__4(A, B, C).
11017passive___2__3__0__10([A|B], C, D, E) :-
11018    (   A=suspension(_, active, _, _, F, G),
11019        F==C,
11020        H=t(252, A, E),
11021        '$novel_production'(A, H),
11022        '$novel_production'(E, H),
11023        G=pragma(rule(_, _, _, _), ids([], [D|I]), _, _, C)
11024    ->  '$extend_history'(E, H),
11025        arg(2, E, J),
11026        setarg(2, E, active),
11027        (   J==not_stored_yet
11028        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11029                      K),
11030            insert_ht(K, C, E),
11031            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11032                      L),
11033            insert_ht(L, k(C, D), E)
11034        ;   true
11035        ),
11036        check_all_passive(C, I),
11037        (   E=suspension(_, active, _, _, _)
11038        ->  setarg(2, E, inactive),
11039            passive___2__3__0__10(B, C, D, E)
11040        ;   true
11041        )
11042    ;   passive___2__3__0__10(B, C, D, E)
11043    ).
11044passive___2__3(A, B, C) :-
11045    passive___2__4(A, B, C).
11046passive___2__4(A, B, C) :-
11047    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
11048              D),
11049    lookup_ht(D, A, E),
11050    !,
11051    passive___2__4__0__11(E, A, B, C).
11052passive___2__4__0__11([], A, B, C) :-
11053    passive___2__5(A, B, C).
11054passive___2__4__0__11([A|B], C, D, E) :-
11055    (   A=suspension(_, active, F, G),
11056        F==C,
11057        G=[H|I],
11058        H==D
11059    ->  setarg(2, A, removed),
11060        ( nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
11061                    J),
11062          delete_ht(J, k(C, [D|I]), A)
11063        ),
11064        nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
11065                  K),
11066        delete_ht(K, C, A),
11067        arg(2, E, L),
11068        setarg(2, E, active),
11069        (   L==not_stored_yet
11070        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11071                      M),
11072            insert_ht(M, C, E),
11073            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11074                      N),
11075            insert_ht(N, k(C, D), E)
11076        ;   true
11077        ),
11078        check_all_passive(C, I),
11079        (   E=suspension(_, active, _, _, _)
11080        ->  setarg(2, E, inactive),
11081            passive___2__4__0__11(B, C, D, E)
11082        ;   true
11083        )
11084    ;   passive___2__4__0__11(B, C, D, E)
11085    ).
11086passive___2__4(A, B, C) :-
11087    passive___2__5(A, B, C).
11088passive___2__5(A, B, C) :-
11089    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11090              D),
11091    lookup_ht(D, k(A, B), E),
11092    !,
11093    passive___2__5__0__14(E, A, B, C).
11094passive___2__5__0__14([], A, B, C) :-
11095    passive___2__6(A, B, C).
11096passive___2__5__0__14([A|B], C, D, E) :-
11097    (   A=suspension(_, active, _, _, F, G, H, I, _),
11098        H==C,
11099        I==D,
11100        nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
11101                  J),
11102        lookup_ht(J, k(F, G), K)
11103    ->  passive___2__5__1__14(K,
11104                              F,
11105                              G,
11106                              A,
11107                              B,
11108                              C,
11109                              D,
11110                              E)
11111    ;   passive___2__5__0__14(B, C, D, E)
11112    ).
11113passive___2__5__1__14([], _, _, _, A, B, C, D) :-
11114    passive___2__5__0__14(A, B, C, D).
11115passive___2__5__1__14([A|B], C, D, E, F, G, H, I) :-
11116    (   A=suspension(_, active, _, J, K),
11117        J==C,
11118        K==D,
11119        L=t(362, E, I, A),
11120        '$novel_production'(E, L),
11121        '$novel_production'(I, L),
11122        '$novel_production'(A, L),
11123        D>1
11124    ->  '$extend_history'(I, L),
11125        arg(2, I, M),
11126        setarg(2, I, active),
11127        (   M==not_stored_yet
11128        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11129                      N),
11130            insert_ht(N, G, I),
11131            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11132                      O),
11133            insert_ht(O, k(G, H), I)
11134        ;   true
11135        ),
11136        P is D-1,
11137        skip_to_next_id(C, P),
11138        (   I=suspension(_, active, _, _, _)
11139        ->  setarg(2, I, inactive),
11140            passive___2__5__1__14(B,
11141                                  C,
11142                                  D,
11143                                  E,
11144                                  F,
11145                                  G,
11146                                  H,
11147                                  I)
11148        ;   true
11149        )
11150    ;   passive___2__5__1__14(B,
11151                              C,
11152                              D,
11153                              E,
11154                              F,
11155                              G,
11156                              H,
11157                              I)
11158    ).
11159passive___2__5(A, B, C) :-
11160    passive___2__6(A, B, C).
11161passive___2__6(A, B, C) :-
11162    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11163              D),
11164    lookup_ht(D, k(A, B), E),
11165    !,
11166    passive___2__6__0__15(E, A, B, C).
11167passive___2__6__0__15([], A, B, C) :-
11168    passive___2__7(A, B, C).
11169passive___2__6__0__15([A|B], C, D, E) :-
11170    (   A=suspension(_, active, _, _, F, G, H, I, _),
11171        H==C,
11172        I==D,
11173        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
11174                  J),
11175        lookup_ht(J, k(F, G), K)
11176    ->  passive___2__6__1__15(K,
11177                              F,
11178                              G,
11179                              A,
11180                              B,
11181                              C,
11182                              D,
11183                              E)
11184    ;   passive___2__6__0__15(B, C, D, E)
11185    ).
11186passive___2__6__1__15([], _, _, _, A, B, C, D) :-
11187    passive___2__6__0__15(A, B, C, D).
11188passive___2__6__1__15([A|B], C, D, E, F, G, H, I) :-
11189    (   A=suspension(_, active, J, K, L),
11190        J==C,
11191        K==D
11192    ->  setarg(2, A, removed),
11193        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
11194                  M),
11195        delete_ht(M, k(C, D), A),
11196        arg(2, I, N),
11197        setarg(2, I, active),
11198        (   N==not_stored_yet
11199        ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11200                      O),
11201            insert_ht(O, G, I),
11202            nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11203                      P),
11204            insert_ht(P, k(G, H), I)
11205        ;   true
11206        ),
11207        occurrence_code_id(C, D, L),
11208        Q is D+1,
11209        set_occurrence_code_id(C, Q, L),
11210        (   I=suspension(_, active, _, _, _)
11211        ->  setarg(2, I, inactive),
11212            passive___2__6__1__15(B,
11213                                  C,
11214                                  D,
11215                                  E,
11216                                  F,
11217                                  G,
11218                                  H,
11219                                  I)
11220        ;   true
11221        )
11222    ;   passive___2__6__1__15(B,
11223                              C,
11224                              D,
11225                              E,
11226                              F,
11227                              G,
11228                              H,
11229                              I)
11230    ).
11231passive___2__6(A, B, C) :-
11232    passive___2__7(A, B, C).
11233passive___2__7(A, B, C) :-
11234    arg(2, C, D),
11235    setarg(2, C, active),
11236    (   D==not_stored_yet
11237    ->  nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',
11238                  E),
11239        insert_ht(E, A, C),
11240        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
11241                  F),
11242        insert_ht(F, k(A, B), C)
11243    ;   true
11244    ).
11245is_passive(A, B) :-
11246    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', C),
11247    lookup_ht(C, k(A, B), D),
11248    member(E, D),
11249    E=suspension(_, active, _, _, _),
11250    !.
11251is_passive(_, _) :-
11252    fail.
11253any_passive_head(A) :-
11254    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', B),
11255    lookup_ht(B, A, C),
11256    member(D, C),
11257    D=suspension(_, active, _, _, _),
11258    !.
11259any_passive_head(_) :-
11260    fail.
11261new_occurrence(A, B, C, D) :-
11262    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
11263              E),
11264    lookup_ht(E, A, F),
11265    member(G, F),
11266    G=suspension(_, active, _, _, H),
11267    !,
11268    setarg(2, G, removed),
11269    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
11270              I),
11271    delete_ht(I, A, G),
11272    J is H+1,
11273    occurrence(A, J, B, C, D),
11274    max_occurrence(A, J).
11275new_occurrence(A, B, _, _) :-
11276    chr_error(internal,
11277              'new_occurrence: missing max_occurrence for ~w in rule ~w\n',
11278              [A, B]).
11279occurrence(A, B, C, D, E) :-
11280    occurrence___5__0(A, B, C, D, E, _).
11281occurrence___5__0(A, B, C, D, E, F) :-
11282    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
11283    lookup_ht(G, C, H),
11284    !,
11285    F=suspension(I, not_stored_yet, t, _, A, B, C, D, E),
11286    'chr gen_id'(I),
11287    occurrence___5__0__0__4(H,
11288                            A,
11289                            B,
11290                            C,
11291                            D,
11292                            E,
11293                            F).
11294occurrence___5__0__0__4([], A, B, C, D, E, F) :-
11295    occurrence___5__1(A, B, C, D, E, F).
11296occurrence___5__0__0__4([A|B], C, D, E, F, G, H) :-
11297    (   A=suspension(_, active, _, _, I, J),
11298        I==E,
11299        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
11300                  K),
11301        lookup_ht(K, k(C, D), L)
11302    ->  occurrence___5__0__1__4(L,
11303                                J,
11304                                A,
11305                                B,
11306                                C,
11307                                D,
11308                                E,
11309                                F,
11310                                G,
11311                                H)
11312    ;   occurrence___5__0__0__4(B,
11313                                C,
11314                                D,
11315                                E,
11316                                F,
11317                                G,
11318                                H)
11319    ).
11320occurrence___5__0__1__4([], _, _, A, B, C, D, E, F, G) :-
11321    occurrence___5__0__0__4(A,
11322                            B,
11323                            C,
11324                            D,
11325                            E,
11326                            F,
11327                            G).
11328occurrence___5__0__1__4([A|B], C, D, E, F, G, H, I, J, K) :-
11329    (   A=suspension(_, active, _, L, M),
11330        L==F,
11331        M==G,
11332        N=t(60, D, K, A),
11333        '$novel_production'(D, N),
11334        '$novel_production'(K, N),
11335        '$novel_production'(A, N)
11336    ->  '$extend_history'(K, N),
11337        arg(2, K, O),
11338        setarg(2, K, active),
11339        (   O==not_stored_yet
11340        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11341                      P),
11342            insert_ht(P, k(F, J), K),
11343            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11344                      Q),
11345            R=[K|Q],
11346            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11347                     R),
11348            (   Q=[S|_]
11349            ->  setarg(4, S, R)
11350            ;   true
11351            ),
11352            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11353                      T),
11354            insert_ht(T, k(F, G, J), K),
11355            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11356                      U),
11357            insert_ht(U, k(F, H, I), K),
11358            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11359                      V),
11360            insert_ht(V, k(F, G), K),
11361            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11362                      W),
11363            insert_ht(W, H, K),
11364            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11365                      X),
11366            insert_ht(X, k(F, H), K),
11367            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11368                      Y),
11369            insert_ht(Y, k(H, I), K),
11370            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11371                      Z),
11372            insert_ht(Z, F, K)
11373        ;   true
11374        ),
11375        \+ is_passive(H, I),
11376        J==propagation,
11377        (   stored_in_guard_before_next_kept_occurrence(F, G)
11378        ->  true
11379        ;   C=pragma(rule([_|_], _, _, _), _, _, _, _)
11380        ->  is_observed(F, G)
11381        ;   is_least_occurrence(H)
11382        ->  is_observed(F, G)
11383        ;   true
11384        ),
11385        (   K=suspension(_, active, _, _, _, _, _, _, _)
11386        ->  setarg(2, K, inactive),
11387            occurrence___5__0__1__4(B,
11388                                    C,
11389                                    D,
11390                                    E,
11391                                    F,
11392                                    G,
11393                                    H,
11394                                    I,
11395                                    J,
11396                                    K)
11397        ;   true
11398        )
11399    ;   occurrence___5__0__1__4(B,
11400                                C,
11401                                D,
11402                                E,
11403                                F,
11404                                G,
11405                                H,
11406                                I,
11407                                J,
11408                                K)
11409    ).
11410occurrence___5__0(A, B, C, D, E, F) :-
11411    F=suspension(G, not_stored_yet, t, _, A, B, C, D, E),
11412    'chr gen_id'(G),
11413    occurrence___5__1(A, B, C, D, E, F).
11414occurrence___5__1(A, B, C, D, E, F) :-
11415    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
11416              G),
11417    lookup_ht(G, C, H),
11418    !,
11419    occurrence___5__1__0__7(H,
11420                            A,
11421                            B,
11422                            C,
11423                            D,
11424                            E,
11425                            F).
11426occurrence___5__1__0__7([], A, B, C, D, E, F) :-
11427    occurrence___5__2(A, B, C, D, E, F).
11428occurrence___5__1__0__7([A|B], C, D, E, F, G, H) :-
11429    (   A=suspension(_, active, I, J),
11430        I==E,
11431        J=[K|L],
11432        K==F,
11433        ( ground(C),
11434          nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
11435                    M),
11436          lookup_ht(M, C, N)
11437        ),
11438        member(O, N),
11439        O=suspension(_, active, _, _, P),
11440        P>=D,
11441        ( ground(E),
11442          nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
11443                    Q),
11444          lookup_ht(Q, E, R)
11445        ),
11446        member(S, R),
11447        S=suspension(_, active, _, _, _, _),
11448        \+ may_trigger(C)
11449    ->  setarg(2, A, removed),
11450        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
11451                    T),
11452          delete_ht(T, k(E, [F|L]), A)
11453        ),
11454        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
11455                  U),
11456        delete_ht(U, E, A),
11457        arg(2, H, V),
11458        setarg(2, H, active),
11459        (   V==not_stored_yet
11460        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11461                      W),
11462            insert_ht(W, k(C, G), H),
11463            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11464                      X),
11465            Y=[H|X],
11466            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11467                     Y),
11468            (   X=[Z|_]
11469            ->  setarg(4, Z, Y)
11470            ;   true
11471            ),
11472            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11473                      A1),
11474            insert_ht(A1, k(C, D, G), H),
11475            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11476                      B1),
11477            insert_ht(B1, k(C, E, F), H),
11478            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11479                      C1),
11480            insert_ht(C1, k(C, D), H),
11481            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11482                      D1),
11483            insert_ht(D1, E, H),
11484            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11485                      E1),
11486            insert_ht(E1, k(C, E), H),
11487            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11488                      F1),
11489            insert_ht(F1, k(E, F), H),
11490            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11491                      G1),
11492            insert_ht(G1, C, H)
11493        ;   true
11494        ),
11495        least_occurrence(E, L),
11496        (   H=suspension(_, active, _, _, _, _, _, _, _)
11497        ->  setarg(2, H, inactive),
11498            occurrence___5__1__0__7(B,
11499                                    C,
11500                                    D,
11501                                    E,
11502                                    F,
11503                                    G,
11504                                    H)
11505        ;   true
11506        )
11507    ;   occurrence___5__1__0__7(B,
11508                                C,
11509                                D,
11510                                E,
11511                                F,
11512                                G,
11513                                H)
11514    ).
11515occurrence___5__1(A, B, C, D, E, F) :-
11516    occurrence___5__2(A, B, C, D, E, F).
11517occurrence___5__2(A, B, C, D, E, F) :-
11518    nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
11519              G),
11520    lookup_ht(G, C, H),
11521    !,
11522    occurrence___5__2__0__29(H,
11523                             A,
11524                             B,
11525                             C,
11526                             D,
11527                             E,
11528                             F).
11529occurrence___5__2__0__29([], A, B, C, D, E, F) :-
11530    occurrence___5__3(A, B, C, D, E, F).
11531occurrence___5__2__0__29([A|B], C, D, E, F, G, H) :-
11532    (   A=suspension(_, active, _, I),
11533        I==E,
11534        J=t(180, A, H),
11535        '$novel_production'(A, J),
11536        '$novel_production'(H, J)
11537    ->  '$extend_history'(H, J),
11538        arg(2, H, K),
11539        setarg(2, H, active),
11540        (   K==not_stored_yet
11541        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11542                      L),
11543            insert_ht(L, k(C, G), H),
11544            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11545                      M),
11546            N=[H|M],
11547            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11548                     N),
11549            (   M=[O|_]
11550            ->  setarg(4, O, N)
11551            ;   true
11552            ),
11553            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11554                      P),
11555            insert_ht(P, k(C, D, G), H),
11556            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11557                      Q),
11558            insert_ht(Q, k(C, E, F), H),
11559            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11560                      R),
11561            insert_ht(R, k(C, D), H),
11562            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11563                      S),
11564            insert_ht(S, E, H),
11565            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11566                      T),
11567            insert_ht(T, k(C, E), H),
11568            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11569                      U),
11570            insert_ht(U, k(E, F), H),
11571            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11572                      V),
11573            insert_ht(V, C, H)
11574        ;   true
11575        ),
11576        passive(E, F),
11577        (   H=suspension(_, active, _, _, _, _, _, _, _)
11578        ->  setarg(2, H, inactive),
11579            occurrence___5__2__0__29(B,
11580                                     C,
11581                                     D,
11582                                     E,
11583                                     F,
11584                                     G,
11585                                     H)
11586        ;   true
11587        )
11588    ;   occurrence___5__2__0__29(B,
11589                                 C,
11590                                 D,
11591                                 E,
11592                                 F,
11593                                 G,
11594                                 H)
11595    ).
11596occurrence___5__2(A, B, C, D, E, F) :-
11597    occurrence___5__3(A, B, C, D, E, F).
11598occurrence___5__3(A, B, C, D, E, F) :-
11599    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
11600    lookup_ht(G, C, H),
11601    !,
11602    occurrence___5__3__0__30(H,
11603                             A,
11604                             B,
11605                             C,
11606                             D,
11607                             E,
11608                             F).
11609occurrence___5__3__0__30([], A, B, C, D, E, F) :-
11610    occurrence___5__4(A, B, C, D, E, F).
11611occurrence___5__3__0__30([A|B], C, D, E, F, G, H) :-
11612    (   A=suspension(_, active, _, _, I, J),
11613        I==E,
11614        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11615                  K),
11616        lookup_ht(K, k(C, E), L)
11617    ->  occurrence___5__3__1__30(L,
11618                                 J,
11619                                 A,
11620                                 B,
11621                                 C,
11622                                 D,
11623                                 E,
11624                                 F,
11625                                 G,
11626                                 H)
11627    ;   occurrence___5__3__0__30(B,
11628                                 C,
11629                                 D,
11630                                 E,
11631                                 F,
11632                                 G,
11633                                 H)
11634    ).
11635occurrence___5__3__1__30([], _, _, A, B, C, D, E, F, G) :-
11636    occurrence___5__3__0__30(A,
11637                             B,
11638                             C,
11639                             D,
11640                             E,
11641                             F,
11642                             G).
11643occurrence___5__3__1__30([A|B], C, D, E, F, G, H, I, J, K) :-
11644    (   A=suspension(_, active, _, _, L, M, N, _, _),
11645        L==F,
11646        N==H,
11647        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
11648                  O),
11649        lookup_ht(O, H, P)
11650    ->  occurrence___5__3__2__30(P,
11651                                 M,
11652                                 A,
11653                                 B,
11654                                 C,
11655                                 D,
11656                                 E,
11657                                 F,
11658                                 G,
11659                                 H,
11660                                 I,
11661                                 J,
11662                                 K)
11663    ;   occurrence___5__3__1__30(B,
11664                                 C,
11665                                 D,
11666                                 E,
11667                                 F,
11668                                 G,
11669                                 H,
11670                                 I,
11671                                 J,
11672                                 K)
11673    ).
11674occurrence___5__3__2__30([], _, _, A, B, C, D, E, F, G, H, I, J) :-
11675    occurrence___5__3__1__30(A,
11676                             B,
11677                             C,
11678                             D,
11679                             E,
11680                             F,
11681                             G,
11682                             H,
11683                             I,
11684                             J).
11685occurrence___5__3__2__30([A|B], C, D, E, F, G, H, I, J, K, L, M, N) :-
11686    (   A=suspension(_, active, _, _, O, _, _, _, _, _),
11687        O==K,
11688        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11689                  P)
11690    ->  occurrence___5__3__3__30(P,
11691                                 A,
11692                                 B,
11693                                 C,
11694                                 D,
11695                                 E,
11696                                 F,
11697                                 G,
11698                                 H,
11699                                 I,
11700                                 J,
11701                                 K,
11702                                 L,
11703                                 M,
11704                                 N)
11705    ;   occurrence___5__3__2__30(B,
11706                                 C,
11707                                 D,
11708                                 E,
11709                                 F,
11710                                 G,
11711                                 H,
11712                                 I,
11713                                 J,
11714                                 K,
11715                                 L,
11716                                 M,
11717                                 N)
11718    ).
11719occurrence___5__3__3__30([], _, A, B, C, D, E, F, G, H, I, J, K, L, M) :-
11720    occurrence___5__3__2__30(A,
11721                             B,
11722                             C,
11723                             D,
11724                             E,
11725                             F,
11726                             G,
11727                             H,
11728                             I,
11729                             J,
11730                             K,
11731                             L,
11732                             M).
11733occurrence___5__3__3__30([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O, P) :-
11734    (   A=suspension(_, active, _, Q),
11735        L<E,
11736        chr_pp_flag(occurrence_subsumption, on),
11737        H=pragma(rule(R, _, _, _), _, _, _, _),
11738        R\==[],
11739        \+ tree_set_memberchk(K, Q)
11740    ->  setarg(2, A, removed),
11741        arg(3, A, S),
11742        (   var(S)
11743        ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11744                      T),
11745            T=[_|U],
11746            b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11747                     U),
11748            (   U=[V|_]
11749            ->  setarg(3, V, _)
11750            ;   true
11751            )
11752        ;   S=[_, _|U],
11753            setarg(2, S, U),
11754            (   U=[V|_]
11755            ->  setarg(3, V, S)
11756            ;   true
11757            )
11758        ),
11759        arg(2, P, W),
11760        setarg(2, P, active),
11761        (   W==not_stored_yet
11762        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
11763                      X),
11764            insert_ht(X, k(K, O), P),
11765            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
11766                      Y),
11767            Z=[P|Y],
11768            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
11769                     Z),
11770            (   Y=[A1|_]
11771            ->  setarg(4, A1, Z)
11772            ;   true
11773            ),
11774            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
11775                      B1),
11776            insert_ht(B1, k(K, L, O), P),
11777            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
11778                      C1),
11779            insert_ht(C1, k(K, M, N), P),
11780            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
11781                      D1),
11782            insert_ht(D1, k(K, L), P),
11783            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
11784                      E1),
11785            insert_ht(E1, M, P),
11786            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11787                      F1),
11788            insert_ht(F1, k(K, M), P),
11789            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
11790                      G1),
11791            insert_ht(G1, k(M, N), P),
11792            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
11793                      H1),
11794            insert_ht(H1, K, P)
11795        ;   true
11796        ),
11797        first_occ_in_rule(M, K, L, N),
11798        tree_set_add(Q, K, I1),
11799        multiple_occ_constraints_checked(I1),
11800        (   P=suspension(_, active, _, _, _, _, _, _, _)
11801        ->  setarg(2, P, inactive),
11802            occurrence___5__3__3__30(B,
11803                                     C,
11804                                     D,
11805                                     E,
11806                                     F,
11807                                     G,
11808                                     H,
11809                                     I,
11810                                     J,
11811                                     K,
11812                                     L,
11813                                     M,
11814                                     N,
11815                                     O,
11816                                     P)
11817        ;   true
11818        )
11819    ;   occurrence___5__3__3__30(B,
11820                                 C,
11821                                 D,
11822                                 E,
11823                                 F,
11824                                 G,
11825                                 H,
11826                                 I,
11827                                 J,
11828                                 K,
11829                                 L,
11830                                 M,
11831                                 N,
11832                                 O,
11833                                 P)
11834    ).
11835occurrence___5__3(A, B, C, D, E, F) :-
11836    occurrence___5__4(A, B, C, D, E, F).
11837occurrence___5__4(A, B, C, D, E, F) :-
11838    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
11839    lookup_ht(G, C, H),
11840    !,
11841    occurrence___5__4__0__31(H,
11842                             A,
11843                             B,
11844                             C,
11845                             D,
11846                             E,
11847                             F).
11848occurrence___5__4__0__31([], A, B, C, D, E, F) :-
11849    occurrence___5__5(A, B, C, D, E, F).
11850occurrence___5__4__0__31([A|B], C, D, E, F, G, H) :-
11851    (   A=suspension(_, active, _, _, I, J),
11852        I==E,
11853        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
11854                  K),
11855        lookup_ht(K, k(C, E), L)
11856    ->  occurrence___5__4__1__31(L,
11857                                 J,
11858                                 A,
11859                                 B,
11860                                 C,
11861                                 D,
11862                                 E,
11863                                 F,
11864                                 G,
11865                                 H)
11866    ;   occurrence___5__4__0__31(B,
11867                                 C,
11868                                 D,
11869                                 E,
11870                                 F,
11871                                 G,
11872                                 H)
11873    ).
11874occurrence___5__4__1__31([], _, _, A, B, C, D, E, F, G) :-
11875    occurrence___5__4__0__31(A,
11876                             B,
11877                             C,
11878                             D,
11879                             E,
11880                             F,
11881                             G).
11882occurrence___5__4__1__31([A|B], C, D, E, F, G, H, I, J, K) :-
11883    (   A=suspension(_, active, _, _, L, M, N, O, _),
11884        L==F,
11885        N==H,
11886        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
11887                  P),
11888        lookup_ht(P, H, Q)
11889    ->  occurrence___5__4__2__31(Q,
11890                                 M,
11891                                 O,
11892                                 A,
11893                                 B,
11894                                 C,
11895                                 D,
11896                                 E,
11897                                 F,
11898                                 G,
11899                                 H,
11900                                 I,
11901                                 J,
11902                                 K)
11903    ;   occurrence___5__4__1__31(B,
11904                                 C,
11905                                 D,
11906                                 E,
11907                                 F,
11908                                 G,
11909                                 H,
11910                                 I,
11911                                 J,
11912                                 K)
11913    ).
11914occurrence___5__4__2__31([], _, _, _, A, B, C, D, E, F, G, H, I, J) :-
11915    occurrence___5__4__1__31(A,
11916                             B,
11917                             C,
11918                             D,
11919                             E,
11920                             F,
11921                             G,
11922                             H,
11923                             I,
11924                             J).
11925occurrence___5__4__2__31([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O) :-
11926    (   A=suspension(_, active, _, _, P, _, _, _, _, _),
11927        P==L,
11928        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11929                  Q)
11930    ->  occurrence___5__4__3__31(Q,
11931                                 A,
11932                                 B,
11933                                 C,
11934                                 D,
11935                                 E,
11936                                 F,
11937                                 G,
11938                                 H,
11939                                 I,
11940                                 J,
11941                                 K,
11942                                 L,
11943                                 M,
11944                                 N,
11945                                 O)
11946    ;   occurrence___5__4__2__31(B,
11947                                 C,
11948                                 D,
11949                                 E,
11950                                 F,
11951                                 G,
11952                                 H,
11953                                 I,
11954                                 J,
11955                                 K,
11956                                 L,
11957                                 M,
11958                                 N,
11959                                 O)
11960    ).
11961occurrence___5__4__3__31([], _, A, B, C, D, E, F, G, H, I, J, K, L, M, N) :-
11962    occurrence___5__4__2__31(A,
11963                             B,
11964                             C,
11965                             D,
11966                             E,
11967                             F,
11968                             G,
11969                             H,
11970                             I,
11971                             J,
11972                             K,
11973                             L,
11974                             M,
11975                             N).
11976occurrence___5__4__3__31([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) :-
11977    (   A=suspension(_, active, _, R),
11978        E<M,
11979        chr_pp_flag(occurrence_subsumption, on),
11980        I=pragma(rule(S, _, _, _), _, _, _, _),
11981        S\==[],
11982        \+ tree_set_memberchk(L, R)
11983    ->  setarg(2, A, removed),
11984        arg(3, A, T),
11985        (   var(T)
11986        ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11987                      U),
11988            U=[_|V],
11989            b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
11990                     V),
11991            (   V=[W|_]
11992            ->  setarg(3, W, _)
11993            ;   true
11994            )
11995        ;   T=[_, _|V],
11996            setarg(2, T, V),
11997            (   V=[W|_]
11998            ->  setarg(3, W, T)
11999            ;   true
12000            )
12001        ),
12002        arg(2, Q, X),
12003        setarg(2, Q, active),
12004        (   X==not_stored_yet
12005        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12006                      Y),
12007            insert_ht(Y, k(L, P), Q),
12008            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12009                      Z),
12010            A1=[Q|Z],
12011            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12012                     A1),
12013            (   Z=[B1|_]
12014            ->  setarg(4, B1, A1)
12015            ;   true
12016            ),
12017            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12018                      C1),
12019            insert_ht(C1, k(L, M, P), Q),
12020            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12021                      D1),
12022            insert_ht(D1, k(L, N, O), Q),
12023            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12024                      E1),
12025            insert_ht(E1, k(L, M), Q),
12026            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12027                      F1),
12028            insert_ht(F1, N, Q),
12029            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12030                      G1),
12031            insert_ht(G1, k(L, N), Q),
12032            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12033                      H1),
12034            insert_ht(H1, k(N, O), Q),
12035            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12036                      I1),
12037            insert_ht(I1, L, Q)
12038        ;   true
12039        ),
12040        first_occ_in_rule(N, L, E, F),
12041        tree_set_add(R, L, J1),
12042        multiple_occ_constraints_checked(J1),
12043        (   Q=suspension(_, active, _, _, _, _, _, _, _)
12044        ->  setarg(2, Q, inactive),
12045            occurrence___5__4__3__31(B,
12046                                     C,
12047                                     D,
12048                                     E,
12049                                     F,
12050                                     G,
12051                                     H,
12052                                     I,
12053                                     J,
12054                                     K,
12055                                     L,
12056                                     M,
12057                                     N,
12058                                     O,
12059                                     P,
12060                                     Q)
12061        ;   true
12062        )
12063    ;   occurrence___5__4__3__31(B,
12064                                 C,
12065                                 D,
12066                                 E,
12067                                 F,
12068                                 G,
12069                                 H,
12070                                 I,
12071                                 J,
12072                                 K,
12073                                 L,
12074                                 M,
12075                                 N,
12076                                 O,
12077                                 P,
12078                                 Q)
12079    ).
12080occurrence___5__4(A, B, C, D, E, F) :-
12081    occurrence___5__5(A, B, C, D, E, F).
12082occurrence___5__5(A, B, C, D, E, F) :-
12083    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', G),
12084    lookup_ht(G, k(A, B, yes), H),
12085    !,
12086    occurrence___5__5__0__35(H,
12087                             A,
12088                             B,
12089                             C,
12090                             D,
12091                             E,
12092                             F).
12093occurrence___5__5__0__35([], A, B, C, D, E, F) :-
12094    occurrence___5__6(A, B, C, D, E, F).
12095occurrence___5__5__0__35([A|B], C, D, E, F, G, H) :-
12096    (   A=suspension(_, active, I, J, K),
12097        I==C,
12098        J==D,
12099        K=yes,
12100        ( ground(E),
12101          ground(F),
12102          nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
12103                    L),
12104          lookup_ht(L, k(E, F), M)
12105        ),
12106        member(N, M),
12107        N=suspension(_, active, _, _, _),
12108        ( ground(C),
12109          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
12110                    O),
12111          lookup_ht(O, C, P)
12112        ),
12113        member(Q, P),
12114        Q=suspension(_, active, _, _, R, S),
12115        D<R
12116    ->  ( setarg(2, A, removed),
12117          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13',
12118                    T),
12119          delete_ht(T, k(C, yes), A),
12120          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
12121                    U),
12122          delete_ht(U, k(C, D, yes), A)
12123        ),
12124        setarg(2, Q, removed),
12125        ( nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
12126                    V),
12127          delete_ht(V, k(C, S), Q)
12128        ),
12129        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
12130                  W),
12131        delete_ht(W, C, Q),
12132        arg(2, H, X),
12133        setarg(2, H, active),
12134        (   X==not_stored_yet
12135        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12136                      Y),
12137            insert_ht(Y, k(C, G), H),
12138            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12139                      Z),
12140            A1=[H|Z],
12141            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12142                     A1),
12143            (   Z=[B1|_]
12144            ->  setarg(4, B1, A1)
12145            ;   true
12146            ),
12147            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12148                      C1),
12149            insert_ht(C1, k(C, D, G), H),
12150            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12151                      D1),
12152            insert_ht(D1, k(C, E, F), H),
12153            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12154                      E1),
12155            insert_ht(E1, k(C, D), H),
12156            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12157                      F1),
12158            insert_ht(F1, E, H),
12159            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12160                      G1),
12161            insert_ht(G1, k(C, E), H),
12162            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12163                      H1),
12164            insert_ht(H1, k(E, F), H),
12165            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12166                      I1),
12167            insert_ht(I1, C, H)
12168        ;   true
12169        ),
12170        J1 is S-1,
12171        stored(C, D, maybe),
12172        stored_complete(C, R, J1),
12173        (   H=suspension(_, active, _, _, _, _, _, _, _)
12174        ->  setarg(2, H, inactive),
12175            occurrence___5__5__0__35(B,
12176                                     C,
12177                                     D,
12178                                     E,
12179                                     F,
12180                                     G,
12181                                     H)
12182        ;   true
12183        )
12184    ;   occurrence___5__5__0__35(B,
12185                                 C,
12186                                 D,
12187                                 E,
12188                                 F,
12189                                 G,
12190                                 H)
12191    ).
12192occurrence___5__5(A, B, C, D, E, F) :-
12193    occurrence___5__6(A, B, C, D, E, F).
12194occurrence___5__6(A, B, C, D, E, F) :-
12195    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', G),
12196    lookup_ht(G, C, H),
12197    !,
12198    occurrence___5__6__0__36(H,
12199                             A,
12200                             B,
12201                             C,
12202                             D,
12203                             E,
12204                             F).
12205occurrence___5__6__0__36([], A, B, C, D, E, F) :-
12206    occurrence___5__7(A, B, C, D, E, F).
12207occurrence___5__6__0__36([A|B], C, D, E, F, G, H) :-
12208    (   A=suspension(_, active, _, _, I, _, J, _, _),
12209        J==E,
12210        nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
12211                  K),
12212        lookup_ht(K, I, L)
12213    ->  occurrence___5__6__1__36(L,
12214                                 I,
12215                                 A,
12216                                 B,
12217                                 C,
12218                                 D,
12219                                 E,
12220                                 F,
12221                                 G,
12222                                 H)
12223    ;   occurrence___5__6__0__36(B,
12224                                 C,
12225                                 D,
12226                                 E,
12227                                 F,
12228                                 G,
12229                                 H)
12230    ).
12231occurrence___5__6__1__36([], _, _, A, B, C, D, E, F, G) :-
12232    occurrence___5__6__0__36(A,
12233                             B,
12234                             C,
12235                             D,
12236                             E,
12237                             F,
12238                             G).
12239occurrence___5__6__1__36([A|B], C, D, E, F, G, H, I, J, K) :-
12240    (   A=suspension(_, active, _, L, M),
12241        L==C,
12242        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
12243                  N),
12244        lookup_ht(N, k(C, 0), O)
12245    ->  occurrence___5__6__2__36(O,
12246                                 M,
12247                                 A,
12248                                 B,
12249                                 C,
12250                                 D,
12251                                 E,
12252                                 F,
12253                                 G,
12254                                 H,
12255                                 I,
12256                                 J,
12257                                 K)
12258    ;   occurrence___5__6__1__36(B,
12259                                 C,
12260                                 D,
12261                                 E,
12262                                 F,
12263                                 G,
12264                                 H,
12265                                 I,
12266                                 J,
12267                                 K)
12268    ).
12269occurrence___5__6__2__36([], _, _, A, B, C, D, E, F, G, H, I, J) :-
12270    occurrence___5__6__1__36(A,
12271                             B,
12272                             C,
12273                             D,
12274                             E,
12275                             F,
12276                             G,
12277                             H,
12278                             I,
12279                             J).
12280occurrence___5__6__2__36([A|B], C, D, E, F, G, H, I, J, K, L, M, N) :-
12281    (   A=suspension(_, active, _, O, P, Q),
12282        O==F,
12283        Q=0,
12284        R=t(250, N, G, A, D),
12285        '$novel_production'(N, R),
12286        '$novel_production'(G, R),
12287        '$novel_production'(A, R),
12288        '$novel_production'(D, R),
12289        P=<C
12290    ->  '$extend_history'(N, R),
12291        arg(2, N, S),
12292        setarg(2, N, active),
12293        (   S==not_stored_yet
12294        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12295                      T),
12296            insert_ht(T, k(I, M), N),
12297            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12298                      U),
12299            V=[N|U],
12300            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12301                     V),
12302            (   U=[W|_]
12303            ->  setarg(4, W, V)
12304            ;   true
12305            ),
12306            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12307                      X),
12308            insert_ht(X, k(I, J, M), N),
12309            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12310                      Y),
12311            insert_ht(Y, k(I, K, L), N),
12312            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12313                      Z),
12314            insert_ht(Z, k(I, J), N),
12315            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12316                      A1),
12317            insert_ht(A1, K, N),
12318            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12319                      B1),
12320            insert_ht(B1, k(I, K), N),
12321            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12322                      C1),
12323            insert_ht(C1, k(K, L), N),
12324            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12325                      D1),
12326            insert_ht(D1, I, N)
12327        ;   true
12328        ),
12329        passive(K, L),
12330        (   N=suspension(_, active, _, _, _, _, _, _, _)
12331        ->  setarg(2, N, inactive),
12332            occurrence___5__6__2__36(B,
12333                                     C,
12334                                     D,
12335                                     E,
12336                                     F,
12337                                     G,
12338                                     H,
12339                                     I,
12340                                     J,
12341                                     K,
12342                                     L,
12343                                     M,
12344                                     N)
12345        ;   true
12346        )
12347    ;   occurrence___5__6__2__36(B,
12348                                 C,
12349                                 D,
12350                                 E,
12351                                 F,
12352                                 G,
12353                                 H,
12354                                 I,
12355                                 J,
12356                                 K,
12357                                 L,
12358                                 M,
12359                                 N)
12360    ).
12361occurrence___5__6(A, B, C, D, E, F) :-
12362    occurrence___5__7(A, B, C, D, E, F).
12363occurrence___5__7(A, B, C, D, E, F) :-
12364    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', G),
12365    lookup_ht(G, C, H),
12366    !,
12367    occurrence___5__7__0__37(H,
12368                             A,
12369                             B,
12370                             C,
12371                             D,
12372                             E,
12373                             F).
12374occurrence___5__7__0__37([], A, B, C, D, E, F) :-
12375    occurrence___5__8(A, B, C, D, E, F).
12376occurrence___5__7__0__37([A|B], C, D, E, F, G, H) :-
12377    (   A=suspension(_, active, _, _, _, _, I, J, _),
12378        I==E,
12379        nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
12380                  K),
12381        lookup_ht(K, C, L)
12382    ->  occurrence___5__7__1__37(L,
12383                                 J,
12384                                 A,
12385                                 B,
12386                                 C,
12387                                 D,
12388                                 E,
12389                                 F,
12390                                 G,
12391                                 H)
12392    ;   occurrence___5__7__0__37(B,
12393                                 C,
12394                                 D,
12395                                 E,
12396                                 F,
12397                                 G,
12398                                 H)
12399    ).
12400occurrence___5__7__1__37([], _, _, A, B, C, D, E, F, G) :-
12401    occurrence___5__7__0__37(A,
12402                             B,
12403                             C,
12404                             D,
12405                             E,
12406                             F,
12407                             G).
12408occurrence___5__7__1__37([A|B], C, D, E, F, G, H, I, J, K) :-
12409    (   A=suspension(_, active, _, L, M),
12410        L==F,
12411        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
12412                  N),
12413        lookup_ht(N, k(F, 0), O)
12414    ->  occurrence___5__7__2__37(O,
12415                                 M,
12416                                 A,
12417                                 B,
12418                                 C,
12419                                 D,
12420                                 E,
12421                                 F,
12422                                 G,
12423                                 H,
12424                                 I,
12425                                 J,
12426                                 K)
12427    ;   occurrence___5__7__1__37(B,
12428                                 C,
12429                                 D,
12430                                 E,
12431                                 F,
12432                                 G,
12433                                 H,
12434                                 I,
12435                                 J,
12436                                 K)
12437    ).
12438occurrence___5__7__2__37([], _, _, A, B, C, D, E, F, G, H, I, J) :-
12439    occurrence___5__7__1__37(A,
12440                             B,
12441                             C,
12442                             D,
12443                             E,
12444                             F,
12445                             G,
12446                             H,
12447                             I,
12448                             J).
12449occurrence___5__7__2__37([A|B], C, D, E, F, G, H, I, J, K, L, M, N) :-
12450    (   A=suspension(_, active, _, O, P, Q),
12451        O==I,
12452        Q=0,
12453        R=t(250, G, N, A, D),
12454        '$novel_production'(G, R),
12455        '$novel_production'(N, R),
12456        '$novel_production'(A, R),
12457        '$novel_production'(D, R),
12458        P=<C
12459    ->  '$extend_history'(N, R),
12460        arg(2, N, S),
12461        setarg(2, N, active),
12462        (   S==not_stored_yet
12463        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12464                      T),
12465            insert_ht(T, k(I, M), N),
12466            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12467                      U),
12468            V=[N|U],
12469            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12470                     V),
12471            (   U=[W|_]
12472            ->  setarg(4, W, V)
12473            ;   true
12474            ),
12475            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12476                      X),
12477            insert_ht(X, k(I, J, M), N),
12478            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12479                      Y),
12480            insert_ht(Y, k(I, K, L), N),
12481            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12482                      Z),
12483            insert_ht(Z, k(I, J), N),
12484            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12485                      A1),
12486            insert_ht(A1, K, N),
12487            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12488                      B1),
12489            insert_ht(B1, k(I, K), N),
12490            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12491                      C1),
12492            insert_ht(C1, k(K, L), N),
12493            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12494                      D1),
12495            insert_ht(D1, I, N)
12496        ;   true
12497        ),
12498        passive(K, F),
12499        (   N=suspension(_, active, _, _, _, _, _, _, _)
12500        ->  setarg(2, N, inactive),
12501            occurrence___5__7__2__37(B,
12502                                     C,
12503                                     D,
12504                                     E,
12505                                     F,
12506                                     G,
12507                                     H,
12508                                     I,
12509                                     J,
12510                                     K,
12511                                     L,
12512                                     M,
12513                                     N)
12514        ;   true
12515        )
12516    ;   occurrence___5__7__2__37(B,
12517                                 C,
12518                                 D,
12519                                 E,
12520                                 F,
12521                                 G,
12522                                 H,
12523                                 I,
12524                                 J,
12525                                 K,
12526                                 L,
12527                                 M,
12528                                 N)
12529    ).
12530occurrence___5__7(A, B, C, D, E, F) :-
12531    occurrence___5__8(A, B, C, D, E, F).
12532occurrence___5__8(A, B, C, D, E, F) :-
12533    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
12534              G),
12535    lookup_ht(G, A, H),
12536    !,
12537    occurrence___5__8__0__38(H,
12538                             A,
12539                             B,
12540                             C,
12541                             D,
12542                             E,
12543                             F).
12544occurrence___5__8__0__38([], A, B, C, D, E, F) :-
12545    occurrence___5__9(A, B, C, D, E, F).
12546occurrence___5__8__0__38([A|B], C, D, E, F, G, H) :-
12547    (   A=suspension(_, active, _, I, J, _),
12548        I==C,
12549        K=t(259, A, H),
12550        '$novel_production'(A, K),
12551        '$novel_production'(H, K),
12552        D>J
12553    ->  '$extend_history'(H, K),
12554        arg(2, H, L),
12555        setarg(2, H, active),
12556        (   L==not_stored_yet
12557        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12558                      M),
12559            insert_ht(M, k(C, G), H),
12560            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12561                      N),
12562            O=[H|N],
12563            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12564                     O),
12565            (   N=[P|_]
12566            ->  setarg(4, P, O)
12567            ;   true
12568            ),
12569            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12570                      Q),
12571            insert_ht(Q, k(C, D, G), H),
12572            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12573                      R),
12574            insert_ht(R, k(C, E, F), H),
12575            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12576                      S),
12577            insert_ht(S, k(C, D), H),
12578            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12579                      T),
12580            insert_ht(T, E, H),
12581            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12582                      U),
12583            insert_ht(U, k(C, E), H),
12584            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12585                      V),
12586            insert_ht(V, k(E, F), H),
12587            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12588                      W),
12589            insert_ht(W, C, H)
12590        ;   true
12591        ),
12592        passive(E, F),
12593        (   H=suspension(_, active, _, _, _, _, _, _, _)
12594        ->  setarg(2, H, inactive),
12595            occurrence___5__8__0__38(B,
12596                                     C,
12597                                     D,
12598                                     E,
12599                                     F,
12600                                     G,
12601                                     H)
12602        ;   true
12603        )
12604    ;   occurrence___5__8__0__38(B,
12605                                 C,
12606                                 D,
12607                                 E,
12608                                 F,
12609                                 G,
12610                                 H)
12611    ).
12612occurrence___5__8(A, B, C, D, E, F) :-
12613    occurrence___5__9(A, B, C, D, E, F).
12614occurrence___5__9(A, B, C, D, E, F) :-
12615    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
12616              G),
12617    lookup_ht(G, k(A, C), H),
12618    !,
12619    occurrence___5__9__0__42(H,
12620                             A,
12621                             B,
12622                             C,
12623                             D,
12624                             E,
12625                             F).
12626occurrence___5__9__0__42([], A, B, C, D, E, F) :-
12627    occurrence___5__10(A, B, C, D, E, F).
12628occurrence___5__9__0__42([A|B], C, D, E, F, G, H) :-
12629    (   A=suspension(_, active, I, J, K, L),
12630        I==C,
12631        J==E,
12632        E>1,
12633        ( ground(C),
12634          nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
12635                    M),
12636          lookup_ht(M, C, N)
12637        ),
12638        member(O, N),
12639        O=suspension(_, active, _, _, P),
12640        P>D
12641    ->  setarg(2, A, removed),
12642        ( nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
12643                    Q),
12644          delete_ht(Q, C, A)
12645        ),
12646        nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
12647                  R),
12648        delete_ht(R, k(C, E), A),
12649        arg(2, H, S),
12650        setarg(2, H, active),
12651        (   S==not_stored_yet
12652        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12653                      T),
12654            insert_ht(T, k(C, G), H),
12655            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12656                      U),
12657            V=[H|U],
12658            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12659                     V),
12660            (   U=[W|_]
12661            ->  setarg(4, W, V)
12662            ;   true
12663            ),
12664            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12665                      X),
12666            insert_ht(X, k(C, D, G), H),
12667            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12668                      Y),
12669            insert_ht(Y, k(C, E, F), H),
12670            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12671                      Z),
12672            insert_ht(Z, k(C, D), H),
12673            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12674                      A1),
12675            insert_ht(A1, E, H),
12676            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12677                      B1),
12678            insert_ht(B1, k(C, E), H),
12679            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12680                      C1),
12681            insert_ht(C1, k(E, F), H),
12682            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12683                      D1),
12684            insert_ht(D1, C, H)
12685        ;   true
12686        ),
12687        functional_dependency(C, 1, K, L),
12688        (   H=suspension(_, active, _, _, _, _, _, _, _)
12689        ->  setarg(2, H, inactive),
12690            occurrence___5__9__0__42(B,
12691                                     C,
12692                                     D,
12693                                     E,
12694                                     F,
12695                                     G,
12696                                     H)
12697        ;   true
12698        )
12699    ;   occurrence___5__9__0__42(B,
12700                                 C,
12701                                 D,
12702                                 E,
12703                                 F,
12704                                 G,
12705                                 H)
12706    ).
12707occurrence___5__9(A, B, C, D, E, F) :-
12708    occurrence___5__10(A, B, C, D, E, F).
12709occurrence___5__10(A, B, C, D, E, F) :-
12710    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
12711              G),
12712    lookup_ht(G, A, H),
12713    !,
12714    occurrence___5__10__0__48(H,
12715                              A,
12716                              B,
12717                              C,
12718                              D,
12719                              E,
12720                              F).
12721occurrence___5__10__0__48([], A, B, C, D, E, F) :-
12722    occurrence___5__11(A, B, C, D, E, F).
12723occurrence___5__10__0__48([A|B], C, D, E, F, G, H) :-
12724    (   A=suspension(_, active, _, _, I, J),
12725        I==C,
12726        nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
12727                  K)
12728    ->  occurrence___5__10__1__48(K,
12729                                  J,
12730                                  A,
12731                                  B,
12732                                  C,
12733                                  D,
12734                                  E,
12735                                  F,
12736                                  G,
12737                                  H)
12738    ;   occurrence___5__10__0__48(B,
12739                                  C,
12740                                  D,
12741                                  E,
12742                                  F,
12743                                  G,
12744                                  H)
12745    ).
12746occurrence___5__10__1__48([], _, _, A, B, C, D, E, F, G) :-
12747    occurrence___5__10__0__48(A,
12748                              B,
12749                              C,
12750                              D,
12751                              E,
12752                              F,
12753                              G).
12754occurrence___5__10__1__48([A|B], C, D, E, F, G, H, I, J, K) :-
12755    (   A=suspension(_, active, _, _),
12756        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', L),
12757        lookup_ht(L, H, M)
12758    ->  occurrence___5__10__2__48(M,
12759                                  A,
12760                                  B,
12761                                  C,
12762                                  D,
12763                                  E,
12764                                  F,
12765                                  G,
12766                                  H,
12767                                  I,
12768                                  J,
12769                                  K)
12770    ;   occurrence___5__10__1__48(B,
12771                                  C,
12772                                  D,
12773                                  E,
12774                                  F,
12775                                  G,
12776                                  H,
12777                                  I,
12778                                  J,
12779                                  K)
12780    ).
12781occurrence___5__10__2__48([], _, A, B, C, D, E, F, G, H, I, J) :-
12782    occurrence___5__10__1__48(A,
12783                              B,
12784                              C,
12785                              D,
12786                              E,
12787                              F,
12788                              G,
12789                              H,
12790                              I,
12791                              J).
12792occurrence___5__10__2__48([A|B], C, D, E, F, G, H, I, J, K, L, M) :-
12793    (   A=suspension(_, active, _, _, N, O),
12794        N==J,
12795        P=t(330, C, M, A, F),
12796        '$novel_production'(C, P),
12797        '$novel_production'(M, P),
12798        '$novel_production'(A, P),
12799        '$novel_production'(F, P)
12800    ->  '$extend_history'(M, P),
12801        arg(2, M, Q),
12802        setarg(2, M, active),
12803        (   Q==not_stored_yet
12804        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12805                      R),
12806            insert_ht(R, k(H, L), M),
12807            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12808                      S),
12809            T=[M|S],
12810            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12811                     T),
12812            (   S=[U|_]
12813            ->  setarg(4, U, T)
12814            ;   true
12815            ),
12816            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12817                      V),
12818            insert_ht(V, k(H, I, L), M),
12819            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12820                      W),
12821            insert_ht(W, k(H, J, K), M),
12822            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12823                      X),
12824            insert_ht(X, k(H, I), M),
12825            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12826                      Y),
12827            insert_ht(Y, J, M),
12828            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12829                      Z),
12830            insert_ht(Z, k(H, J), M),
12831            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12832                      A1),
12833            insert_ht(A1, k(J, K), M),
12834            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12835                      B1),
12836            insert_ht(B1, H, M)
12837        ;   true
12838        ),
12839        O=pragma(rule(C1, D1, E1, _), _, _, _, _),
12840        (   is_passive(J, K)
12841        ->  true
12842        ;   L==simplification
12843        ->  select(F1, C1, _),
12844            F1=..[_|G1],
12845            term_variables(E1, H1),
12846            partial_wake_args(G1, E, H1, H)
12847        ;   select(F1, D1, _),
12848            F1=..[_|G1],
12849            term_variables(E1, H1),
12850            partial_wake_args(G1, E, H1, H)
12851        ),
12852        (   M=suspension(_, active, _, _, _, _, _, _, _)
12853        ->  setarg(2, M, inactive),
12854            occurrence___5__10__2__48(B,
12855                                      C,
12856                                      D,
12857                                      E,
12858                                      F,
12859                                      G,
12860                                      H,
12861                                      I,
12862                                      J,
12863                                      K,
12864                                      L,
12865                                      M)
12866        ;   true
12867        )
12868    ;   occurrence___5__10__2__48(B,
12869                                  C,
12870                                  D,
12871                                  E,
12872                                  F,
12873                                  G,
12874                                  H,
12875                                  I,
12876                                  J,
12877                                  K,
12878                                  L,
12879                                  M)
12880    ).
12881occurrence___5__10(A, B, C, D, E, F) :-
12882    occurrence___5__11(A, B, C, D, E, F).
12883occurrence___5__11(A, B, C, D, E, F) :-
12884    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', G),
12885    lookup_ht(G, k(C, D), H),
12886    !,
12887    occurrence___5__11__0__50(H,
12888                              A,
12889                              B,
12890                              C,
12891                              D,
12892                              E,
12893                              F).
12894occurrence___5__11__0__50([], A, B, C, D, E, F) :-
12895    occurrence___5__12(A, B, C, D, E, F).
12896occurrence___5__11__0__50([A|B], C, D, E, F, G, H) :-
12897    (   A=suspension(_, active, _, I, J),
12898        I==E,
12899        J==F,
12900        nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
12901                  K),
12902        lookup_ht(K, k(C, D), L)
12903    ->  occurrence___5__11__1__50(L,
12904                                  A,
12905                                  B,
12906                                  C,
12907                                  D,
12908                                  E,
12909                                  F,
12910                                  G,
12911                                  H)
12912    ;   occurrence___5__11__0__50(B,
12913                                  C,
12914                                  D,
12915                                  E,
12916                                  F,
12917                                  G,
12918                                  H)
12919    ).
12920occurrence___5__11__1__50([], _, A, B, C, D, E, F, G) :-
12921    occurrence___5__11__0__50(A,
12922                              B,
12923                              C,
12924                              D,
12925                              E,
12926                              F,
12927                              G).
12928occurrence___5__11__1__50([A|B], C, D, E, F, G, H, I, J) :-
12929    (   A=suspension(_, active, _, K, L),
12930        K==E,
12931        L==F,
12932        M=t(362, J, C, A),
12933        '$novel_production'(J, M),
12934        '$novel_production'(C, M),
12935        '$novel_production'(A, M),
12936        F>1
12937    ->  '$extend_history'(J, M),
12938        arg(2, J, N),
12939        setarg(2, J, active),
12940        (   N==not_stored_yet
12941        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
12942                      O),
12943            insert_ht(O, k(E, I), J),
12944            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
12945                      P),
12946            Q=[J|P],
12947            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
12948                     Q),
12949            (   P=[R|_]
12950            ->  setarg(4, R, Q)
12951            ;   true
12952            ),
12953            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
12954                      S),
12955            insert_ht(S, k(E, F, I), J),
12956            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
12957                      T),
12958            insert_ht(T, k(E, G, H), J),
12959            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
12960                      U),
12961            insert_ht(U, k(E, F), J),
12962            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
12963                      V),
12964            insert_ht(V, G, J),
12965            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
12966                      W),
12967            insert_ht(W, k(E, G), J),
12968            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
12969                      X),
12970            insert_ht(X, k(G, H), J),
12971            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
12972                      Y),
12973            insert_ht(Y, E, J)
12974        ;   true
12975        ),
12976        Z is F-1,
12977        skip_to_next_id(E, Z),
12978        (   J=suspension(_, active, _, _, _, _, _, _, _)
12979        ->  setarg(2, J, inactive),
12980            occurrence___5__11__1__50(B,
12981                                      C,
12982                                      D,
12983                                      E,
12984                                      F,
12985                                      G,
12986                                      H,
12987                                      I,
12988                                      J)
12989        ;   true
12990        )
12991    ;   occurrence___5__11__1__50(B,
12992                                  C,
12993                                  D,
12994                                  E,
12995                                  F,
12996                                  G,
12997                                  H,
12998                                  I,
12999                                  J)
13000    ).
13001occurrence___5__11(A, B, C, D, E, F) :-
13002    occurrence___5__12(A, B, C, D, E, F).
13003occurrence___5__12(A, B, C, D, E, F) :-
13004    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13005              G),
13006    lookup_ht(G, k(A, B), H),
13007    !,
13008    occurrence___5__12__0__51(H,
13009                              A,
13010                              B,
13011                              C,
13012                              D,
13013                              E,
13014                              F).
13015occurrence___5__12__0__51([], A, B, C, D, E, F) :-
13016    occurrence___5__13(A, B, C, D, E, F).
13017occurrence___5__12__0__51([A|B], C, D, E, F, G, H) :-
13018    (   A=suspension(_, active, I, J, K),
13019        I==C,
13020        J==D,
13021        ( ground(E),
13022          ground(F)
13023        ),
13024        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
13025                  L),
13026        lookup_ht(L, k(E, F), M),
13027        member(N, M),
13028        N=suspension(_, active, _, _, _)
13029    ->  setarg(2, A, removed),
13030        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13031                  O),
13032        delete_ht(O, k(C, D), A),
13033        arg(2, H, P),
13034        setarg(2, H, active),
13035        (   P==not_stored_yet
13036        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13037                      Q),
13038            insert_ht(Q, k(C, G), H),
13039            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13040                      R),
13041            S=[H|R],
13042            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13043                     S),
13044            (   R=[T|_]
13045            ->  setarg(4, T, S)
13046            ;   true
13047            ),
13048            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13049                      U),
13050            insert_ht(U, k(C, D, G), H),
13051            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13052                      V),
13053            insert_ht(V, k(C, E, F), H),
13054            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13055                      W),
13056            insert_ht(W, k(C, D), H),
13057            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13058                      X),
13059            insert_ht(X, E, H),
13060            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13061                      Y),
13062            insert_ht(Y, k(C, E), H),
13063            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13064                      Z),
13065            insert_ht(Z, k(E, F), H),
13066            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13067                      A1),
13068            insert_ht(A1, C, H)
13069        ;   true
13070        ),
13071        occurrence_code_id(C, D, K),
13072        B1 is D+1,
13073        set_occurrence_code_id(C, B1, K),
13074        (   H=suspension(_, active, _, _, _, _, _, _, _)
13075        ->  setarg(2, H, inactive),
13076            occurrence___5__12__0__51(B,
13077                                      C,
13078                                      D,
13079                                      E,
13080                                      F,
13081                                      G,
13082                                      H)
13083        ;   true
13084        )
13085    ;   occurrence___5__12__0__51(B,
13086                                  C,
13087                                  D,
13088                                  E,
13089                                  F,
13090                                  G,
13091                                  H)
13092    ).
13093occurrence___5__12(A, B, C, D, E, F) :-
13094    occurrence___5__13(A, B, C, D, E, F).
13095occurrence___5__13(A, B, C, D, simplification, E) :-
13096    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13097              F),
13098    lookup_ht(F, k(A, B), G),
13099    !,
13100    occurrence___5__13__0__52(G,
13101                              A,
13102                              B,
13103                              C,
13104                              D,
13105                              simplification,
13106                              E).
13107occurrence___5__13__0__52([], A, B, C, D, E, F) :-
13108    occurrence___5__15(A, B, C, D, E, F).
13109occurrence___5__13__0__52([A|B], C, D, E, F, G, H) :-
13110    (   A=suspension(_, active, I, J, K),
13111        I==C,
13112        J==D
13113    ->  setarg(2, A, removed),
13114        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13115                  L),
13116        delete_ht(L, k(C, D), A),
13117        arg(2, H, M),
13118        setarg(2, H, active),
13119        (   M==not_stored_yet
13120        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13121                      N),
13122            insert_ht(N, k(C, G), H),
13123            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13124                      O),
13125            P=[H|O],
13126            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13127                     P),
13128            (   O=[Q|_]
13129            ->  setarg(4, Q, P)
13130            ;   true
13131            ),
13132            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13133                      R),
13134            insert_ht(R, k(C, D, G), H),
13135            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13136                      S),
13137            insert_ht(S, k(C, E, F), H),
13138            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13139                      T),
13140            insert_ht(T, k(C, D), H),
13141            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13142                      U),
13143            insert_ht(U, E, H),
13144            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13145                      V),
13146            insert_ht(V, k(C, E), H),
13147            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13148                      W),
13149            insert_ht(W, k(E, F), H),
13150            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13151                      X),
13152            insert_ht(X, C, H)
13153        ;   true
13154        ),
13155        occurrence_code_id(C, D, K),
13156        Y is D+1,
13157        set_occurrence_code_id(C, Y, K),
13158        (   H=suspension(_, active, _, _, _, _, _, _, _)
13159        ->  setarg(2, H, inactive),
13160            occurrence___5__13__0__52(B,
13161                                      C,
13162                                      D,
13163                                      E,
13164                                      F,
13165                                      G,
13166                                      H)
13167        ;   true
13168        )
13169    ;   occurrence___5__13__0__52(B,
13170                                  C,
13171                                  D,
13172                                  E,
13173                                  F,
13174                                  G,
13175                                  H)
13176    ).
13177occurrence___5__13(A, B, C, D, propagation, E) :-
13178    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13179              F),
13180    lookup_ht(F, k(A, B), G),
13181    !,
13182    occurrence___5__13__0__53(G,
13183                              A,
13184                              B,
13185                              C,
13186                              D,
13187                              propagation,
13188                              E).
13189occurrence___5__13__0__53([], A, B, C, D, E, F) :-
13190    occurrence___5__14(A, B, C, D, E, F).
13191occurrence___5__13__0__53([A|B], C, D, E, F, G, H) :-
13192    (   A=suspension(_, active, I, J, K),
13193        I==C,
13194        J==D,
13195        ( ground(C),
13196          ground(D)
13197        ),
13198        nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
13199                  L),
13200        lookup_ht(L, k(C, D), M),
13201        member(N, M),
13202        N=suspension(_, active, _, _, _)
13203    ->  setarg(2, A, removed),
13204        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13205                  O),
13206        delete_ht(O, k(C, D), A),
13207        arg(2, H, P),
13208        setarg(2, H, active),
13209        (   P==not_stored_yet
13210        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13211                      Q),
13212            insert_ht(Q, k(C, G), H),
13213            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13214                      R),
13215            S=[H|R],
13216            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13217                     S),
13218            (   R=[T|_]
13219            ->  setarg(4, T, S)
13220            ;   true
13221            ),
13222            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13223                      U),
13224            insert_ht(U, k(C, D, G), H),
13225            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13226                      V),
13227            insert_ht(V, k(C, E, F), H),
13228            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13229                      W),
13230            insert_ht(W, k(C, D), H),
13231            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13232                      X),
13233            insert_ht(X, E, H),
13234            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13235                      Y),
13236            insert_ht(Y, k(C, E), H),
13237            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13238                      Z),
13239            insert_ht(Z, k(E, F), H),
13240            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13241                      A1),
13242            insert_ht(A1, C, H)
13243        ;   true
13244        ),
13245        occurrence_code_id(C, D, K),
13246        B1 is D+1,
13247        C1 is K+1,
13248        set_occurrence_code_id(C, B1, C1),
13249        (   H=suspension(_, active, _, _, _, _, _, _, _)
13250        ->  setarg(2, H, inactive),
13251            occurrence___5__13__0__53(B,
13252                                      C,
13253                                      D,
13254                                      E,
13255                                      F,
13256                                      G,
13257                                      H)
13258        ;   true
13259        )
13260    ;   occurrence___5__13__0__53(B,
13261                                  C,
13262                                  D,
13263                                  E,
13264                                  F,
13265                                  G,
13266                                  H)
13267    ).
13268occurrence___5__13(A, B, C, D, E, F) :-
13269    occurrence___5__14(A, B, C, D, E, F).
13270occurrence___5__14(A, B, C, D, propagation, E) :-
13271    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13272              F),
13273    lookup_ht(F, k(A, B), G),
13274    !,
13275    occurrence___5__14__0__54(G,
13276                              A,
13277                              B,
13278                              C,
13279                              D,
13280                              propagation,
13281                              E).
13282occurrence___5__14__0__54([], A, B, C, D, E, F) :-
13283    occurrence___5__15(A, B, C, D, E, F).
13284occurrence___5__14__0__54([A|B], C, D, E, F, G, H) :-
13285    (   A=suspension(_, active, I, J, K),
13286        I==C,
13287        J==D
13288    ->  setarg(2, A, removed),
13289        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
13290                  L),
13291        delete_ht(L, k(C, D), A),
13292        arg(2, H, M),
13293        setarg(2, H, active),
13294        (   M==not_stored_yet
13295        ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13296                      N),
13297            insert_ht(N, k(C, G), H),
13298            nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13299                      O),
13300            P=[H|O],
13301            b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13302                     P),
13303            (   O=[Q|_]
13304            ->  setarg(4, Q, P)
13305            ;   true
13306            ),
13307            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13308                      R),
13309            insert_ht(R, k(C, D, G), H),
13310            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13311                      S),
13312            insert_ht(S, k(C, E, F), H),
13313            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13314                      T),
13315            insert_ht(T, k(C, D), H),
13316            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13317                      U),
13318            insert_ht(U, E, H),
13319            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13320                      V),
13321            insert_ht(V, k(C, E), H),
13322            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13323                      W),
13324            insert_ht(W, k(E, F), H),
13325            nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13326                      X),
13327            insert_ht(X, C, H)
13328        ;   true
13329        ),
13330        occurrence_code_id(C, D, K),
13331        Y is D+1,
13332        set_occurrence_code_id(C, Y, K),
13333        (   H=suspension(_, active, _, _, _, _, _, _, _)
13334        ->  setarg(2, H, inactive),
13335            occurrence___5__14__0__54(B,
13336                                      C,
13337                                      D,
13338                                      E,
13339                                      F,
13340                                      G,
13341                                      H)
13342        ;   true
13343        )
13344    ;   occurrence___5__14__0__54(B,
13345                                  C,
13346                                  D,
13347                                  E,
13348                                  F,
13349                                  G,
13350                                  H)
13351    ).
13352occurrence___5__14(A, B, C, D, E, F) :-
13353    occurrence___5__15(A, B, C, D, E, F).
13354occurrence___5__15(A, B, C, D, E, F) :-
13355    arg(2, F, G),
13356    setarg(2, F, active),
13357    (   G==not_stored_yet
13358    ->  nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
13359                  H),
13360        insert_ht(H, k(A, E), F),
13361        nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
13362                  I),
13363        J=[F|I],
13364        b_setval('$chr_store_global_ground_chr_translate____occurrence___5',
13365                 J),
13366        (   I=[K|_]
13367        ->  setarg(4, K, J)
13368        ;   true
13369        ),
13370        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
13371                  L),
13372        insert_ht(L, k(A, B, E), F),
13373        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
13374                  M),
13375        insert_ht(M, k(A, C, D), F),
13376        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13377                  N),
13378        insert_ht(N, k(A, B), F),
13379        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13380                  O),
13381        insert_ht(O, C, F),
13382        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13383                  P),
13384        insert_ht(P, k(A, C), F),
13385        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13386                  Q),
13387        insert_ht(Q, k(C, D), F),
13388        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13389                  R),
13390        insert_ht(R, A, F)
13391    ;   true
13392    ).
13393get_occurrence(A, B, C, D) :-
13394    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13395              E),
13396    lookup_ht(E, k(A, B), F),
13397    member(G, F),
13398    G=suspension(_, active, _, _, _, _, H, I, _),
13399    !,
13400    H=C,
13401    I=D.
13402get_occurrence(A, B, _, _) :-
13403    chr_error(internal,
13404              'get_occurrence: missing occurrence ~w:~w\n',
13405              [A, B]).
13406get_occurrence(A, B, C, D, E) :-
13407    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13408              F),
13409    lookup_ht(F, k(A, B), G),
13410    member(H, G),
13411    H=suspension(_, active, _, _, _, _, I, J, K),
13412    !,
13413    I=C,
13414    J=D,
13415    K=E.
13416get_occurrence(A, B, _, _, _) :-
13417    chr_error(internal,
13418              'get_occurrence: missing occurrence ~w:~w\n',
13419              [A, B]).
13420get_occurrence_from_id(A, B, C, D) :-
13421    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13422              E),
13423    lookup_ht(E, k(C, D), F),
13424    member(G, F),
13425    G=suspension(_, active, _, _, H, I, _, _, _),
13426    !,
13427    A=H,
13428    B=I.
13429get_occurrence_from_id(_, _, _, _) :-
13430    chr_error(internal, 'get_occurrence_from_id: missing occurrence ~w:~w\n', []).
13431max_occurrence(A, B) :-
13432    max_occurrence___2__0(A, B, _).
13433max_occurrence___2__0(A, B, C) :-
13434    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13435              D),
13436    lookup_ht(D, A, E),
13437    (   member(F, E),
13438        F=suspension(_, active, _, _, G),
13439        G>=B,
13440        !
13441    ;   !,
13442        max_occurrence___2__0__0__2(E, A, B, C)
13443    ).
13444max_occurrence___2__0__0__2([], A, B, C) :-
13445    max_occurrence___2__1(A, B, C).
13446max_occurrence___2__0__0__2([A|B], C, D, E) :-
13447    (   A=suspension(_, active, _, F, G),
13448        F==C,
13449        D>=G
13450    ->  setarg(2, A, removed),
13451        nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13452                  H),
13453        delete_ht(H, C, A),
13454        max_occurrence___2__0__0__2(B, C, D, E)
13455    ;   max_occurrence___2__0__0__2(B, C, D, E)
13456    ).
13457max_occurrence___2__0(A, B, C) :-
13458    max_occurrence___2__1(A, B, C).
13459max_occurrence___2__1(A, B, C) :-
13460    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
13461              D),
13462    lookup_ht(D, k(A, 0), E),
13463    !,
13464    C=suspension(F, not_stored_yet, t, A, B),
13465    'chr gen_id'(F),
13466    max_occurrence___2__1__0__5(E, A, B, C).
13467max_occurrence___2__1__0__5([], A, B, C) :-
13468    max_occurrence___2__2(A, B, C).
13469max_occurrence___2__1__0__5([A|B], C, D, E) :-
13470    (   A=suspension(_, active, _, F, G, H),
13471        F==C,
13472        H=0,
13473        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
13474                  I),
13475        lookup_ht(I, C, J)
13476    ->  max_occurrence___2__1__1__5(J,
13477                                    G,
13478                                    A,
13479                                    B,
13480                                    C,
13481                                    D,
13482                                    E)
13483    ;   max_occurrence___2__1__0__5(B, C, D, E)
13484    ).
13485max_occurrence___2__1__1__5([], _, _, A, B, C, D) :-
13486    max_occurrence___2__1__0__5(A, B, C, D).
13487max_occurrence___2__1__1__5([A|B], C, D, E, F, G, H) :-
13488    (   A=suspension(_, active, _, _, I, _, J, _, _),
13489        I==F,
13490        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
13491                  K),
13492        lookup_ht(K, J, L)
13493    ->  max_occurrence___2__1__2__5(L,
13494                                    J,
13495                                    A,
13496                                    B,
13497                                    C,
13498                                    D,
13499                                    E,
13500                                    F,
13501                                    G,
13502                                    H)
13503    ;   max_occurrence___2__1__1__5(B,
13504                                    C,
13505                                    D,
13506                                    E,
13507                                    F,
13508                                    G,
13509                                    H)
13510    ).
13511max_occurrence___2__1__2__5([], _, _, A, B, C, D, E, F, G) :-
13512    max_occurrence___2__1__1__5(A,
13513                                B,
13514                                C,
13515                                D,
13516                                E,
13517                                F,
13518                                G).
13519max_occurrence___2__1__2__5([A|B], C, D, E, F, G, H, I, J, K) :-
13520    (   A=suspension(_, active, _, _, _, _, L, M, _),
13521        A\==D,
13522        L==C,
13523        N=t(250, A, D, G, K),
13524        '$novel_production'(A, N),
13525        '$novel_production'(D, N),
13526        '$novel_production'(G, N),
13527        '$novel_production'(K, N),
13528        F=<J
13529    ->  '$extend_history'(K, N),
13530        arg(2, K, O),
13531        setarg(2, K, active),
13532        (   O==not_stored_yet
13533        ->  nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13534                      P),
13535            insert_ht(P, I, K)
13536        ;   true
13537        ),
13538        passive(C, M),
13539        (   K=suspension(_, active, _, _, _)
13540        ->  setarg(2, K, inactive),
13541            max_occurrence___2__1__2__5(B,
13542                                        C,
13543                                        D,
13544                                        E,
13545                                        F,
13546                                        G,
13547                                        H,
13548                                        I,
13549                                        J,
13550                                        K)
13551        ;   true
13552        )
13553    ;   max_occurrence___2__1__2__5(B,
13554                                    C,
13555                                    D,
13556                                    E,
13557                                    F,
13558                                    G,
13559                                    H,
13560                                    I,
13561                                    J,
13562                                    K)
13563    ).
13564max_occurrence___2__1(A, B, C) :-
13565    C=suspension(D, not_stored_yet, t, A, B),
13566    'chr gen_id'(D),
13567    max_occurrence___2__2(A, B, C).
13568max_occurrence___2__2(A, _, B) :-
13569    arg(2, B, C),
13570    setarg(2, B, active),
13571    (   C==not_stored_yet
13572    ->  nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13573                  D),
13574        insert_ht(D, A, B)
13575    ;   true
13576    ).
13577get_max_occurrence(A, B) :-
13578    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
13579              C),
13580    lookup_ht(C, A, D),
13581    member(E, D),
13582    E=suspension(_, active, _, _, F),
13583    !,
13584    B=F.
13585get_max_occurrence(A, _) :-
13586    chr_error(internal,
13587              'get_max_occurrence: missing max occurrence for ~w\n',
13588              [A]).
13589allocation_occurrence(A, B) :-
13590    allocation_occurrence___2__0(A, B, _).
13591allocation_occurrence___2__0(A, 0, B) :-
13592    !,
13593    B=suspension(C, active, t, A, 0),
13594    'chr gen_id'(C),
13595    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13596              D),
13597    insert_ht(D, A, B),
13598    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13599              E),
13600    insert_ht(E, k(A, 0), B),
13601    stored_in_guard_before_next_kept_occurrence(A, 0),
13602    (   B=suspension(_, active, _, _, _)
13603    ->  setarg(2, B, inactive),
13604        allocation_occurrence___2__1(A, 0, B)
13605    ;   true
13606    ).
13607allocation_occurrence___2__0(A, B, C) :-
13608    C=suspension(D, not_stored_yet, t, A, B),
13609    'chr gen_id'(D),
13610    allocation_occurrence___2__1(A, B, C).
13611allocation_occurrence___2__1(A, B, C) :-
13612    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
13613              D),
13614    lookup_ht(D, k(A, B), E),
13615    !,
13616    allocation_occurrence___2__1__0__2(E, A, B, C).
13617allocation_occurrence___2__1__0__2([], A, B, C) :-
13618    allocation_occurrence___2__2(A, B, C).
13619allocation_occurrence___2__1__0__2([A|B], C, D, E) :-
13620    (   A=suspension(_, active, _, _, F, G, H, I, J),
13621        F==C,
13622        G==D,
13623        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', K),
13624        lookup_ht(K, H, L)
13625    ->  allocation_occurrence___2__1__1__2(L,
13626                                           H,
13627                                           I,
13628                                           J,
13629                                           A,
13630                                           B,
13631                                           C,
13632                                           D,
13633                                           E)
13634    ;   allocation_occurrence___2__1__0__2(B, C, D, E)
13635    ).
13636allocation_occurrence___2__1__1__2([], _, _, _, _, A, B, C, D) :-
13637    allocation_occurrence___2__1__0__2(A, B, C, D).
13638allocation_occurrence___2__1__1__2([A|B], C, D, E, F, G, H, I, J) :-
13639    (   A=suspension(_, active, _, _, K, L),
13640        K==C,
13641        M=t(60, A, F, J),
13642        '$novel_production'(A, M),
13643        '$novel_production'(F, M),
13644        '$novel_production'(J, M)
13645    ->  '$extend_history'(J, M),
13646        arg(2, J, N),
13647        setarg(2, J, active),
13648        (   N==not_stored_yet
13649        ->  nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13650                      O),
13651            insert_ht(O, H, J),
13652            nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13653                      P),
13654            insert_ht(P, k(H, I), J)
13655        ;   true
13656        ),
13657        \+ is_passive(C, D),
13658        E==propagation,
13659        (   stored_in_guard_before_next_kept_occurrence(H, I)
13660        ->  true
13661        ;   L=pragma(rule([_|_], _, _, _), _, _, _, _)
13662        ->  is_observed(H, I)
13663        ;   is_least_occurrence(C)
13664        ->  is_observed(H, I)
13665        ;   true
13666        ),
13667        (   J=suspension(_, active, _, _, _)
13668        ->  setarg(2, J, inactive),
13669            allocation_occurrence___2__1__1__2(B,
13670                                               C,
13671                                               D,
13672                                               E,
13673                                               F,
13674                                               G,
13675                                               H,
13676                                               I,
13677                                               J)
13678        ;   true
13679        )
13680    ;   allocation_occurrence___2__1__1__2(B,
13681                                           C,
13682                                           D,
13683                                           E,
13684                                           F,
13685                                           G,
13686                                           H,
13687                                           I,
13688                                           J)
13689    ).
13690allocation_occurrence___2__1(A, B, C) :-
13691    allocation_occurrence___2__2(A, B, C).
13692allocation_occurrence___2__2(A, B, C) :-
13693    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', D),
13694    lookup_ht(D, A, E),
13695    !,
13696    allocation_occurrence___2__2__0__3(E, A, B, C).
13697allocation_occurrence___2__2__0__3([], A, B, C) :-
13698    allocation_occurrence___2__3(A, B, C).
13699allocation_occurrence___2__2__0__3([A|B], C, D, E) :-
13700    (   A=suspension(_, active, _, _, F, G, H, I, _),
13701        F==C,
13702        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
13703                  J),
13704        lookup_ht(J, H, K)
13705    ->  allocation_occurrence___2__2__1__3(K,
13706                                           G,
13707                                           H,
13708                                           I,
13709                                           A,
13710                                           B,
13711                                           C,
13712                                           D,
13713                                           E)
13714    ;   allocation_occurrence___2__2__0__3(B, C, D, E)
13715    ).
13716allocation_occurrence___2__2__1__3([], _, _, _, _, A, B, C, D) :-
13717    allocation_occurrence___2__2__0__3(A, B, C, D).
13718allocation_occurrence___2__2__1__3([A|B], C, D, E, F, G, H, I, J) :-
13719    (   A=suspension(_, active, K, L),
13720        K==D,
13721        L=[M|N],
13722        M==E,
13723        I>=C,
13724        ( ground(D),
13725          nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
13726                    O),
13727          lookup_ht(O, D, P)
13728        ),
13729        member(Q, P),
13730        Q=suspension(_, active, _, _, _, _),
13731        \+ may_trigger(H)
13732    ->  setarg(2, A, removed),
13733        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
13734                    R),
13735          delete_ht(R, k(D, [E|N]), A)
13736        ),
13737        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
13738                  S),
13739        delete_ht(S, D, A),
13740        arg(2, J, T),
13741        setarg(2, J, active),
13742        (   T==not_stored_yet
13743        ->  nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13744                      U),
13745            insert_ht(U, H, J),
13746            nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13747                      V),
13748            insert_ht(V, k(H, I), J)
13749        ;   true
13750        ),
13751        least_occurrence(D, N),
13752        (   J=suspension(_, active, _, _, _)
13753        ->  setarg(2, J, inactive),
13754            allocation_occurrence___2__2__1__3(B,
13755                                               C,
13756                                               D,
13757                                               E,
13758                                               F,
13759                                               G,
13760                                               H,
13761                                               I,
13762                                               J)
13763        ;   true
13764        )
13765    ;   allocation_occurrence___2__2__1__3(B,
13766                                           C,
13767                                           D,
13768                                           E,
13769                                           F,
13770                                           G,
13771                                           H,
13772                                           I,
13773                                           J)
13774    ).
13775allocation_occurrence___2__2(A, B, C) :-
13776    allocation_occurrence___2__3(A, B, C).
13777allocation_occurrence___2__3(A, B, C) :-
13778    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
13779              D),
13780    lookup_ht(D, A, E),
13781    !,
13782    allocation_occurrence___2__3__0__5(E, A, B, C).
13783allocation_occurrence___2__3__0__5([], A, B, C) :-
13784    allocation_occurrence___2__4(A, B, C).
13785allocation_occurrence___2__3__0__5([A|B], C, D, E) :-
13786    (   A=suspension(_, active, F, G, H, I),
13787        F==C,
13788        G>1,
13789        ( ground(C),
13790          ground(G),
13791          nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
13792                    J),
13793          lookup_ht(J, k(C, G), K)
13794        ),
13795        member(L, K),
13796        L=suspension(_, active, _, _, _, M, _, _, _),
13797        D>M
13798    ->  setarg(2, A, removed),
13799        ( nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
13800                    N),
13801          delete_ht(N, C, A)
13802        ),
13803        nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
13804                  O),
13805        delete_ht(O, k(C, G), A),
13806        arg(2, E, P),
13807        setarg(2, E, active),
13808        (   P==not_stored_yet
13809        ->  nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13810                      Q),
13811            insert_ht(Q, C, E),
13812            nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13813                      R),
13814            insert_ht(R, k(C, D), E)
13815        ;   true
13816        ),
13817        functional_dependency(C, 1, H, I),
13818        (   E=suspension(_, active, _, _, _)
13819        ->  setarg(2, E, inactive),
13820            allocation_occurrence___2__3__0__5(B,
13821                                               C,
13822                                               D,
13823                                               E)
13824        ;   true
13825        )
13826    ;   allocation_occurrence___2__3__0__5(B, C, D, E)
13827    ).
13828allocation_occurrence___2__3(A, B, C) :-
13829    allocation_occurrence___2__4(A, B, C).
13830allocation_occurrence___2__4(A, B, C) :-
13831    arg(2, C, D),
13832    setarg(2, C, active),
13833    (   D==not_stored_yet
13834    ->  nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13835                  E),
13836        insert_ht(E, A, C),
13837        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13838                  F),
13839        insert_ht(F, k(A, B), C)
13840    ;   true
13841    ).
13842get_allocation_occurrence(A, B) :-
13843    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13844              C),
13845    lookup_ht(C, A, D),
13846    member(E, D),
13847    E=suspension(_, active, _, _, F),
13848    !,
13849    B=F.
13850get_allocation_occurrence(_, A) :-
13851    chr_pp_flag(late_allocation, off),
13852    A=0.
13853rule(A, B) :-
13854    rule___2__0(A, B, _).
13855rule___2__0(A, B, C) :-
13856    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
13857    lookup_ht(D, A, E),
13858    !,
13859    C=suspension(F, not_stored_yet, t, _, A, B),
13860    'chr gen_id'(F),
13861    rule___2__0__0__1(E, A, B, C).
13862rule___2__0__0__1([], A, B, C) :-
13863    rule___2__1(A, B, C).
13864rule___2__0__0__1([A|B], C, D, E) :-
13865    (   A=suspension(_, active, _, _, F, G, H, I, J),
13866        H==C,
13867        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',
13868                  K),
13869        lookup_ht(K, k(F, G), L)
13870    ->  rule___2__0__1__1(L,
13871                          F,
13872                          G,
13873                          I,
13874                          J,
13875                          A,
13876                          B,
13877                          C,
13878                          D,
13879                          E)
13880    ;   rule___2__0__0__1(B, C, D, E)
13881    ).
13882rule___2__0__1__1([], _, _, _, _, _, A, B, C, D) :-
13883    rule___2__0__0__1(A, B, C, D).
13884rule___2__0__1__1([A|B], C, D, E, F, G, H, I, J, K) :-
13885    (   A=suspension(_, active, _, L, M),
13886        L==C,
13887        M==D,
13888        N=t(60, K, G, A),
13889        '$novel_production'(K, N),
13890        '$novel_production'(G, N),
13891        '$novel_production'(A, N)
13892    ->  '$extend_history'(K, N),
13893        arg(2, K, O),
13894        setarg(2, K, active),
13895        (   O==not_stored_yet
13896        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
13897                      P),
13898            Q=[K|P],
13899            b_setval('$chr_store_global_ground_chr_translate____rule___2',
13900                     Q),
13901            (   P=[R|_]
13902            ->  setarg(4, R, Q)
13903            ;   true
13904            ),
13905            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
13906                      S),
13907            insert_ht(S, I, K)
13908        ;   true
13909        ),
13910        \+ is_passive(I, E),
13911        F==propagation,
13912        (   stored_in_guard_before_next_kept_occurrence(C, D)
13913        ->  true
13914        ;   J=pragma(rule([_|_], _, _, _), _, _, _, _)
13915        ->  is_observed(C, D)
13916        ;   is_least_occurrence(I)
13917        ->  is_observed(C, D)
13918        ;   true
13919        ),
13920        (   K=suspension(_, active, _, _, _, _)
13921        ->  setarg(2, K, inactive),
13922            rule___2__0__1__1(B,
13923                              C,
13924                              D,
13925                              E,
13926                              F,
13927                              G,
13928                              H,
13929                              I,
13930                              J,
13931                              K)
13932        ;   true
13933        )
13934    ;   rule___2__0__1__1(B,
13935                          C,
13936                          D,
13937                          E,
13938                          F,
13939                          G,
13940                          H,
13941                          I,
13942                          J,
13943                          K)
13944    ).
13945rule___2__0(A, B, C) :-
13946    C=suspension(D, not_stored_yet, t, _, A, B),
13947    'chr gen_id'(D),
13948    rule___2__1(A, B, C).
13949rule___2__1(A, B, C) :-
13950    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
13951              D),
13952    lookup_ht(D, A, E),
13953    !,
13954    rule___2__1__0__2(E, A, B, C).
13955rule___2__1__0__2([], A, B, C) :-
13956    rule___2__2(A, B, C).
13957rule___2__1__0__2([A|B], C, D, E) :-
13958    (   A=suspension(_, active, F, G),
13959        F==C,
13960        G=[H|I],
13961        ( ground(C),
13962          ground(H),
13963          nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
13964                    J),
13965          lookup_ht(J, k(C, H), K)
13966        ),
13967        member(L, K),
13968        L=suspension(_, active, _, _, M, N, _, _, _),
13969        ( nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
13970                    O),
13971          lookup_ht(O, M, P)
13972        ),
13973        member(Q, P),
13974        Q=suspension(_, active, _, _, R),
13975        R>=N,
13976        \+ may_trigger(M)
13977    ->  setarg(2, A, removed),
13978        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
13979                    S),
13980          delete_ht(S, k(C, [H|I]), A)
13981        ),
13982        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
13983                  T),
13984        delete_ht(T, C, A),
13985        arg(2, E, U),
13986        setarg(2, E, active),
13987        (   U==not_stored_yet
13988        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
13989                      V),
13990            W=[E|V],
13991            b_setval('$chr_store_global_ground_chr_translate____rule___2',
13992                     W),
13993            (   V=[X|_]
13994            ->  setarg(4, X, W)
13995            ;   true
13996            ),
13997            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
13998                      Y),
13999            insert_ht(Y, C, E)
14000        ;   true
14001        ),
14002        least_occurrence(C, I),
14003        (   E=suspension(_, active, _, _, _, _)
14004        ->  setarg(2, E, inactive),
14005            rule___2__1__0__2(B, C, D, E)
14006        ;   true
14007        )
14008    ;   rule___2__1__0__2(B, C, D, E)
14009    ).
14010rule___2__1(A, B, C) :-
14011    rule___2__2(A, B, C).
14012rule___2__2(A, B, C) :-
14013    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14014              D),
14015    lookup_ht(D, A, E),
14016    !,
14017    rule___2__2__0__3(E, A, B, C).
14018rule___2__2__0__3([], A, B, C) :-
14019    rule___2__3(A, B, C).
14020rule___2__2__0__3([A|B], C, D, E) :-
14021    (   A=suspension(_, active, F, G),
14022        F==C,
14023        G=[H|I],
14024        ( ground(C),
14025          ground(H)
14026        ),
14027        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
14028                  J),
14029        lookup_ht(J, k(C, H), K),
14030        member(L, K),
14031        L=suspension(_, active, _, _, _)
14032    ->  setarg(2, A, removed),
14033        ( nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
14034                    M),
14035          delete_ht(M, k(C, [H|I]), A)
14036        ),
14037        nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14038                  N),
14039        delete_ht(N, C, A),
14040        arg(2, E, O),
14041        setarg(2, E, active),
14042        (   O==not_stored_yet
14043        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14044                      P),
14045            Q=[E|P],
14046            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14047                     Q),
14048            (   P=[R|_]
14049            ->  setarg(4, R, Q)
14050            ;   true
14051            ),
14052            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14053                      S),
14054            insert_ht(S, C, E)
14055        ;   true
14056        ),
14057        least_occurrence(C, I),
14058        (   E=suspension(_, active, _, _, _, _)
14059        ->  setarg(2, E, inactive),
14060            rule___2__2__0__3(B, C, D, E)
14061        ;   true
14062        )
14063    ;   rule___2__2__0__3(B, C, D, E)
14064    ).
14065rule___2__2(A, B, C) :-
14066    rule___2__3(A, B, C).
14067rule___2__3(A, B, C) :-
14068    B=pragma(rule([], _, _, _), ids([], D), _, _, _),
14069    !,
14070    arg(2, C, E),
14071    setarg(2, C, active),
14072    (   E==not_stored_yet
14073    ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2', F),
14074        G=[C|F],
14075        b_setval('$chr_store_global_ground_chr_translate____rule___2', G),
14076        (   F=[H|_]
14077        ->  setarg(4, H, G)
14078        ;   true
14079        ),
14080        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I),
14081        insert_ht(I, A, C)
14082    ;   true
14083    ),
14084    least_occurrence(A, D),
14085    (   C=suspension(_, active, _, _, _, _)
14086    ->  setarg(2, C, inactive),
14087        rule___2__4(A, B, C)
14088    ;   true
14089    ).
14090rule___2__3(A, B, C) :-
14091    rule___2__4(A, B, C).
14092rule___2__4(A, B, C) :-
14093    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14094              D),
14095    lookup_ht(D, A, E),
14096    member(F, E),
14097    F=suspension(_, active, _, _, _, G, H, I, J, _),
14098    B=pragma(rule(K, L, H, M), N, O, P, A),
14099    H\==true,
14100    append(J, I, Q),
14101    (   conj2list(H, R),
14102        append(Q, R, S),
14103        guard_entailment:entails_guard(S, fail)
14104    ->  T=fail
14105    ;   simplify_guard(H, M, Q, T, U)
14106    ),
14107    H\==T,
14108    !,
14109    setarg(2, F, removed),
14110    arg(4, F, V),
14111    (   var(V)
14112    ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
14113                  W),
14114        W=[_|X],
14115        b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
14116                 X),
14117        (   X=[Y|_]
14118        ->  setarg(4, Y, _)
14119        ;   true
14120        )
14121    ;   V=[_, _|X],
14122        setarg(2, V, X),
14123        (   X=[Y|_]
14124        ->  setarg(4, Y, V)
14125        ;   true
14126        )
14127    ),
14128    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14129              Z),
14130    delete_ht(Z, A, F),
14131    (   var(C)
14132    ->  true
14133    ;   arg(2, C, A1),
14134        setarg(2, C, removed),
14135        (   A1==not_stored_yet
14136        ->  true
14137        ;   arg(4, C, B1),
14138            (   var(B1)
14139            ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14140                          C1),
14141                C1=[_|D1],
14142                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14143                         D1),
14144                (   D1=[E1|_]
14145                ->  setarg(4, E1, _)
14146                ;   true
14147                )
14148            ;   B1=[_, _|D1],
14149                setarg(2, B1, D1),
14150                (   D1=[E1|_]
14151                ->  setarg(4, E1, B1)
14152                ;   true
14153                )
14154            ),
14155            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14156                      F1),
14157            delete_ht(F1, A, C)
14158        )
14159    ),
14160    rule(A,
14161         pragma(rule(K, L, T, U),
14162                N,
14163                O,
14164                P,
14165                A)),
14166    prev_guard_list(A, G, T, I, J, []).
14167rule___2__4(A, B, C) :-
14168    nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
14169              D),
14170    !,
14171    rule___2__4__0__10(D, A, B, C).
14172rule___2__4__0__10([], A, B, C) :-
14173    rule___2__5(A, B, C).
14174rule___2__4__0__10([A|B], C, D, E) :-
14175    (   A=suspension(_, active, _, _),
14176        F=t(174, E, A),
14177        '$novel_production'(E, F),
14178        '$novel_production'(A, F)
14179    ->  '$extend_history'(E, F),
14180        arg(2, E, G),
14181        setarg(2, E, active),
14182        (   G==not_stored_yet
14183        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14184                      H),
14185            I=[E|H],
14186            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14187                     I),
14188            (   H=[J|_]
14189            ->  setarg(4, J, I)
14190            ;   true
14191            ),
14192            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14193                      K),
14194            insert_ht(K, C, E)
14195        ;   true
14196        ),
14197        D=pragma(rule(L, M, _, _), _, _, _, _),
14198        append(L, M, N),
14199        make_head_matchings_explicit_(N, O, P),
14200        copy_term_nat(O-P, Q-R),
14201        make_head_matchings_explicit_memo_table(C, Q, R),
14202        (   E=suspension(_, active, _, _, _, _)
14203        ->  setarg(2, E, inactive),
14204            rule___2__4__0__10(B, C, D, E)
14205        ;   true
14206        )
14207    ;   rule___2__4__0__10(B, C, D, E)
14208    ).
14209rule___2__4(A, B, C) :-
14210    rule___2__5(A, B, C).
14211rule___2__5(A, B, C) :-
14212    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14213              D),
14214    lookup_ht(D, A, E),
14215    !,
14216    rule___2__5__0__11(E, A, B, C).
14217rule___2__5__0__11([], A, B, C) :-
14218    rule___2__6(A, B, C).
14219rule___2__5__0__11([A|B], C, D, E) :-
14220    (   A=suspension(_, active, _, _, F, _, G, H, I, _),
14221        F==C,
14222        J=t(178, A, E),
14223        '$novel_production'(A, J),
14224        '$novel_production'(E, J),
14225        chr_pp_flag(check_impossible_rules, on),
14226        D=pragma(rule(_, _, G, _), _, _, _, C),
14227        conj2list(G, K),
14228        append(I, H, L),
14229        append(L, K, M),
14230        guard_entailment:entails_guard(M, fail)
14231    ->  '$extend_history'(E, J),
14232        arg(2, E, N),
14233        setarg(2, E, active),
14234        (   N==not_stored_yet
14235        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14236                      O),
14237            P=[E|O],
14238            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14239                     P),
14240            (   O=[Q|_]
14241            ->  setarg(4, Q, P)
14242            ;   true
14243            ),
14244            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14245                      R),
14246            insert_ht(R, C, E)
14247        ;   true
14248        ),
14249        chr_warning(weird_program,
14250                    'Heads will never match or guard will always fail in ~@.\n\tThis rule will never fire!\n',
14251                    [format_rule(D)]),
14252        set_all_passive(C),
14253        (   E=suspension(_, active, _, _, _, _)
14254        ->  setarg(2, E, inactive),
14255            rule___2__5__0__11(B, C, D, E)
14256        ;   true
14257        )
14258    ;   rule___2__5__0__11(B, C, D, E)
14259    ).
14260rule___2__5(A, B, C) :-
14261    rule___2__6(A, B, C).
14262rule___2__6(A, B, C) :-
14263    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14264              D),
14265    lookup_ht(D, A, E),
14266    member(F, E),
14267    F=suspension(_, active, _, _, _, G, H, I, J, _),
14268    B=pragma(rule(K, L, H, M), N, O, P, A),
14269    simplify_heads(J, I, H, M, Q, R),
14270    Q\==[],
14271    extract_arguments(K, S),
14272    extract_arguments(L, T),
14273    extract_arguments(G, U),
14274    replace_some_heads(S,
14275                       T,
14276                       U,
14277                       Q,
14278                       V,
14279                       W,
14280                       H,
14281                       M,
14282                       X),
14283    substitute_arguments(K, V, Y),
14284    substitute_arguments(L, W, Z),
14285    append(R, X, A1),
14286    list2conj(A1, B1),
14287    C1=pragma(rule(Y, Z, H, (B1, M)), N, O, P, A),
14288    (   K\==Y
14289    ;   L\==Z
14290    ),
14291    !,
14292    (   var(C)
14293    ->  true
14294    ;   arg(2, C, D1),
14295        setarg(2, C, removed),
14296        (   D1==not_stored_yet
14297        ->  true
14298        ;   arg(4, C, E1),
14299            (   var(E1)
14300            ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14301                          F1),
14302                F1=[_|G1],
14303                b_setval('$chr_store_global_ground_chr_translate____rule___2',
14304                         G1),
14305                (   G1=[H1|_]
14306                ->  setarg(4, H1, _)
14307                ;   true
14308                )
14309            ;   E1=[_, _|G1],
14310                setarg(2, E1, G1),
14311                (   G1=[H1|_]
14312                ->  setarg(4, H1, E1)
14313                ;   true
14314                )
14315            ),
14316            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14317                      I1),
14318            delete_ht(I1, A, C)
14319        )
14320    ),
14321    rule(A, C1).
14322rule___2__6(A, B, C) :-
14323    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
14324    lookup_ht(D, A, E),
14325    !,
14326    rule___2__6__0__13(E, A, B, C).
14327rule___2__6__0__13([], A, B, C) :-
14328    rule___2__7(A, B, C).
14329rule___2__6__0__13([A|B], C, D, E) :-
14330    (   A=suspension(_, active, _, _, F, G, H, _, _),
14331        H==C,
14332        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
14333                  I),
14334        lookup_ht(I, k(F, C), J)
14335    ->  rule___2__6__1__13(J,
14336                           F,
14337                           G,
14338                           A,
14339                           B,
14340                           C,
14341                           D,
14342                           E)
14343    ;   rule___2__6__0__13(B, C, D, E)
14344    ).
14345rule___2__6__1__13([], _, _, _, A, B, C, D) :-
14346    rule___2__6__0__13(A, B, C, D).
14347rule___2__6__1__13([A|B], C, D, E, F, G, H, I) :-
14348    (   A=suspension(_, active, _, _, J, K, L, M, _),
14349        A\==E,
14350        J==C,
14351        L==G,
14352        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
14353                  N),
14354        lookup_ht(N, G, O)
14355    ->  rule___2__6__2__13(O,
14356                           K,
14357                           M,
14358                           A,
14359                           B,
14360                           C,
14361                           D,
14362                           E,
14363                           F,
14364                           G,
14365                           H,
14366                           I)
14367    ;   rule___2__6__1__13(B,
14368                           C,
14369                           D,
14370                           E,
14371                           F,
14372                           G,
14373                           H,
14374                           I)
14375    ).
14376rule___2__6__2__13([], _, _, _, A, B, C, D, E, F, G, H) :-
14377    rule___2__6__1__13(A,
14378                       B,
14379                       C,
14380                       D,
14381                       E,
14382                       F,
14383                       G,
14384                       H).
14385rule___2__6__2__13([A|B], C, D, E, F, G, H, I, J, K, L, M) :-
14386    (   A=suspension(_, active, _, _, N, _, _, _, _, _),
14387        N==K,
14388        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
14389                  O)
14390    ->  rule___2__6__3__13(O,
14391                           A,
14392                           B,
14393                           C,
14394                           D,
14395                           E,
14396                           F,
14397                           G,
14398                           H,
14399                           I,
14400                           J,
14401                           K,
14402                           L,
14403                           M)
14404    ;   rule___2__6__2__13(B,
14405                           C,
14406                           D,
14407                           E,
14408                           F,
14409                           G,
14410                           H,
14411                           I,
14412                           J,
14413                           K,
14414                           L,
14415                           M)
14416    ).
14417rule___2__6__3__13([], _, A, B, C, D, E, F, G, H, I, J, K, L) :-
14418    rule___2__6__2__13(A,
14419                       B,
14420                       C,
14421                       D,
14422                       E,
14423                       F,
14424                       G,
14425                       H,
14426                       I,
14427                       J,
14428                       K,
14429                       L).
14430rule___2__6__3__13([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O) :-
14431    (   A=suspension(_, active, _, P),
14432        E<J,
14433        chr_pp_flag(occurrence_subsumption, on),
14434        N=pragma(rule(Q, _, _, _), _, _, _, _),
14435        Q\==[],
14436        \+ tree_set_memberchk(I, P)
14437    ->  setarg(2, A, removed),
14438        arg(3, A, R),
14439        (   var(R)
14440        ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
14441                      S),
14442            S=[_|T],
14443            b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
14444                     T),
14445            (   T=[U|_]
14446            ->  setarg(3, U, _)
14447            ;   true
14448            )
14449        ;   R=[_, _|T],
14450            setarg(2, R, T),
14451            (   T=[U|_]
14452            ->  setarg(3, U, R)
14453            ;   true
14454            )
14455        ),
14456        arg(2, O, V),
14457        setarg(2, O, active),
14458        (   V==not_stored_yet
14459        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14460                      W),
14461            X=[O|W],
14462            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14463                     X),
14464            (   W=[Y|_]
14465            ->  setarg(4, Y, X)
14466            ;   true
14467            ),
14468            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14469                      Z),
14470            insert_ht(Z, M, O)
14471        ;   true
14472        ),
14473        first_occ_in_rule(M, I, E, F),
14474        tree_set_add(P, I, A1),
14475        multiple_occ_constraints_checked(A1),
14476        (   O=suspension(_, active, _, _, _, _)
14477        ->  setarg(2, O, inactive),
14478            rule___2__6__3__13(B,
14479                               C,
14480                               D,
14481                               E,
14482                               F,
14483                               G,
14484                               H,
14485                               I,
14486                               J,
14487                               K,
14488                               L,
14489                               M,
14490                               N,
14491                               O)
14492        ;   true
14493        )
14494    ;   rule___2__6__3__13(B,
14495                           C,
14496                           D,
14497                           E,
14498                           F,
14499                           G,
14500                           H,
14501                           I,
14502                           J,
14503                           K,
14504                           L,
14505                           M,
14506                           N,
14507                           O)
14508    ).
14509rule___2__6(A, B, C) :-
14510    rule___2__7(A, B, C).
14511rule___2__7(A, B, C) :-
14512    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', D),
14513    lookup_ht(D, A, E),
14514    !,
14515    rule___2__7__0__15(E, A, B, C).
14516rule___2__7__0__15([], A, B, C) :-
14517    rule___2__8(A, B, C).
14518rule___2__7__0__15([A|B], C, D, E) :-
14519    (   A=suspension(_, active, _, F, G),
14520        F==C,
14521        H=t(251, E, A),
14522        '$novel_production'(E, H),
14523        '$novel_production'(A, H),
14524        D=pragma(rule(_, _, _, _), ids([G|I], J), _, _, C)
14525    ->  '$extend_history'(E, H),
14526        arg(2, E, K),
14527        setarg(2, E, active),
14528        (   K==not_stored_yet
14529        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14530                      L),
14531            M=[E|L],
14532            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14533                     M),
14534            (   L=[N|_]
14535            ->  setarg(4, N, M)
14536            ;   true
14537            ),
14538            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14539                      O),
14540            insert_ht(O, C, E)
14541        ;   true
14542        ),
14543        append(I, J, P),
14544        check_all_passive(C, P),
14545        (   E=suspension(_, active, _, _, _, _)
14546        ->  setarg(2, E, inactive),
14547            rule___2__7__0__15(B, C, D, E)
14548        ;   true
14549        )
14550    ;   rule___2__7__0__15(B, C, D, E)
14551    ).
14552rule___2__7(A, B, C) :-
14553    rule___2__8(A, B, C).
14554rule___2__8(A, B, C) :-
14555    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', D),
14556    lookup_ht(D, A, E),
14557    !,
14558    rule___2__8__0__16(E, A, B, C).
14559rule___2__8__0__16([], A, B, C) :-
14560    rule___2__9(A, B, C).
14561rule___2__8__0__16([A|B], C, D, E) :-
14562    (   A=suspension(_, active, _, F, G),
14563        F==C,
14564        H=t(252, E, A),
14565        '$novel_production'(E, H),
14566        '$novel_production'(A, H),
14567        D=pragma(rule(_, _, _, _), ids([], [G|I]), _, _, C)
14568    ->  '$extend_history'(E, H),
14569        arg(2, E, J),
14570        setarg(2, E, active),
14571        (   J==not_stored_yet
14572        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14573                      K),
14574            L=[E|K],
14575            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14576                     L),
14577            (   K=[M|_]
14578            ->  setarg(4, M, L)
14579            ;   true
14580            ),
14581            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14582                      N),
14583            insert_ht(N, C, E)
14584        ;   true
14585        ),
14586        check_all_passive(C, I),
14587        (   E=suspension(_, active, _, _, _, _)
14588        ->  setarg(2, E, inactive),
14589            rule___2__8__0__16(B, C, D, E)
14590        ;   true
14591        )
14592    ;   rule___2__8__0__16(B, C, D, E)
14593    ).
14594rule___2__8(A, B, C) :-
14595    rule___2__9(A, B, C).
14596rule___2__9(A, B, C) :-
14597    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
14598              D),
14599    lookup_ht(D, k(A, []), E),
14600    !,
14601    rule___2__9__0__17(E, A, B, C).
14602rule___2__9__0__17([], A, B, C) :-
14603    rule___2__10(A, B, C).
14604rule___2__9__0__17([A|B], C, D, E) :-
14605    (   A=suspension(_, active, F, G),
14606        F==C,
14607        G=[]
14608    ->  setarg(2, A, removed),
14609        ( nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
14610                    H),
14611          delete_ht(H, k(C, []), A)
14612        ),
14613        nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
14614                  I),
14615        delete_ht(I, C, A),
14616        arg(2, E, J),
14617        setarg(2, E, active),
14618        (   J==not_stored_yet
14619        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14620                      K),
14621            L=[E|K],
14622            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14623                     L),
14624            (   K=[M|_]
14625            ->  setarg(4, M, L)
14626            ;   true
14627            ),
14628            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14629                      N),
14630            insert_ht(N, C, E)
14631        ;   true
14632        ),
14633        chr_warning(weird_program,
14634                    'All heads passive in ~@.\n\tThis rule never fires. Please check your program.\n',
14635                    [format_rule(D)]),
14636        (   E=suspension(_, active, _, _, _, _)
14637        ->  setarg(2, E, inactive),
14638            rule___2__9__0__17(B, C, D, E)
14639        ;   true
14640        )
14641    ;   rule___2__9__0__17(B, C, D, E)
14642    ).
14643rule___2__9(A, B, C) :-
14644    rule___2__10(A, B, C).
14645rule___2__10(A, B, C) :-
14646    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
14647    lookup_ht(D, A, E),
14648    !,
14649    rule___2__10__0__22(E, A, B, C).
14650rule___2__10__0__22([], A, B, C) :-
14651    rule___2__11(A, B, C).
14652rule___2__10__0__22([A|B], C, D, E) :-
14653    (   A=suspension(_, active, _, _, F, _, G, H, I),
14654        G==C,
14655        nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
14656                  J)
14657    ->  rule___2__10__1__22(J,
14658                            F,
14659                            H,
14660                            I,
14661                            A,
14662                            B,
14663                            C,
14664                            D,
14665                            E)
14666    ;   rule___2__10__0__22(B, C, D, E)
14667    ).
14668rule___2__10__1__22([], _, _, _, _, A, B, C, D) :-
14669    rule___2__10__0__22(A, B, C, D).
14670rule___2__10__1__22([A|B], C, D, E, F, G, H, I, J) :-
14671    (   A=suspension(_, active, _, _),
14672        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
14673                  K),
14674        lookup_ht(K, C, L)
14675    ->  rule___2__10__2__22(L,
14676                            A,
14677                            B,
14678                            C,
14679                            D,
14680                            E,
14681                            F,
14682                            G,
14683                            H,
14684                            I,
14685                            J)
14686    ;   rule___2__10__1__22(B,
14687                            C,
14688                            D,
14689                            E,
14690                            F,
14691                            G,
14692                            H,
14693                            I,
14694                            J)
14695    ).
14696rule___2__10__2__22([], _, A, B, C, D, E, F, G, H, I) :-
14697    rule___2__10__1__22(A,
14698                        B,
14699                        C,
14700                        D,
14701                        E,
14702                        F,
14703                        G,
14704                        H,
14705                        I).
14706rule___2__10__2__22([A|B], C, D, E, F, G, H, I, J, K, L) :-
14707    (   A=suspension(_, active, _, _, M, N),
14708        M==E,
14709        O=t(330, C, H, L, A),
14710        '$novel_production'(C, O),
14711        '$novel_production'(H, O),
14712        '$novel_production'(L, O),
14713        '$novel_production'(A, O)
14714    ->  '$extend_history'(L, O),
14715        arg(2, L, P),
14716        setarg(2, L, active),
14717        (   P==not_stored_yet
14718        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
14719                      Q),
14720            R=[L|Q],
14721            b_setval('$chr_store_global_ground_chr_translate____rule___2',
14722                     R),
14723            (   Q=[S|_]
14724            ->  setarg(4, S, R)
14725            ;   true
14726            ),
14727            nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',
14728                      T),
14729            insert_ht(T, J, L)
14730        ;   true
14731        ),
14732        K=pragma(rule(U, V, W, _), _, _, _, _),
14733        (   is_passive(J, F)
14734        ->  true
14735        ;   G==simplification
14736        ->  select(X, U, _),
14737            X=..[_|Y],
14738            term_variables(W, Z),
14739            partial_wake_args(Y, N, Z, E)
14740        ;   select(X, V, _),
14741            X=..[_|Y],
14742            term_variables(W, Z),
14743            partial_wake_args(Y, N, Z, E)
14744        ),
14745        (   L=suspension(_, active, _, _, _, _)
14746        ->  setarg(2, L, inactive),
14747            rule___2__10__2__22(B,
14748                                C,
14749                                D,
14750                                E,
14751                                F,
14752                                G,
14753                                H,
14754                                I,
14755                                J,
14756                                K,
14757                                L)
14758        ;   true
14759        )
14760    ;   rule___2__10__2__22(B,
14761                            C,
14762                            D,
14763                            E,
14764                            F,
14765                            G,
14766                            H,
14767                            I,
14768                            J,
14769                            K,
14770                            L)
14771    ).
14772rule___2__10(A, B, C) :-
14773    rule___2__11(A, B, C).
14774rule___2__11(A, _, B) :-
14775    arg(2, B, C),
14776    setarg(2, B, active),
14777    (   C==not_stored_yet
14778    ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2', D),
14779        E=[B|D],
14780        b_setval('$chr_store_global_ground_chr_translate____rule___2', E),
14781        (   D=[F|_]
14782        ->  setarg(4, F, E)
14783        ;   true
14784        ),
14785        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', G),
14786        insert_ht(G, A, B)
14787    ;   true
14788    ).
14789get_rule(A, B) :-
14790    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', C),
14791    lookup_ht(C, A, D),
14792    member(E, D),
14793    E=suspension(_, active, _, _, _, F),
14794    !,
14795    B=F.
14796get_rule(_, _) :-
14797    fail.
14798least_occurrence(A, [B|C]) :-
14799    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', D),
14800    lookup_ht(D, A, E),
14801    member(F, E),
14802    F=suspension(_, active, _, _, _, _),
14803    (   nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
14804                  G),
14805        lookup_ht(G, k(A, B), H),
14806        member(I, H),
14807        I=suspension(_, active, _, _, J, K, _, _, _),
14808        nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
14809                  L),
14810        lookup_ht(L, J, M),
14811        member(N, M),
14812        N=suspension(_, active, _, _, O),
14813        O>=K,
14814        \+ may_trigger(J),
14815        !,
14816        least_occurrence(A, C)
14817    ;   nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
14818                  P),
14819        lookup_ht(P, k(A, B), Q),
14820        member(R, Q),
14821        R=suspension(_, active, _, _, _),
14822        !,
14823        least_occurrence(A, C)
14824    ).
14825least_occurrence(A, B) :-
14826    C=suspension(D, active, A, B),
14827    'chr gen_id'(D),
14828    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
14829              E),
14830    insert_ht(E, k(A, B), C),
14831    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',
14832              F),
14833    insert_ht(F, A, C).
14834is_least_occurrence(A) :-
14835    nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',
14836              B),
14837    lookup_ht(B, k(A, []), C),
14838    member(D, C),
14839    D=suspension(_, active, _, _),
14840    !.
14841is_least_occurrence(_) :-
14842    fail.
14843stored_in_guard_lookahead(A, B) :-
14844    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
14845              C),
14846    lookup_ht(C, k(A, B), D),
14847    member(E, D),
14848    E=suspension(_, active, _, _, _, _, F, G, H),
14849    (   nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
14850                  I),
14851        lookup_ht(I, k(F, G), J),
14852        member(K, J),
14853        K=suspension(_, active, _, _, _),
14854        !,
14855        L is B+1,
14856        stored_in_guard_lookahead(A, L)
14857    ;   !,
14858        H==simplification,
14859        (   is_stored_in_guard(A, F)
14860        ->  true
14861        ;   M is B+1,
14862            stored_in_guard_lookahead(A, M)
14863        )
14864    ).
14865stored_in_guard_lookahead(_, _) :-
14866    fail.
14867constraint_index(A, B) :-
14868    C=suspension(D, active, A, B),
14869    'chr gen_id'(D),
14870    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
14871              E),
14872    insert_ht(E, B, C),
14873    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
14874              F),
14875    insert_ht(F, A, C).
14876get_constraint_index(A, B) :-
14877    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',
14878              C),
14879    lookup_ht(C, A, D),
14880    member(E, D),
14881    E=suspension(_, active, _, F),
14882    !,
14883    B=F.
14884get_constraint_index(_, _) :-
14885    fail.
14886get_indexed_constraint(A, B) :-
14887    nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',
14888              C),
14889    lookup_ht(C, A, D),
14890    member(E, D),
14891    E=suspension(_, active, F, _),
14892    !,
14893    B=F.
14894get_indexed_constraint(_, _) :-
14895    fail.
14896max_constraint_index(A) :-
14897    B=suspension(C, active, _, A),
14898    'chr gen_id'(C),
14899    nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
14900              D),
14901    E=[B|D],
14902    b_setval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
14903             E),
14904    (   D=[F|_]
14905    ->  setarg(3, F, E)
14906    ;   true
14907    ).
14908get_max_constraint_index(A) :-
14909    nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',
14910              B),
14911    member(C, B),
14912    C=suspension(_, active, _, D),
14913    !,
14914    A=D.
14915get_max_constraint_index(0).
14916identifier_size(A) :-
14917    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
14918              B),
14919    (   member(C, B),
14920        C=suspension(_, active, _, _),
14921        !
14922    ;   !,
14923        identifier_size___1__0__0__2(B, A)
14924    ).
14925identifier_size___1__0__0__2([], A) :-
14926    identifier_size___1__1(A).
14927identifier_size___1__0__0__2([A|B], C) :-
14928    (   A=suspension(_, active, _, _)
14929    ->  setarg(2, A, removed),
14930        arg(3, A, D),
14931        (   var(D)
14932        ->  nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
14933                      E),
14934            E=[_|F],
14935            b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
14936                     F),
14937            (   F=[G|_]
14938            ->  setarg(3, G, _)
14939            ;   true
14940            )
14941        ;   D=[_, _|F],
14942            setarg(2, D, F),
14943            (   F=[G|_]
14944            ->  setarg(3, G, D)
14945            ;   true
14946            )
14947        ),
14948        identifier_size___1__0__0__2(B, C)
14949    ;   identifier_size___1__0__0__2(B, C)
14950    ).
14951identifier_size(A) :-
14952    identifier_size___1__1(A).
14953identifier_size___1__1(A) :-
14954    B=suspension(C, active, _, A),
14955    'chr gen_id'(C),
14956    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
14957              D),
14958    E=[B|D],
14959    b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
14960             E),
14961    (   D=[F|_]
14962    ->  setarg(3, F, E)
14963    ;   true
14964    ).
14965get_identifier_size(A) :-
14966    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
14967              B),
14968    member(C, B),
14969    C=suspension(_, active, _, D),
14970    !,
14971    A=D.
14972get_identifier_size(1).
14973identifier_index(A, B, C) :-
14974    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
14975              D),
14976    lookup_ht(D, k(A, B), E),
14977    (   member(F, E),
14978        F=suspension(_, active, _, _, _),
14979        !
14980    ;   !,
14981        identifier_index___3__0__0__2(E, A, B, C)
14982    ).
14983identifier_index___3__0__0__2([], A, B, C) :-
14984    identifier_index___3__1(A, B, C).
14985identifier_index___3__0__0__2([A|B], C, D, E) :-
14986    (   A=suspension(_, active, F, G, _),
14987        F==C,
14988        G==D
14989    ->  setarg(2, A, removed),
14990        nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
14991                  H),
14992        delete_ht(H, k(C, D), A),
14993        identifier_index___3__0__0__2(B, C, D, E)
14994    ;   identifier_index___3__0__0__2(B, C, D, E)
14995    ).
14996identifier_index(A, B, C) :-
14997    identifier_index___3__1(A, B, C).
14998identifier_index___3__1(A, B, C) :-
14999    D=suspension(E, active, A, B, C),
15000    'chr gen_id'(E),
15001    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
15002              F),
15003    insert_ht(F, k(A, B), D).
15004get_identifier_index(A, B, C) :-
15005    nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',
15006              D),
15007    lookup_ht(D, k(A, B), E),
15008    member(F, E),
15009    F=suspension(_, active, _, _, G),
15010    !,
15011    C=G.
15012get_identifier_index(A, B, C) :-
15013    nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
15014              D),
15015    member(E, D),
15016    E=suspension(_, active, _, F),
15017    !,
15018    setarg(2, E, removed),
15019    arg(3, E, G),
15020    (   var(G)
15021    ->  nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',
15022                  H),
15023        H=[_|I],
15024        b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',
15025                 I),
15026        (   I=[J|_]
15027        ->  setarg(3, J, _)
15028        ;   true
15029        )
15030    ;   G=[_, _|I],
15031        setarg(2, G, I),
15032        (   I=[J|_]
15033        ->  setarg(3, J, G)
15034        ;   true
15035        )
15036    ),
15037    K is F+1,
15038    identifier_index(A, B, K),
15039    identifier_size(K),
15040    C=K.
15041get_identifier_index(A, B, C) :-
15042    identifier_index(A, B, 2),
15043    identifier_size(2),
15044    C=2.
15045type_indexed_identifier_size(A, B) :-
15046    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15047              C),
15048    lookup_ht(C, A, D),
15049    (   member(E, D),
15050        E=suspension(_, active, _, _),
15051        !
15052    ;   !,
15053        type_indexed_identifier_size___2__0__0__2(D, A, B)
15054    ).
15055type_indexed_identifier_size___2__0__0__2([], A, B) :-
15056    type_indexed_identifier_size___2__1(A, B).
15057type_indexed_identifier_size___2__0__0__2([A|B], C, D) :-
15058    (   A=suspension(_, active, E, _),
15059        E==C
15060    ->  setarg(2, A, removed),
15061        nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15062                  F),
15063        delete_ht(F, C, A),
15064        type_indexed_identifier_size___2__0__0__2(B, C, D)
15065    ;   type_indexed_identifier_size___2__0__0__2(B, C, D)
15066    ).
15067type_indexed_identifier_size(A, B) :-
15068    type_indexed_identifier_size___2__1(A, B).
15069type_indexed_identifier_size___2__1(A, B) :-
15070    C=suspension(D, active, A, B),
15071    'chr gen_id'(D),
15072    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15073              E),
15074    insert_ht(E, A, C).
15075get_type_indexed_identifier_size(A, B) :-
15076    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15077              C),
15078    lookup_ht(C, A, D),
15079    member(E, D),
15080    E=suspension(_, active, _, F),
15081    !,
15082    B=F.
15083get_type_indexed_identifier_size(_, 1).
15084type_indexed_identifier_index(A, B, C, D) :-
15085    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
15086              E),
15087    lookup_ht(E, k(B, C), F),
15088    (   member(G, F),
15089        G=suspension(_, active, _, _, _, _),
15090        !
15091    ;   !,
15092        type_indexed_identifier_index___4__0__0__2(F,
15093                                                   A,
15094                                                   B,
15095                                                   C,
15096                                                   D)
15097    ).
15098type_indexed_identifier_index___4__0__0__2([], A, B, C, D) :-
15099    type_indexed_identifier_index___4__1(A, B, C, D).
15100type_indexed_identifier_index___4__0__0__2([A|B], C, D, E, F) :-
15101    (   A=suspension(_, active, G, H, I, _),
15102        H==D,
15103        I==E
15104    ->  setarg(2, A, removed),
15105        ( nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
15106                    J),
15107          delete_ht(J, k(G, D, E), A)
15108        ),
15109        nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
15110                  K),
15111        delete_ht(K, k(D, E), A),
15112        type_indexed_identifier_index___4__0__0__2(B,
15113                                                   C,
15114                                                   D,
15115                                                   E,
15116                                                   F)
15117    ;   type_indexed_identifier_index___4__0__0__2(B,
15118                                                   C,
15119                                                   D,
15120                                                   E,
15121                                                   F)
15122    ).
15123type_indexed_identifier_index(A, B, C, D) :-
15124    type_indexed_identifier_index___4__1(A, B, C, D).
15125type_indexed_identifier_index___4__1(A, B, C, D) :-
15126    E=suspension(F, active, A, B, C, D),
15127    'chr gen_id'(F),
15128    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
15129              G),
15130    insert_ht(G, k(A, B, C), E),
15131    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',
15132              H),
15133    insert_ht(H, k(B, C), E).
15134get_type_indexed_identifier_index(A, B, C, D) :-
15135    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',
15136              E),
15137    lookup_ht(E, k(A, B, C), F),
15138    member(G, F),
15139    G=suspension(_, active, _, _, _, H),
15140    !,
15141    D=H.
15142get_type_indexed_identifier_index(A, B, C, D) :-
15143    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15144              E),
15145    lookup_ht(E, A, F),
15146    member(G, F),
15147    G=suspension(_, active, _, H),
15148    !,
15149    setarg(2, G, removed),
15150    nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',
15151              I),
15152    delete_ht(I, A, G),
15153    J is H+1,
15154    type_indexed_identifier_index(A, B, C, J),
15155    type_indexed_identifier_size(A, J),
15156    D=J.
15157get_type_indexed_identifier_index(A, B, C, D) :-
15158    type_indexed_identifier_index(A, B, C, 2),
15159    type_indexed_identifier_size(A, 2),
15160    D=2.
15161no_history(A) :-
15162    B=suspension(C, active, A),
15163    'chr gen_id'(C),
15164    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', D),
15165    insert_ht(D, A, B).
15166has_no_history(A) :-
15167    nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1', B),
15168    lookup_ht(B, A, C),
15169    member(D, C),
15170    D=suspension(_, active, _),
15171    !.
15172has_no_history(_) :-
15173    fail.
15174history(A, B, C) :-
15175    history___3__0(A, B, C, _).
15176history___3__0(A, B, C, D) :-
15177    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', E),
15178    lookup_ht(E, A, F),
15179    !,
15180    D=suspension(G, not_stored_yet, t, A, B, C),
15181    'chr gen_id'(G),
15182    history___3__0__0__1(F, A, B, C, D).
15183history___3__0__0__1([], A, B, C, D) :-
15184    history___3__1(A, B, C, D).
15185history___3__0__0__1([A|B], C, D, E, F) :-
15186    (   A=suspension(_, active, _, G, _, _),
15187        G==C,
15188        H=t(95, F, A),
15189        '$novel_production'(F, H),
15190        '$novel_production'(A, H)
15191    ->  '$extend_history'(F, H),
15192        arg(2, F, I),
15193        setarg(2, F, active),
15194        (   I==not_stored_yet
15195        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15196                                                                          J)
15197            ->  nb_getval(J, K),
15198                b_setval(J, [F|K])
15199            ;   true
15200            ),
15201            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15202                      L),
15203            insert_ht(L, D, F),
15204            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15205                      M),
15206            insert_ht(M, C, F)
15207        ;   true
15208        ),
15209        chr_error(syntax,
15210                  'Only one pragma history allowed per rule (rule number ~w)\n',
15211                  [C]),
15212        (   F=suspension(_, active, _, _, _, _)
15213        ->  setarg(2, F, inactive),
15214            history___3__0__0__1(B, C, D, E, F)
15215        ;   true
15216        )
15217    ;   history___3__0__0__1(B, C, D, E, F)
15218    ).
15219history___3__0(A, B, C, D) :-
15220    D=suspension(E, not_stored_yet, t, A, B, C),
15221    'chr gen_id'(E),
15222    history___3__1(A, B, C, D).
15223history___3__1(A, B, C, D) :-
15224    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', E),
15225    lookup_ht(E, A, F),
15226    !,
15227    history___3__1__0__2(F, A, B, C, D).
15228history___3__1__0__2([], A, B, C, D) :-
15229    history___3__2(A, B, C, D).
15230history___3__1__0__2([A|B], C, D, E, F) :-
15231    (   A=suspension(_, active, _, G, _, _),
15232        G==C,
15233        H=t(95, A, F),
15234        '$novel_production'(A, H),
15235        '$novel_production'(F, H)
15236    ->  '$extend_history'(F, H),
15237        arg(2, F, I),
15238        setarg(2, F, active),
15239        (   I==not_stored_yet
15240        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15241                                                                          J)
15242            ->  nb_getval(J, K),
15243                b_setval(J, [F|K])
15244            ;   true
15245            ),
15246            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15247                      L),
15248            insert_ht(L, D, F),
15249            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15250                      M),
15251            insert_ht(M, C, F)
15252        ;   true
15253        ),
15254        chr_error(syntax,
15255                  'Only one pragma history allowed per rule (rule number ~w)\n',
15256                  [C]),
15257        (   F=suspension(_, active, _, _, _, _)
15258        ->  setarg(2, F, inactive),
15259            history___3__1__0__2(B, C, D, E, F)
15260        ;   true
15261        )
15262    ;   history___3__1__0__2(B, C, D, E, F)
15263    ).
15264history___3__1(A, B, C, D) :-
15265    history___3__2(A, B, C, D).
15266history___3__2(A, B, C, D) :-
15267    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', E),
15268    lookup_ht(E, B, F),
15269    !,
15270    history___3__2__0__3(F, A, B, C, D).
15271history___3__2__0__3([], A, B, C, D) :-
15272    history___3__3(A, B, C, D).
15273history___3__2__0__3([A|B], C, D, E, F) :-
15274    (   A=suspension(_, active, _, G, H, I),
15275        H==D,
15276        J=t(96, F, A),
15277        '$novel_production'(F, J),
15278        '$novel_production'(A, J)
15279    ->  '$extend_history'(F, J),
15280        arg(2, F, K),
15281        setarg(2, F, active),
15282        (   K==not_stored_yet
15283        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15284                                                                          L)
15285            ->  nb_getval(L, M),
15286                b_setval(L, [F|M])
15287            ;   true
15288            ),
15289            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15290                      N),
15291            insert_ht(N, D, F),
15292            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15293                      O),
15294            insert_ht(O, C, F)
15295        ;   true
15296        ),
15297        length(E, P),
15298        length(I, Q),
15299        (   P\==Q
15300        ->  chr_error(syntax,
15301                      'The history named ~w does not always range over an equal amount of occurrences.\n',
15302                      [D])
15303        ;   test_named_history_id_pairs(C, E, G, I)
15304        ),
15305        (   F=suspension(_, active, _, _, _, _)
15306        ->  setarg(2, F, inactive),
15307            history___3__2__0__3(B, C, D, E, F)
15308        ;   true
15309        )
15310    ;   history___3__2__0__3(B, C, D, E, F)
15311    ).
15312history___3__2(A, B, C, D) :-
15313    history___3__3(A, B, C, D).
15314history___3__3(A, B, C, D) :-
15315    nb_getval('$chr_store_multi_hash_chr_translate____history___3-2', E),
15316    lookup_ht(E, B, F),
15317    !,
15318    history___3__3__0__4(F, A, B, C, D).
15319history___3__3__0__4([], A, B, C, D) :-
15320    history___3__4(A, B, C, D).
15321history___3__3__0__4([A|B], C, D, E, F) :-
15322    (   A=suspension(_, active, _, G, H, I),
15323        H==D,
15324        J=t(96, A, F),
15325        '$novel_production'(A, J),
15326        '$novel_production'(F, J)
15327    ->  '$extend_history'(F, J),
15328        arg(2, F, K),
15329        setarg(2, F, active),
15330        (   K==not_stored_yet
15331        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15332                                                                          L)
15333            ->  nb_getval(L, M),
15334                b_setval(L, [F|M])
15335            ;   true
15336            ),
15337            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15338                      N),
15339            insert_ht(N, D, F),
15340            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15341                      O),
15342            insert_ht(O, C, F)
15343        ;   true
15344        ),
15345        length(I, P),
15346        length(E, Q),
15347        (   P\==Q
15348        ->  chr_error(syntax,
15349                      'The history named ~w does not always range over an equal amount of occurrences.\n',
15350                      [D])
15351        ;   test_named_history_id_pairs(G, I, C, E)
15352        ),
15353        (   F=suspension(_, active, _, _, _, _)
15354        ->  setarg(2, F, inactive),
15355            history___3__3__0__4(B, C, D, E, F)
15356        ;   true
15357        )
15358    ;   history___3__3__0__4(B, C, D, E, F)
15359    ).
15360history___3__3(A, B, C, D) :-
15361    history___3__4(A, B, C, D).
15362history___3__4(A, B, [], C) :-
15363    nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
15364              D),
15365    !,
15366    history___3__4__0__6(D, A, B, [], C).
15367history___3__4__0__6([], A, B, C, D) :-
15368    history___3__5(A, B, C, D).
15369history___3__4__0__6([A|B], C, D, E, F) :-
15370    (   A=suspension(_, active, _, _),
15371        G=t(142, A, F),
15372        '$novel_production'(A, G),
15373        '$novel_production'(F, G)
15374    ->  '$extend_history'(F, G),
15375        arg(2, F, H),
15376        setarg(2, F, active),
15377        (   H==not_stored_yet
15378        ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(E,
15379                                                                          I)
15380            ->  nb_getval(I, J),
15381                b_setval(I, [F|J])
15382            ;   true
15383            ),
15384            nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15385                      K),
15386            insert_ht(K, D, F),
15387            nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15388                      L),
15389            insert_ht(L, C, F)
15390        ;   true
15391        ),
15392        generate_empty_named_history_initialisation(D),
15393        (   F=suspension(_, active, _, _, _, _)
15394        ->  setarg(2, F, inactive),
15395            history___3__4__0__6(B, C, D, E, F)
15396        ;   true
15397        )
15398    ;   history___3__4__0__6(B, C, D, E, F)
15399    ).
15400history___3__4(A, B, C, D) :-
15401    history___3__5(A, B, C, D).
15402history___3__5(A, B, C, D) :-
15403    arg(2, D, E),
15404    setarg(2, D, active),
15405    (   E==not_stored_yet
15406    ->  (   '$chr_store_constants_chr_translate____history___3___[3]'(C,
15407                                                                      F)
15408        ->  nb_getval(F, G),
15409            b_setval(F, [D|G])
15410        ;   true
15411        ),
15412        nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',
15413                  H),
15414        insert_ht(H, B, D),
15415        nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',
15416                  I),
15417        insert_ht(I, A, D)
15418    ;   true
15419    ).
15420named_history(A, B, C) :-
15421    ground(A),
15422    nb_getval('$chr_store_multi_hash_chr_translate____history___3-1', D),
15423    lookup_ht(D, A, E),
15424    member(F, E),
15425    F=suspension(_, active, _, _, G, H),
15426    !,
15427    B=G,
15428    C=H.
15429named_history(_, _, _) :-
15430    fail.
15431test_named_history_id_pair(A, B, C, D) :-
15432    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',
15433              E),
15434    lookup_ht(E, k(A, B), F),
15435    member(G, F),
15436    G=suspension(_, active, _, _, H, _, _, _, _),
15437    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
15438              I),
15439    lookup_ht(I, k(H, C, D), J),
15440    member(K, J),
15441    K=suspension(_, active, _, _, _, _, _, _, _),
15442    K\==G,
15443    !.
15444test_named_history_id_pair(A, _, B, _) :-
15445    chr_error(syntax,
15446              'Occurrences of shared history in rules number ~w and ~w do not correspond\n',
15447              [B, A]).
15448indexing_spec(A, B) :-
15449    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15450              C),
15451    lookup_ht(C, A, D),
15452    member(E, D),
15453    E=suspension(_, active, _, F),
15454    !,
15455    setarg(2, E, removed),
15456    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15457              G),
15458    delete_ht(G, A, E),
15459    append(B, F, H),
15460    indexing_spec(A, H).
15461indexing_spec(A, B) :-
15462    C=suspension(D, active, A, B),
15463    'chr gen_id'(D),
15464    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15465              E),
15466    insert_ht(E, A, C).
15467get_indexing_spec(A, B) :-
15468    nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',
15469              C),
15470    lookup_ht(C, A, D),
15471    member(E, D),
15472    E=suspension(_, active, _, F),
15473    !,
15474    B=F.
15475get_indexing_spec(_, []).
15476observation_analysis(A) :-
15477    observation_analysis___1__0(A, _).
15478observation_analysis___1__0(A, B) :-
15479    nb_getval('$chr_store_global_ground_chr_translate____rule___2', C),
15480    !,
15481    B=suspension(D, not_stored_yet, _, A),
15482    'chr gen_id'(D),
15483    observation_analysis___1__0__0__1(C, A, B).
15484observation_analysis___1__0__0__1([], A, B) :-
15485    observation_analysis___1__1(A, B).
15486observation_analysis___1__0__0__1([A|B], C, D) :-
15487    (   A=suspension(_, active, _, _, E, F)
15488    ->  F=pragma(rule(_, _, G, H), _, _, _, _),
15489        (   chr_pp_flag(store_in_guards, on)
15490        ->  observation_analysis(E, G, guard, C)
15491        ;   true
15492        ),
15493        observation_analysis(E, H, body, C),
15494        observation_analysis___1__0__0__1(B, C, D)
15495    ;   observation_analysis___1__0__0__1(B, C, D)
15496    ).
15497observation_analysis___1__0(A, B) :-
15498    B=suspension(C, not_stored_yet, _, A),
15499    'chr gen_id'(C),
15500    observation_analysis___1__1(A, B).
15501observation_analysis___1__1(_, A) :-
15502    (   var(A)
15503    ->  true
15504    ;   arg(2, A, B),
15505        setarg(2, A, removed),
15506        (   B==not_stored_yet
15507        ->  true
15508        ;   arg(3, A, C),
15509            (   var(C)
15510            ->  nb_getval('$chr_store_global_ground_chr_translate____observation_analysis___1',
15511                          D),
15512                D=[_|E],
15513                b_setval('$chr_store_global_ground_chr_translate____observation_analysis___1',
15514                         E),
15515                (   E=[F|_]
15516                ->  setarg(3, F, _)
15517                ;   true
15518                )
15519            ;   C=[_, _|E],
15520                setarg(2, C, E),
15521                (   E=[F|_]
15522                ->  setarg(3, F, C)
15523                ;   true
15524                )
15525            )
15526        )
15527    ).
15528spawns(A, B, C) :-
15529    spawns___3__0(A, B, C, _).
15530spawns___3__0(A, B, C, _) :-
15531    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', D),
15532    lookup_ht(D, k(A, B, C), E),
15533    member(F, E),
15534    F=suspension(_, active, _, _, _, _, _),
15535    !.
15536spawns___3__0(A, body, B, _) :-
15537    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', C),
15538    lookup_ht(C, k(A, guard, B), D),
15539    member(E, D),
15540    E=suspension(_, active, _, _, _, _, _),
15541    !.
15542spawns___3__0(A, guard, B, C) :-
15543    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123', D),
15544    lookup_ht(D, k(A, body, B), E),
15545    !,
15546    spawns___3__0__0__4(E, A, guard, B, C).
15547spawns___3__0__0__4([], A, B, C, D) :-
15548    spawns___3__1(A, B, C, D).
15549spawns___3__0__0__4([A|B], C, D, E, F) :-
15550    (   A=suspension(_, active, _, _, G, H, I),
15551        G==C,
15552        H=body,
15553        I==E
15554    ->  setarg(2, A, removed),
15555        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15556                    J),
15557          delete_ht(J, k(C, E), A)
15558        ),
15559        ( arg(4, A, K),
15560          (   var(K)
15561          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15562                        L),
15563              L=[_|M],
15564              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15565                       M),
15566              (   M=[N|_]
15567              ->  setarg(4, N, _)
15568              ;   true
15569              )
15570          ;   K=[_, _|M],
15571              setarg(2, K, M),
15572              (   M=[N|_]
15573              ->  setarg(4, N, K)
15574              ;   true
15575              )
15576          )
15577        ),
15578        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15579                    O),
15580          delete_ht(O, k(C, body), A)
15581        ),
15582        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15583                    P),
15584          delete_ht(P, C, A)
15585        ),
15586        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15587                    Q),
15588          delete_ht(Q, E, A)
15589        ),
15590        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15591                  R),
15592        delete_ht(R, k(C, body, E), A),
15593        spawns___3__0__0__4(B, C, D, E, F)
15594    ;   spawns___3__0__0__4(B, C, D, E, F)
15595    ).
15596spawns___3__0(A, B, C, D) :-
15597    spawns___3__1(A, B, C, D).
15598spawns___3__1(A, B, C, D) :-
15599    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
15600              E),
15601    lookup_ht(E, k(A, B), F),
15602    member(G, F),
15603    G=suspension(_, active, _, _),
15604    !,
15605    (   var(D)
15606    ->  true
15607    ;   arg(2, D, H),
15608        setarg(2, D, removed),
15609        (   H==not_stored_yet
15610        ->  true
15611        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15612                      I),
15613            delete_ht(I, k(A, C), D),
15614            arg(4, D, J),
15615            (   var(J)
15616            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15617                          K),
15618                K=[_|L],
15619                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15620                         L),
15621                (   L=[M|_]
15622                ->  setarg(4, M, _)
15623                ;   true
15624                )
15625            ;   J=[_, _|L],
15626                setarg(2, J, L),
15627                (   L=[M|_]
15628                ->  setarg(4, M, J)
15629                ;   true
15630                )
15631            ),
15632            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15633                      N),
15634            delete_ht(N, k(A, B), D),
15635            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15636                      O),
15637            delete_ht(O, A, D),
15638            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15639                      P),
15640            delete_ht(P, C, D),
15641            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15642                      Q),
15643            delete_ht(Q, k(A, B, C), D)
15644        )
15645    ).
15646spawns___3__1(A, body, B, C) :-
15647    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
15648              D),
15649    lookup_ht(D, k(A, guard), E),
15650    member(F, E),
15651    F=suspension(_, active, _, _),
15652    !,
15653    (   var(C)
15654    ->  true
15655    ;   arg(2, C, G),
15656        setarg(2, C, removed),
15657        (   G==not_stored_yet
15658        ->  true
15659        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15660                      H),
15661            delete_ht(H, k(A, B), C),
15662            arg(4, C, I),
15663            (   var(I)
15664            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15665                          J),
15666                J=[_|K],
15667                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15668                         K),
15669                (   K=[L|_]
15670                ->  setarg(4, L, _)
15671                ;   true
15672                )
15673            ;   I=[_, _|K],
15674                setarg(2, I, K),
15675                (   K=[L|_]
15676                ->  setarg(4, L, I)
15677                ;   true
15678                )
15679            ),
15680            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15681                      M),
15682            delete_ht(M, k(A, body), C),
15683            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15684                      N),
15685            delete_ht(N, A, C),
15686            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15687                      O),
15688            delete_ht(O, B, C),
15689            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15690                      P),
15691            delete_ht(P, k(A, body, B), C)
15692        )
15693    ).
15694spawns___3__1(A, B, C, D) :-
15695    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
15696              E),
15697    lookup_ht(E, k(A, B), F),
15698    member(G, F),
15699    G=suspension(_, active, _, _, _, _),
15700    may_trigger(C),
15701    !,
15702    (   var(D)
15703    ->  true
15704    ;   arg(2, D, H),
15705        setarg(2, D, removed),
15706        (   H==not_stored_yet
15707        ->  true
15708        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15709                      I),
15710            delete_ht(I, k(A, C), D),
15711            arg(4, D, J),
15712            (   var(J)
15713            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15714                          K),
15715                K=[_|L],
15716                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15717                         L),
15718                (   L=[M|_]
15719                ->  setarg(4, M, _)
15720                ;   true
15721                )
15722            ;   J=[_, _|L],
15723                setarg(2, J, L),
15724                (   L=[M|_]
15725                ->  setarg(4, M, J)
15726                ;   true
15727                )
15728            ),
15729            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15730                      N),
15731            delete_ht(N, k(A, B), D),
15732            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15733                      O),
15734            delete_ht(O, A, D),
15735            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15736                      P),
15737            delete_ht(P, C, D),
15738            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15739                      Q),
15740            delete_ht(Q, k(A, B, C), D)
15741        )
15742    ).
15743spawns___3__1(A, body, B, C) :-
15744    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
15745              D),
15746    lookup_ht(D, k(A, guard), E),
15747    member(F, E),
15748    F=suspension(_, active, _, _, _, _),
15749    may_trigger(B),
15750    !,
15751    (   var(C)
15752    ->  true
15753    ;   arg(2, C, G),
15754        setarg(2, C, removed),
15755        (   G==not_stored_yet
15756        ->  true
15757        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15758                      H),
15759            delete_ht(H, k(A, B), C),
15760            arg(4, C, I),
15761            (   var(I)
15762            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15763                          J),
15764                J=[_|K],
15765                b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15766                         K),
15767                (   K=[L|_]
15768                ->  setarg(4, L, _)
15769                ;   true
15770                )
15771            ;   I=[_, _|K],
15772                setarg(2, I, K),
15773                (   K=[L|_]
15774                ->  setarg(4, L, I)
15775                ;   true
15776                )
15777            ),
15778            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15779                      M),
15780            delete_ht(M, k(A, body), C),
15781            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15782                      N),
15783            delete_ht(N, A, C),
15784            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15785                      O),
15786            delete_ht(O, B, C),
15787            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15788                      P),
15789            delete_ht(P, k(A, body, B), C)
15790        )
15791    ).
15792spawns___3__1(A, B, C, D) :-
15793    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', E),
15794    lookup_ht(E, C, F),
15795    (   member(G, F),
15796        G=suspension(_, active, _, _, _, _, H, I, _),
15797        (   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
15798                      J),
15799            lookup_ht(J, H, K),
15800            member(L, K),
15801            L=suspension(_, active, _, _),
15802            \+ is_passive(H, I),
15803            !,
15804            (   var(D)
15805            ->  true
15806            ;   arg(2, D, M),
15807                setarg(2, D, removed),
15808                (   M==not_stored_yet
15809                ->  true
15810                ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15811                              N),
15812                    delete_ht(N, k(A, C), D),
15813                    arg(4, D, O),
15814                    (   var(O)
15815                    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15816                                  P),
15817                        P=[_|Q],
15818                        b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15819                                 Q),
15820                        (   Q=[R|_]
15821                        ->  setarg(4, R, _)
15822                        ;   true
15823                        )
15824                    ;   O=[_, _|Q],
15825                        setarg(2, O, Q),
15826                        (   Q=[R|_]
15827                        ->  setarg(4, R, O)
15828                        ;   true
15829                        )
15830                    ),
15831                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15832                              S),
15833                    delete_ht(S, k(A, B), D),
15834                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15835                              T),
15836                    delete_ht(T, A, D),
15837                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15838                              U),
15839                    delete_ht(U, C, D),
15840                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15841                              V),
15842                    delete_ht(V, k(A, B, C), D)
15843                )
15844            ),
15845            spawns_all(A, B)
15846        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
15847                      W),
15848            lookup_ht(W, H, X),
15849            member(Y, X),
15850            Y=suspension(_, active, _, _, _, _),
15851            may_trigger(C),
15852            \+ is_passive(H, I),
15853            !,
15854            (   var(D)
15855            ->  true
15856            ;   arg(2, D, Z),
15857                setarg(2, D, removed),
15858                (   Z==not_stored_yet
15859                ->  true
15860                ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15861                              A1),
15862                    delete_ht(A1, k(A, C), D),
15863                    arg(4, D, B1),
15864                    (   var(B1)
15865                    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15866                                  C1),
15867                        C1=[_|D1],
15868                        b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15869                                 D1),
15870                        (   D1=[E1|_]
15871                        ->  setarg(4, E1, _)
15872                        ;   true
15873                        )
15874                    ;   B1=[_, _|D1],
15875                        setarg(2, B1, D1),
15876                        (   D1=[E1|_]
15877                        ->  setarg(4, E1, B1)
15878                        ;   true
15879                        )
15880                    ),
15881                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15882                              F1),
15883                    delete_ht(F1, k(A, B), D),
15884                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15885                              G1),
15886                    delete_ht(G1, A, D),
15887                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15888                              H1),
15889                    delete_ht(H1, C, D),
15890                    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15891                              I1),
15892                    delete_ht(I1, k(A, B, C), D)
15893                )
15894            ),
15895            spawns_all_triggers(A, B)
15896        )
15897    ;   !,
15898        D=suspension(J1, not_stored_yet, t, _, A, B, C),
15899        'chr gen_id'(J1),
15900        spawns___3__1__0__11(F, A, B, C, D)
15901    ).
15902spawns___3__1__0__11([], A, B, C, D) :-
15903    spawns___3__2(A, B, C, D).
15904spawns___3__1__0__11([A|B], C, D, E, F) :-
15905    (   A=suspension(_, active, _, _, G, _, H, I, _),
15906        G==E,
15907        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
15908                  J),
15909        lookup_ht(J, H, K)
15910    ->  spawns___3__1__1__11(K,
15911                             H,
15912                             I,
15913                             A,
15914                             B,
15915                             C,
15916                             D,
15917                             E,
15918                             F)
15919    ;   spawns___3__1__0__11(B, C, D, E, F)
15920    ).
15921spawns___3__1__1__11([], _, _, _, A, B, C, D, E) :-
15922    spawns___3__1__0__11(A, B, C, D, E).
15923spawns___3__1__1__11([A|B], C, D, E, F, G, H, I, J) :-
15924    (   A=suspension(_, active, _, _, K, _),
15925        K==C,
15926        L=t(123, A, E, J),
15927        '$novel_production'(A, L),
15928        '$novel_production'(J, L),
15929        \+ may_trigger(I),
15930        \+ is_passive(C, D)
15931    ->  '$extend_history'(J, L),
15932        arg(2, J, M),
15933        setarg(2, J, active),
15934        (   M==not_stored_yet
15935        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
15936                      N),
15937            insert_ht(N, k(G, I), J),
15938            nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
15939                      O),
15940            P=[J|O],
15941            b_setval('$chr_store_global_ground_chr_translate____spawns___3',
15942                     P),
15943            (   O=[Q|_]
15944            ->  setarg(4, Q, P)
15945            ;   true
15946            ),
15947            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
15948                      R),
15949            insert_ht(R, k(G, H), J),
15950            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
15951                      S),
15952            insert_ht(S, G, J),
15953            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
15954                      T),
15955            insert_ht(T, I, J),
15956            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
15957                      U),
15958            insert_ht(U, k(G, H, I), J)
15959        ;   true
15960        ),
15961        spawns_all_triggers(G, H),
15962        (   J=suspension(_, active, _, _, _, _, _)
15963        ->  setarg(2, J, inactive),
15964            spawns___3__1__1__11(B,
15965                                 C,
15966                                 D,
15967                                 E,
15968                                 F,
15969                                 G,
15970                                 H,
15971                                 I,
15972                                 J)
15973        ;   true
15974        )
15975    ;   spawns___3__1__1__11(B,
15976                             C,
15977                             D,
15978                             E,
15979                             F,
15980                             G,
15981                             H,
15982                             I,
15983                             J)
15984    ).
15985spawns___3__1(A, B, C, D) :-
15986    D=suspension(E, not_stored_yet, t, _, A, B, C),
15987    'chr gen_id'(E),
15988    spawns___3__2(A, B, C, D).
15989spawns___3__2(A, B, C, D) :-
15990    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', E),
15991    lookup_ht(E, A, F),
15992    !,
15993    spawns___3__2__0__12(F, A, B, C, D).
15994spawns___3__2__0__12([], A, B, C, D) :-
15995    spawns___3__3(A, B, C, D).
15996spawns___3__2__0__12([A|B], C, D, E, F) :-
15997    (   A=suspension(_, active, _, _, G, _, H, I, _),
15998        H==C,
15999        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', J),
16000        lookup_ht(J, G, K)
16001    ->  spawns___3__2__1__12(K,
16002                             G,
16003                             I,
16004                             A,
16005                             B,
16006                             C,
16007                             D,
16008                             E,
16009                             F)
16010    ;   spawns___3__2__0__12(B, C, D, E, F)
16011    ).
16012spawns___3__2__1__12([], _, _, _, A, B, C, D, E) :-
16013    spawns___3__2__0__12(A, B, C, D, E).
16014spawns___3__2__1__12([A|B], C, D, E, F, G, H, I, J) :-
16015    (   A=suspension(_, active, _, _, K, L, M),
16016        M==C,
16017        N=t(124, J, E, A),
16018        '$novel_production'(J, N),
16019        '$novel_production'(A, N),
16020        K\==G,
16021        C\==I,
16022        \+ is_passive(G, D)
16023    ->  '$extend_history'(J, N),
16024        arg(2, J, O),
16025        setarg(2, J, active),
16026        (   O==not_stored_yet
16027        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16028                      P),
16029            insert_ht(P, k(G, I), J),
16030            nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16031                      Q),
16032            R=[J|Q],
16033            b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16034                     R),
16035            (   Q=[S|_]
16036            ->  setarg(4, S, R)
16037            ;   true
16038            ),
16039            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16040                      T),
16041            insert_ht(T, k(G, H), J),
16042            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16043                      U),
16044            insert_ht(U, G, J),
16045            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16046                      V),
16047            insert_ht(V, I, J),
16048            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16049                      W),
16050            insert_ht(W, k(G, H, I), J)
16051        ;   true
16052        ),
16053        spawns(K, L, I),
16054        (   J=suspension(_, active, _, _, _, _, _)
16055        ->  setarg(2, J, inactive),
16056            spawns___3__2__1__12(B,
16057                                 C,
16058                                 D,
16059                                 E,
16060                                 F,
16061                                 G,
16062                                 H,
16063                                 I,
16064                                 J)
16065        ;   true
16066        )
16067    ;   spawns___3__2__1__12(B,
16068                             C,
16069                             D,
16070                             E,
16071                             F,
16072                             G,
16073                             H,
16074                             I,
16075                             J)
16076    ).
16077spawns___3__2(A, B, C, D) :-
16078    spawns___3__3(A, B, C, D).
16079spawns___3__3(A, B, C, D) :-
16080    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', E),
16081    lookup_ht(E, C, F),
16082    !,
16083    spawns___3__3__0__13(F, A, B, C, D).
16084spawns___3__3__0__13([], A, B, C, D) :-
16085    spawns___3__4(A, B, C, D).
16086spawns___3__3__0__13([A|B], C, D, E, F) :-
16087    (   A=suspension(_, active, _, _, G, _, H, I, _),
16088        G==E,
16089        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1', J),
16090        lookup_ht(J, H, K)
16091    ->  spawns___3__3__1__13(K,
16092                             H,
16093                             I,
16094                             A,
16095                             B,
16096                             C,
16097                             D,
16098                             E,
16099                             F)
16100    ;   spawns___3__3__0__13(B, C, D, E, F)
16101    ).
16102spawns___3__3__1__13([], _, _, _, A, B, C, D, E) :-
16103    spawns___3__3__0__13(A, B, C, D, E).
16104spawns___3__3__1__13([A|B], C, D, E, F, G, H, I, J) :-
16105    (   A=suspension(_, active, _, _, K, _, L),
16106        K==C,
16107        M=t(124, A, E, J),
16108        '$novel_production'(A, M),
16109        '$novel_production'(J, M),
16110        G\==C,
16111        I\==L,
16112        \+ is_passive(C, D)
16113    ->  '$extend_history'(J, M),
16114        arg(2, J, N),
16115        setarg(2, J, active),
16116        (   N==not_stored_yet
16117        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16118                      O),
16119            insert_ht(O, k(G, I), J),
16120            nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16121                      P),
16122            Q=[J|P],
16123            b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16124                     Q),
16125            (   P=[R|_]
16126            ->  setarg(4, R, Q)
16127            ;   true
16128            ),
16129            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16130                      S),
16131            insert_ht(S, k(G, H), J),
16132            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16133                      T),
16134            insert_ht(T, G, J),
16135            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16136                      U),
16137            insert_ht(U, I, J),
16138            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16139                      V),
16140            insert_ht(V, k(G, H, I), J)
16141        ;   true
16142        ),
16143        spawns(G, H, L),
16144        (   J=suspension(_, active, _, _, _, _, _)
16145        ->  setarg(2, J, inactive),
16146            spawns___3__3__1__13(B,
16147                                 C,
16148                                 D,
16149                                 E,
16150                                 F,
16151                                 G,
16152                                 H,
16153                                 I,
16154                                 J)
16155        ;   true
16156        )
16157    ;   spawns___3__3__1__13(B,
16158                             C,
16159                             D,
16160                             E,
16161                             F,
16162                             G,
16163                             H,
16164                             I,
16165                             J)
16166    ).
16167spawns___3__3(A, B, C, D) :-
16168    spawns___3__4(A, B, C, D).
16169spawns___3__4(A, B, C, D) :-
16170    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', E),
16171    lookup_ht(E, A, F),
16172    !,
16173    spawns___3__4__0__14(F, A, B, C, D).
16174spawns___3__4__0__14([], A, B, C, D) :-
16175    spawns___3__5(A, B, C, D).
16176spawns___3__4__0__14([A|B], C, D, E, F) :-
16177    (   A=suspension(_, active, _, _, G, _, H, I, _),
16178        H==C,
16179        nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16180                  J)
16181    ->  spawns___3__4__1__14(J,
16182                             G,
16183                             I,
16184                             A,
16185                             B,
16186                             C,
16187                             D,
16188                             E,
16189                             F)
16190    ;   spawns___3__4__0__14(B, C, D, E, F)
16191    ).
16192spawns___3__4__1__14([], _, _, _, A, B, C, D, E) :-
16193    spawns___3__4__0__14(A, B, C, D, E).
16194spawns___3__4__1__14([A|B], C, D, E, F, G, H, I, J) :-
16195    (   A=suspension(_, active, _, _, K, L),
16196        M=t(125, J, E, A),
16197        '$novel_production'(J, M),
16198        '$novel_production'(A, M),
16199        \+ is_passive(G, D),
16200        may_trigger(C),
16201        \+ may_trigger(I)
16202    ->  '$extend_history'(J, M),
16203        arg(2, J, N),
16204        setarg(2, J, active),
16205        (   N==not_stored_yet
16206        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16207                      O),
16208            insert_ht(O, k(G, I), J),
16209            nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16210                      P),
16211            Q=[J|P],
16212            b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16213                     Q),
16214            (   P=[R|_]
16215            ->  setarg(4, R, Q)
16216            ;   true
16217            ),
16218            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16219                      S),
16220            insert_ht(S, k(G, H), J),
16221            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16222                      T),
16223            insert_ht(T, G, J),
16224            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16225                      U),
16226            insert_ht(U, I, J),
16227            nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16228                      V),
16229            insert_ht(V, k(G, H, I), J)
16230        ;   true
16231        ),
16232        spawns(K, L, I),
16233        (   J=suspension(_, active, _, _, _, _, _)
16234        ->  setarg(2, J, inactive),
16235            spawns___3__4__1__14(B,
16236                                 C,
16237                                 D,
16238                                 E,
16239                                 F,
16240                                 G,
16241                                 H,
16242                                 I,
16243                                 J)
16244        ;   true
16245        )
16246    ;   spawns___3__4__1__14(B,
16247                             C,
16248                             D,
16249                             E,
16250                             F,
16251                             G,
16252                             H,
16253                             I,
16254                             J)
16255    ).
16256spawns___3__4(A, B, C, D) :-
16257    spawns___3__5(A, B, C, D).
16258spawns___3__5(A, B, C, D) :-
16259    arg(2, D, E),
16260    setarg(2, D, active),
16261    (   E==not_stored_yet
16262    ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16263                  F),
16264        insert_ht(F, k(A, C), D),
16265        nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16266                  G),
16267        H=[D|G],
16268        b_setval('$chr_store_global_ground_chr_translate____spawns___3', H),
16269        (   G=[I|_]
16270        ->  setarg(4, I, H)
16271        ;   true
16272        ),
16273        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16274                  J),
16275        insert_ht(J, k(A, B), D),
16276        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16277                  K),
16278        insert_ht(K, A, D),
16279        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16280                  L),
16281        insert_ht(L, C, D),
16282        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16283                  M),
16284        insert_ht(M, k(A, B, C), D)
16285    ;   true
16286    ).
16287spawns_all(A, B) :-
16288    spawns_all___2__0(A, B, _).
16289spawns_all___2__0(A, B, _) :-
16290    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16291              C),
16292    lookup_ht(C, k(A, B), D),
16293    member(E, D),
16294    E=suspension(_, active, _, _),
16295    !.
16296spawns_all___2__0(A, body, _) :-
16297    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16298              B),
16299    lookup_ht(B, k(A, guard), C),
16300    member(D, C),
16301    D=suspension(_, active, _, _),
16302    !.
16303spawns_all___2__0(A, guard, B) :-
16304    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16305              C),
16306    lookup_ht(C, k(A, body), D),
16307    !,
16308    spawns_all___2__0__0__4(D, A, guard, B).
16309spawns_all___2__0__0__4([], A, B, C) :-
16310    spawns_all___2__1(A, B, C).
16311spawns_all___2__0__0__4([A|B], C, D, E) :-
16312    (   A=suspension(_, active, F, G),
16313        F==C,
16314        G=body
16315    ->  setarg(2, A, removed),
16316        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16317                    H),
16318          delete_ht(H, C, A)
16319        ),
16320        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16321                  I),
16322        delete_ht(I, k(C, body), A),
16323        spawns_all___2__0__0__4(B, C, D, E)
16324    ;   spawns_all___2__0__0__4(B, C, D, E)
16325    ).
16326spawns_all___2__0(A, B, C) :-
16327    spawns_all___2__1(A, B, C).
16328spawns_all___2__1(A, B, C) :-
16329    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', D),
16330    lookup_ht(D, k(A, B), E),
16331    !,
16332    spawns_all___2__1__0__5(E, A, B, C).
16333spawns_all___2__1__0__5([], A, B, C) :-
16334    spawns_all___2__2(A, B, C).
16335spawns_all___2__1__0__5([A|B], C, D, E) :-
16336    (   A=suspension(_, active, _, _, F, G, H),
16337        F==C,
16338        G==D
16339    ->  setarg(2, A, removed),
16340        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16341                    I),
16342          delete_ht(I, k(C, H), A)
16343        ),
16344        ( arg(4, A, J),
16345          (   var(J)
16346          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16347                        K),
16348              K=[_|L],
16349              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16350                       L),
16351              (   L=[M|_]
16352              ->  setarg(4, M, _)
16353              ;   true
16354              )
16355          ;   J=[_, _|L],
16356              setarg(2, J, L),
16357              (   L=[M|_]
16358              ->  setarg(4, M, J)
16359              ;   true
16360              )
16361          )
16362        ),
16363        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16364                    N),
16365          delete_ht(N, k(C, D), A)
16366        ),
16367        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16368                    O),
16369          delete_ht(O, C, A)
16370        ),
16371        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16372                    P),
16373          delete_ht(P, H, A)
16374        ),
16375        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16376                  Q),
16377        delete_ht(Q, k(C, D, H), A),
16378        spawns_all___2__1__0__5(B, C, D, E)
16379    ;   spawns_all___2__1__0__5(B, C, D, E)
16380    ).
16381spawns_all___2__1(A, B, C) :-
16382    spawns_all___2__2(A, B, C).
16383spawns_all___2__2(A, guard, B) :-
16384    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', C),
16385    lookup_ht(C, k(A, body), D),
16386    !,
16387    spawns_all___2__2__0__6(D, A, guard, B).
16388spawns_all___2__2__0__6([], A, B, C) :-
16389    spawns_all___2__3(A, B, C).
16390spawns_all___2__2__0__6([A|B], C, D, E) :-
16391    (   A=suspension(_, active, _, _, F, G, H),
16392        F==C,
16393        G=body
16394    ->  setarg(2, A, removed),
16395        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16396                    I),
16397          delete_ht(I, k(C, H), A)
16398        ),
16399        ( arg(4, A, J),
16400          (   var(J)
16401          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16402                        K),
16403              K=[_|L],
16404              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16405                       L),
16406              (   L=[M|_]
16407              ->  setarg(4, M, _)
16408              ;   true
16409              )
16410          ;   J=[_, _|L],
16411              setarg(2, J, L),
16412              (   L=[M|_]
16413              ->  setarg(4, M, J)
16414              ;   true
16415              )
16416          )
16417        ),
16418        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16419                    N),
16420          delete_ht(N, k(C, body), A)
16421        ),
16422        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16423                    O),
16424          delete_ht(O, C, A)
16425        ),
16426        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16427                    P),
16428          delete_ht(P, H, A)
16429        ),
16430        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16431                  Q),
16432        delete_ht(Q, k(C, body, H), A),
16433        spawns_all___2__2__0__6(B, C, D, E)
16434    ;   spawns_all___2__2__0__6(B, C, D, E)
16435    ).
16436spawns_all___2__2(A, B, C) :-
16437    spawns_all___2__3(A, B, C).
16438spawns_all___2__3(A, B, C) :-
16439    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16440              D),
16441    lookup_ht(D, k(A, B), E),
16442    !,
16443    spawns_all___2__3__0__7(E, A, B, C).
16444spawns_all___2__3__0__7([], A, B, C) :-
16445    spawns_all___2__4(A, B, C).
16446spawns_all___2__3__0__7([A|B], C, D, E) :-
16447    (   A=suspension(_, active, _, _, F, G),
16448        F==C,
16449        G==D
16450    ->  setarg(2, A, removed),
16451        ( arg(4, A, H),
16452          (   var(H)
16453          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16454                        I),
16455              I=[_|J],
16456              b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16457                       J),
16458              (   J=[K|_]
16459              ->  setarg(4, K, _)
16460              ;   true
16461              )
16462          ;   H=[_, _|J],
16463              setarg(2, H, J),
16464              (   J=[K|_]
16465              ->  setarg(4, K, H)
16466              ;   true
16467              )
16468          )
16469        ),
16470        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16471                    L),
16472          delete_ht(L, C, A)
16473        ),
16474        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16475                  M),
16476        delete_ht(M, k(C, D), A),
16477        spawns_all___2__3__0__7(B, C, D, E)
16478    ;   spawns_all___2__3__0__7(B, C, D, E)
16479    ).
16480spawns_all___2__3(A, B, C) :-
16481    spawns_all___2__4(A, B, C).
16482spawns_all___2__4(A, guard, B) :-
16483    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16484              C),
16485    lookup_ht(C, k(A, body), D),
16486    !,
16487    spawns_all___2__4__0__8(D, A, guard, B).
16488spawns_all___2__4__0__8([], A, B, C) :-
16489    spawns_all___2__5(A, B, C).
16490spawns_all___2__4__0__8([A|B], C, D, E) :-
16491    (   A=suspension(_, active, _, _, F, G),
16492        F==C,
16493        G=body
16494    ->  setarg(2, A, removed),
16495        ( arg(4, A, H),
16496          (   var(H)
16497          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16498                        I),
16499              I=[_|J],
16500              b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16501                       J),
16502              (   J=[K|_]
16503              ->  setarg(4, K, _)
16504              ;   true
16505              )
16506          ;   H=[_, _|J],
16507              setarg(2, H, J),
16508              (   J=[K|_]
16509              ->  setarg(4, K, H)
16510              ;   true
16511              )
16512          )
16513        ),
16514        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16515                    L),
16516          delete_ht(L, C, A)
16517        ),
16518        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16519                  M),
16520        delete_ht(M, k(C, body), A),
16521        spawns_all___2__4__0__8(B, C, D, E)
16522    ;   spawns_all___2__4__0__8(B, C, D, E)
16523    ).
16524spawns_all___2__4(A, B, C) :-
16525    spawns_all___2__5(A, B, C).
16526spawns_all___2__5(A, B, C) :-
16527    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
16528    lookup_ht(D, A, E),
16529    !,
16530    C=suspension(F, not_stored_yet, A, B),
16531    'chr gen_id'(F),
16532    spawns_all___2__5__0__9(E, A, B, C).
16533spawns_all___2__5__0__9([], A, B, C) :-
16534    spawns_all___2__6(A, B, C).
16535spawns_all___2__5__0__9([A|B], C, D, E) :-
16536    (   A=suspension(_, active, _, _, F, _, G, H, _),
16537        G==C,
16538        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', I),
16539        lookup_ht(I, F, J)
16540    ->  spawns_all___2__5__1__9(J,
16541                                F,
16542                                H,
16543                                A,
16544                                B,
16545                                C,
16546                                D,
16547                                E)
16548    ;   spawns_all___2__5__0__9(B, C, D, E)
16549    ).
16550spawns_all___2__5__1__9([], _, _, _, A, B, C, D) :-
16551    spawns_all___2__5__0__9(A, B, C, D).
16552spawns_all___2__5__1__9([A|B], C, D, E, F, G, H, I) :-
16553    (   A=suspension(_, active, _, _, J, K, L),
16554        L==C,
16555        \+ is_passive(G, D)
16556    ->  setarg(2, A, removed),
16557        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16558                    M),
16559          delete_ht(M, k(J, C), A)
16560        ),
16561        ( arg(4, A, N),
16562          (   var(N)
16563          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16564                        O),
16565              O=[_|P],
16566              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16567                       P),
16568              (   P=[Q|_]
16569              ->  setarg(4, Q, _)
16570              ;   true
16571              )
16572          ;   N=[_, _|P],
16573              setarg(2, N, P),
16574              (   P=[Q|_]
16575              ->  setarg(4, Q, N)
16576              ;   true
16577              )
16578          )
16579        ),
16580        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16581                    R),
16582          delete_ht(R, k(J, K), A)
16583        ),
16584        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16585                    S),
16586          delete_ht(S, J, A)
16587        ),
16588        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16589                    T),
16590          delete_ht(T, C, A)
16591        ),
16592        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16593                  U),
16594        delete_ht(U, k(J, K, C), A),
16595        arg(2, I, V),
16596        setarg(2, I, active),
16597        (   V==not_stored_yet
16598        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16599                      W),
16600            insert_ht(W, G, I),
16601            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16602                      X),
16603            insert_ht(X, k(G, H), I)
16604        ;   true
16605        ),
16606        spawns_all(J, K),
16607        (   I=suspension(_, active, _, _)
16608        ->  setarg(2, I, inactive),
16609            spawns_all___2__5__1__9(B,
16610                                    C,
16611                                    D,
16612                                    E,
16613                                    F,
16614                                    G,
16615                                    H,
16616                                    I)
16617        ;   true
16618        )
16619    ;   spawns_all___2__5__1__9(B,
16620                                C,
16621                                D,
16622                                E,
16623                                F,
16624                                G,
16625                                H,
16626                                I)
16627    ).
16628spawns_all___2__5(A, B, C) :-
16629    C=suspension(D, not_stored_yet, A, B),
16630    'chr gen_id'(D),
16631    spawns_all___2__6(A, B, C).
16632spawns_all___2__6(A, B, C) :-
16633    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
16634    lookup_ht(D, A, E),
16635    !,
16636    spawns_all___2__6__0__10(E, A, B, C).
16637spawns_all___2__6__0__10([], A, B, C) :-
16638    spawns_all___2__7(A, B, C).
16639spawns_all___2__6__0__10([A|B], C, D, E) :-
16640    (   A=suspension(_, active, _, _, F, _, G, H, _),
16641        G==C,
16642        \+ \+ spawns_all_triggers_implies_spawns_all,
16643        \+ is_passive(C, H),
16644        may_trigger(F)
16645    ->  arg(2, E, I),
16646        setarg(2, E, active),
16647        (   I==not_stored_yet
16648        ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16649                      J),
16650            insert_ht(J, C, E),
16651            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16652                      K),
16653            insert_ht(K, k(C, D), E)
16654        ;   true
16655        ),
16656        spawns_all_triggers_implies_spawns_all,
16657        (   E=suspension(_, active, _, _)
16658        ->  setarg(2, E, inactive),
16659            spawns_all___2__6__0__10(B, C, D, E)
16660        ;   true
16661        )
16662    ;   spawns_all___2__6__0__10(B, C, D, E)
16663    ).
16664spawns_all___2__6(A, B, C) :-
16665    spawns_all___2__7(A, B, C).
16666spawns_all___2__7(A, B, C) :-
16667    arg(2, C, D),
16668    setarg(2, C, active),
16669    (   D==not_stored_yet
16670    ->  nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
16671                  E),
16672        insert_ht(E, A, C),
16673        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16674                  F),
16675        insert_ht(F, k(A, B), C)
16676    ;   true
16677    ).
16678spawns_all_triggers(A, B) :-
16679    spawns_all_triggers___2__0(A, B, _).
16680spawns_all_triggers___2__0(A, B, _) :-
16681    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16682              C),
16683    lookup_ht(C, k(A, B), D),
16684    member(E, D),
16685    E=suspension(_, active, _, _, _, _),
16686    !.
16687spawns_all_triggers___2__0(A, body, _) :-
16688    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16689              B),
16690    lookup_ht(B, k(A, guard), C),
16691    member(D, C),
16692    D=suspension(_, active, _, _, _, _),
16693    !.
16694spawns_all_triggers___2__0(A, guard, B) :-
16695    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16696              C),
16697    lookup_ht(C, k(A, body), D),
16698    !,
16699    spawns_all_triggers___2__0__0__4(D, A, guard, B).
16700spawns_all_triggers___2__0__0__4([], A, B, C) :-
16701    spawns_all_triggers___2__1(A, B, C).
16702spawns_all_triggers___2__0__0__4([A|B], C, D, E) :-
16703    (   A=suspension(_, active, _, _, F, G),
16704        F==C,
16705        G=body
16706    ->  setarg(2, A, removed),
16707        ( arg(4, A, H),
16708          (   var(H)
16709          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16710                        I),
16711              I=[_|J],
16712              b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16713                       J),
16714              (   J=[K|_]
16715              ->  setarg(4, K, _)
16716              ;   true
16717              )
16718          ;   H=[_, _|J],
16719              setarg(2, H, J),
16720              (   J=[K|_]
16721              ->  setarg(4, K, H)
16722              ;   true
16723              )
16724          )
16725        ),
16726        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16727                    L),
16728          delete_ht(L, C, A)
16729        ),
16730        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16731                  M),
16732        delete_ht(M, k(C, body), A),
16733        spawns_all_triggers___2__0__0__4(B, C, D, E)
16734    ;   spawns_all_triggers___2__0__0__4(B, C, D, E)
16735    ).
16736spawns_all_triggers___2__0(A, B, C) :-
16737    spawns_all_triggers___2__1(A, B, C).
16738spawns_all_triggers___2__1(A, B, C) :-
16739    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16740              D),
16741    lookup_ht(D, k(A, B), E),
16742    member(F, E),
16743    F=suspension(_, active, _, _),
16744    !,
16745    (   var(C)
16746    ->  true
16747    ;   arg(2, C, G),
16748        setarg(2, C, removed),
16749        (   G==not_stored_yet
16750        ->  true
16751        ;   arg(4, C, H),
16752            (   var(H)
16753            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16754                          I),
16755                I=[_|J],
16756                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16757                         J),
16758                (   J=[K|_]
16759                ->  setarg(4, K, _)
16760                ;   true
16761                )
16762            ;   H=[_, _|J],
16763                setarg(2, H, J),
16764                (   J=[K|_]
16765                ->  setarg(4, K, H)
16766                ;   true
16767                )
16768            ),
16769            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16770                      L),
16771            delete_ht(L, A, C),
16772            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16773                      M),
16774            delete_ht(M, k(A, B), C)
16775        )
16776    ).
16777spawns_all_triggers___2__1(A, body, B) :-
16778    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
16779              C),
16780    lookup_ht(C, k(A, guard), D),
16781    member(E, D),
16782    E=suspension(_, active, _, _),
16783    !,
16784    (   var(B)
16785    ->  true
16786    ;   arg(2, B, F),
16787        setarg(2, B, removed),
16788        (   F==not_stored_yet
16789        ->  true
16790        ;   arg(4, B, G),
16791            (   var(G)
16792            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16793                          H),
16794                H=[_|I],
16795                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16796                         I),
16797                (   I=[J|_]
16798                ->  setarg(4, J, _)
16799                ;   true
16800                )
16801            ;   G=[_, _|I],
16802                setarg(2, G, I),
16803                (   I=[J|_]
16804                ->  setarg(4, J, G)
16805                ;   true
16806                )
16807            ),
16808            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16809                      K),
16810            delete_ht(K, A, B),
16811            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16812                      L),
16813            delete_ht(L, k(A, body), B)
16814        )
16815    ).
16816spawns_all_triggers___2__1(A, B, C) :-
16817    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', D),
16818    lookup_ht(D, k(A, B), E),
16819    !,
16820    spawns_all_triggers___2__1__0__7(E, A, B, C).
16821spawns_all_triggers___2__1__0__7([], A, B, C) :-
16822    spawns_all_triggers___2__2(A, B, C).
16823spawns_all_triggers___2__1__0__7([A|B], C, D, E) :-
16824    (   A=suspension(_, active, _, _, F, G, H),
16825        F==C,
16826        G==D,
16827        may_trigger(H)
16828    ->  setarg(2, A, removed),
16829        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16830                    I),
16831          delete_ht(I, k(C, H), A)
16832        ),
16833        ( arg(4, A, J),
16834          (   var(J)
16835          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16836                        K),
16837              K=[_|L],
16838              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16839                       L),
16840              (   L=[M|_]
16841              ->  setarg(4, M, _)
16842              ;   true
16843              )
16844          ;   J=[_, _|L],
16845              setarg(2, J, L),
16846              (   L=[M|_]
16847              ->  setarg(4, M, J)
16848              ;   true
16849              )
16850          )
16851        ),
16852        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16853                    N),
16854          delete_ht(N, k(C, D), A)
16855        ),
16856        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16857                    O),
16858          delete_ht(O, C, A)
16859        ),
16860        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16861                    P),
16862          delete_ht(P, H, A)
16863        ),
16864        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16865                  Q),
16866        delete_ht(Q, k(C, D, H), A),
16867        spawns_all_triggers___2__1__0__7(B, C, D, E)
16868    ;   spawns_all_triggers___2__1__0__7(B, C, D, E)
16869    ).
16870spawns_all_triggers___2__1(A, B, C) :-
16871    spawns_all_triggers___2__2(A, B, C).
16872spawns_all_triggers___2__2(A, guard, B) :-
16873    nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12', C),
16874    lookup_ht(C, k(A, body), D),
16875    !,
16876    spawns_all_triggers___2__2__0__8(D, A, guard, B).
16877spawns_all_triggers___2__2__0__8([], A, B, C) :-
16878    spawns_all_triggers___2__3(A, B, C).
16879spawns_all_triggers___2__2__0__8([A|B], C, D, E) :-
16880    (   A=suspension(_, active, _, _, F, G, H),
16881        F==C,
16882        G=body,
16883        may_trigger(H)
16884    ->  setarg(2, A, removed),
16885        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
16886                    I),
16887          delete_ht(I, k(C, H), A)
16888        ),
16889        ( arg(4, A, J),
16890          (   var(J)
16891          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
16892                        K),
16893              K=[_|L],
16894              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
16895                       L),
16896              (   L=[M|_]
16897              ->  setarg(4, M, _)
16898              ;   true
16899              )
16900          ;   J=[_, _|L],
16901              setarg(2, J, L),
16902              (   L=[M|_]
16903              ->  setarg(4, M, J)
16904              ;   true
16905              )
16906          )
16907        ),
16908        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
16909                    N),
16910          delete_ht(N, k(C, body), A)
16911        ),
16912        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
16913                    O),
16914          delete_ht(O, C, A)
16915        ),
16916        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
16917                    P),
16918          delete_ht(P, H, A)
16919        ),
16920        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
16921                  Q),
16922        delete_ht(Q, k(C, body, H), A),
16923        spawns_all_triggers___2__2__0__8(B, C, D, E)
16924    ;   spawns_all_triggers___2__2__0__8(B, C, D, E)
16925    ).
16926spawns_all_triggers___2__2(A, B, C) :-
16927    spawns_all_triggers___2__3(A, B, C).
16928spawns_all_triggers___2__3(A, B, C) :-
16929    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
16930              D),
16931    member(E, D),
16932    E=suspension(_, active, _),
16933    !,
16934    (   var(C)
16935    ->  true
16936    ;   arg(2, C, F),
16937        setarg(2, C, removed),
16938        (   F==not_stored_yet
16939        ->  true
16940        ;   arg(4, C, G),
16941            (   var(G)
16942            ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16943                          H),
16944                H=[_|I],
16945                b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
16946                         I),
16947                (   I=[J|_]
16948                ->  setarg(4, J, _)
16949                ;   true
16950                )
16951            ;   G=[_, _|I],
16952                setarg(2, G, I),
16953                (   I=[J|_]
16954                ->  setarg(4, J, G)
16955                ;   true
16956                )
16957            ),
16958            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
16959                      K),
16960            delete_ht(K, A, C),
16961            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
16962                      L),
16963            delete_ht(L, k(A, B), C)
16964        )
16965    ),
16966    spawns_all(A, B).
16967spawns_all_triggers___2__3(A, B, C) :-
16968    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
16969    lookup_ht(D, A, E),
16970    !,
16971    C=suspension(F, not_stored_yet, t, _, A, B),
16972    'chr gen_id'(F),
16973    spawns_all_triggers___2__3__0__10(E, A, B, C).
16974spawns_all_triggers___2__3__0__10([], A, B, C) :-
16975    spawns_all_triggers___2__4(A, B, C).
16976spawns_all_triggers___2__3__0__10([A|B], C, D, E) :-
16977    (   A=suspension(_, active, _, _, F, _, G, H, _),
16978        G==C,
16979        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', I),
16980        lookup_ht(I, F, J)
16981    ->  spawns_all_triggers___2__3__1__10(J,
16982                                          F,
16983                                          H,
16984                                          A,
16985                                          B,
16986                                          C,
16987                                          D,
16988                                          E)
16989    ;   spawns_all_triggers___2__3__0__10(B, C, D, E)
16990    ).
16991spawns_all_triggers___2__3__1__10([], _, _, _, A, B, C, D) :-
16992    spawns_all_triggers___2__3__0__10(A, B, C, D).
16993spawns_all_triggers___2__3__1__10([A|B], C, D, E, F, G, H, I) :-
16994    (   A=suspension(_, active, _, _, J, K, L),
16995        L==C,
16996        may_trigger(C),
16997        \+ is_passive(G, D)
16998    ->  setarg(2, A, removed),
16999        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
17000                    M),
17001          delete_ht(M, k(J, C), A)
17002        ),
17003        ( arg(4, A, N),
17004          (   var(N)
17005          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns___3',
17006                        O),
17007              O=[_|P],
17008              b_setval('$chr_store_global_ground_chr_translate____spawns___3',
17009                       P),
17010              (   P=[Q|_]
17011              ->  setarg(4, Q, _)
17012              ;   true
17013              )
17014          ;   N=[_, _|P],
17015              setarg(2, N, P),
17016              (   P=[Q|_]
17017              ->  setarg(4, Q, N)
17018              ;   true
17019              )
17020          )
17021        ),
17022        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',
17023                    R),
17024          delete_ht(R, k(J, K), A)
17025        ),
17026        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',
17027                    S),
17028          delete_ht(S, J, A)
17029        ),
17030        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',
17031                    T),
17032          delete_ht(T, C, A)
17033        ),
17034        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
17035                  U),
17036        delete_ht(U, k(J, K, C), A),
17037        arg(2, I, V),
17038        setarg(2, I, active),
17039        (   V==not_stored_yet
17040        ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17041                      W),
17042            X=[I|W],
17043            b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17044                     X),
17045            (   W=[Y|_]
17046            ->  setarg(4, Y, X)
17047            ;   true
17048            ),
17049            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17050                      Z),
17051            insert_ht(Z, G, I),
17052            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17053                      A1),
17054            insert_ht(A1, k(G, H), I)
17055        ;   true
17056        ),
17057        spawns_all_triggers(J, K),
17058        (   I=suspension(_, active, _, _, _, _)
17059        ->  setarg(2, I, inactive),
17060            spawns_all_triggers___2__3__1__10(B,
17061                                              C,
17062                                              D,
17063                                              E,
17064                                              F,
17065                                              G,
17066                                              H,
17067                                              I)
17068        ;   true
17069        )
17070    ;   spawns_all_triggers___2__3__1__10(B,
17071                                          C,
17072                                          D,
17073                                          E,
17074                                          F,
17075                                          G,
17076                                          H,
17077                                          I)
17078    ).
17079spawns_all_triggers___2__3(A, B, C) :-
17080    C=suspension(D, not_stored_yet, t, _, A, B),
17081    'chr gen_id'(D),
17082    spawns_all_triggers___2__4(A, B, C).
17083spawns_all_triggers___2__4(A, B, C) :-
17084    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', D),
17085    lookup_ht(D, A, E),
17086    !,
17087    spawns_all_triggers___2__4__0__11(E, A, B, C).
17088spawns_all_triggers___2__4__0__11([], A, B, C) :-
17089    spawns_all_triggers___2__5(A, B, C).
17090spawns_all_triggers___2__4__0__11([A|B], C, D, E) :-
17091    (   A=suspension(_, active, _, _, F, _, G, H, _),
17092        G==C,
17093        nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3', I),
17094        lookup_ht(I, F, J)
17095    ->  spawns_all_triggers___2__4__1__11(J,
17096                                          F,
17097                                          H,
17098                                          A,
17099                                          B,
17100                                          C,
17101                                          D,
17102                                          E)
17103    ;   spawns_all_triggers___2__4__0__11(B, C, D, E)
17104    ).
17105spawns_all_triggers___2__4__1__11([], _, _, _, A, B, C, D) :-
17106    spawns_all_triggers___2__4__0__11(A, B, C, D).
17107spawns_all_triggers___2__4__1__11([A|B], C, D, E, F, G, H, I) :-
17108    (   A=suspension(_, active, _, _, J, K, L),
17109        L==C,
17110        M=t(123, I, E, A),
17111        '$novel_production'(I, M),
17112        '$novel_production'(A, M),
17113        \+ may_trigger(C),
17114        \+ is_passive(G, D)
17115    ->  '$extend_history'(I, M),
17116        arg(2, I, N),
17117        setarg(2, I, active),
17118        (   N==not_stored_yet
17119        ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17120                      O),
17121            P=[I|O],
17122            b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17123                     P),
17124            (   O=[Q|_]
17125            ->  setarg(4, Q, P)
17126            ;   true
17127            ),
17128            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17129                      R),
17130            insert_ht(R, G, I),
17131            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17132                      S),
17133            insert_ht(S, k(G, H), I)
17134        ;   true
17135        ),
17136        spawns_all_triggers(J, K),
17137        (   I=suspension(_, active, _, _, _, _)
17138        ->  setarg(2, I, inactive),
17139            spawns_all_triggers___2__4__1__11(B,
17140                                              C,
17141                                              D,
17142                                              E,
17143                                              F,
17144                                              G,
17145                                              H,
17146                                              I)
17147        ;   true
17148        )
17149    ;   spawns_all_triggers___2__4__1__11(B,
17150                                          C,
17151                                          D,
17152                                          E,
17153                                          F,
17154                                          G,
17155                                          H,
17156                                          I)
17157    ).
17158spawns_all_triggers___2__4(A, B, C) :-
17159    spawns_all_triggers___2__5(A, B, C).
17160spawns_all_triggers___2__5(A, B, C) :-
17161    nb_getval('$chr_store_global_ground_chr_translate____spawns___3', D),
17162    !,
17163    spawns_all_triggers___2__5__0__12(D, A, B, C).
17164spawns_all_triggers___2__5__0__12([], A, B, C) :-
17165    spawns_all_triggers___2__6(A, B, C).
17166spawns_all_triggers___2__5__0__12([A|B], C, D, E) :-
17167    (   A=suspension(_, active, _, _, F, _, G),
17168        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
17169                  H),
17170        lookup_ht(H, F, I)
17171    ->  spawns_all_triggers___2__5__1__12(I,
17172                                          F,
17173                                          G,
17174                                          A,
17175                                          B,
17176                                          C,
17177                                          D,
17178                                          E)
17179    ;   spawns_all_triggers___2__5__0__12(B, C, D, E)
17180    ).
17181spawns_all_triggers___2__5__1__12([], _, _, _, A, B, C, D) :-
17182    spawns_all_triggers___2__5__0__12(A, B, C, D).
17183spawns_all_triggers___2__5__1__12([A|B], C, D, E, F, G, H, I) :-
17184    (   A=suspension(_, active, _, _, J, _, K, L, _),
17185        K==C,
17186        M=t(125, E, A, I),
17187        '$novel_production'(E, M),
17188        '$novel_production'(I, M),
17189        \+ is_passive(C, L),
17190        may_trigger(J),
17191        \+ may_trigger(D)
17192    ->  '$extend_history'(I, M),
17193        arg(2, I, N),
17194        setarg(2, I, active),
17195        (   N==not_stored_yet
17196        ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17197                      O),
17198            P=[I|O],
17199            b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17200                     P),
17201            (   O=[Q|_]
17202            ->  setarg(4, Q, P)
17203            ;   true
17204            ),
17205            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17206                      R),
17207            insert_ht(R, G, I),
17208            nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17209                      S),
17210            insert_ht(S, k(G, H), I)
17211        ;   true
17212        ),
17213        spawns(G, H, D),
17214        (   I=suspension(_, active, _, _, _, _)
17215        ->  setarg(2, I, inactive),
17216            spawns_all_triggers___2__5__1__12(B,
17217                                              C,
17218                                              D,
17219                                              E,
17220                                              F,
17221                                              G,
17222                                              H,
17223                                              I)
17224        ;   true
17225        )
17226    ;   spawns_all_triggers___2__5__1__12(B,
17227                                          C,
17228                                          D,
17229                                          E,
17230                                          F,
17231                                          G,
17232                                          H,
17233                                          I)
17234    ).
17235spawns_all_triggers___2__5(A, B, C) :-
17236    spawns_all_triggers___2__6(A, B, C).
17237spawns_all_triggers___2__6(A, B, C) :-
17238    arg(2, C, D),
17239    setarg(2, C, active),
17240    (   D==not_stored_yet
17241    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17242                  E),
17243        F=[C|E],
17244        b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17245                 F),
17246        (   E=[G|_]
17247        ->  setarg(4, G, F)
17248        ;   true
17249        ),
17250        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17251                  H),
17252        insert_ht(H, A, C),
17253        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17254                  I),
17255        insert_ht(I, k(A, B), C)
17256    ;   true
17257    ).
17258spawns_all_triggers_implies_spawns_all :-
17259    spawns_all_triggers_implies_spawns_all___0__0(_).
17260spawns_all_triggers_implies_spawns_all___0__0(_) :-
17261    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17262              A),
17263    member(B, A),
17264    B=suspension(_, active, _),
17265    !,
17266    setarg(2, B, removed),
17267    arg(3, B, C),
17268    (   var(C)
17269    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17270                  D),
17271        D=[_|E],
17272        b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17273                 E),
17274        (   E=[F|_]
17275        ->  setarg(3, F, _)
17276        ;   true
17277        )
17278    ;   C=[_, _|E],
17279        setarg(2, C, E),
17280        (   E=[F|_]
17281        ->  setarg(3, F, C)
17282        ;   true
17283        )
17284    ),
17285    fail.
17286spawns_all_triggers_implies_spawns_all___0__0(A) :-
17287    nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17288              B),
17289    !,
17290    A=suspension(C, not_stored_yet, _),
17291    'chr gen_id'(C),
17292    spawns_all_triggers_implies_spawns_all___0__0__0__3(B, A).
17293spawns_all_triggers_implies_spawns_all___0__0__0__3([], A) :-
17294    spawns_all_triggers_implies_spawns_all___0__1(A).
17295spawns_all_triggers_implies_spawns_all___0__0__0__3([A|B], C) :-
17296    (   A=suspension(_, active, _, _, D, E)
17297    ->  setarg(2, A, removed),
17298        ( arg(4, A, F),
17299          (   var(F)
17300          ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17301                        G),
17302              G=[_|H],
17303              b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',
17304                       H),
17305              (   H=[I|_]
17306              ->  setarg(4, I, _)
17307              ;   true
17308              )
17309          ;   F=[_, _|H],
17310              setarg(2, F, H),
17311              (   H=[I|_]
17312              ->  setarg(4, I, F)
17313              ;   true
17314              )
17315          )
17316        ),
17317        ( nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17318                    J),
17319          delete_ht(J, D, A)
17320        ),
17321        nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17322                  K),
17323        delete_ht(K, k(D, E), A),
17324        arg(2, C, L),
17325        setarg(2, C, active),
17326        (   L==not_stored_yet
17327        ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17328                      M),
17329            N=[C|M],
17330            b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17331                     N),
17332            (   M=[O|_]
17333            ->  setarg(3, O, N)
17334            ;   true
17335            )
17336        ;   true
17337        ),
17338        spawns_all(D, E),
17339        (   C=suspension(_, active, _)
17340        ->  setarg(2, C, inactive),
17341            spawns_all_triggers_implies_spawns_all___0__0__0__3(B,
17342                                                                C)
17343        ;   true
17344        )
17345    ;   spawns_all_triggers_implies_spawns_all___0__0__0__3(B, C)
17346    ).
17347spawns_all_triggers_implies_spawns_all___0__0(A) :-
17348    A=suspension(B, not_stored_yet, _),
17349    'chr gen_id'(B),
17350    spawns_all_triggers_implies_spawns_all___0__1(A).
17351spawns_all_triggers_implies_spawns_all___0__1(A) :-
17352    arg(2, A, B),
17353    setarg(2, A, active),
17354    (   B==not_stored_yet
17355    ->  nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17356                  C),
17357        D=[A|C],
17358        b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',
17359                 D),
17360        (   C=[E|_]
17361        ->  setarg(3, E, D)
17362        ;   true
17363        )
17364    ;   true
17365    ).
17366all_spawned(A, B) :-
17367    nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
17368              C),
17369    (   lookup_ht(C, k(A, guard), D),
17370        member(E, D),
17371        E=suspension(_, active, _, _),
17372        !
17373    ;   lookup_ht(C, k(A, B), F),
17374        member(G, F),
17375        G=suspension(_, active, _, _),
17376        !
17377    ).
17378all_spawned(_, _) :-
17379    fail.
17380is_observed(A, B, C) :-
17381    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
17382              D),
17383    lookup_ht(D, k(A, B), E),
17384    member(F, E),
17385    F=suspension(_, active, _, _, _, _, G, _, _),
17386    !,
17387    do_is_observed(A, G, C).
17388is_observed(_, _, _) :-
17389    fail.
17390do_is_observed(A, B, C) :-
17391    var(C),
17392    !,
17393    do_is_observed(A, B).
17394do_is_observed(A, B, C) :-
17395    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', D),
17396    lookup_ht(D, A, E),
17397    member(F, E),
17398    F=suspension(_, active, _, _, _, _, G, _, _),
17399    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', H),
17400    lookup_ht(H, G, I),
17401    member(J, I),
17402    J=suspension(_, active, _, _, K, _, _, L, _),
17403    J\==F,
17404    ground(C),
17405    (   (   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',
17406                      M),
17407            lookup_ht(M, k(B, C), N),
17408            member(O, N),
17409            O=suspension(_, active, _, _),
17410            \+ is_passive(G, L),
17411            !
17412        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',
17413                      P),
17414            lookup_ht(P, k(B, C, K), Q),
17415            member(R, Q),
17416            R=suspension(_, active, _, _, _, _, _),
17417            \+ is_passive(G, L),
17418            !
17419        )
17420    ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',
17421                  S),
17422        lookup_ht(S, k(B, C), T),
17423        member(U, T),
17424        U=suspension(_, active, _, _, _, _),
17425        \+ is_passive(G, L),
17426        may_trigger(K),
17427        !
17428    ).
17429do_is_observed(_, _, _) :-
17430    chr_pp_flag(observation_analysis, off).
17431do_is_observed(A, B) :-
17432    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', C),
17433    lookup_ht(C, A, D),
17434    member(E, D),
17435    E=suspension(_, active, _, _, _, _, F, _, _),
17436    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', G),
17437    lookup_ht(G, F, H),
17438    member(I, H),
17439    I=suspension(_, active, _, _, J, _, _, K, _),
17440    I\==E,
17441    (   (   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',
17442                      L),
17443            lookup_ht(L, B, M),
17444            member(N, M),
17445            N=suspension(_, active, _, _),
17446            \+ is_passive(F, K),
17447            !
17448        ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-13',
17449                      O),
17450            lookup_ht(O, k(B, J), P),
17451            member(Q, P),
17452            Q=suspension(_, active, _, _, _, _, _),
17453            \+ is_passive(F, K),
17454            !
17455        )
17456    ;   nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',
17457                  R),
17458        lookup_ht(R, B, S),
17459        member(T, S),
17460        T=suspension(_, active, _, _, _, _),
17461        \+ is_passive(F, K),
17462        may_trigger(J),
17463        !
17464    ).
17465do_is_observed(_, _) :-
17466    chr_pp_flag(observation_analysis, off).
17467generate_indexed_variables_body(A/B, C, D, E) :-
17468    nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
17469              F),
17470    lookup_ht(F, A/B, G),
17471    member(H, G),
17472    H=suspension(_, active, _, _, _, I),
17473    !,
17474    get_indexing_spec(A/B, J),
17475    (   chr_pp_flag(term_indexing, on)
17476    ->  spectermvars(J, C, A, B, D, E)
17477    ;   get_constraint_type_det(A/B, K),
17478        create_indexed_variables_body(C,
17479                                      I,
17480                                      K,
17481                                      E,
17482                                      1,
17483                                      A/B,
17484                                      L,
17485                                      M),
17486        (   L==empty
17487        ->  D=true,
17488            E=[]
17489        ;   M==0
17490        ->  (   C=[N]
17491            ->  true
17492            ;   N=..[term|C]
17493            ),
17494            D=term_variables(N, E)
17495        ;   L=D
17496        )
17497    ).
17498generate_indexed_variables_body(A, _, _, _) :-
17499    chr_error(internal,
17500              'generate_indexed_variables_body: missing mode info for ~w.\n',
17501              [A]).
17502empty_named_history_initialisations(A, B) :-
17503    C=suspension(D, active, _, A, B),
17504    'chr gen_id'(D),
17505    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17506              E),
17507    F=[C|E],
17508    b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17509             F),
17510    (   E=[G|_]
17511    ->  setarg(3, G, F)
17512    ;   true
17513    ).
17514generate_empty_named_history_initialisation(A) :-
17515    generate_empty_named_history_initialisation___1__0(A, _).
17516generate_empty_named_history_initialisation___1__0(A, B) :-
17517    (   'chr newvia_1'(A, C)
17518    ->  get_attr(C, chr_translate, D),
17519        D=v(_, E, _, _, _, _, _, _, _, _, _)
17520    ;   nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17521                  E)
17522    ),
17523    member(F, E),
17524    F=suspension(_, active, _, _, G),
17525    G==A,
17526    !,
17527    (   var(B)
17528    ->  true
17529    ;   B=suspension(_, H, _, _, I),
17530        setarg(2, B, removed),
17531        (   H==not_stored_yet
17532        ->  J=[]
17533        ;   term_variables(I, J),
17534            arg(4, B, K),
17535            (   var(K)
17536            ->  nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17537                          L),
17538                L=[_|M],
17539                b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17540                         M),
17541                (   M=[N|_]
17542                ->  setarg(4, N, _)
17543                ;   true
17544                )
17545            ;   K=[_, _|M],
17546                setarg(2, K, M),
17547                (   M=[N|_]
17548                ->  setarg(4, N, K)
17549                ;   true
17550                )
17551            ),
17552            detach_generate_empty_named_history_initialisation___1(J,
17553                                                                   B)
17554        )
17555    ).
17556generate_empty_named_history_initialisation___1__0(A, B) :-
17557    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17558              C),
17559    !,
17560    (   var(B)
17561    ->  B=suspension(D, not_stored_yet, 0, _, A),
17562        'chr gen_id'(D)
17563    ;   true
17564    ),
17565    generate_empty_named_history_initialisation___1__0__0__3(C,
17566                                                             A,
17567                                                             B).
17568generate_empty_named_history_initialisation___1__0__0__3([], A, B) :-
17569    generate_empty_named_history_initialisation___1__1(A, B).
17570generate_empty_named_history_initialisation___1__0__0__3([A|B], C, D) :-
17571    (   A=suspension(_, active, _, E, F)
17572    ->  setarg(2, A, removed),
17573        arg(3, A, G),
17574        (   var(G)
17575        ->  nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17576                      H),
17577            H=[_|I],
17578            b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17579                     I),
17580            (   I=[J|_]
17581            ->  setarg(3, J, _)
17582            ;   true
17583            )
17584        ;   G=[_, _|I],
17585            setarg(2, G, I),
17586            (   I=[J|_]
17587            ->  setarg(3, J, G)
17588            ;   true
17589            )
17590        ),
17591        arg(2, D, K),
17592        setarg(2, D, active),
17593        ( arg(3, D, L),
17594          M is L+1,
17595          setarg(3, D, M)
17596        ),
17597        (   K==not_stored_yet
17598        ->  D=suspension(_, _, _, _, N),
17599            term_variables(N, O),
17600            nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17601                      P),
17602            Q=[D|P],
17603            b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17604                     Q),
17605            (   P=[R|_]
17606            ->  setarg(4, R, Q)
17607            ;   true
17608            ),
17609            attach_generate_empty_named_history_initialisation___1(O,
17610                                                                   D)
17611        ;   true
17612        ),
17613        empty_named_history_global_variable(C, S),
17614        E=[(:-nb_setval(S, 0))|T],
17615        empty_named_history_initialisations(T, F),
17616        (   D=suspension(_, active, M, _, _)
17617        ->  setarg(2, D, inactive),
17618            generate_empty_named_history_initialisation___1__0__0__3(B,
17619                                                                     C,
17620                                                                     D)
17621        ;   true
17622        )
17623    ;   generate_empty_named_history_initialisation___1__0__0__3(B,
17624                                                                 C,
17625                                                                 D)
17626    ).
17627generate_empty_named_history_initialisation___1__0(A, B) :-
17628    (   var(B)
17629    ->  B=suspension(C, not_stored_yet, 0, _, A),
17630        'chr gen_id'(C)
17631    ;   true
17632    ),
17633    generate_empty_named_history_initialisation___1__1(A, B).
17634generate_empty_named_history_initialisation___1__1(_, A) :-
17635    arg(2, A, B),
17636    setarg(2, A, active),
17637    arg(3, A, C),
17638    D is C+1,
17639    setarg(3, A, D),
17640    (   B==not_stored_yet
17641    ->  A=suspension(_, _, _, _, E),
17642        term_variables(E, F),
17643        nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17644                  G),
17645        H=[A|G],
17646        b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17647                 H),
17648        (   G=[I|_]
17649        ->  setarg(4, I, H)
17650        ;   true
17651        ),
17652        attach_generate_empty_named_history_initialisation___1(F,
17653                                                               A)
17654    ;   true
17655    ).
17656find_empty_named_histories :-
17657    find_empty_named_histories___0__0(_).
17658find_empty_named_histories___0__0(A) :-
17659    nb_getval('$chr_store_constants_chr_translate____history___3___[3]___[]',
17660              B),
17661    !,
17662    A=suspension(C, not_stored_yet, t, _),
17663    'chr gen_id'(C),
17664    find_empty_named_histories___0__0__0__1(B, A).
17665find_empty_named_histories___0__0__0__1([], A) :-
17666    find_empty_named_histories___0__1(A).
17667find_empty_named_histories___0__0__0__1([A|B], C) :-
17668    (   A=suspension(_, active, _, _, D, E),
17669        E=[],
17670        F=t(142, C, A),
17671        '$novel_production'(C, F),
17672        '$novel_production'(A, F)
17673    ->  '$extend_history'(C, F),
17674        arg(2, C, G),
17675        setarg(2, C, active),
17676        (   G==not_stored_yet
17677        ->  nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17678                      H),
17679            I=[C|H],
17680            b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17681                     I),
17682            (   H=[J|_]
17683            ->  setarg(4, J, I)
17684            ;   true
17685            )
17686        ;   true
17687        ),
17688        generate_empty_named_history_initialisation(D),
17689        (   C=suspension(_, active, _, _)
17690        ->  setarg(2, C, inactive),
17691            find_empty_named_histories___0__0__0__1(B, C)
17692        ;   true
17693        )
17694    ;   find_empty_named_histories___0__0__0__1(B, C)
17695    ).
17696find_empty_named_histories___0__0(A) :-
17697    A=suspension(B, not_stored_yet, t, _),
17698    'chr gen_id'(B),
17699    find_empty_named_histories___0__1(A).
17700find_empty_named_histories___0__1(A) :-
17701    nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17702              B),
17703    !,
17704    find_empty_named_histories___0__1__0__2(B, A).
17705find_empty_named_histories___0__1__0__2([], A) :-
17706    find_empty_named_histories___0__2(A).
17707find_empty_named_histories___0__1__0__2([A|B], C) :-
17708    (   A=suspension(_, active, _, _, _)
17709    ->  A=suspension(_, _, _, _, D),
17710        setarg(2, A, removed),
17711        term_variables(D, E),
17712        ( arg(4, A, F),
17713          (   var(F)
17714          ->  nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17715                        G),
17716              G=[_|H],
17717              b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',
17718                       H),
17719              (   H=[I|_]
17720              ->  setarg(4, I, _)
17721              ;   true
17722              )
17723          ;   F=[_, _|H],
17724              setarg(2, F, H),
17725              (   H=[I|_]
17726              ->  setarg(4, I, F)
17727              ;   true
17728              )
17729          )
17730        ),
17731        detach_generate_empty_named_history_initialisation___1(E,
17732                                                               A),
17733        find_empty_named_histories___0__1__0__2(B, C)
17734    ;   find_empty_named_histories___0__1__0__2(B, C)
17735    ).
17736find_empty_named_histories___0__1(A) :-
17737    find_empty_named_histories___0__2(A).
17738find_empty_named_histories___0__2(A) :-
17739    nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17740              B),
17741    member(C, B),
17742    C=suspension(_, active, _, D, E),
17743    !,
17744    setarg(2, C, removed),
17745    arg(3, C, F),
17746    (   var(F)
17747    ->  nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17748                  G),
17749        G=[_|H],
17750        b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',
17751                 H),
17752        (   H=[I|_]
17753        ->  setarg(3, I, _)
17754        ;   true
17755        )
17756    ;   F=[_, _|H],
17757        setarg(2, F, H),
17758        (   H=[I|_]
17759        ->  setarg(3, I, F)
17760        ;   true
17761        )
17762    ),
17763    (   var(A)
17764    ->  true
17765    ;   arg(2, A, J),
17766        setarg(2, A, removed),
17767        (   J==not_stored_yet
17768        ->  true
17769        ;   arg(4, A, K),
17770            (   var(K)
17771            ->  nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17772                          L),
17773                L=[_|M],
17774                b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17775                         M),
17776                (   M=[N|_]
17777                ->  setarg(4, N, _)
17778                ;   true
17779                )
17780            ;   K=[_, _|M],
17781                setarg(2, K, M),
17782                (   M=[N|_]
17783                ->  setarg(4, N, K)
17784                ;   true
17785                )
17786            )
17787        )
17788    ),
17789    D=E.
17790find_empty_named_histories___0__2(A) :-
17791    (   var(A)
17792    ->  true
17793    ;   arg(2, A, B),
17794        setarg(2, A, removed),
17795        (   B==not_stored_yet
17796        ->  true
17797        ;   arg(4, A, C),
17798            (   var(C)
17799            ->  nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17800                          D),
17801                D=[_|E],
17802                b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',
17803                         E),
17804                (   E=[F|_]
17805                ->  setarg(4, F, _)
17806                ;   true
17807                )
17808            ;   C=[_, _|E],
17809                setarg(2, C, E),
17810                (   E=[F|_]
17811                ->  setarg(4, F, C)
17812                ;   true
17813                )
17814            )
17815        )
17816    ),
17817    chr_error(internal, 'find_empty_named_histories was not removed', []).
17818module_initializer(A) :-
17819    B=suspension(C, active, _, A),
17820    'chr gen_id'(C),
17821    nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
17822              D),
17823    E=[B|D],
17824    b_setval('$chr_store_global_ground_chr_translate____module_initializer___1',
17825             E),
17826    (   D=[F|_]
17827    ->  setarg(3, F, E)
17828    ;   true
17829    ).
17830module_initializers(A) :-
17831    nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
17832              B),
17833    member(C, B),
17834    C=suspension(_, active, _, D),
17835    !,
17836    setarg(2, C, removed),
17837    arg(3, C, E),
17838    (   var(E)
17839    ->  nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',
17840                  F),
17841        F=[_|G],
17842        b_setval('$chr_store_global_ground_chr_translate____module_initializer___1',
17843                 G),
17844        (   G=[H|_]
17845        ->  setarg(3, H, _)
17846        ;   true
17847        )
17848    ;   E=[_, _|G],
17849        setarg(2, E, G),
17850        (   G=[H|_]
17851        ->  setarg(3, H, E)
17852        ;   true
17853        )
17854    ),
17855    A=(D, I),
17856    module_initializers(I).
17857module_initializers(true).
17858actual_atomic_multi_hash_keys(A, B, C) :-
17859    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
17860              D),
17861    lookup_ht(D, A, E),
17862    member(F, E),
17863    F=suspension(_, active, _, G),
17864    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
17865              H),
17866    lookup_ht(H, A, I),
17867    member(J, I),
17868    J=suspension(_, active, _),
17869    !,
17870    setarg(2, F, removed),
17871    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
17872              K),
17873    delete_ht(K, A, F),
17874    selectchk(multi_hash([B]), G, L),
17875    B=[M],
17876    (   get_constraint_arg_type(A, M, N),
17877        enumerated_atomic_type(N, O)
17878    ->  P=O,
17879        Q=complete
17880    ;   P=C,
17881        Q=incomplete
17882    ),
17883    actual_store_types(A,
17884                       [atomic_constants(B, P, Q)|L]).
17885actual_atomic_multi_hash_keys(A, B, C) :-
17886    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17887              D),
17888    lookup_ht(D, k(A, B), E),
17889    member(F, E),
17890    F=suspension(_, active, _, _, G),
17891    !,
17892    setarg(2, F, removed),
17893    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17894              H),
17895    delete_ht(H, k(A, B), F),
17896    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
17897              I),
17898    delete_ht(I, A, F),
17899    append(C, G, J),
17900    sort(J, K),
17901    actual_atomic_multi_hash_keys(A, B, K).
17902actual_atomic_multi_hash_keys(A, B, C) :-
17903    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
17904              D),
17905    lookup_ht(D, k(A, B), E),
17906    member(F, E),
17907    F=suspension(_, active, _, _, G),
17908    !,
17909    setarg(2, F, removed),
17910    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
17911              H),
17912    delete_ht(H, k(A, B), F),
17913    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
17914              I),
17915    delete_ht(I, A, F),
17916    append(G, C, J),
17917    sort(J, K),
17918    actual_ground_multi_hash_keys(A, B, K).
17919actual_atomic_multi_hash_keys(A, B, _) :-
17920    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
17921              C),
17922    lookup_ht(C, k(A, B), D),
17923    member(E, D),
17924    E=suspension(_, active, _, _),
17925    !.
17926actual_atomic_multi_hash_keys(A, B, C) :-
17927    D=suspension(E, active, A, B, C),
17928    'chr gen_id'(E),
17929    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17930              F),
17931    insert_ht(F, k(A, B), D),
17932    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
17933              G),
17934    insert_ht(G, A, D).
17935actual_ground_multi_hash_keys(A, B, C) :-
17936    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
17937              D),
17938    lookup_ht(D, A, E),
17939    member(F, E),
17940    F=suspension(_, active, _, G),
17941    nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',
17942              H),
17943    lookup_ht(H, A, I),
17944    member(J, I),
17945    J=suspension(_, active, _),
17946    !,
17947    setarg(2, F, removed),
17948    nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',
17949              K),
17950    delete_ht(K, A, F),
17951    (   B=[L],
17952        get_constraint_arg_type(A, L, M),
17953        M=chr_enum(N)
17954    ->  O=complete
17955    ;   N=C,
17956        O=incomplete
17957    ),
17958    selectchk(multi_hash([B]), G, P),
17959    actual_store_types(A,
17960                       [ground_constants(B, N, O)|P]).
17961actual_ground_multi_hash_keys(A, B, C) :-
17962    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17963              D),
17964    lookup_ht(D, k(A, B), E),
17965    member(F, E),
17966    F=suspension(_, active, _, _, G),
17967    !,
17968    setarg(2, F, removed),
17969    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
17970              H),
17971    delete_ht(H, k(A, B), F),
17972    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
17973              I),
17974    delete_ht(I, A, F),
17975    append(C, G, J),
17976    sort(J, K),
17977    actual_ground_multi_hash_keys(A, B, K).
17978actual_ground_multi_hash_keys(A, B, C) :-
17979    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
17980              D),
17981    lookup_ht(D, k(A, B), E),
17982    member(F, E),
17983    F=suspension(_, active, _, _, G),
17984    !,
17985    setarg(2, F, removed),
17986    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
17987              H),
17988    delete_ht(H, k(A, B), F),
17989    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
17990              I),
17991    delete_ht(I, A, F),
17992    append(C, G, J),
17993    sort(J, K),
17994    actual_ground_multi_hash_keys(A, B, K).
17995actual_ground_multi_hash_keys(A, B, _) :-
17996    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
17997              C),
17998    lookup_ht(C, k(A, B), D),
17999    member(E, D),
18000    E=suspension(_, active, _, _),
18001    !.
18002actual_ground_multi_hash_keys(A, B, C) :-
18003    D=suspension(E, active, A, B, C),
18004    'chr gen_id'(E),
18005    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18006              F),
18007    insert_ht(F, k(A, B), D),
18008    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
18009              G),
18010    insert_ht(G, A, D).
18011actual_non_ground_multi_hash_key(A, B) :-
18012    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
18013              C),
18014    lookup_ht(C, k(A, B), D),
18015    member(E, D),
18016    E=suspension(_, active, _, _),
18017    !.
18018actual_non_ground_multi_hash_key(A, B) :-
18019    nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
18020              C),
18021    lookup_ht(C, k(A, B), D),
18022    !,
18023    actual_non_ground_multi_hash_key___2__0__0__3(D, A, B).
18024actual_non_ground_multi_hash_key___2__0__0__3([], A, B) :-
18025    actual_non_ground_multi_hash_key___2__1(A, B).
18026actual_non_ground_multi_hash_key___2__0__0__3([A|B], C, D) :-
18027    (   A=suspension(_, active, E, F, _),
18028        E==C,
18029        F==D
18030    ->  setarg(2, A, removed),
18031        ( nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',
18032                    G),
18033          delete_ht(G, k(C, D), A)
18034        ),
18035        nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',
18036                  H),
18037        delete_ht(H, C, A),
18038        actual_non_ground_multi_hash_key___2__0__0__3(B, C, D)
18039    ;   actual_non_ground_multi_hash_key___2__0__0__3(B, C, D)
18040    ).
18041actual_non_ground_multi_hash_key(A, B) :-
18042    actual_non_ground_multi_hash_key___2__1(A, B).
18043actual_non_ground_multi_hash_key___2__1(A, B) :-
18044    nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18045              C),
18046    lookup_ht(C, k(A, B), D),
18047    !,
18048    actual_non_ground_multi_hash_key___2__1__0__4(D, A, B).
18049actual_non_ground_multi_hash_key___2__1__0__4([], A, B) :-
18050    actual_non_ground_multi_hash_key___2__2(A, B).
18051actual_non_ground_multi_hash_key___2__1__0__4([A|B], C, D) :-
18052    (   A=suspension(_, active, E, F, _),
18053        E==C,
18054        F==D
18055    ->  setarg(2, A, removed),
18056        ( nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',
18057                    G),
18058          delete_ht(G, k(C, D), A)
18059        ),
18060        nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',
18061                  H),
18062        delete_ht(H, C, A),
18063        actual_non_ground_multi_hash_key___2__1__0__4(B, C, D)
18064    ;   actual_non_ground_multi_hash_key___2__1__0__4(B, C, D)
18065    ).
18066actual_non_ground_multi_hash_key___2__1(A, B) :-
18067    actual_non_ground_multi_hash_key___2__2(A, B).
18068actual_non_ground_multi_hash_key___2__2(A, B) :-
18069    C=suspension(D, active, A, B),
18070    'chr gen_id'(D),
18071    nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',
18072              E),
18073    insert_ht(E, k(A, B), C).
18074symbol_count(A, B) :-
18075    symbol_count___2__0(A, B, _).
18076symbol_count___2__0(A, B, C) :-
18077    (   'chr newvia_1'(A, D)
18078    ->  get_attr(D, chr_translate, E),
18079        E=v(_, _, _, F, _, _, _, _, _, _, _)
18080    ;   nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18081                  F)
18082    ),
18083    member(G, F),
18084    G=suspension(_, active, _, _, _, H, I),
18085    H==A,
18086    !,
18087    G=suspension(_, _, _, _, _, J, _),
18088    setarg(2, G, removed),
18089    term_variables(J, K),
18090    arg(5, G, L),
18091    (   var(L)
18092    ->  nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18093                  M),
18094        M=[_|N],
18095        b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18096                 N),
18097        (   N=[O|_]
18098        ->  setarg(5, O, _)
18099        ;   true
18100        )
18101    ;   L=[_, _|N],
18102        setarg(2, L, N),
18103        (   N=[O|_]
18104        ->  setarg(5, O, L)
18105        ;   true
18106        )
18107    ),
18108    detach_fresh_symbol___2(K, G),
18109    (   var(C)
18110    ->  true
18111    ;   C=suspension(_, _, _, P, _),
18112        setarg(2, C, removed),
18113        term_variables(P, Q),
18114        arg(3, C, R),
18115        (   var(R)
18116        ->  nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18117                      S),
18118            S=[_|T],
18119            b_setval('$chr_store_global_list_chr_translate____symbol_count___2',
18120                     T),
18121            (   T=[U|_]
18122            ->  setarg(3, U, _)
18123            ;   true
18124            )
18125        ;   R=[_, _|T],
18126            setarg(2, R, T),
18127            (   T=[U|_]
18128            ->  setarg(3, U, R)
18129            ;   true
18130            )
18131        ),
18132        detach_symbol_count___2(Q, C)
18133    ),
18134    atom_concat(A, B, I),
18135    V is B+1,
18136    symbol_count(A, V).
18137symbol_count___2__0(A, B, C) :-
18138    (   var(C)
18139    ->  C=suspension(D, active, _, A, B),
18140        term_variables(A, E),
18141        'chr gen_id'(D),
18142        nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18143                  F),
18144        G=[C|F],
18145        b_setval('$chr_store_global_list_chr_translate____symbol_count___2',
18146                 G),
18147        (   F=[H|_]
18148        ->  setarg(3, H, G)
18149        ;   true
18150        ),
18151        attach_symbol_count___2(E, C)
18152    ;   setarg(2, C, active)
18153    ).
18154fresh_symbol(A, B) :-
18155    fresh_symbol___2__0(A, B, _).
18156fresh_symbol___2__0(A, B, C) :-
18157    (   'chr newvia_1'(A, D)
18158    ->  get_attr(D, chr_translate, E),
18159        E=v(_, _, F, _, _, _, _, _, _, _, _)
18160    ;   nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18161                  F)
18162    ),
18163    member(G, F),
18164    G=suspension(_, active, _, H, I),
18165    H==A,
18166    !,
18167    G=suspension(_, _, _, J, _),
18168    setarg(2, G, removed),
18169    term_variables(J, K),
18170    arg(3, G, L),
18171    (   var(L)
18172    ->  nb_getval('$chr_store_global_list_chr_translate____symbol_count___2',
18173                  M),
18174        M=[_|N],
18175        b_setval('$chr_store_global_list_chr_translate____symbol_count___2',
18176                 N),
18177        (   N=[O|_]
18178        ->  setarg(3, O, _)
18179        ;   true
18180        )
18181    ;   L=[_, _|N],
18182        setarg(2, L, N),
18183        (   N=[O|_]
18184        ->  setarg(3, O, L)
18185        ;   true
18186        )
18187    ),
18188    detach_symbol_count___2(K, G),
18189    (   var(C)
18190    ->  true
18191    ;   C=suspension(_, P, _, _, _, Q, _),
18192        setarg(2, C, removed),
18193        (   P==not_stored_yet
18194        ->  R=[]
18195        ;   term_variables(Q, R),
18196            arg(5, C, S),
18197            (   var(S)
18198            ->  nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18199                          T),
18200                T=[_|U],
18201                b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18202                         U),
18203                (   U=[V|_]
18204                ->  setarg(5, V, _)
18205                ;   true
18206                )
18207            ;   S=[_, _|U],
18208                setarg(2, S, U),
18209                (   U=[V|_]
18210                ->  setarg(5, V, S)
18211                ;   true
18212                )
18213            ),
18214            detach_fresh_symbol___2(R, C)
18215        )
18216    ),
18217    atom_concat(A, I, B),
18218    W is I+1,
18219    symbol_count(A, W).
18220fresh_symbol___2__0(A, B, C) :-
18221    (   var(C)
18222    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
18223        'chr gen_id'(D)
18224    ;   true
18225    ),
18226    (   '$novel_production'(C, 157),
18227        !,
18228        '$extend_history'(C, 157),
18229        arg(2, C, E),
18230        setarg(2, C, active),
18231        arg(4, C, F),
18232        G is F+1,
18233        setarg(4, C, G),
18234        (   E==not_stored_yet
18235        ->  C=suspension(_, _, _, _, _, H, _),
18236            term_variables(H, I),
18237            nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18238                      J),
18239            K=[C|J],
18240            b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18241                     K),
18242            (   J=[L|_]
18243            ->  setarg(5, L, K)
18244            ;   true
18245            ),
18246            attach_fresh_symbol___2(I, C)
18247        ;   true
18248        ),
18249        symbol_count(A, 0),
18250        (   C=suspension(_, active, _, G, _, _, _)
18251        ->  setarg(2, C, inactive),
18252            fresh_symbol___2__1(A, B, C)
18253        ;   true
18254        )
18255    ;   fresh_symbol___2__1(A, B, C)
18256    ).
18257fresh_symbol___2__1(_, _, A) :-
18258    arg(2, A, B),
18259    setarg(2, A, active),
18260    arg(4, A, C),
18261    D is C+1,
18262    setarg(4, A, D),
18263    (   B==not_stored_yet
18264    ->  A=suspension(_, _, _, _, _, E, _),
18265        term_variables(E, F),
18266        nb_getval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18267                  G),
18268        H=[A|G],
18269        b_setval('$chr_store_global_list_chr_translate____fresh_symbol___2',
18270                 H),
18271        (   G=[I|_]
18272        ->  setarg(5, I, H)
18273        ;   true
18274        ),
18275        attach_fresh_symbol___2(F, A)
18276    ;   true
18277    ).
18278prolog_global_variable(A) :-
18279    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
18280              B),
18281    lookup_ht(B, A, C),
18282    member(D, C),
18283    D=suspension(_, active, _, _),
18284    !.
18285prolog_global_variable(A) :-
18286    B=suspension(C, active, _, A),
18287    'chr gen_id'(C),
18288    nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18289              D),
18290    E=[B|D],
18291    b_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18292             E),
18293    (   D=[F|_]
18294    ->  setarg(3, F, E)
18295    ;   true
18296    ),
18297    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
18298              G),
18299    insert_ht(G, A, B).
18300prolog_global_variables(A) :-
18301    nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18302              B),
18303    member(C, B),
18304    C=suspension(_, active, _, D),
18305    !,
18306    setarg(2, C, removed),
18307    arg(3, C, E),
18308    (   var(E)
18309    ->  nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18310                  F),
18311        F=[_|G],
18312        b_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',
18313                 G),
18314        (   G=[H|_]
18315        ->  setarg(3, H, _)
18316        ;   true
18317        )
18318    ;   E=[_, _|G],
18319        setarg(2, E, G),
18320        (   G=[H|_]
18321        ->  setarg(3, H, E)
18322        ;   true
18323        )
18324    ),
18325    nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',
18326              I),
18327    delete_ht(I, D, C),
18328    A=[D|J],
18329    prolog_global_variables(J).
18330prolog_global_variables([]).
18331background_info(A) :-
18332    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18333              B),
18334    member(C, B),
18335    C=suspension(_, active, _, D),
18336    !,
18337    setarg(2, C, removed),
18338    arg(3, C, E),
18339    (   var(E)
18340    ->  nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18341                  F),
18342        F=[_|G],
18343        b_setval('$chr_store_global_ground_chr_translate____background_info___1',
18344                 G),
18345        (   G=[H|_]
18346        ->  setarg(3, H, _)
18347        ;   true
18348        )
18349    ;   E=[_, _|G],
18350        setarg(2, E, G),
18351        (   G=[H|_]
18352        ->  setarg(3, H, E)
18353        ;   true
18354        )
18355    ),
18356    append(A, D, I),
18357    background_info(I).
18358background_info(A) :-
18359    B=suspension(C, active, _, A),
18360    'chr gen_id'(C),
18361    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18362              D),
18363    E=[B|D],
18364    b_setval('$chr_store_global_ground_chr_translate____background_info___1',
18365             E),
18366    (   D=[F|_]
18367    ->  setarg(3, F, E)
18368    ;   true
18369    ).
18370background_info(A, B) :-
18371    background_info___2__0(A, B, _).
18372background_info___2__0(A, B, C) :-
18373    nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2', D),
18374    !,
18375    (   var(C)
18376    ->  C=suspension(E, not_stored_yet, t, 0, _, A, B),
18377        'chr gen_id'(E)
18378    ;   true
18379    ),
18380    background_info___2__0__0__1(D, A, B, C).
18381background_info___2__0__0__1([], A, B, C) :-
18382    background_info___2__1(A, B, C).
18383background_info___2__0__0__1([A|B], C, D, E) :-
18384    (   A=suspension(_, active, _, _, _, F, _),
18385        G=t(164, E, A),
18386        '$novel_production'(E, G),
18387        '$novel_production'(A, G),
18388        copy_term_nat(C, H),
18389        subsumes_term(H, F)
18390    ->  '$extend_history'(E, G),
18391        arg(2, E, I),
18392        setarg(2, E, active),
18393        ( arg(4, E, J),
18394          K is J+1,
18395          setarg(4, E, K)
18396        ),
18397        (   I==not_stored_yet
18398        ->  E=suspension(_, _, _, _, _, L, _),
18399            term_variables(L, M),
18400            nb_getval('$chr_store_global_list_chr_translate____background_info___2',
18401                      N),
18402            O=[E|N],
18403            b_setval('$chr_store_global_list_chr_translate____background_info___2',
18404                     O),
18405            (   N=[P|_]
18406            ->  setarg(5, P, O)
18407            ;   true
18408            ),
18409            attach_background_info___2(M, E)
18410        ;   true
18411        ),
18412        copy_term_nat(C-D, F-Q),
18413        get_bg_info_answer([Q]),
18414        (   E=suspension(_, active, _, K, _, _, _)
18415        ->  setarg(2, E, inactive),
18416            background_info___2__0__0__1(B, C, D, E)
18417        ;   true
18418        )
18419    ;   background_info___2__0__0__1(B, C, D, E)
18420    ).
18421background_info___2__0(A, B, C) :-
18422    (   var(C)
18423    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
18424        'chr gen_id'(D)
18425    ;   true
18426    ),
18427    background_info___2__1(A, B, C).
18428background_info___2__1(_, _, A) :-
18429    arg(2, A, B),
18430    setarg(2, A, active),
18431    arg(4, A, C),
18432    D is C+1,
18433    setarg(4, A, D),
18434    (   B==not_stored_yet
18435    ->  A=suspension(_, _, _, _, _, E, _),
18436        term_variables(E, F),
18437        nb_getval('$chr_store_global_list_chr_translate____background_info___2',
18438                  G),
18439        H=[A|G],
18440        b_setval('$chr_store_global_list_chr_translate____background_info___2',
18441                 H),
18442        (   G=[I|_]
18443        ->  setarg(5, I, H)
18444        ;   true
18445        ),
18446        attach_background_info___2(F, A)
18447    ;   true
18448    ).
18449get_bg_info(A) :-
18450    nb_getval('$chr_store_global_ground_chr_translate____background_info___1',
18451              B),
18452    member(C, B),
18453    C=suspension(_, active, _, D),
18454    !,
18455    A=D.
18456get_bg_info([]).
18457get_bg_info(A, B) :-
18458    get_bg_info___2__0(A, B, _).
18459get_bg_info___2__0(A, B, C) :-
18460    nb_getval('$chr_store_global_list_chr_translate____background_info___2',
18461              D),
18462    !,
18463    (   var(C)
18464    ->  C=suspension(E, not_stored_yet, t, 0, _, A, B),
18465        'chr gen_id'(E)
18466    ;   true
18467    ),
18468    get_bg_info___2__0__0__1(D, A, B, C).
18469get_bg_info___2__0__0__1([], A, B, C) :-
18470    get_bg_info___2__1(A, B, C).
18471get_bg_info___2__0__0__1([A|B], C, D, E) :-
18472    (   A=suspension(_, active, _, _, _, F, G),
18473        H=t(164, A, E),
18474        '$novel_production'(A, H),
18475        '$novel_production'(E, H),
18476        copy_term_nat(F, I),
18477        subsumes_term(I, C)
18478    ->  '$extend_history'(E, H),
18479        arg(2, E, J),
18480        setarg(2, E, active),
18481        ( arg(4, E, K),
18482          L is K+1,
18483          setarg(4, E, L)
18484        ),
18485        (   J==not_stored_yet
18486        ->  E=suspension(_, _, _, _, _, M, _),
18487            term_variables(M, N),
18488            nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',
18489                      O),
18490            P=[E|O],
18491            b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',
18492                     P),
18493            (   O=[Q|_]
18494            ->  setarg(5, Q, P)
18495            ;   true
18496            ),
18497            attach_get_bg_info___2(N, E)
18498        ;   true
18499        ),
18500        copy_term_nat(F-G, C-R),
18501        get_bg_info_answer([R]),
18502        (   E=suspension(_, active, _, L, _, _, _)
18503        ->  setarg(2, E, inactive),
18504            get_bg_info___2__0__0__1(B, C, D, E)
18505        ;   true
18506        )
18507    ;   get_bg_info___2__0__0__1(B, C, D, E)
18508    ).
18509get_bg_info___2__0(A, B, C) :-
18510    (   var(C)
18511    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
18512        'chr gen_id'(D)
18513    ;   true
18514    ),
18515    get_bg_info___2__1(A, B, C).
18516get_bg_info___2__1(_, A, B) :-
18517    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18518              C),
18519    member(D, C),
18520    D=suspension(_, active, _, E),
18521    !,
18522    setarg(2, D, removed),
18523    arg(3, D, F),
18524    (   var(F)
18525    ->  nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18526                  G),
18527        G=[_|H],
18528        b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18529                 H),
18530        (   H=[I|_]
18531        ->  setarg(3, I, _)
18532        ;   true
18533        )
18534    ;   F=[_, _|H],
18535        setarg(2, F, H),
18536        (   H=[I|_]
18537        ->  setarg(3, I, F)
18538        ;   true
18539        )
18540    ),
18541    (   var(B)
18542    ->  true
18543    ;   B=suspension(_, J, _, _, _, K, _),
18544        setarg(2, B, removed),
18545        (   J==not_stored_yet
18546        ->  L=[]
18547        ;   term_variables(K, L),
18548            arg(5, B, M),
18549            (   var(M)
18550            ->  nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',
18551                          N),
18552                N=[_|O],
18553                b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',
18554                         O),
18555                (   O=[P|_]
18556                ->  setarg(5, P, _)
18557                ;   true
18558                )
18559            ;   M=[_, _|O],
18560                setarg(2, M, O),
18561                (   O=[P|_]
18562                ->  setarg(5, P, M)
18563                ;   true
18564                )
18565            ),
18566            detach_get_bg_info___2(L, B)
18567        )
18568    ),
18569    A=E.
18570get_bg_info___2__1(_, A, B) :-
18571    (   var(B)
18572    ->  true
18573    ;   B=suspension(_, C, _, _, _, D, _),
18574        setarg(2, B, removed),
18575        (   C==not_stored_yet
18576        ->  E=[]
18577        ;   term_variables(D, E),
18578            arg(5, B, F),
18579            (   var(F)
18580            ->  nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',
18581                          G),
18582                G=[_|H],
18583                b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',
18584                         H),
18585                (   H=[I|_]
18586                ->  setarg(5, I, _)
18587                ;   true
18588                )
18589            ;   F=[_, _|H],
18590                setarg(2, F, H),
18591                (   H=[I|_]
18592                ->  setarg(5, I, F)
18593                ;   true
18594                )
18595            ),
18596            detach_get_bg_info___2(E, B)
18597        )
18598    ),
18599    A=[].
18600get_bg_info_answer(A) :-
18601    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18602              B),
18603    member(C, B),
18604    C=suspension(_, active, _, D),
18605    !,
18606    setarg(2, C, removed),
18607    arg(3, C, E),
18608    (   var(E)
18609    ->  nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18610                  F),
18611        F=[_|G],
18612        b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18613                 G),
18614        (   G=[H|_]
18615        ->  setarg(3, H, _)
18616        ;   true
18617        )
18618    ;   E=[_, _|G],
18619        setarg(2, E, G),
18620        (   G=[H|_]
18621        ->  setarg(3, H, E)
18622        ;   true
18623        )
18624    ),
18625    append(A, D, I),
18626    get_bg_info_answer(I).
18627get_bg_info_answer(A) :-
18628    B=suspension(C, active, _, A),
18629    'chr gen_id'(C),
18630    nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18631              D),
18632    E=[B|D],
18633    b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',
18634             E),
18635    (   D=[F|_]
18636    ->  setarg(3, F, E)
18637    ;   true
18638    ).
18639prev_guard_list(A, B, C, D, E, F, G, H) :-
18640    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I),
18641    lookup_ht(I, B, J),
18642    member(K, J),
18643    K=suspension(_, active, _, _, _, L),
18644    L=pragma(rule(M, N, O, _), _, _, _, _),
18645    M\==[],
18646    make_head_matchings_explicit(B, P, Q),
18647    setof(R,
18648          chr_translate:head_subset(P, D, R),
18649          S),
18650    !,
18651    append(M, N, T),
18652    compute_derived_info(S,
18653                         Q,
18654                         P,
18655                         T,
18656                         O,
18657                         G,
18658                         D,
18659                         H,
18660                         U,
18661                         V),
18662    append(F, U, W),
18663    normalize_conj_list(W, X),
18664    append(V, H, Y),
18665    normalize_conj_list(Y, Z),
18666    next_prev_rule(C, A1, B1),
18667    prev_guard_list(A,
18668                    A1,
18669                    B1,
18670                    D,
18671                    E,
18672                    X,
18673                    G,
18674                    Z).
18675prev_guard_list(A, B, C, D, E, F, G, H) :-
18676    (   B>0
18677    ->  next_prev_rule(C, I, J),
18678        prev_guard_list(A,
18679                        I,
18680                        J,
18681                        D,
18682                        E,
18683                        F,
18684                        G,
18685                        H)
18686    ;   prev_guard_list(A, D, E, F, G, H)
18687    ).
18688prev_guard_list(A, B, C, D, E, F) :-
18689    prev_guard_list___6__0(A,
18690                           B,
18691                           C,
18692                           D,
18693                           E,
18694                           F,
18695                           _).
18696prev_guard_list___6__0(A, B, C, D, E, F, _) :-
18697    F\==[],
18698    !,
18699    head_types_modes_condition(F, B, G),
18700    conj2list(G, H),
18701    term_variables(B, I),
18702    append([chr_pp_headvariables(I)|H], D, J),
18703    normalize_conj_list(J, K),
18704    append(B, K, L),
18705    add_background_info([C|L], M),
18706    append(K, M, N),
18707    normalize_conj_list(N, O),
18708    prev_guard_list(A, B, C, O, E, []).
18709prev_guard_list___6__0(A, B, C, D, E, F, G) :-
18710    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', H),
18711    lookup_ht(H, A, I),
18712    (   member(J, I),
18713        J=suspension(_, active, _, _, _, K),
18714        K=pragma(rule(L, M, C, N), O, P, Q, A),
18715        C\==true,
18716        append(E, D, R),
18717        (   conj2list(C, S),
18718            append(R, S, T),
18719            guard_entailment:entails_guard(T, fail)
18720        ->  U=fail
18721        ;   simplify_guard(C, N, R, U, V)
18722        ),
18723        C\==U,
18724        !,
18725        setarg(2, J, removed),
18726        arg(4, J, W),
18727        (   var(W)
18728        ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
18729                      X),
18730            X=[_|Y],
18731            b_setval('$chr_store_global_ground_chr_translate____rule___2',
18732                     Y),
18733            (   Y=[Z|_]
18734            ->  setarg(4, Z, _)
18735            ;   true
18736            )
18737        ;   W=[_, _|Y],
18738            setarg(2, W, Y),
18739            (   Y=[Z|_]
18740            ->  setarg(4, Z, W)
18741            ;   true
18742            )
18743        ),
18744        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', A1),
18745        delete_ht(A1, A, J),
18746        rule(A,
18747             pragma(rule(L, M, U, V),
18748                    O,
18749                    P,
18750                    Q,
18751                    A)),
18752        prev_guard_list(A, B, U, D, E, [])
18753    ;   !,
18754        G=suspension(B1, not_stored_yet, t, _, A, B, C, D, E, F),
18755        'chr gen_id'(B1),
18756        prev_guard_list___6__0__0__3(I,
18757                                     A,
18758                                     B,
18759                                     C,
18760                                     D,
18761                                     E,
18762                                     F,
18763                                     G)
18764    ).
18765prev_guard_list___6__0__0__3([], A, B, C, D, E, F, G) :-
18766    prev_guard_list___6__1(A,
18767                           B,
18768                           C,
18769                           D,
18770                           E,
18771                           F,
18772                           G).
18773prev_guard_list___6__0__0__3([A|B], C, D, E, F, G, H, I) :-
18774    (   A=suspension(_, active, _, _, J, K),
18775        J==C,
18776        L=t(178, I, A),
18777        '$novel_production'(I, L),
18778        '$novel_production'(A, L),
18779        chr_pp_flag(check_impossible_rules, on),
18780        K=pragma(rule(_, _, E, _), _, _, _, C),
18781        conj2list(E, M),
18782        append(G, F, N),
18783        append(N, M, O),
18784        guard_entailment:entails_guard(O, fail)
18785    ->  '$extend_history'(I, L),
18786        arg(2, I, P),
18787        setarg(2, I, active),
18788        (   P==not_stored_yet
18789        ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
18790                      Q),
18791            R=[I|Q],
18792            b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
18793                     R),
18794            (   Q=[S|_]
18795            ->  setarg(4, S, R)
18796            ;   true
18797            ),
18798            nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
18799                      T),
18800            insert_ht(T, C, I)
18801        ;   true
18802        ),
18803        chr_warning(weird_program,
18804                    'Heads will never match or guard will always fail in ~@.\n\tThis rule will never fire!\n',
18805                    [format_rule(K)]),
18806        set_all_passive(C),
18807        (   I=suspension(_, active, _, _, _, _, _, _, _, _)
18808        ->  setarg(2, I, inactive),
18809            prev_guard_list___6__0__0__3(B,
18810                                         C,
18811                                         D,
18812                                         E,
18813                                         F,
18814                                         G,
18815                                         H,
18816                                         I)
18817        ;   true
18818        )
18819    ;   prev_guard_list___6__0__0__3(B,
18820                                     C,
18821                                     D,
18822                                     E,
18823                                     F,
18824                                     G,
18825                                     H,
18826                                     I)
18827    ).
18828prev_guard_list___6__0(A, B, C, D, E, F, G) :-
18829    G=suspension(H, not_stored_yet, t, _, A, B, C, D, E, F),
18830    'chr gen_id'(H),
18831    prev_guard_list___6__1(A,
18832                           B,
18833                           C,
18834                           D,
18835                           E,
18836                           F,
18837                           G).
18838prev_guard_list___6__1(A, B, C, D, E, F, G) :-
18839    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', H),
18840    lookup_ht(H, A, I),
18841    !,
18842    prev_guard_list___6__1__0__4(I,
18843                                 A,
18844                                 B,
18845                                 C,
18846                                 D,
18847                                 E,
18848                                 F,
18849                                 G).
18850prev_guard_list___6__1__0__4([], A, B, C, D, E, F, G) :-
18851    prev_guard_list___6__2(A,
18852                           B,
18853                           C,
18854                           D,
18855                           E,
18856                           F,
18857                           G).
18858prev_guard_list___6__1__0__4([A|B], C, D, E, F, G, H, I) :-
18859    (   A=suspension(_, active, _, _, J, K),
18860        J==C,
18861        K=pragma(rule(L, M, E, N), O, P, Q, C),
18862        simplify_heads(G, F, E, N, R, S),
18863        R\==[],
18864        extract_arguments(L, T),
18865        extract_arguments(M, U),
18866        extract_arguments(D, V),
18867        replace_some_heads(T,
18868                           U,
18869                           V,
18870                           R,
18871                           W,
18872                           X,
18873                           E,
18874                           N,
18875                           Y),
18876        substitute_arguments(L, W, Z),
18877        substitute_arguments(M, X, A1),
18878        append(S, Y, B1),
18879        list2conj(B1, C1),
18880        D1=pragma(rule(Z, A1, E, (C1, N)), O, P, Q, C),
18881        (   L\==Z
18882        ;   M\==A1
18883        )
18884    ->  setarg(2, A, removed),
18885        ( arg(4, A, E1),
18886          (   var(E1)
18887          ->  nb_getval('$chr_store_global_ground_chr_translate____rule___2',
18888                        F1),
18889              F1=[_|G1],
18890              b_setval('$chr_store_global_ground_chr_translate____rule___2',
18891                       G1),
18892              (   G1=[H1|_]
18893              ->  setarg(4, H1, _)
18894              ;   true
18895              )
18896          ;   E1=[_, _|G1],
18897              setarg(2, E1, G1),
18898              (   G1=[H1|_]
18899              ->  setarg(4, H1, E1)
18900              ;   true
18901              )
18902          )
18903        ),
18904        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I1),
18905        delete_ht(I1, C, A),
18906        arg(2, I, J1),
18907        setarg(2, I, active),
18908        (   J1==not_stored_yet
18909        ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
18910                      K1),
18911            L1=[I|K1],
18912            b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
18913                     L1),
18914            (   K1=[M1|_]
18915            ->  setarg(4, M1, L1)
18916            ;   true
18917            ),
18918            nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
18919                      N1),
18920            insert_ht(N1, C, I)
18921        ;   true
18922        ),
18923        rule(C, D1),
18924        (   I=suspension(_, active, _, _, _, _, _, _, _, _)
18925        ->  setarg(2, I, inactive),
18926            prev_guard_list___6__1__0__4(B,
18927                                         C,
18928                                         D,
18929                                         E,
18930                                         F,
18931                                         G,
18932                                         H,
18933                                         I)
18934        ;   true
18935        )
18936    ;   prev_guard_list___6__1__0__4(B,
18937                                     C,
18938                                     D,
18939                                     E,
18940                                     F,
18941                                     G,
18942                                     H,
18943                                     I)
18944    ).
18945prev_guard_list___6__1(A, B, C, D, E, F, G) :-
18946    prev_guard_list___6__2(A,
18947                           B,
18948                           C,
18949                           D,
18950                           E,
18951                           F,
18952                           G).
18953prev_guard_list___6__2(A, B, C, D, E, F, G) :-
18954    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', H),
18955    lookup_ht(H, A, I),
18956    !,
18957    prev_guard_list___6__2__0__5(I,
18958                                 A,
18959                                 B,
18960                                 C,
18961                                 D,
18962                                 E,
18963                                 F,
18964                                 G).
18965prev_guard_list___6__2__0__5([], A, B, C, D, E, F, G) :-
18966    prev_guard_list___6__3(A,
18967                           B,
18968                           C,
18969                           D,
18970                           E,
18971                           F,
18972                           G).
18973prev_guard_list___6__2__0__5([A|B], C, D, E, F, G, H, I) :-
18974    (   A=suspension(_, active, _, _, J, K),
18975        J==C,
18976        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
18977                  L),
18978        lookup_ht(L, C, M)
18979    ->  prev_guard_list___6__2__1__5(M,
18980                                     K,
18981                                     A,
18982                                     B,
18983                                     C,
18984                                     D,
18985                                     E,
18986                                     F,
18987                                     G,
18988                                     H,
18989                                     I)
18990    ;   prev_guard_list___6__2__0__5(B,
18991                                     C,
18992                                     D,
18993                                     E,
18994                                     F,
18995                                     G,
18996                                     H,
18997                                     I)
18998    ).
18999prev_guard_list___6__2__1__5([], _, _, A, B, C, D, E, F, G, H) :-
19000    prev_guard_list___6__2__0__5(A,
19001                                 B,
19002                                 C,
19003                                 D,
19004                                 E,
19005                                 F,
19006                                 G,
19007                                 H).
19008prev_guard_list___6__2__1__5([A|B], C, D, E, F, G, H, I, J, K, L) :-
19009    (   A=suspension(_, active, _, _, M, N, O, _, _),
19010        O==F,
19011        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
19012                  P),
19013        lookup_ht(P, k(M, F), Q)
19014    ->  prev_guard_list___6__2__2__5(Q,
19015                                     M,
19016                                     N,
19017                                     A,
19018                                     B,
19019                                     C,
19020                                     D,
19021                                     E,
19022                                     F,
19023                                     G,
19024                                     H,
19025                                     I,
19026                                     J,
19027                                     K,
19028                                     L)
19029    ;   prev_guard_list___6__2__1__5(B,
19030                                     C,
19031                                     D,
19032                                     E,
19033                                     F,
19034                                     G,
19035                                     H,
19036                                     I,
19037                                     J,
19038                                     K,
19039                                     L)
19040    ).
19041prev_guard_list___6__2__2__5([], _, _, _, A, B, C, D, E, F, G, H, I, J, K) :-
19042    prev_guard_list___6__2__1__5(A,
19043                                 B,
19044                                 C,
19045                                 D,
19046                                 E,
19047                                 F,
19048                                 G,
19049                                 H,
19050                                 I,
19051                                 J,
19052                                 K).
19053prev_guard_list___6__2__2__5([A|B], C, D, E, F, G, H, I, J, K, L, M, N, O, P) :-
19054    (   A=suspension(_, active, _, _, Q, R, S, T, _),
19055        A\==E,
19056        Q==C,
19057        S==J,
19058        nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19059                  U)
19060    ->  prev_guard_list___6__2__3__5(U,
19061                                     R,
19062                                     T,
19063                                     A,
19064                                     B,
19065                                     C,
19066                                     D,
19067                                     E,
19068                                     F,
19069                                     G,
19070                                     H,
19071                                     I,
19072                                     J,
19073                                     K,
19074                                     L,
19075                                     M,
19076                                     N,
19077                                     O,
19078                                     P)
19079    ;   prev_guard_list___6__2__2__5(B,
19080                                     C,
19081                                     D,
19082                                     E,
19083                                     F,
19084                                     G,
19085                                     H,
19086                                     I,
19087                                     J,
19088                                     K,
19089                                     L,
19090                                     M,
19091                                     N,
19092                                     O,
19093                                     P)
19094    ).
19095prev_guard_list___6__2__3__5([], _, _, _, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) :-
19096    prev_guard_list___6__2__2__5(A,
19097                                 B,
19098                                 C,
19099                                 D,
19100                                 E,
19101                                 F,
19102                                 G,
19103                                 H,
19104                                 I,
19105                                 J,
19106                                 K,
19107                                 L,
19108                                 M,
19109                                 N,
19110                                 O).
19111prev_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) :-
19112    (   A=suspension(_, active, _, U),
19113        C<H,
19114        chr_pp_flag(occurrence_subsumption, on),
19115        K=pragma(rule(V, _, _, _), _, _, _, _),
19116        V\==[],
19117        \+ tree_set_memberchk(G, U)
19118    ->  setarg(2, A, removed),
19119        arg(3, A, W),
19120        (   var(W)
19121        ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19122                      X),
19123            X=[_|Y],
19124            b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19125                     Y),
19126            (   Y=[Z|_]
19127            ->  setarg(3, Z, _)
19128            ;   true
19129            )
19130        ;   W=[_, _|Y],
19131            setarg(2, W, Y),
19132            (   Y=[Z|_]
19133            ->  setarg(3, Z, W)
19134            ;   true
19135            )
19136        ),
19137        arg(2, T, A1),
19138        setarg(2, T, active),
19139        (   A1==not_stored_yet
19140        ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19141                      B1),
19142            C1=[T|B1],
19143            b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19144                     C1),
19145            (   B1=[D1|_]
19146            ->  setarg(4, D1, C1)
19147            ;   true
19148            ),
19149            nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19150                      E1),
19151            insert_ht(E1, N, T)
19152        ;   true
19153        ),
19154        first_occ_in_rule(N, G, C, D),
19155        tree_set_add(U, G, F1),
19156        multiple_occ_constraints_checked(F1),
19157        (   T=suspension(_, active, _, _, _, _, _, _, _, _)
19158        ->  setarg(2, T, inactive),
19159            prev_guard_list___6__2__3__5(B,
19160                                         C,
19161                                         D,
19162                                         E,
19163                                         F,
19164                                         G,
19165                                         H,
19166                                         I,
19167                                         J,
19168                                         K,
19169                                         L,
19170                                         M,
19171                                         N,
19172                                         O,
19173                                         P,
19174                                         Q,
19175                                         R,
19176                                         S,
19177                                         T)
19178        ;   true
19179        )
19180    ;   prev_guard_list___6__2__3__5(B,
19181                                     C,
19182                                     D,
19183                                     E,
19184                                     F,
19185                                     G,
19186                                     H,
19187                                     I,
19188                                     J,
19189                                     K,
19190                                     L,
19191                                     M,
19192                                     N,
19193                                     O,
19194                                     P,
19195                                     Q,
19196                                     R,
19197                                     S,
19198                                     T)
19199    ).
19200prev_guard_list___6__2(A, B, C, D, E, F, G) :-
19201    prev_guard_list___6__3(A,
19202                           B,
19203                           C,
19204                           D,
19205                           E,
19206                           F,
19207                           G).
19208prev_guard_list___6__3(A, _, _, _, _, _, B) :-
19209    nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19210              C),
19211    member(D, C),
19212    D=suspension(_, active, _, _),
19213    !,
19214    setarg(2, D, removed),
19215    arg(3, D, E),
19216    (   var(E)
19217    ->  nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19218                  F),
19219        F=[_|G],
19220        b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19221                 G),
19222        (   G=[H|_]
19223        ->  setarg(3, H, _)
19224        ;   true
19225        )
19226    ;   E=[_, _|G],
19227        setarg(2, E, G),
19228        (   G=[H|_]
19229        ->  setarg(3, H, E)
19230        ;   true
19231        )
19232    ),
19233    (   var(B)
19234    ->  true
19235    ;   arg(2, B, I),
19236        setarg(2, B, removed),
19237        (   I==not_stored_yet
19238        ->  true
19239        ;   arg(4, B, J),
19240            (   var(J)
19241            ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19242                          K),
19243                K=[_|L],
19244                b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19245                         L),
19246                (   L=[M|_]
19247                ->  setarg(4, M, _)
19248                ;   true
19249                )
19250            ;   J=[_, _|L],
19251                setarg(2, J, L),
19252                (   L=[M|_]
19253                ->  setarg(4, M, J)
19254                ;   true
19255                )
19256            ),
19257            nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19258                      N),
19259            delete_ht(N, A, B)
19260        )
19261    ).
19262prev_guard_list___6__3(A, _, _, _, _, _, B) :-
19263    arg(2, B, C),
19264    setarg(2, B, active),
19265    (   C==not_stored_yet
19266    ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19267                  D),
19268        E=[B|D],
19269        b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19270                 E),
19271        (   D=[F|_]
19272        ->  setarg(4, F, E)
19273        ;   true
19274        ),
19275        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19276                  G),
19277        insert_ht(G, A, B)
19278    ;   true
19279    ).
19280simplify_guards(A) :-
19281    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', B),
19282    lookup_ht(B, A, C),
19283    member(D, C),
19284    D=suspension(_, active, _, _, _, E),
19285    !,
19286    E=pragma(rule(F, G, H, _), ids(I, J), _, _, A),
19287    append(F, G, K),
19288    make_head_matchings_explicit_not_negated(K, L, M),
19289    tree_set_empty(N),
19290    multiple_occ_constraints_checked(N),
19291    apply_guard_wrt_term(K, H, O),
19292    append(I, J, P),
19293    findall(tuple(Q, R, A)-(-A),
19294            ( member(S, P),
19295              get_occurrence_from_id(Q, R, A, S)
19296            ),
19297            T),
19298    empty_q(U),
19299    insert_list_q(T, U, V),
19300    next_prev_rule(V, _, W),
19301    next_prev_rule(W, X, Y),
19302    prev_guard_list(A,
19303                    X,
19304                    Y,
19305                    L,
19306                    H,
19307                    [],
19308                    M,
19309                    [O]),
19310    Z is A+1,
19311    simplify_guards(Z).
19312simplify_guards(_).
19313set_all_passive(A) :-
19314    set_all_passive___1__0(A, _).
19315set_all_passive___1__0(A, B) :-
19316    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3', C),
19317    lookup_ht(C, A, D),
19318    !,
19319    B=suspension(E, not_stored_yet, t, A),
19320    'chr gen_id'(E),
19321    set_all_passive___1__0__0__1(D, A, B).
19322set_all_passive___1__0__0__1([], A, B) :-
19323    set_all_passive___1__1(A, B).
19324set_all_passive___1__0__0__1([A|B], C, D) :-
19325    (   A=suspension(_, active, _, _, _, _, E, F, _),
19326        E==C,
19327        G=t(180, D, A),
19328        '$novel_production'(D, G),
19329        '$novel_production'(A, G)
19330    ->  '$extend_history'(D, G),
19331        arg(2, D, H),
19332        setarg(2, D, active),
19333        (   H==not_stored_yet
19334        ->  nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
19335                      I),
19336            insert_ht(I, C, D)
19337        ;   true
19338        ),
19339        passive(C, F),
19340        (   D=suspension(_, active, _, _)
19341        ->  setarg(2, D, inactive),
19342            set_all_passive___1__0__0__1(B, C, D)
19343        ;   true
19344        )
19345    ;   set_all_passive___1__0__0__1(B, C, D)
19346    ).
19347set_all_passive___1__0(A, B) :-
19348    B=suspension(C, not_stored_yet, t, A),
19349    'chr gen_id'(C),
19350    set_all_passive___1__1(A, B).
19351set_all_passive___1__1(A, B) :-
19352    (   var(B)
19353    ->  true
19354    ;   arg(2, B, C),
19355        setarg(2, B, removed),
19356        (   C==not_stored_yet
19357        ->  true
19358        ;   nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',
19359                      D),
19360            delete_ht(D, A, B)
19361        )
19362    ).
19363precompute_head_matchings :-
19364    precompute_head_matchings___0__0(_).
19365precompute_head_matchings___0__0(A) :-
19366    nb_getval('$chr_store_global_ground_chr_translate____rule___2', B),
19367    !,
19368    A=suspension(C, not_stored_yet, t, _),
19369    'chr gen_id'(C),
19370    precompute_head_matchings___0__0__0__1(B, A).
19371precompute_head_matchings___0__0__0__1([], A) :-
19372    precompute_head_matchings___0__1(A).
19373precompute_head_matchings___0__0__0__1([A|B], C) :-
19374    (   A=suspension(_, active, _, _, D, E),
19375        F=t(174, A, C),
19376        '$novel_production'(A, F),
19377        '$novel_production'(C, F)
19378    ->  '$extend_history'(C, F),
19379        arg(2, C, G),
19380        setarg(2, C, active),
19381        (   G==not_stored_yet
19382        ->  nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19383                      H),
19384            I=[C|H],
19385            b_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19386                     I),
19387            (   H=[J|_]
19388            ->  setarg(4, J, I)
19389            ;   true
19390            )
19391        ;   true
19392        ),
19393        E=pragma(rule(K, L, _, _), _, _, _, _),
19394        append(K, L, M),
19395        make_head_matchings_explicit_(M, N, O),
19396        copy_term_nat(N-O, P-Q),
19397        make_head_matchings_explicit_memo_table(D, P, Q),
19398        (   C=suspension(_, active, _, _)
19399        ->  setarg(2, C, inactive),
19400            precompute_head_matchings___0__0__0__1(B, C)
19401        ;   true
19402        )
19403    ;   precompute_head_matchings___0__0__0__1(B, C)
19404    ).
19405precompute_head_matchings___0__0(A) :-
19406    A=suspension(B, not_stored_yet, t, _),
19407    'chr gen_id'(B),
19408    precompute_head_matchings___0__1(A).
19409precompute_head_matchings___0__1(A) :-
19410    (   var(A)
19411    ->  true
19412    ;   arg(2, A, B),
19413        setarg(2, A, removed),
19414        (   B==not_stored_yet
19415        ->  true
19416        ;   arg(4, A, C),
19417            (   var(C)
19418            ->  nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19419                          D),
19420                D=[_|E],
19421                b_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',
19422                         E),
19423                (   E=[F|_]
19424                ->  setarg(4, F, _)
19425                ;   true
19426                )
19427            ;   C=[_, _|E],
19428                setarg(2, C, E),
19429                (   E=[F|_]
19430                ->  setarg(4, F, C)
19431                ;   true
19432                )
19433            )
19434        )
19435    ).
19436make_head_matchings_explicit_memo_table(A, B, C) :-
19437    D=suspension(E, active, A, B, C),
19438    'chr gen_id'(E),
19439    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
19440              F),
19441    insert_ht(F, A, D).
19442make_head_matchings_explicit_memo_lookup(A, B, C) :-
19443    nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',
19444              D),
19445    lookup_ht(D, A, E),
19446    member(F, E),
19447    F=suspension(_, active, _, G, H),
19448    !,
19449    B=G,
19450    C=H.
19451make_head_matchings_explicit_memo_lookup(_, _, _) :-
19452    fail.
19453first_occ_in_rule(A, B, C, _) :-
19454    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
19455              D),
19456    lookup_ht(D, k(B, A), E),
19457    member(F, E),
19458    F=suspension(_, active, _, _, _, G, _, H, _),
19459    G<C,
19460    !,
19461    first_occ_in_rule(A, B, G, H).
19462first_occ_in_rule(A, B, C, D) :-
19463    B=E/F,
19464    functor(G, E, F),
19465    next_occ_in_rule(A, B, C, D, [], G).
19466next_occ_in_rule(A, B, C, D, _, E) :-
19467    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1', F),
19468    lookup_ht(F, A, G),
19469    member(H, G),
19470    H=suspension(_, active, _, _, I),
19471    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-134',
19472              J),
19473    lookup_ht(J, k(B, A, I), K),
19474    member(L, K),
19475    L=suspension(_, active, _, _, _, M, _, _, _),
19476    M is C+1,
19477    !,
19478    next_occ_in_rule(A, B, M, D, _, E).
19479next_occ_in_rule(A, B, C, D, E, F) :-
19480    nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19481              G),
19482    lookup_ht(G, A, H),
19483    member(I, H),
19484    I=suspension(_, active, _, _, _, J, K, L, M, _),
19485    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', N),
19486    lookup_ht(N, A, O),
19487    member(P, O),
19488    P=suspension(_, active, _, _, _, Q),
19489    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
19490              R),
19491    lookup_ht(R, k(B, A), S),
19492    member(T, S),
19493    T=suspension(_, active, _, _, _, U, _, V, _),
19494    U is C+1,
19495    Q=pragma(rule(W, X, K, _), ids(_, _), _, _, A),
19496    !,
19497    append(W, X, Y),
19498    add_failing_occ(Q,
19499                    Y,
19500                    J,
19501                    D,
19502                    Z,
19503                    F,
19504                    M,
19505                    B,
19506                    A1),
19507    (   Z==[chr_pp_void_info]
19508    ->  next_occ_in_rule(A, B, U, V, E, F)
19509    ;   append(Z, E, B1),
19510        add_failing_occ(Q,
19511                        Y,
19512                        J,
19513                        V,
19514                        C1,
19515                        F,
19516                        M,
19517                        B,
19518                        D1),
19519        copy_term(L, E1),
19520        variable_replacement(L, E1, F1),
19521        copy_with_variable_replacement(L, G1, A1),
19522        copy_with_variable_replacement(L, H1, D1),
19523        copy_with_variable_replacement(H1, I1, F1),
19524        append(B1, G1, J1),
19525        append(J1, I1, K1),
19526        copy_with_variable_replacement(M, L1, A1),
19527        copy_with_variable_replacement(M, M1, D1),
19528        append(M1, K1, N1),
19529        append([chr_pp_active_constraint(F)|L1], N1, O1),
19530        list2conj(C1, P1),
19531        copy_term((B1, K1, O1, P1, F),
19532                  (_, _, Q1, R1, _)),
19533        (   P1\=chr_pp_void_info
19534        ->  (   guard_entailment:entails_guard(Q1, R1)
19535            ->  passive(A, V)
19536            ;   true
19537            )
19538        ;   true
19539        ),
19540        !,
19541        next_occ_in_rule(A, B, U, V, B1, F)
19542    ).
19543next_occ_in_rule(_, _, _, _, _, _).
19544multiple_occ_constraints_checked(A) :-
19545    nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19546              B),
19547    member(C, B),
19548    C=suspension(_, active, _, _, D, _, _, _, _, _),
19549    (   nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
19550                  E),
19551        lookup_ht(E, D, F),
19552        member(G, F),
19553        G=suspension(_, active, _, _, H, I, _, _, _),
19554        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', J),
19555        lookup_ht(J, D, K),
19556        member(L, K),
19557        L=suspension(_, active, _, _, _, M),
19558        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
19559                  N),
19560        lookup_ht(N, k(H, D), O),
19561        member(P, O),
19562        P=suspension(_, active, _, _, _, Q, _, R, _),
19563        P\==G,
19564        Q<I,
19565        chr_pp_flag(occurrence_subsumption, on),
19566        M=pragma(rule(S, _, _, _), _, _, _, _),
19567        S\==[],
19568        \+ tree_set_memberchk(H, A),
19569        !,
19570        first_occ_in_rule(D, H, Q, R),
19571        tree_set_add(A, H, T),
19572        multiple_occ_constraints_checked(T)
19573    ;   !,
19574        setarg(2, C, removed),
19575        arg(4, C, U),
19576        (   var(U)
19577        ->  nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19578                      V),
19579            V=[_|W],
19580            b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',
19581                     W),
19582            (   W=[X|_]
19583            ->  setarg(4, X, _)
19584            ;   true
19585            )
19586        ;   U=[_, _|W],
19587            setarg(2, U, W),
19588            (   W=[X|_]
19589            ->  setarg(4, X, U)
19590            ;   true
19591            )
19592        ),
19593        nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',
19594                  Y),
19595        delete_ht(Y, D, C)
19596    ).
19597multiple_occ_constraints_checked(A) :-
19598    B=suspension(C, active, _, A),
19599    'chr gen_id'(C),
19600    nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19601              D),
19602    E=[B|D],
19603    b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',
19604             E),
19605    (   D=[F|_]
19606    ->  setarg(3, F, E)
19607    ;   true
19608    ).
19609type_definition(A, B) :-
19610    type_definition___2__0(A, B, _).
19611type_definition___2__0(A, _, B) :-
19612    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19613              C),
19614    member(D, C),
19615    D=suspension(_, active, _, _, _, E, _),
19616    (   functor(A, F, G),
19617        functor(E, F, G),
19618        !,
19619        D=suspension(_, _, _, _, _, H, I),
19620        setarg(2, D, removed),
19621        term_variables(term(H, I), J),
19622        arg(5, D, K),
19623        (   var(K)
19624        ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19625                      L),
19626            L=[_|M],
19627            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19628                     M),
19629            (   M=[N|_]
19630            ->  setarg(5, N, _)
19631            ;   true
19632            )
19633        ;   K=[_, _|M],
19634            setarg(2, K, M),
19635            (   M=[N|_]
19636            ->  setarg(5, N, K)
19637            ;   true
19638            )
19639        ),
19640        detach_type_definition___2(J, D),
19641        (   var(B)
19642        ->  true
19643        ;   B=suspension(_, O, _, _, _, P, Q),
19644            setarg(2, B, removed),
19645            (   O==not_stored_yet
19646            ->  R=[]
19647            ;   term_variables(term(P, Q), R),
19648                arg(5, B, S),
19649                (   var(S)
19650                ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19651                              T),
19652                    T=[_|U],
19653                    b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19654                             U),
19655                    (   U=[V|_]
19656                    ->  setarg(5, V, _)
19657                    ;   true
19658                    )
19659                ;   S=[_, _|U],
19660                    setarg(2, S, U),
19661                    (   U=[V|_]
19662                    ->  setarg(5, V, S)
19663                    ;   true
19664                    )
19665                ),
19666                detach_type_definition___2(R, B)
19667            )
19668        ),
19669        chr_error(type_error,
19670                  'Multiple definitions for type: ~w/~w.\n',
19671                  [F, G])
19672    ;   functor(E, W, X),
19673        functor(A, W, X),
19674        !,
19675        D=suspension(_, _, _, _, _, Y, Z),
19676        setarg(2, D, removed),
19677        term_variables(term(Y, Z), A1),
19678        arg(5, D, B1),
19679        (   var(B1)
19680        ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19681                      C1),
19682            C1=[_|D1],
19683            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19684                     D1),
19685            (   D1=[E1|_]
19686            ->  setarg(5, E1, _)
19687            ;   true
19688            )
19689        ;   B1=[_, _|D1],
19690            setarg(2, B1, D1),
19691            (   D1=[E1|_]
19692            ->  setarg(5, E1, B1)
19693            ;   true
19694            )
19695        ),
19696        detach_type_definition___2(A1, D),
19697        (   var(B)
19698        ->  true
19699        ;   B=suspension(_, F1, _, _, _, G1, H1),
19700            setarg(2, B, removed),
19701            (   F1==not_stored_yet
19702            ->  I1=[]
19703            ;   term_variables(term(G1, H1), I1),
19704                arg(5, B, J1),
19705                (   var(J1)
19706                ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19707                              K1),
19708                    K1=[_|L1],
19709                    b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19710                             L1),
19711                    (   L1=[M1|_]
19712                    ->  setarg(5, M1, _)
19713                    ;   true
19714                    )
19715                ;   J1=[_, _|L1],
19716                    setarg(2, J1, L1),
19717                    (   L1=[M1|_]
19718                    ->  setarg(5, M1, J1)
19719                    ;   true
19720                    )
19721                ),
19722                detach_type_definition___2(I1, B)
19723            )
19724        ),
19725        chr_error(type_error,
19726                  'Multiple definitions for type: ~w/~w.\n',
19727                  [W, X])
19728    ).
19729type_definition___2__0(A, _, B) :-
19730    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', C),
19731    member(D, C),
19732    D=suspension(_, active, _, _, _, E, _),
19733    functor(A, F, G),
19734    functor(E, F, G),
19735    !,
19736    D=suspension(_, _, _, _, _, H, I),
19737    setarg(2, D, removed),
19738    term_variables(term(H, I), J),
19739    arg(5, D, K),
19740    (   var(K)
19741    ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
19742                  L),
19743        L=[_|M],
19744        b_setval('$chr_store_global_list_chr_translate____type_alias___2',
19745                 M),
19746        (   M=[N|_]
19747        ->  setarg(5, N, _)
19748        ;   true
19749        )
19750    ;   K=[_, _|M],
19751        setarg(2, K, M),
19752        (   M=[N|_]
19753        ->  setarg(5, N, K)
19754        ;   true
19755        )
19756    ),
19757    detach_type_alias___2(J, D),
19758    (   var(B)
19759    ->  true
19760    ;   B=suspension(_, O, _, _, _, P, Q),
19761        setarg(2, B, removed),
19762        (   O==not_stored_yet
19763        ->  R=[]
19764        ;   term_variables(term(P, Q), R),
19765            arg(5, B, S),
19766            (   var(S)
19767            ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19768                          T),
19769                T=[_|U],
19770                b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19771                         U),
19772                (   U=[V|_]
19773                ->  setarg(5, V, _)
19774                ;   true
19775                )
19776            ;   S=[_, _|U],
19777                setarg(2, S, U),
19778                (   U=[V|_]
19779                ->  setarg(5, V, S)
19780                ;   true
19781                )
19782            ),
19783            detach_type_definition___2(R, B)
19784        )
19785    ),
19786    chr_error(type_error,
19787              'Multiple definitions for type, once in a type definition and once as a type alias: ~w/~w.\n',
19788              [F, G]).
19789type_definition___2__0(A, B, C) :-
19790    nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
19791              D),
19792    !,
19793    (   var(C)
19794    ->  C=suspension(E, not_stored_yet, t, 0, _, A, B),
19795        'chr gen_id'(E)
19796    ;   true
19797    ),
19798    type_definition___2__0__0__5(D, A, B, C).
19799type_definition___2__0__0__5([], A, B, C) :-
19800    type_definition___2__1(A, B, C).
19801type_definition___2__0__0__5([A|B], C, D, E) :-
19802    (   A=suspension(_, active, _, F, G),
19803        nonvar(C),
19804        functor(C, H, I),
19805        functor(F, H, I)
19806    ->  A=suspension(_, _, _, J, _),
19807        setarg(2, A, removed),
19808        term_variables(J, K),
19809        ( arg(3, A, L),
19810          (   var(L)
19811          ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
19812                        M),
19813              M=[_|N],
19814              b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
19815                       N),
19816              (   N=[O|_]
19817              ->  setarg(3, O, _)
19818              ;   true
19819              )
19820          ;   L=[_, _|N],
19821              setarg(2, L, N),
19822              (   N=[O|_]
19823              ->  setarg(3, O, L)
19824              ;   true
19825              )
19826          )
19827        ),
19828        detach_unalias_type___2(K, A),
19829        arg(2, E, P),
19830        setarg(2, E, active),
19831        ( arg(4, E, Q),
19832          R is Q+1,
19833          setarg(4, E, R)
19834        ),
19835        (   P==not_stored_yet
19836        ->  E=suspension(_, _, _, _, _, S, T),
19837            term_variables(term(S, T), U),
19838            nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19839                      V),
19840            W=[E|V],
19841            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19842                     W),
19843            (   V=[X|_]
19844            ->  setarg(5, X, W)
19845            ;   true
19846            ),
19847            attach_type_definition___2(U, E)
19848        ;   true
19849        ),
19850        G=F,
19851        (   E=suspension(_, active, _, R, _, _, _)
19852        ->  setarg(2, E, inactive),
19853            type_definition___2__0__0__5(B, C, D, E)
19854        ;   true
19855        )
19856    ;   type_definition___2__0__0__5(B, C, D, E)
19857    ).
19858type_definition___2__0(A, B, C) :-
19859    (   var(C)
19860    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
19861        'chr gen_id'(D)
19862    ;   true
19863    ),
19864    type_definition___2__1(A, B, C).
19865type_definition___2__1(A, B, C) :-
19866    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
19867              D),
19868    !,
19869    type_definition___2__1__0__7(D, A, B, C).
19870type_definition___2__1__0__7([], A, B, C) :-
19871    type_definition___2__2(A, B, C).
19872type_definition___2__1__0__7([A|B], C, D, E) :-
19873    (   A=suspension(_, active, _, _),
19874        F=t(235, E, A),
19875        '$novel_production'(E, F),
19876        '$novel_production'(A, F)
19877    ->  '$extend_history'(E, F),
19878        arg(2, E, G),
19879        setarg(2, E, active),
19880        ( arg(4, E, H),
19881          I is H+1,
19882          setarg(4, E, I)
19883        ),
19884        (   G==not_stored_yet
19885        ->  E=suspension(_, _, _, _, _, J, K),
19886            term_variables(term(J, K), L),
19887            nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19888                      M),
19889            N=[E|M],
19890            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19891                     N),
19892            (   M=[O|_]
19893            ->  setarg(5, O, N)
19894            ;   true
19895            ),
19896            attach_type_definition___2(L, E)
19897        ;   true
19898        ),
19899        copy_term_nat(C-D, P-Q),
19900        maplist(dynamic_type_check_clause(P), Q, R),
19901        dynamic_type_check_clauses(R),
19902        (   E=suspension(_, active, _, I, _, _, _)
19903        ->  setarg(2, E, inactive),
19904            type_definition___2__1__0__7(B, C, D, E)
19905        ;   true
19906        )
19907    ;   type_definition___2__1__0__7(B, C, D, E)
19908    ).
19909type_definition___2__1(A, B, C) :-
19910    type_definition___2__2(A, B, C).
19911type_definition___2__2(A, B, C) :-
19912    nb_getval('$chr_store_global_list_chr_translate____atomic_type___1', D),
19913    !,
19914    type_definition___2__2__0__8(D, A, B, C).
19915type_definition___2__2__0__8([], A, B, C) :-
19916    type_definition___2__3(A, B, C).
19917type_definition___2__2__0__8([A|B], C, D, E) :-
19918    (   A=suspension(_, active, _, F),
19919        functor(F, G, H),
19920        functor(C, G, H)
19921    ->  A=suspension(_, _, _, I),
19922        setarg(2, A, removed),
19923        term_variables(I, J),
19924        ( arg(3, A, K),
19925          (   var(K)
19926          ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
19927                        L),
19928              L=[_|M],
19929              b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
19930                       M),
19931              (   M=[N|_]
19932              ->  setarg(3, N, _)
19933              ;   true
19934              )
19935          ;   K=[_, _|M],
19936              setarg(2, K, M),
19937              (   M=[N|_]
19938              ->  setarg(3, N, K)
19939              ;   true
19940              )
19941          )
19942        ),
19943        detach_atomic_type___1(J, A),
19944        arg(2, E, O),
19945        setarg(2, E, active),
19946        ( arg(4, E, P),
19947          Q is P+1,
19948          setarg(4, E, Q)
19949        ),
19950        (   O==not_stored_yet
19951        ->  E=suspension(_, _, _, _, _, R, S),
19952            term_variables(term(R, S), T),
19953            nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19954                      U),
19955            V=[E|U],
19956            b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19957                     V),
19958            (   U=[W|_]
19959            ->  setarg(5, W, V)
19960            ;   true
19961            ),
19962            attach_type_definition___2(T, E)
19963        ;   true
19964        ),
19965        maplist(atomic, D),
19966        (   E=suspension(_, active, _, Q, _, _, _)
19967        ->  setarg(2, E, inactive),
19968            type_definition___2__2__0__8(B, C, D, E)
19969        ;   true
19970        )
19971    ;   type_definition___2__2__0__8(B, C, D, E)
19972    ).
19973type_definition___2__2(A, B, C) :-
19974    type_definition___2__3(A, B, C).
19975type_definition___2__3(_, _, A) :-
19976    arg(2, A, B),
19977    setarg(2, A, active),
19978    arg(4, A, C),
19979    D is C+1,
19980    setarg(4, A, D),
19981    (   B==not_stored_yet
19982    ->  A=suspension(_, _, _, _, _, E, F),
19983        term_variables(term(E, F), G),
19984        nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
19985                  H),
19986        I=[A|H],
19987        b_setval('$chr_store_global_list_chr_translate____type_definition___2',
19988                 I),
19989        (   H=[J|_]
19990        ->  setarg(5, J, I)
19991        ;   true
19992        ),
19993        attach_type_definition___2(G, A)
19994    ;   true
19995    ).
19996type_alias(A, B) :-
19997    type_alias___2__0(A, B, _).
19998type_alias___2__0(A, B, C) :-
19999    var(A),
20000    !,
20001    (   var(C)
20002    ->  true
20003    ;   C=suspension(_, D, _, _, _, E, F),
20004        setarg(2, C, removed),
20005        (   D==not_stored_yet
20006        ->  G=[]
20007        ;   term_variables(term(E, F), G),
20008            arg(5, C, H),
20009            (   var(H)
20010            ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20011                          I),
20012                I=[_|J],
20013                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20014                         J),
20015                (   J=[K|_]
20016                ->  setarg(5, K, _)
20017                ;   true
20018                )
20019            ;   H=[_, _|J],
20020                setarg(2, H, J),
20021                (   J=[K|_]
20022                ->  setarg(5, K, H)
20023                ;   true
20024                )
20025            ),
20026            detach_type_alias___2(G, C)
20027        )
20028    ),
20029    chr_error(type_error,
20030              'Variable alias definition: "~w".\n',
20031              [(:-chr_type A==B)]).
20032type_alias___2__0(A, B, C) :-
20033    var(B),
20034    !,
20035    (   var(C)
20036    ->  true
20037    ;   C=suspension(_, D, _, _, _, E, F),
20038        setarg(2, C, removed),
20039        (   D==not_stored_yet
20040        ->  G=[]
20041        ;   term_variables(term(E, F), G),
20042            arg(5, C, H),
20043            (   var(H)
20044            ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20045                          I),
20046                I=[_|J],
20047                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20048                         J),
20049                (   J=[K|_]
20050                ->  setarg(5, K, _)
20051                ;   true
20052                )
20053            ;   H=[_, _|J],
20054                setarg(2, H, J),
20055                (   J=[K|_]
20056                ->  setarg(5, K, H)
20057                ;   true
20058                )
20059            ),
20060            detach_type_alias___2(G, C)
20061        )
20062    ),
20063    chr_error(type_error,
20064              'Variable alias definition: "~w".\n',
20065              [(:-chr_type A==B)]).
20066type_alias___2__0(A, B, C) :-
20067    subsumes_term(A, B),
20068    !,
20069    (   var(C)
20070    ->  true
20071    ;   C=suspension(_, D, _, _, _, E, F),
20072        setarg(2, C, removed),
20073        (   D==not_stored_yet
20074        ->  G=[]
20075        ;   term_variables(term(E, F), G),
20076            arg(5, C, H),
20077            (   var(H)
20078            ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20079                          I),
20080                I=[_|J],
20081                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20082                         J),
20083                (   J=[K|_]
20084                ->  setarg(5, K, _)
20085                ;   true
20086                )
20087            ;   H=[_, _|J],
20088                setarg(2, H, J),
20089                (   J=[K|_]
20090                ->  setarg(5, K, H)
20091                ;   true
20092                )
20093            ),
20094            detach_type_alias___2(G, C)
20095        )
20096    ),
20097    chr_error(type_error, 'Cyclic alias definition: "~w".\n', [A==B]).
20098type_alias___2__0(A, B, C) :-
20099    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', D),
20100    (   member(E, D),
20101        E=suspension(_, active, _, _, _, F, G),
20102        (   (   functor(A, H, I),
20103                functor(F, H, I),
20104                \+ A\=F,
20105                !,
20106                E=suspension(_, _, _, _, _, J, K),
20107                setarg(2, E, removed),
20108                term_variables(term(J, K), L),
20109                arg(5, E, M),
20110                (   var(M)
20111                ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20112                              N),
20113                    N=[_|O],
20114                    b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20115                             O),
20116                    (   O=[P|_]
20117                    ->  setarg(5, P, _)
20118                    ;   true
20119                    )
20120                ;   M=[_, _|O],
20121                    setarg(2, M, O),
20122                    (   O=[P|_]
20123                    ->  setarg(5, P, M)
20124                    ;   true
20125                    )
20126                ),
20127                detach_type_alias___2(L, E),
20128                (   var(C)
20129                ->  true
20130                ;   C=suspension(_, Q, _, _, _, R, S),
20131                    setarg(2, C, removed),
20132                    (   Q==not_stored_yet
20133                    ->  T=[]
20134                    ;   term_variables(term(R, S), T),
20135                        arg(5, C, U),
20136                        (   var(U)
20137                        ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20138                                      V),
20139                            V=[_|W],
20140                            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20141                                     W),
20142                            (   W=[X|_]
20143                            ->  setarg(5, X, _)
20144                            ;   true
20145                            )
20146                        ;   U=[_, _|W],
20147                            setarg(2, U, W),
20148                            (   W=[X|_]
20149                            ->  setarg(5, X, U)
20150                            ;   true
20151                            )
20152                        ),
20153                        detach_type_alias___2(T, C)
20154                    )
20155                ),
20156                copy_term_nat(A, Y),
20157                copy_term_nat(F, Z),
20158                Y=Z,
20159                chr_error(type_error,
20160                          'Ambiguous type aliases: you have defined \n\t`~w\'\n\t`~w\'\n\tresulting in two definitions for "~w".\n',
20161                          [A==B, F==G, Y])
20162            ;   functor(F, A1, B1),
20163                functor(A, A1, B1),
20164                \+ F\=A,
20165                !,
20166                E=suspension(_, _, _, _, _, C1, D1),
20167                setarg(2, E, removed),
20168                term_variables(term(C1, D1), E1),
20169                arg(5, E, F1),
20170                (   var(F1)
20171                ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20172                              G1),
20173                    G1=[_|H1],
20174                    b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20175                             H1),
20176                    (   H1=[I1|_]
20177                    ->  setarg(5, I1, _)
20178                    ;   true
20179                    )
20180                ;   F1=[_, _|H1],
20181                    setarg(2, F1, H1),
20182                    (   H1=[I1|_]
20183                    ->  setarg(5, I1, F1)
20184                    ;   true
20185                    )
20186                ),
20187                detach_type_alias___2(E1, E),
20188                (   var(C)
20189                ->  true
20190                ;   C=suspension(_, J1, _, _, _, K1, L1),
20191                    setarg(2, C, removed),
20192                    (   J1==not_stored_yet
20193                    ->  M1=[]
20194                    ;   term_variables(term(K1, L1), M1),
20195                        arg(5, C, N1),
20196                        (   var(N1)
20197                        ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20198                                      O1),
20199                            O1=[_|P1],
20200                            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20201                                     P1),
20202                            (   P1=[Q1|_]
20203                            ->  setarg(5, Q1, _)
20204                            ;   true
20205                            )
20206                        ;   N1=[_, _|P1],
20207                            setarg(2, N1, P1),
20208                            (   P1=[Q1|_]
20209                            ->  setarg(5, Q1, N1)
20210                            ;   true
20211                            )
20212                        ),
20213                        detach_type_alias___2(M1, C)
20214                    )
20215                ),
20216                copy_term_nat(F, R1),
20217                copy_term_nat(A, S1),
20218                R1=S1,
20219                chr_error(type_error,
20220                          'Ambiguous type aliases: you have defined \n\t`~w\'\n\t`~w\'\n\tresulting in two definitions for "~w".\n',
20221                          [F==G, A==B, R1])
20222            )
20223        ;   functor(F, T1, U1),
20224            functor(B, T1, U1),
20225            copy_term_nat((A, B, F, G),
20226                          (V1, W1, X1, Y1)),
20227            subsumes_term(X1, W1),
20228            !,
20229            (   var(C)
20230            ->  true
20231            ;   C=suspension(_, Z1, _, _, _, A2, B2),
20232                setarg(2, C, removed),
20233                (   Z1==not_stored_yet
20234                ->  C2=[]
20235                ;   term_variables(term(A2, B2), C2),
20236                    arg(5, C, D2),
20237                    (   var(D2)
20238                    ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20239                                  E2),
20240                        E2=[_|F2],
20241                        b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20242                                 F2),
20243                        (   F2=[G2|_]
20244                        ->  setarg(5, G2, _)
20245                        ;   true
20246                        )
20247                    ;   D2=[_, _|F2],
20248                        setarg(2, D2, F2),
20249                        (   F2=[G2|_]
20250                        ->  setarg(5, G2, D2)
20251                        ;   true
20252                        )
20253                    ),
20254                    detach_type_alias___2(C2, C)
20255                )
20256            ),
20257            type_alias(V1, Y1)
20258        )
20259    ;   !,
20260        (   var(C)
20261        ->  C=suspension(H2, not_stored_yet, t, 0, _, A, B),
20262            'chr gen_id'(H2)
20263        ;   true
20264        ),
20265        type_alias___2__0__0__7(D, A, B, C)
20266    ).
20267type_alias___2__0__0__7([], A, B, C) :-
20268    type_alias___2__1(A, B, C).
20269type_alias___2__0__0__7([A|B], C, D, E) :-
20270    (   A=suspension(_, active, _, _, _, F, G),
20271        functor(C, H, I),
20272        functor(G, H, I),
20273        copy_term_nat((F, G, C, D),
20274                      (J, K, L, M)),
20275        subsumes_term(L, K)
20276    ->  A=suspension(_, _, _, _, _, N, O),
20277        setarg(2, A, removed),
20278        term_variables(term(N, O), P),
20279        ( arg(5, A, Q),
20280          (   var(Q)
20281          ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20282                        R),
20283              R=[_|S],
20284              b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20285                       S),
20286              (   S=[T|_]
20287              ->  setarg(5, T, _)
20288              ;   true
20289              )
20290          ;   Q=[_, _|S],
20291              setarg(2, Q, S),
20292              (   S=[T|_]
20293              ->  setarg(5, T, Q)
20294              ;   true
20295              )
20296          )
20297        ),
20298        detach_type_alias___2(P, A),
20299        arg(2, E, U),
20300        setarg(2, E, active),
20301        ( arg(4, E, V),
20302          W is V+1,
20303          setarg(4, E, W)
20304        ),
20305        (   U==not_stored_yet
20306        ->  E=suspension(_, _, _, _, _, X, Y),
20307            term_variables(term(X, Y), Z),
20308            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20309                      A1),
20310            B1=[E|A1],
20311            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20312                     B1),
20313            (   A1=[C1|_]
20314            ->  setarg(5, C1, B1)
20315            ;   true
20316            ),
20317            attach_type_alias___2(Z, E)
20318        ;   true
20319        ),
20320        type_alias(J, M),
20321        (   E=suspension(_, active, _, W, _, _, _)
20322        ->  setarg(2, E, inactive),
20323            type_alias___2__0__0__7(B, C, D, E)
20324        ;   true
20325        )
20326    ;   type_alias___2__0__0__7(B, C, D, E)
20327    ).
20328type_alias___2__0(A, B, C) :-
20329    (   var(C)
20330    ->  C=suspension(D, not_stored_yet, t, 0, _, A, B),
20331        'chr gen_id'(D)
20332    ;   true
20333    ),
20334    type_alias___2__1(A, B, C).
20335type_alias___2__1(A, _, B) :-
20336    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20337              C),
20338    member(D, C),
20339    D=suspension(_, active, _, _, _, E, _),
20340    functor(E, F, G),
20341    functor(A, F, G),
20342    !,
20343    D=suspension(_, _, _, _, _, H, I),
20344    setarg(2, D, removed),
20345    term_variables(term(H, I), J),
20346    arg(5, D, K),
20347    (   var(K)
20348    ->  nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20349                  L),
20350        L=[_|M],
20351        b_setval('$chr_store_global_list_chr_translate____type_definition___2',
20352                 M),
20353        (   M=[N|_]
20354        ->  setarg(5, N, _)
20355        ;   true
20356        )
20357    ;   K=[_, _|M],
20358        setarg(2, K, M),
20359        (   M=[N|_]
20360        ->  setarg(5, N, K)
20361        ;   true
20362        )
20363    ),
20364    detach_type_definition___2(J, D),
20365    (   var(B)
20366    ->  true
20367    ;   B=suspension(_, O, _, _, _, P, Q),
20368        setarg(2, B, removed),
20369        (   O==not_stored_yet
20370        ->  R=[]
20371        ;   term_variables(term(P, Q), R),
20372            arg(5, B, S),
20373            (   var(S)
20374            ->  nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20375                          T),
20376                T=[_|U],
20377                b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20378                         U),
20379                (   U=[V|_]
20380                ->  setarg(5, V, _)
20381                ;   true
20382                )
20383            ;   S=[_, _|U],
20384                setarg(2, S, U),
20385                (   U=[V|_]
20386                ->  setarg(5, V, S)
20387                ;   true
20388                )
20389            ),
20390            detach_type_alias___2(R, B)
20391        )
20392    ),
20393    chr_error(type_error,
20394              'Multiple definitions for type, once in a type definition and once as a type alias: ~w/~w.\n',
20395              [F, G]).
20396type_alias___2__1(A, B, C) :-
20397    nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20398              D),
20399    !,
20400    type_alias___2__1__0__10(D, A, B, C).
20401type_alias___2__1__0__10([], A, B, C) :-
20402    type_alias___2__2(A, B, C).
20403type_alias___2__1__0__10([A|B], C, D, E) :-
20404    (   A=suspension(_, active, _, F, G),
20405        functor(C, H, I),
20406        functor(F, H, I),
20407        copy_term_nat((C, D), (J, K)),
20408        F=J
20409    ->  A=suspension(_, _, _, L, _),
20410        setarg(2, A, removed),
20411        term_variables(L, M),
20412        ( arg(3, A, N),
20413          (   var(N)
20414          ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20415                        O),
20416              O=[_|P],
20417              b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20418                       P),
20419              (   P=[Q|_]
20420              ->  setarg(3, Q, _)
20421              ;   true
20422              )
20423          ;   N=[_, _|P],
20424              setarg(2, N, P),
20425              (   P=[Q|_]
20426              ->  setarg(3, Q, N)
20427              ;   true
20428              )
20429          )
20430        ),
20431        detach_unalias_type___2(M, A),
20432        arg(2, E, R),
20433        setarg(2, E, active),
20434        ( arg(4, E, S),
20435          T is S+1,
20436          setarg(4, E, T)
20437        ),
20438        (   R==not_stored_yet
20439        ->  E=suspension(_, _, _, _, _, U, V),
20440            term_variables(term(U, V), W),
20441            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20442                      X),
20443            Y=[E|X],
20444            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20445                     Y),
20446            (   X=[Z|_]
20447            ->  setarg(5, Z, Y)
20448            ;   true
20449            ),
20450            attach_type_alias___2(W, E)
20451        ;   true
20452        ),
20453        unalias_type(K, G),
20454        (   E=suspension(_, active, _, T, _, _, _)
20455        ->  setarg(2, E, inactive),
20456            type_alias___2__1__0__10(B, C, D, E)
20457        ;   true
20458        )
20459    ;   type_alias___2__1__0__10(B, C, D, E)
20460    ).
20461type_alias___2__1(A, B, C) :-
20462    type_alias___2__2(A, B, C).
20463type_alias___2__2(A, B, C) :-
20464    nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
20465              D),
20466    !,
20467    type_alias___2__2__0__12(D, A, B, C).
20468type_alias___2__2__0__12([], A, B, C) :-
20469    type_alias___2__3(A, B, C).
20470type_alias___2__2__0__12([A|B], C, D, E) :-
20471    (   A=suspension(_, active, _, F, G, H, I),
20472        functor(C, J, K),
20473        functor(H, J, K)
20474    ->  A=suspension(_, _, _, _, _, L, _),
20475        setarg(2, A, removed),
20476        term_variables(L, M),
20477        ( arg(3, A, N),
20478          (   var(N)
20479          ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
20480                        O),
20481              O=[_|P],
20482              b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
20483                       P),
20484              (   P=[Q|_]
20485              ->  setarg(3, Q, _)
20486              ;   true
20487              )
20488          ;   N=[_, _|P],
20489              setarg(2, N, P),
20490              (   P=[Q|_]
20491              ->  setarg(3, Q, N)
20492              ;   true
20493              )
20494          )
20495        ),
20496        detach_ast_static_type_check_var___4(M, A),
20497        arg(2, E, R),
20498        setarg(2, E, active),
20499        ( arg(4, E, S),
20500          T is S+1,
20501          setarg(4, E, T)
20502        ),
20503        (   R==not_stored_yet
20504        ->  E=suspension(_, _, _, _, _, U, V),
20505            term_variables(term(U, V), W),
20506            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20507                      X),
20508            Y=[E|X],
20509            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20510                     Y),
20511            (   X=[Z|_]
20512            ->  setarg(5, Z, Y)
20513            ;   true
20514            ),
20515            attach_type_alias___2(W, E)
20516        ;   true
20517        ),
20518        copy_term_nat(C-D, H-A1),
20519        ast_static_type_check_var(F, G, A1, I),
20520        (   E=suspension(_, active, _, T, _, _, _)
20521        ->  setarg(2, E, inactive),
20522            type_alias___2__2__0__12(B, C, D, E)
20523        ;   true
20524        )
20525    ;   type_alias___2__2__0__12(B, C, D, E)
20526    ).
20527type_alias___2__2(A, B, C) :-
20528    type_alias___2__3(A, B, C).
20529type_alias___2__3(A, B, C) :-
20530    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
20531              D),
20532    !,
20533    type_alias___2__3__0__13(D, A, B, C).
20534type_alias___2__3__0__13([], A, B, C) :-
20535    type_alias___2__4(A, B, C).
20536type_alias___2__3__0__13([A|B], C, D, E) :-
20537    (   A=suspension(_, active, _, _),
20538        F=t(236, E, A),
20539        '$novel_production'(E, F),
20540        '$novel_production'(A, F)
20541    ->  '$extend_history'(E, F),
20542        arg(2, E, G),
20543        setarg(2, E, active),
20544        ( arg(4, E, H),
20545          I is H+1,
20546          setarg(4, E, I)
20547        ),
20548        (   G==not_stored_yet
20549        ->  E=suspension(_, _, _, _, _, J, K),
20550            term_variables(term(J, K), L),
20551            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20552                      M),
20553            N=[E|M],
20554            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20555                     N),
20556            (   M=[O|_]
20557            ->  setarg(5, O, N)
20558            ;   true
20559            ),
20560            attach_type_alias___2(L, E)
20561        ;   true
20562        ),
20563        copy_term_nat(C-D, P-Q),
20564        dynamic_type_check_alias_clause(P, Q, R),
20565        dynamic_type_check_clauses([R]),
20566        (   E=suspension(_, active, _, I, _, _, _)
20567        ->  setarg(2, E, inactive),
20568            type_alias___2__3__0__13(B, C, D, E)
20569        ;   true
20570        )
20571    ;   type_alias___2__3__0__13(B, C, D, E)
20572    ).
20573type_alias___2__3(A, B, C) :-
20574    type_alias___2__4(A, B, C).
20575type_alias___2__4(A, B, C) :-
20576    nb_getval('$chr_store_global_list_chr_translate____atomic_type___1', D),
20577    !,
20578    type_alias___2__4__0__14(D, A, B, C).
20579type_alias___2__4__0__14([], A, B, C) :-
20580    type_alias___2__5(A, B, C).
20581type_alias___2__4__0__14([A|B], C, D, E) :-
20582    (   A=suspension(_, active, _, F),
20583        functor(F, G, H),
20584        functor(C, G, H)
20585    ->  A=suspension(_, _, _, I),
20586        setarg(2, A, removed),
20587        term_variables(I, J),
20588        ( arg(3, A, K),
20589          (   var(K)
20590          ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
20591                        L),
20592              L=[_|M],
20593              b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
20594                       M),
20595              (   M=[N|_]
20596              ->  setarg(3, N, _)
20597              ;   true
20598              )
20599          ;   K=[_, _|M],
20600              setarg(2, K, M),
20601              (   M=[N|_]
20602              ->  setarg(3, N, K)
20603              ;   true
20604              )
20605          )
20606        ),
20607        detach_atomic_type___1(J, A),
20608        arg(2, E, O),
20609        setarg(2, E, active),
20610        ( arg(4, E, P),
20611          Q is P+1,
20612          setarg(4, E, Q)
20613        ),
20614        (   O==not_stored_yet
20615        ->  E=suspension(_, _, _, _, _, R, S),
20616            term_variables(term(R, S), T),
20617            nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20618                      U),
20619            V=[E|U],
20620            b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20621                     V),
20622            (   U=[W|_]
20623            ->  setarg(5, W, V)
20624            ;   true
20625            ),
20626            attach_type_alias___2(T, E)
20627        ;   true
20628        ),
20629        atomic(D),
20630        copy_term_nat(C-D, F-X),
20631        atomic_type(X),
20632        (   E=suspension(_, active, _, Q, _, _, _)
20633        ->  setarg(2, E, inactive),
20634            type_alias___2__4__0__14(B, C, D, E)
20635        ;   true
20636        )
20637    ;   type_alias___2__4__0__14(B, C, D, E)
20638    ).
20639type_alias___2__4(A, B, C) :-
20640    type_alias___2__5(A, B, C).
20641type_alias___2__5(_, _, A) :-
20642    arg(2, A, B),
20643    setarg(2, A, active),
20644    arg(4, A, C),
20645    D is C+1,
20646    setarg(4, A, D),
20647    (   B==not_stored_yet
20648    ->  A=suspension(_, _, _, _, _, E, F),
20649        term_variables(term(E, F), G),
20650        nb_getval('$chr_store_global_list_chr_translate____type_alias___2',
20651                  H),
20652        I=[A|H],
20653        b_setval('$chr_store_global_list_chr_translate____type_alias___2',
20654                 I),
20655        (   H=[J|_]
20656        ->  setarg(5, J, I)
20657        ;   true
20658        ),
20659        attach_type_alias___2(G, A)
20660    ;   true
20661    ).
20662constraint_type(A, B) :-
20663    constraint_type___2__0(A, B, _).
20664constraint_type___2__0(A, B, C) :-
20665    nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
20666              D),
20667    !,
20668    C=suspension(E, not_stored_yet, _, A, B),
20669    'chr gen_id'(E),
20670    constraint_type___2__0__0__2(D, A, B, C).
20671constraint_type___2__0__0__2([], A, B, C) :-
20672    constraint_type___2__1(A, B, C).
20673constraint_type___2__0__0__2([A|B], C, D, E) :-
20674    (   A=suspension(_, active, _, _, _)
20675    ->  arg(2, E, F),
20676        setarg(2, E, active),
20677        (   F==not_stored_yet
20678        ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
20679                      G),
20680            H=[E|G],
20681            b_setval('$chr_store_global_ground_chr_translate____constraint_type___2',
20682                     H),
20683            (   G=[I|_]
20684            ->  setarg(3, I, H)
20685            ;   true
20686            ),
20687            nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
20688                      J),
20689            insert_ht(J, C, E)
20690        ;   true
20691        ),
20692        forall(( member(K, D),
20693                 sub_term(K, L)
20694               ),
20695               (   get_type_definition(L, _)
20696               ->  true
20697               ;   chr_error(type_error,
20698                             'Undefined type "~w" used in type declaration of "~w".\n',
20699                             [L, C])
20700               )),
20701        (   E=suspension(_, active, _, _, _)
20702        ->  setarg(2, E, inactive),
20703            constraint_type___2__0__0__2(B, C, D, E)
20704        ;   true
20705        )
20706    ;   constraint_type___2__0__0__2(B, C, D, E)
20707    ).
20708constraint_type___2__0(A, B, C) :-
20709    C=suspension(D, not_stored_yet, _, A, B),
20710    'chr gen_id'(D),
20711    constraint_type___2__1(A, B, C).
20712constraint_type___2__1(A, _, B) :-
20713    arg(2, B, C),
20714    setarg(2, B, active),
20715    (   C==not_stored_yet
20716    ->  nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
20717                  D),
20718        E=[B|D],
20719        b_setval('$chr_store_global_ground_chr_translate____constraint_type___2',
20720                 E),
20721        (   D=[F|_]
20722        ->  setarg(3, F, E)
20723        ;   true
20724        ),
20725        nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
20726                  G),
20727        insert_ht(G, A, B)
20728    ;   true
20729    ).
20730get_type_definition(A, _) :-
20731    \+ ground(A),
20732    !,
20733    chr_error(type_error,
20734              'Non-ground type in constraint definition: "~w".\n',
20735              [A]).
20736get_type_definition(A, B) :-
20737    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', C),
20738    member(D, C),
20739    D=suspension(_, active, _, _, _, E, F),
20740    functor(E, G, H),
20741    functor(A, G, H),
20742    copy_term_nat((E, F), (I, J)),
20743    I=A,
20744    !,
20745    (   get_type_definition(J, B)
20746    ->  true
20747    ;   chr_error(type_error,
20748                  'Could not find type definition for "~w" (accessed via alias "~w").\n',
20749                  [J, I]),
20750        fail
20751    ).
20752get_type_definition(A, B) :-
20753    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20754              C),
20755    member(D, C),
20756    D=suspension(_, active, _, _, _, E, F),
20757    nonvar(E),
20758    functor(E, G, H),
20759    functor(A, G, H),
20760    copy_term_nat((E, F), (I, J)),
20761    I=A,
20762    !,
20763    B=J.
20764get_type_definition(A, B) :-
20765    atomic_builtin_type(A, _, _),
20766    !,
20767    B=[A].
20768get_type_definition(A, B) :-
20769    compound_builtin_type(A, _, _, _),
20770    !,
20771    B=[A].
20772get_type_definition(_, _) :-
20773    fail.
20774get_constraint_type(A, B) :-
20775    nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',
20776              C),
20777    lookup_ht(C, A, D),
20778    member(E, D),
20779    E=suspension(_, active, _, _, F),
20780    !,
20781    B=F.
20782get_constraint_type(_, _) :-
20783    fail.
20784unalias_type(A, B) :-
20785    unalias_type___2__0(A, B, _).
20786unalias_type___2__0(A, B, C) :-
20787    var(A),
20788    !,
20789    (   var(C)
20790    ->  true
20791    ;   C=suspension(_, _, _, D, _),
20792        setarg(2, C, removed),
20793        term_variables(D, E),
20794        arg(3, C, F),
20795        (   var(F)
20796        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20797                      G),
20798            G=[_|H],
20799            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20800                     H),
20801            (   H=[I|_]
20802            ->  setarg(3, I, _)
20803            ;   true
20804            )
20805        ;   F=[_, _|H],
20806            setarg(2, F, H),
20807            (   H=[I|_]
20808            ->  setarg(3, I, F)
20809            ;   true
20810            )
20811        ),
20812        detach_unalias_type___2(E, C)
20813    ),
20814    B=A.
20815unalias_type___2__0(A, B, C) :-
20816    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', D),
20817    member(E, D),
20818    E=suspension(_, active, _, _, _, F, G),
20819    functor(F, H, I),
20820    functor(A, H, I),
20821    copy_term_nat((F, G), (J, K)),
20822    A=J,
20823    !,
20824    (   var(C)
20825    ->  true
20826    ;   C=suspension(_, _, _, L, _),
20827        setarg(2, C, removed),
20828        term_variables(L, M),
20829        arg(3, C, N),
20830        (   var(N)
20831        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20832                      O),
20833            O=[_|P],
20834            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20835                     P),
20836            (   P=[Q|_]
20837            ->  setarg(3, Q, _)
20838            ;   true
20839            )
20840        ;   N=[_, _|P],
20841            setarg(2, N, P),
20842            (   P=[Q|_]
20843            ->  setarg(3, Q, N)
20844            ;   true
20845            )
20846        ),
20847        detach_unalias_type___2(M, C)
20848    ),
20849    unalias_type(K, B).
20850unalias_type___2__0(A, B, C) :-
20851    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
20852              D),
20853    member(E, D),
20854    E=suspension(_, active, _, _, _, F, _),
20855    nonvar(F),
20856    functor(F, G, H),
20857    functor(A, G, H),
20858    !,
20859    (   var(C)
20860    ->  true
20861    ;   C=suspension(_, _, _, I, _),
20862        setarg(2, C, removed),
20863        term_variables(I, J),
20864        arg(3, C, K),
20865        (   var(K)
20866        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20867                      L),
20868            L=[_|M],
20869            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20870                     M),
20871            (   M=[N|_]
20872            ->  setarg(3, N, _)
20873            ;   true
20874            )
20875        ;   K=[_, _|M],
20876            setarg(2, K, M),
20877            (   M=[N|_]
20878            ->  setarg(3, N, K)
20879            ;   true
20880            )
20881        ),
20882        detach_unalias_type___2(J, C)
20883    ),
20884    B=A.
20885unalias_type___2__0(A, B, C) :-
20886    atomic_builtin_type(A, _, _),
20887    !,
20888    (   var(C)
20889    ->  true
20890    ;   C=suspension(_, _, _, D, _),
20891        setarg(2, C, removed),
20892        term_variables(D, E),
20893        arg(3, C, F),
20894        (   var(F)
20895        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20896                      G),
20897            G=[_|H],
20898            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20899                     H),
20900            (   H=[I|_]
20901            ->  setarg(3, I, _)
20902            ;   true
20903            )
20904        ;   F=[_, _|H],
20905            setarg(2, F, H),
20906            (   H=[I|_]
20907            ->  setarg(3, I, F)
20908            ;   true
20909            )
20910        ),
20911        detach_unalias_type___2(E, C)
20912    ),
20913    B=A.
20914unalias_type___2__0(A, B, C) :-
20915    compound_builtin_type(A, _, _, _),
20916    !,
20917    (   var(C)
20918    ->  true
20919    ;   C=suspension(_, _, _, D, _),
20920        setarg(2, C, removed),
20921        term_variables(D, E),
20922        arg(3, C, F),
20923        (   var(F)
20924        ->  nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20925                      G),
20926            G=[_|H],
20927            b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20928                     H),
20929            (   H=[I|_]
20930            ->  setarg(3, I, _)
20931            ;   true
20932            )
20933        ;   F=[_, _|H],
20934            setarg(2, F, H),
20935            (   H=[I|_]
20936            ->  setarg(3, I, F)
20937            ;   true
20938            )
20939        ),
20940        detach_unalias_type___2(E, C)
20941    ),
20942    B=A.
20943unalias_type___2__0(A, B, C) :-
20944    (   var(C)
20945    ->  C=suspension(D, active, _, A, B),
20946        term_variables(A, E),
20947        'chr gen_id'(D),
20948        nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',
20949                  F),
20950        G=[C|F],
20951        b_setval('$chr_store_global_list_chr_translate____unalias_type___2',
20952                 G),
20953        (   F=[H|_]
20954        ->  setarg(3, H, G)
20955        ;   true
20956        ),
20957        attach_unalias_type___2(E, C)
20958    ;   setarg(2, C, active)
20959    ).
20960types_modes_condition([], [], A) :-
20961    !,
20962    A=true.
20963types_modes_condition([A|B], [C|D], E) :-
20964    nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',
20965              F),
20966    member(G, F),
20967    G=suspension(_, active, _, _, H, I),
20968    H=J/K,
20969    functor(A, J, K),
20970    !,
20971    A=..[_|L],
20972    E=(M, N, O),
20973    modes_condition(I, L, M),
20974    get_constraint_type_det(J/K, P),
20975    C=..[_|Q],
20976    types_condition(P, L, Q, I, N),
20977    types_modes_condition(B, D, O).
20978types_modes_condition([A|_], _, _) :-
20979    !,
20980    functor(A, B, C),
20981    chr_error(internal, 'Mode information missing for ~w.\n', [B/C]).
20982types_modes_condition(A, B, C) :-
20983    D=suspension(E, active, _, A, B, C),
20984    'chr gen_id'(E),
20985    nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
20986              F),
20987    G=[D|F],
20988    b_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',
20989             G),
20990    (   F=[H|_]
20991    ->  setarg(3, H, G)
20992    ;   true
20993    ).
20994static_type_check(A, B) :-
20995    static_type_check___2__0(A, B, _).
20996static_type_check___2__0(A, B, C) :-
20997    nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',
20998              D),
20999    !,
21000    C=suspension(E, not_stored_yet, _, A, B),
21001    'chr gen_id'(E),
21002    static_type_check___2__0__0__1(D, A, B, C).
21003static_type_check___2__0__0__1([], A, B, C) :-
21004    static_type_check___2__1(A, B, C).
21005static_type_check___2__0__0__1([A|B], C, D, E) :-
21006    (   A=suspension(_, active, _, F, G)
21007    ->  arg(2, E, H),
21008        setarg(2, E, active),
21009        (   H==not_stored_yet
21010        ->  nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
21011                      I),
21012            J=[E|I],
21013            b_setval('$chr_store_global_ground_chr_translate____static_type_check___2',
21014                     J),
21015            (   I=[K|_]
21016            ->  setarg(3, K, J)
21017            ;   true
21018            )
21019        ;   true
21020        ),
21021        forall(( member(L, G),
21022                 sub_term(L, M)
21023               ),
21024               (   get_type_definition(M, _)
21025               ->  true
21026               ;   chr_error(type_error,
21027                             'Undefined type "~w" used in type declaration of "~w".\n',
21028                             [M, F])
21029               )),
21030        (   E=suspension(_, active, _, _, _)
21031        ->  setarg(2, E, inactive),
21032            static_type_check___2__0__0__1(B, C, D, E)
21033        ;   true
21034        )
21035    ;   static_type_check___2__0__0__1(B, C, D, E)
21036    ).
21037static_type_check___2__0(A, B, C) :-
21038    C=suspension(D, not_stored_yet, _, A, B),
21039    'chr gen_id'(D),
21040    static_type_check___2__1(A, B, C).
21041static_type_check___2__1(A, B, C) :-
21042    (   var(C)
21043    ->  true
21044    ;   arg(2, C, D),
21045        setarg(2, C, removed),
21046        (   D==not_stored_yet
21047        ->  true
21048        ;   arg(3, C, E),
21049            (   var(E)
21050            ->  nb_getval('$chr_store_global_ground_chr_translate____static_type_check___2',
21051                          F),
21052                F=[_|G],
21053                b_setval('$chr_store_global_ground_chr_translate____static_type_check___2',
21054                         G),
21055                (   G=[H|_]
21056                ->  setarg(3, H, _)
21057                ;   true
21058                )
21059            ;   E=[_, _|G],
21060                setarg(2, E, G),
21061                (   G=[H|_]
21062                ->  setarg(3, H, E)
21063                ;   true
21064                )
21065            )
21066        )
21067    ),
21068    maplist(static_type_check_rule, A, B).
21069ast_static_type_check_term(_, _, A) :-
21070    A==any,
21071    !.
21072ast_static_type_check_term(A, B, C) :-
21073    nonvar(B),
21074    B=var(D, E),
21075    !,
21076    ast_static_type_check_var(D, var(D, E), C, A).
21077ast_static_type_check_term(A, B, C) :-
21078    ast_atomic_builtin_type(C, B, D),
21079    !,
21080    (   call(D)
21081    ->  true
21082    ;   throw(type_error(invalid_functor(A, B, C)))
21083    ).
21084ast_static_type_check_term(A, B, C) :-
21085    ast_compound_builtin_type(C, B, D),
21086    !,
21087    (   call(D)
21088    ->  true
21089    ;   throw(type_error(invalid_functor(A, B, C)))
21090    ).
21091ast_static_type_check_term(A, B, C) :-
21092    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', D),
21093    member(E, D),
21094    E=suspension(_, active, _, _, _, F, G),
21095    functor(C, H, I),
21096    functor(F, H, I),
21097    !,
21098    copy_term_nat(F-G, C-J),
21099    ast_static_type_check_term(A, B, J).
21100ast_static_type_check_term(A, B, C) :-
21101    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
21102              D),
21103    member(E, D),
21104    E=suspension(_, active, _, _, _, F, G),
21105    functor(C, H, I),
21106    functor(F, H, I),
21107    !,
21108    copy_term_nat(F-G, C-J),
21109    ast_functor(B, K, L),
21110    (   member(M, J),
21111        functor(M, K, L)
21112    ->  ast_args(B, N),
21113        M=..[_|O],
21114        maplist(ast_static_type_check_term(A), N, O)
21115    ;   throw(type_error(invalid_functor(A, B, C)))
21116    ).
21117ast_static_type_check_term(A, B, C) :-
21118    chr_error(internal,
21119              'Undefined type ~w while type checking term ~w in ~@.\n',
21120              [C, B, chr_translate:format_src(A)]).
21121ast_static_type_check_var(A, B, C, D) :-
21122    ast_static_type_check_var___4__0(A, B, C, D, _).
21123ast_static_type_check_var___4__0(A, B, C, D, E) :-
21124    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', F),
21125    member(G, F),
21126    G=suspension(_, active, _, _, _, H, I),
21127    functor(H, J, K),
21128    functor(C, J, K),
21129    !,
21130    (   var(E)
21131    ->  true
21132    ;   E=suspension(_, _, _, _, _, L, _),
21133        setarg(2, E, removed),
21134        term_variables(L, M),
21135        arg(3, E, N),
21136        (   var(N)
21137        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21138                      O),
21139            O=[_|P],
21140            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21141                     P),
21142            (   P=[Q|_]
21143            ->  setarg(3, Q, _)
21144            ;   true
21145            )
21146        ;   N=[_, _|P],
21147            setarg(2, N, P),
21148            (   P=[Q|_]
21149            ->  setarg(3, Q, N)
21150            ;   true
21151            )
21152        ),
21153        detach_ast_static_type_check_var___4(M, E)
21154    ),
21155    copy_term_nat(H-I, C-R),
21156    ast_static_type_check_var(A, B, R, D).
21157ast_static_type_check_var___4__0(A, B, C, D, E) :-
21158    atomic_builtin_type(C, _, _),
21159    !,
21160    (   var(E)
21161    ->  true
21162    ;   E=suspension(_, _, _, _, _, F, _),
21163        setarg(2, E, removed),
21164        term_variables(F, G),
21165        arg(3, E, H),
21166        (   var(H)
21167        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21168                      I),
21169            I=[_|J],
21170            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21171                     J),
21172            (   J=[K|_]
21173            ->  setarg(3, K, _)
21174            ;   true
21175            )
21176        ;   H=[_, _|J],
21177            setarg(2, H, J),
21178            (   J=[K|_]
21179            ->  setarg(3, K, H)
21180            ;   true
21181            )
21182        ),
21183        detach_ast_static_type_check_var___4(G, E)
21184    ),
21185    ast_static_atomic_builtin_type_check_var(A, B, C, D).
21186ast_static_type_check_var___4__0(_, _, A, _, B) :-
21187    compound_builtin_type(A, _, _, _),
21188    !,
21189    (   var(B)
21190    ->  true
21191    ;   B=suspension(_, _, _, _, _, C, _),
21192        setarg(2, B, removed),
21193        term_variables(C, D),
21194        arg(3, B, E),
21195        (   var(E)
21196        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21197                      F),
21198            F=[_|G],
21199            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21200                     G),
21201            (   G=[H|_]
21202            ->  setarg(3, H, _)
21203            ;   true
21204            )
21205        ;   E=[_, _|G],
21206            setarg(2, E, G),
21207            (   G=[H|_]
21208            ->  setarg(3, H, E)
21209            ;   true
21210            )
21211        ),
21212        detach_ast_static_type_check_var___4(D, B)
21213    ).
21214ast_static_type_check_var___4__0(A, B, C, D, E) :-
21215    nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21216              F),
21217    member(G, F),
21218    G=suspension(_, active, _, H, I, J, K),
21219    H=A,
21220    (   C\==J,
21221        !,
21222        G=suspension(_, _, _, _, _, L, _),
21223        setarg(2, G, removed),
21224        term_variables(L, M),
21225        arg(3, G, N),
21226        (   var(N)
21227        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21228                      O),
21229            O=[_|P],
21230            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21231                     P),
21232            (   P=[Q|_]
21233            ->  setarg(3, Q, _)
21234            ;   true
21235            )
21236        ;   N=[_, _|P],
21237            setarg(2, N, P),
21238            (   P=[Q|_]
21239            ->  setarg(3, Q, N)
21240            ;   true
21241            )
21242        ),
21243        detach_ast_static_type_check_var___4(M, G),
21244        (   var(E)
21245        ->  true
21246        ;   E=suspension(_, _, _, _, _, R, _),
21247            setarg(2, E, removed),
21248            term_variables(R, S),
21249            arg(3, E, T),
21250            (   var(T)
21251            ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21252                          U),
21253                U=[_|V],
21254                b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21255                         V),
21256                (   V=[W|_]
21257                ->  setarg(3, W, _)
21258                ;   true
21259                )
21260            ;   T=[_, _|V],
21261                setarg(2, T, V),
21262                (   V=[W|_]
21263                ->  setarg(3, W, T)
21264                ;   true
21265                )
21266            ),
21267            detach_ast_static_type_check_var___4(S, E)
21268        ),
21269        throw(type_error(type_clash(B, D, K, C, J)))
21270    ;   J\==C,
21271        !,
21272        G=suspension(_, _, _, _, _, X, _),
21273        setarg(2, G, removed),
21274        term_variables(X, Y),
21275        arg(3, G, Z),
21276        (   var(Z)
21277        ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21278                      A1),
21279            A1=[_|B1],
21280            b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21281                     B1),
21282            (   B1=[C1|_]
21283            ->  setarg(3, C1, _)
21284            ;   true
21285            )
21286        ;   Z=[_, _|B1],
21287            setarg(2, Z, B1),
21288            (   B1=[C1|_]
21289            ->  setarg(3, C1, Z)
21290            ;   true
21291            )
21292        ),
21293        detach_ast_static_type_check_var___4(Y, G),
21294        (   var(E)
21295        ->  true
21296        ;   E=suspension(_, _, _, _, _, D1, _),
21297            setarg(2, E, removed),
21298            term_variables(D1, E1),
21299            arg(3, E, F1),
21300            (   var(F1)
21301            ->  nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21302                          G1),
21303                G1=[_|H1],
21304                b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21305                         H1),
21306                (   H1=[I1|_]
21307                ->  setarg(3, I1, _)
21308                ;   true
21309                )
21310            ;   F1=[_, _|H1],
21311                setarg(2, F1, H1),
21312                (   H1=[I1|_]
21313                ->  setarg(3, I1, F1)
21314                ;   true
21315                )
21316            ),
21317            detach_ast_static_type_check_var___4(E1, E)
21318        ),
21319        throw(type_error(type_clash(I, K, D, J, C)))
21320    ).
21321ast_static_type_check_var___4__0(A, B, C, D, E) :-
21322    (   var(E)
21323    ->  E=suspension(F, active, _, A, B, C, D),
21324        term_variables(C, G),
21325        'chr gen_id'(F),
21326        nb_getval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21327                  H),
21328        I=[E|H],
21329        b_setval('$chr_store_global_list_chr_translate____ast_static_type_check_var___4',
21330                 I),
21331        (   H=[J|_]
21332        ->  setarg(3, J, I)
21333        ;   true
21334        ),
21335        attach_ast_static_type_check_var___4(G, E)
21336    ;   setarg(2, E, active)
21337    ).
21338ast_static_atomic_builtin_type_check_var(_, _, any, _) :-
21339    !.
21340ast_static_atomic_builtin_type_check_var(A, B, C, D) :-
21341    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21342              E),
21343    lookup_ht(E, k(A, C), F),
21344    (   member(G, F),
21345        G=suspension(_, active, _, _, _, _),
21346        !
21347    ;   !,
21348        ast_static_atomic_builtin_type_check_var___4__0__0__3(F,
21349                                                              A,
21350                                                              B,
21351                                                              C,
21352                                                              D)
21353    ).
21354ast_static_atomic_builtin_type_check_var___4__0__0__3([], A, B, C, D) :-
21355    ast_static_atomic_builtin_type_check_var___4__1(A,
21356                                                    B,
21357                                                    C,
21358                                                    D).
21359ast_static_atomic_builtin_type_check_var___4__0__0__3([A|B], C, D, E, F) :-
21360    (   A=suspension(_, active, G, _, H, _),
21361        G==C,
21362        H==E
21363    ->  setarg(2, A, removed),
21364        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21365                    I),
21366          delete_ht(I, C, A)
21367        ),
21368        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21369                  J),
21370        delete_ht(J, k(C, E), A),
21371        ast_static_atomic_builtin_type_check_var___4__0__0__3(B,
21372                                                              C,
21373                                                              D,
21374                                                              E,
21375                                                              F)
21376    ;   ast_static_atomic_builtin_type_check_var___4__0__0__3(B,
21377                                                              C,
21378                                                              D,
21379                                                              E,
21380                                                              F)
21381    ).
21382ast_static_atomic_builtin_type_check_var(A, B, C, D) :-
21383    ast_static_atomic_builtin_type_check_var___4__1(A,
21384                                                    B,
21385                                                    C,
21386                                                    D).
21387ast_static_atomic_builtin_type_check_var___4__1(A, _, number, _) :-
21388    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21389              B),
21390    lookup_ht(B, k(A, float), C),
21391    member(D, C),
21392    D=suspension(_, active, _, _, _, _),
21393    !.
21394ast_static_atomic_builtin_type_check_var___4__1(A, B, float, C) :-
21395    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21396              D),
21397    lookup_ht(D, k(A, number), E),
21398    !,
21399    ast_static_atomic_builtin_type_check_var___4__1__0__5(E,
21400                                                          A,
21401                                                          B,
21402                                                          float,
21403                                                          C).
21404ast_static_atomic_builtin_type_check_var___4__1__0__5([], A, B, C, D) :-
21405    ast_static_atomic_builtin_type_check_var___4__8(A,
21406                                                    B,
21407                                                    C,
21408                                                    D).
21409ast_static_atomic_builtin_type_check_var___4__1__0__5([A|B], C, D, E, F) :-
21410    (   A=suspension(_, active, G, _, H, _),
21411        G==C,
21412        H=number
21413    ->  setarg(2, A, removed),
21414        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21415                    I),
21416          delete_ht(I, C, A)
21417        ),
21418        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21419                  J),
21420        delete_ht(J, k(C, number), A),
21421        ast_static_atomic_builtin_type_check_var___4__1__0__5(B,
21422                                                              C,
21423                                                              D,
21424                                                              E,
21425                                                              F)
21426    ;   ast_static_atomic_builtin_type_check_var___4__1__0__5(B,
21427                                                              C,
21428                                                              D,
21429                                                              E,
21430                                                              F)
21431    ).
21432ast_static_atomic_builtin_type_check_var___4__1(A, B, C, D) :-
21433    ast_static_atomic_builtin_type_check_var___4__2(A,
21434                                                    B,
21435                                                    C,
21436                                                    D).
21437ast_static_atomic_builtin_type_check_var___4__2(A, _, number, _) :-
21438    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21439              B),
21440    lookup_ht(B, k(A, int), C),
21441    member(D, C),
21442    D=suspension(_, active, _, _, _, _),
21443    !.
21444ast_static_atomic_builtin_type_check_var___4__2(A, B, int, C) :-
21445    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21446              D),
21447    lookup_ht(D, k(A, number), E),
21448    !,
21449    ast_static_atomic_builtin_type_check_var___4__2__0__7(E,
21450                                                          A,
21451                                                          B,
21452                                                          int,
21453                                                          C).
21454ast_static_atomic_builtin_type_check_var___4__2__0__7([], A, B, C, D) :-
21455    ast_static_atomic_builtin_type_check_var___4__5(A,
21456                                                    B,
21457                                                    C,
21458                                                    D).
21459ast_static_atomic_builtin_type_check_var___4__2__0__7([A|B], C, D, E, F) :-
21460    (   A=suspension(_, active, G, _, H, _),
21461        G==C,
21462        H=number
21463    ->  setarg(2, A, removed),
21464        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21465                    I),
21466          delete_ht(I, C, A)
21467        ),
21468        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21469                  J),
21470        delete_ht(J, k(C, number), A),
21471        ast_static_atomic_builtin_type_check_var___4__2__0__7(B,
21472                                                              C,
21473                                                              D,
21474                                                              E,
21475                                                              F)
21476    ;   ast_static_atomic_builtin_type_check_var___4__2__0__7(B,
21477                                                              C,
21478                                                              D,
21479                                                              E,
21480                                                              F)
21481    ).
21482ast_static_atomic_builtin_type_check_var___4__2(A, B, C, D) :-
21483    ast_static_atomic_builtin_type_check_var___4__3(A,
21484                                                    B,
21485                                                    C,
21486                                                    D).
21487ast_static_atomic_builtin_type_check_var___4__3(A, _, number, _) :-
21488    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21489              B),
21490    lookup_ht(B, k(A, natural), C),
21491    member(D, C),
21492    D=suspension(_, active, _, _, _, _),
21493    !.
21494ast_static_atomic_builtin_type_check_var___4__3(A, B, natural, C) :-
21495    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21496              D),
21497    lookup_ht(D, k(A, number), E),
21498    !,
21499    ast_static_atomic_builtin_type_check_var___4__3__0__9(E,
21500                                                          A,
21501                                                          B,
21502                                                          natural,
21503                                                          C).
21504ast_static_atomic_builtin_type_check_var___4__3__0__9([], A, B, C, D) :-
21505    ast_static_atomic_builtin_type_check_var___4__5(A,
21506                                                    B,
21507                                                    C,
21508                                                    D).
21509ast_static_atomic_builtin_type_check_var___4__3__0__9([A|B], C, D, E, F) :-
21510    (   A=suspension(_, active, G, _, H, _),
21511        G==C,
21512        H=number
21513    ->  setarg(2, A, removed),
21514        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21515                    I),
21516          delete_ht(I, C, A)
21517        ),
21518        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21519                  J),
21520        delete_ht(J, k(C, number), A),
21521        ast_static_atomic_builtin_type_check_var___4__3__0__9(B,
21522                                                              C,
21523                                                              D,
21524                                                              E,
21525                                                              F)
21526    ;   ast_static_atomic_builtin_type_check_var___4__3__0__9(B,
21527                                                              C,
21528                                                              D,
21529                                                              E,
21530                                                              F)
21531    ).
21532ast_static_atomic_builtin_type_check_var___4__3(A, B, C, D) :-
21533    ast_static_atomic_builtin_type_check_var___4__4(A,
21534                                                    B,
21535                                                    C,
21536                                                    D).
21537ast_static_atomic_builtin_type_check_var___4__4(A, _, number, _) :-
21538    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21539              B),
21540    lookup_ht(B, k(A, dense_int), C),
21541    member(D, C),
21542    D=suspension(_, active, _, _, _, _),
21543    !.
21544ast_static_atomic_builtin_type_check_var___4__4(A, B, dense_int, C) :-
21545    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21546              D),
21547    lookup_ht(D, k(A, number), E),
21548    !,
21549    ast_static_atomic_builtin_type_check_var___4__4__0__11(E,
21550                                                           A,
21551                                                           B,
21552                                                           dense_int,
21553                                                           C).
21554ast_static_atomic_builtin_type_check_var___4__4__0__11([], A, B, C, D) :-
21555    ast_static_atomic_builtin_type_check_var___4__6(A,
21556                                                    B,
21557                                                    C,
21558                                                    D).
21559ast_static_atomic_builtin_type_check_var___4__4__0__11([A|B], C, D, E, F) :-
21560    (   A=suspension(_, active, G, _, H, _),
21561        G==C,
21562        H=number
21563    ->  setarg(2, A, removed),
21564        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21565                    I),
21566          delete_ht(I, C, A)
21567        ),
21568        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21569                  J),
21570        delete_ht(J, k(C, number), A),
21571        ast_static_atomic_builtin_type_check_var___4__4__0__11(B,
21572                                                               C,
21573                                                               D,
21574                                                               E,
21575                                                               F)
21576    ;   ast_static_atomic_builtin_type_check_var___4__4__0__11(B,
21577                                                               C,
21578                                                               D,
21579                                                               E,
21580                                                               F)
21581    ).
21582ast_static_atomic_builtin_type_check_var___4__4(A, B, C, D) :-
21583    ast_static_atomic_builtin_type_check_var___4__5(A,
21584                                                    B,
21585                                                    C,
21586                                                    D).
21587ast_static_atomic_builtin_type_check_var___4__5(A, _, int, _) :-
21588    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21589              B),
21590    lookup_ht(B, k(A, natural), C),
21591    member(D, C),
21592    D=suspension(_, active, _, _, _, _),
21593    !.
21594ast_static_atomic_builtin_type_check_var___4__5(A, B, natural, C) :-
21595    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21596              D),
21597    lookup_ht(D, k(A, int), E),
21598    !,
21599    ast_static_atomic_builtin_type_check_var___4__5__0__13(E,
21600                                                           A,
21601                                                           B,
21602                                                           natural,
21603                                                           C).
21604ast_static_atomic_builtin_type_check_var___4__5__0__13([], A, B, C, D) :-
21605    ast_static_atomic_builtin_type_check_var___4__7(A,
21606                                                    B,
21607                                                    C,
21608                                                    D).
21609ast_static_atomic_builtin_type_check_var___4__5__0__13([A|B], C, D, E, F) :-
21610    (   A=suspension(_, active, G, _, H, _),
21611        G==C,
21612        H=int
21613    ->  setarg(2, A, removed),
21614        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21615                    I),
21616          delete_ht(I, C, A)
21617        ),
21618        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21619                  J),
21620        delete_ht(J, k(C, int), A),
21621        ast_static_atomic_builtin_type_check_var___4__5__0__13(B,
21622                                                               C,
21623                                                               D,
21624                                                               E,
21625                                                               F)
21626    ;   ast_static_atomic_builtin_type_check_var___4__5__0__13(B,
21627                                                               C,
21628                                                               D,
21629                                                               E,
21630                                                               F)
21631    ).
21632ast_static_atomic_builtin_type_check_var___4__5(A, B, C, D) :-
21633    ast_static_atomic_builtin_type_check_var___4__6(A,
21634                                                    B,
21635                                                    C,
21636                                                    D).
21637ast_static_atomic_builtin_type_check_var___4__6(A, _, int, _) :-
21638    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21639              B),
21640    lookup_ht(B, k(A, dense_int), C),
21641    member(D, C),
21642    D=suspension(_, active, _, _, _, _),
21643    !.
21644ast_static_atomic_builtin_type_check_var___4__6(A, B, dense_int, C) :-
21645    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21646              D),
21647    lookup_ht(D, k(A, int), E),
21648    !,
21649    ast_static_atomic_builtin_type_check_var___4__6__0__15(E,
21650                                                           A,
21651                                                           B,
21652                                                           dense_int,
21653                                                           C).
21654ast_static_atomic_builtin_type_check_var___4__6__0__15([], A, B, C, D) :-
21655    ast_static_atomic_builtin_type_check_var___4__7(A,
21656                                                    B,
21657                                                    C,
21658                                                    D).
21659ast_static_atomic_builtin_type_check_var___4__6__0__15([A|B], C, D, E, F) :-
21660    (   A=suspension(_, active, G, _, H, _),
21661        G==C,
21662        H=int
21663    ->  setarg(2, A, removed),
21664        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21665                    I),
21666          delete_ht(I, C, A)
21667        ),
21668        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21669                  J),
21670        delete_ht(J, k(C, int), A),
21671        ast_static_atomic_builtin_type_check_var___4__6__0__15(B,
21672                                                               C,
21673                                                               D,
21674                                                               E,
21675                                                               F)
21676    ;   ast_static_atomic_builtin_type_check_var___4__6__0__15(B,
21677                                                               C,
21678                                                               D,
21679                                                               E,
21680                                                               F)
21681    ).
21682ast_static_atomic_builtin_type_check_var___4__6(A, B, C, D) :-
21683    ast_static_atomic_builtin_type_check_var___4__7(A,
21684                                                    B,
21685                                                    C,
21686                                                    D).
21687ast_static_atomic_builtin_type_check_var___4__7(A, _, natural, _) :-
21688    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21689              B),
21690    lookup_ht(B, k(A, dense_int), C),
21691    member(D, C),
21692    D=suspension(_, active, _, _, _, _),
21693    !.
21694ast_static_atomic_builtin_type_check_var___4__7(A, B, dense_int, C) :-
21695    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21696              D),
21697    lookup_ht(D, k(A, natural), E),
21698    !,
21699    ast_static_atomic_builtin_type_check_var___4__7__0__17(E,
21700                                                           A,
21701                                                           B,
21702                                                           dense_int,
21703                                                           C).
21704ast_static_atomic_builtin_type_check_var___4__7__0__17([], A, B, C, D) :-
21705    ast_static_atomic_builtin_type_check_var___4__8(A,
21706                                                    B,
21707                                                    C,
21708                                                    D).
21709ast_static_atomic_builtin_type_check_var___4__7__0__17([A|B], C, D, E, F) :-
21710    (   A=suspension(_, active, G, _, H, _),
21711        G==C,
21712        H=natural
21713    ->  setarg(2, A, removed),
21714        ( nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21715                    I),
21716          delete_ht(I, C, A)
21717        ),
21718        nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21719                  J),
21720        delete_ht(J, k(C, natural), A),
21721        ast_static_atomic_builtin_type_check_var___4__7__0__17(B,
21722                                                               C,
21723                                                               D,
21724                                                               E,
21725                                                               F)
21726    ;   ast_static_atomic_builtin_type_check_var___4__7__0__17(B,
21727                                                               C,
21728                                                               D,
21729                                                               E,
21730                                                               F)
21731    ).
21732ast_static_atomic_builtin_type_check_var___4__7(A, B, C, D) :-
21733    ast_static_atomic_builtin_type_check_var___4__8(A,
21734                                                    B,
21735                                                    C,
21736                                                    D).
21737ast_static_atomic_builtin_type_check_var___4__8(A, B, C, D) :-
21738    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21739              E),
21740    lookup_ht(E, A, F),
21741    member(G, F),
21742    G=suspension(_, active, _, _, H, I),
21743    !,
21744    setarg(2, G, removed),
21745    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21746              J),
21747    delete_ht(J, A, G),
21748    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21749              K),
21750    delete_ht(K, k(A, H), G),
21751    throw(type_error(type_clash(B, D, I, C, H))).
21752ast_static_atomic_builtin_type_check_var___4__8(A, B, C, D) :-
21753    E=suspension(F, active, A, B, C, D),
21754    'chr gen_id'(F),
21755    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-1',
21756              G),
21757    insert_ht(G, A, E),
21758    nb_getval('$chr_store_multi_hash_chr_translate____ast_static_atomic_builtin_type_check_var___4-13',
21759              H),
21760    insert_ht(H, k(A, C), E).
21761dynamic_type_check :-
21762    dynamic_type_check___0__0(_).
21763dynamic_type_check___0__0(A) :-
21764    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
21765              B),
21766    !,
21767    A=suspension(C, not_stored_yet, t, _),
21768    'chr gen_id'(C),
21769    dynamic_type_check___0__0__0__1(B, A).
21770dynamic_type_check___0__0__0__1([], A) :-
21771    dynamic_type_check___0__1(A).
21772dynamic_type_check___0__0__0__1([A|B], C) :-
21773    (   A=suspension(_, active, _, _, _, D, E),
21774        F=t(235, A, C),
21775        '$novel_production'(A, F),
21776        '$novel_production'(C, F)
21777    ->  '$extend_history'(C, F),
21778        arg(2, C, G),
21779        setarg(2, C, active),
21780        (   G==not_stored_yet
21781        ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21782                      H),
21783            I=[C|H],
21784            b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21785                     I),
21786            (   H=[J|_]
21787            ->  setarg(4, J, I)
21788            ;   true
21789            )
21790        ;   true
21791        ),
21792        copy_term_nat(D-E, K-L),
21793        maplist(dynamic_type_check_clause(K), L, M),
21794        dynamic_type_check_clauses(M),
21795        (   C=suspension(_, active, _, _)
21796        ->  setarg(2, C, inactive),
21797            dynamic_type_check___0__0__0__1(B, C)
21798        ;   true
21799        )
21800    ;   dynamic_type_check___0__0__0__1(B, C)
21801    ).
21802dynamic_type_check___0__0(A) :-
21803    A=suspension(B, not_stored_yet, t, _),
21804    'chr gen_id'(B),
21805    dynamic_type_check___0__1(A).
21806dynamic_type_check___0__1(A) :-
21807    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', B),
21808    !,
21809    dynamic_type_check___0__1__0__2(B, A).
21810dynamic_type_check___0__1__0__2([], A) :-
21811    dynamic_type_check___0__2(A).
21812dynamic_type_check___0__1__0__2([A|B], C) :-
21813    (   A=suspension(_, active, _, _, _, D, E),
21814        F=t(236, A, C),
21815        '$novel_production'(A, F),
21816        '$novel_production'(C, F)
21817    ->  '$extend_history'(C, F),
21818        arg(2, C, G),
21819        setarg(2, C, active),
21820        (   G==not_stored_yet
21821        ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21822                      H),
21823            I=[C|H],
21824            b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21825                     I),
21826            (   H=[J|_]
21827            ->  setarg(4, J, I)
21828            ;   true
21829            )
21830        ;   true
21831        ),
21832        copy_term_nat(D-E, K-L),
21833        dynamic_type_check_alias_clause(K, L, M),
21834        dynamic_type_check_clauses([M]),
21835        (   C=suspension(_, active, _, _)
21836        ->  setarg(2, C, inactive),
21837            dynamic_type_check___0__1__0__2(B, C)
21838        ;   true
21839        )
21840    ;   dynamic_type_check___0__1__0__2(B, C)
21841    ).
21842dynamic_type_check___0__1(A) :-
21843    dynamic_type_check___0__2(A).
21844dynamic_type_check___0__2(A) :-
21845    (   var(A)
21846    ->  true
21847    ;   arg(2, A, B),
21848        setarg(2, A, removed),
21849        (   B==not_stored_yet
21850        ->  true
21851        ;   arg(4, A, C),
21852            (   var(C)
21853            ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21854                          D),
21855                D=[_|E],
21856                b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',
21857                         E),
21858                (   E=[F|_]
21859                ->  setarg(4, F, _)
21860                ;   true
21861                )
21862            ;   C=[_, _|E],
21863                setarg(2, C, E),
21864                (   E=[F|_]
21865                ->  setarg(4, F, C)
21866                ;   true
21867                )
21868            )
21869        )
21870    ),
21871    findall(('$dynamic_type_check'(G, H):-I),
21872            (   atomic_builtin_type(G, H, I)
21873            ;   compound_builtin_type(G, H, I, _)
21874            ),
21875            J),
21876    dynamic_type_check_clauses(J).
21877dynamic_type_check_clauses(A) :-
21878    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21879              B),
21880    member(C, B),
21881    C=suspension(_, active, _, D),
21882    !,
21883    setarg(2, C, removed),
21884    arg(3, C, E),
21885    (   var(E)
21886    ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21887                  F),
21888        F=[_|G],
21889        b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21890                 G),
21891        (   G=[H|_]
21892        ->  setarg(3, H, _)
21893        ;   true
21894        )
21895    ;   E=[_, _|G],
21896        setarg(2, E, G),
21897        (   G=[H|_]
21898        ->  setarg(3, H, E)
21899        ;   true
21900        )
21901    ),
21902    append(A, D, I),
21903    dynamic_type_check_clauses(I).
21904dynamic_type_check_clauses(A) :-
21905    B=suspension(C, active, _, A),
21906    'chr gen_id'(C),
21907    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21908              D),
21909    E=[B|D],
21910    b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21911             E),
21912    (   D=[F|_]
21913    ->  setarg(3, F, E)
21914    ;   true
21915    ).
21916get_dynamic_type_check_clauses(A) :-
21917    nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21918              B),
21919    member(C, B),
21920    C=suspension(_, active, _, D),
21921    !,
21922    setarg(2, C, removed),
21923    arg(3, C, E),
21924    (   var(E)
21925    ->  nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21926                  F),
21927        F=[_|G],
21928        b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',
21929                 G),
21930        (   G=[H|_]
21931        ->  setarg(3, H, _)
21932        ;   true
21933        )
21934    ;   E=[_, _|G],
21935        setarg(2, E, G),
21936        (   G=[H|_]
21937        ->  setarg(3, H, E)
21938        ;   true
21939        )
21940    ),
21941    A=D.
21942get_dynamic_type_check_clauses([]).
21943atomic_type(A) :-
21944    atomic_type___1__0(A, _).
21945atomic_type___1__0(A, B) :-
21946    atomic_builtin_type(A, _, _),
21947    !,
21948    (   var(B)
21949    ->  true
21950    ;   B=suspension(_, _, _, C),
21951        setarg(2, B, removed),
21952        term_variables(C, D),
21953        arg(3, B, E),
21954        (   var(E)
21955        ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
21956                      F),
21957            F=[_|G],
21958            b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
21959                     G),
21960            (   G=[H|_]
21961            ->  setarg(3, H, _)
21962            ;   true
21963            )
21964        ;   E=[_, _|G],
21965            setarg(2, E, G),
21966            (   G=[H|_]
21967            ->  setarg(3, H, E)
21968            ;   true
21969            )
21970        ),
21971        detach_atomic_type___1(D, B)
21972    ),
21973    A\==any.
21974atomic_type___1__0(A, B) :-
21975    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
21976              C),
21977    member(D, C),
21978    D=suspension(_, active, _, _, _, E, F),
21979    functor(A, G, H),
21980    functor(E, G, H),
21981    !,
21982    (   var(B)
21983    ->  true
21984    ;   B=suspension(_, _, _, I),
21985        setarg(2, B, removed),
21986        term_variables(I, J),
21987        arg(3, B, K),
21988        (   var(K)
21989        ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
21990                      L),
21991            L=[_|M],
21992            b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
21993                     M),
21994            (   M=[N|_]
21995            ->  setarg(3, N, _)
21996            ;   true
21997            )
21998        ;   K=[_, _|M],
21999            setarg(2, K, M),
22000            (   M=[N|_]
22001            ->  setarg(3, N, K)
22002            ;   true
22003            )
22004        ),
22005        detach_atomic_type___1(J, B)
22006    ),
22007    maplist(atomic, F).
22008atomic_type___1__0(A, B) :-
22009    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', C),
22010    member(D, C),
22011    D=suspension(_, active, _, _, _, E, F),
22012    functor(A, G, H),
22013    functor(E, G, H),
22014    !,
22015    (   var(B)
22016    ->  true
22017    ;   B=suspension(_, _, _, I),
22018        setarg(2, B, removed),
22019        term_variables(I, J),
22020        arg(3, B, K),
22021        (   var(K)
22022        ->  nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
22023                      L),
22024            L=[_|M],
22025            b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
22026                     M),
22027            (   M=[N|_]
22028            ->  setarg(3, N, _)
22029            ;   true
22030            )
22031        ;   K=[_, _|M],
22032            setarg(2, K, M),
22033            (   M=[N|_]
22034            ->  setarg(3, N, K)
22035            ;   true
22036            )
22037        ),
22038        detach_atomic_type___1(J, B)
22039    ),
22040    atomic(F),
22041    copy_term_nat(E-F, A-O),
22042    atomic_type(O).
22043atomic_type___1__0(A, B) :-
22044    (   var(B)
22045    ->  B=suspension(C, active, _, A),
22046        term_variables(A, D),
22047        'chr gen_id'(C),
22048        nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',
22049                  E),
22050        F=[B|E],
22051        b_setval('$chr_store_global_list_chr_translate____atomic_type___1',
22052                 F),
22053        (   E=[G|_]
22054        ->  setarg(3, G, F)
22055        ;   true
22056        ),
22057        attach_atomic_type___1(D, B)
22058    ;   setarg(2, B, active)
22059    ).
22060enumerated_atomic_type(A, _) :-
22061    atomic_builtin_type(A, _, _),
22062    !,
22063    fail.
22064enumerated_atomic_type(A, B) :-
22065    nb_getval('$chr_store_global_list_chr_translate____type_definition___2',
22066              C),
22067    member(D, C),
22068    D=suspension(_, active, _, _, _, E, F),
22069    functor(A, G, H),
22070    functor(E, G, H),
22071    !,
22072    maplist(atomic, F),
22073    B=F.
22074enumerated_atomic_type(A, B) :-
22075    nb_getval('$chr_store_global_list_chr_translate____type_alias___2', C),
22076    member(D, C),
22077    D=suspension(_, active, _, _, _, E, F),
22078    functor(A, G, H),
22079    functor(E, G, H),
22080    !,
22081    atomic(F),
22082    copy_term_nat(E-F, A-I),
22083    enumerated_atomic_type(I, B).
22084enumerated_atomic_type(_, _) :-
22085    fail.
22086stored(A, B, yes) :-
22087    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
22088              C),
22089    lookup_ht(C, k(A, B), D),
22090    member(E, D),
22091    E=suspension(_, active, _, _, _, _, F, G, _),
22092    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', H),
22093    lookup_ht(H, k(F, G), I),
22094    member(J, I),
22095    J=suspension(_, active, _, _, _),
22096    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22097              K),
22098    lookup_ht(K, A, L),
22099    member(M, L),
22100    M=suspension(_, active, _, _, N, O),
22101    B<N,
22102    !,
22103    setarg(2, M, removed),
22104    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22105              P),
22106    delete_ht(P, k(A, O), M),
22107    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22108              Q),
22109    delete_ht(Q, A, M),
22110    R is O-1,
22111    stored(A, B, maybe),
22112    stored_complete(A, N, R).
22113stored(A, B, yes) :-
22114    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22115              C),
22116    lookup_ht(C, A, D),
22117    member(E, D),
22118    E=suspension(_, active, _, _, F, G),
22119    B<F,
22120    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
22121              H),
22122    lookup_ht(H, k(A, B), I),
22123    member(J, I),
22124    J=suspension(_, active, _, _),
22125    !,
22126    setarg(2, E, removed),
22127    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22128              K),
22129    delete_ht(K, k(A, G), E),
22130    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22131              L),
22132    delete_ht(L, A, E),
22133    M is G-1,
22134    stored(A, B, maybe),
22135    stored_complete(A, F, M).
22136stored(A, B, C) :-
22137    D=suspension(E, active, A, B, C),
22138    'chr gen_id'(E),
22139    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', F),
22140    insert_ht(F, k(A, C), D),
22141    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', G),
22142    insert_ht(G, k(A, B, C), D).
22143stored_completing(A, B, C) :-
22144    ground(A),
22145    ground(B),
22146    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', D),
22147    (   (   lookup_ht(D, k(A, B, yes), E),
22148            member(F, E),
22149            F=suspension(_, active, _, _, _),
22150            !,
22151            G is B+1,
22152            H is C+1,
22153            stored_completing(A, G, H)
22154        ;   lookup_ht(D, k(A, B, maybe), I),
22155            member(J, I),
22156            J=suspension(_, active, _, _, _),
22157            !,
22158            K is B+1,
22159            stored_completing(A, K, C)
22160        )
22161    ;   lookup_ht(D, k(A, B, no), L),
22162        member(M, L),
22163        M=suspension(_, active, _, _, _),
22164        !,
22165        stored_complete(A, B, C)
22166    ).
22167stored_completing(A, B, C) :-
22168    stored_complete(A, B, C).
22169stored_complete(A, B, C) :-
22170    stored_complete___3__0(A, B, C, _).
22171stored_complete___3__0(A, B, C, _) :-
22172    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', D),
22173    lookup_ht(D, A, E),
22174    member(F, E),
22175    F=suspension(_, active, _, _, _, G, H, I, _),
22176    G<B,
22177    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', J),
22178    lookup_ht(J, k(H, I), K),
22179    member(L, K),
22180    L=suspension(_, active, _, _, _),
22181    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', M),
22182    lookup_ht(M, k(A, G, yes), N),
22183    member(O, N),
22184    O=suspension(_, active, _, _, _),
22185    !,
22186    setarg(2, O, removed),
22187    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', P),
22188    delete_ht(P, k(A, yes), O),
22189    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', Q),
22190    delete_ht(Q, k(A, G, yes), O),
22191    R is C-1,
22192    stored(A, G, maybe),
22193    stored_complete(A, B, R).
22194stored_complete___3__0(A, B, C, _) :-
22195    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', D),
22196    lookup_ht(D, k(A, yes), E),
22197    member(F, E),
22198    F=suspension(_, active, _, G, _),
22199    G<B,
22200    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
22201              H),
22202    lookup_ht(H, k(A, G), I),
22203    member(J, I),
22204    J=suspension(_, active, _, _),
22205    !,
22206    setarg(2, F, removed),
22207    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13', K),
22208    delete_ht(K, k(A, yes), F),
22209    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', L),
22210    delete_ht(L, k(A, G, yes), F),
22211    M is C-1,
22212    stored(A, G, maybe),
22213    stored_complete(A, B, M).
22214stored_complete___3__0(A, B, 0, C) :-
22215    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22216              D),
22217    lookup_ht(D, A, E),
22218    !,
22219    C=suspension(F, not_stored_yet, t, A, B, 0),
22220    'chr gen_id'(F),
22221    stored_complete___3__0__0__3(E, A, B, 0, C).
22222stored_complete___3__0__0__3([], A, B, C, D) :-
22223    stored_complete___3__1(A, B, C, D).
22224stored_complete___3__0__0__3([A|B], C, D, E, F) :-
22225    (   A=suspension(_, active, _, G, H),
22226        G==C,
22227        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',
22228                  I),
22229        lookup_ht(I, C, J)
22230    ->  stored_complete___3__0__1__3(J,
22231                                     H,
22232                                     A,
22233                                     B,
22234                                     C,
22235                                     D,
22236                                     E,
22237                                     F)
22238    ;   stored_complete___3__0__0__3(B, C, D, E, F)
22239    ).
22240stored_complete___3__0__1__3([], _, _, A, B, C, D, E) :-
22241    stored_complete___3__0__0__3(A, B, C, D, E).
22242stored_complete___3__0__1__3([A|B], C, D, E, F, G, H, I) :-
22243    (   A=suspension(_, active, _, _, J, _, K, _, _),
22244        J==F,
22245        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',
22246                  L),
22247        lookup_ht(L, K, M)
22248    ->  stored_complete___3__0__2__3(M,
22249                                     K,
22250                                     A,
22251                                     B,
22252                                     C,
22253                                     D,
22254                                     E,
22255                                     F,
22256                                     G,
22257                                     H,
22258                                     I)
22259    ;   stored_complete___3__0__1__3(B,
22260                                     C,
22261                                     D,
22262                                     E,
22263                                     F,
22264                                     G,
22265                                     H,
22266                                     I)
22267    ).
22268stored_complete___3__0__2__3([], _, _, A, B, C, D, E, F, G, H) :-
22269    stored_complete___3__0__1__3(A,
22270                                 B,
22271                                 C,
22272                                 D,
22273                                 E,
22274                                 F,
22275                                 G,
22276                                 H).
22277stored_complete___3__0__2__3([A|B], C, D, E, F, G, H, I, J, K, L) :-
22278    (   A=suspension(_, active, _, _, _, _, M, N, _),
22279        A\==D,
22280        M==C,
22281        O=t(250, A, D, L, G),
22282        '$novel_production'(A, O),
22283        '$novel_production'(D, O),
22284        '$novel_production'(L, O),
22285        '$novel_production'(G, O),
22286        J=<F
22287    ->  '$extend_history'(L, O),
22288        arg(2, L, P),
22289        setarg(2, L, active),
22290        (   P==not_stored_yet
22291        ->  nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22292                      Q),
22293            insert_ht(Q, k(I, K), L),
22294            nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22295                      R),
22296            insert_ht(R, I, L)
22297        ;   true
22298        ),
22299        passive(C, N),
22300        (   L=suspension(_, active, _, _, _, _)
22301        ->  setarg(2, L, inactive),
22302            stored_complete___3__0__2__3(B,
22303                                         C,
22304                                         D,
22305                                         E,
22306                                         F,
22307                                         G,
22308                                         H,
22309                                         I,
22310                                         J,
22311                                         K,
22312                                         L)
22313        ;   true
22314        )
22315    ;   stored_complete___3__0__2__3(B,
22316                                     C,
22317                                     D,
22318                                     E,
22319                                     F,
22320                                     G,
22321                                     H,
22322                                     I,
22323                                     J,
22324                                     K,
22325                                     L)
22326    ).
22327stored_complete___3__0(A, B, C, D) :-
22328    D=suspension(E, not_stored_yet, t, A, B, C),
22329    'chr gen_id'(E),
22330    stored_complete___3__1(A, B, C, D).
22331stored_complete___3__1(A, B, C, D) :-
22332    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1', E),
22333    lookup_ht(E, A, F),
22334    !,
22335    stored_complete___3__1__0__4(F, A, B, C, D).
22336stored_complete___3__1__0__4([], A, B, C, D) :-
22337    stored_complete___3__2(A, B, C, D).
22338stored_complete___3__1__0__4([A|B], C, D, E, F) :-
22339    (   A=suspension(_, active, _, _, G, H, I, J, _),
22340        G==C,
22341        K=t(259, F, A),
22342        '$novel_production'(F, K),
22343        '$novel_production'(A, K),
22344        H>D
22345    ->  '$extend_history'(F, K),
22346        arg(2, F, L),
22347        setarg(2, F, active),
22348        (   L==not_stored_yet
22349        ->  nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22350                      M),
22351            insert_ht(M, k(C, E), F),
22352            nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22353                      N),
22354            insert_ht(N, C, F)
22355        ;   true
22356        ),
22357        passive(I, J),
22358        (   F=suspension(_, active, _, _, _, _)
22359        ->  setarg(2, F, inactive),
22360            stored_complete___3__1__0__4(B,
22361                                         C,
22362                                         D,
22363                                         E,
22364                                         F)
22365        ;   true
22366        )
22367    ;   stored_complete___3__1__0__4(B, C, D, E, F)
22368    ).
22369stored_complete___3__1(A, B, C, D) :-
22370    stored_complete___3__2(A, B, C, D).
22371stored_complete___3__2(A, _, B, C) :-
22372    arg(2, C, D),
22373    setarg(2, C, active),
22374    (   D==not_stored_yet
22375    ->  nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22376                  E),
22377        insert_ht(E, k(A, B), C),
22378        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22379                  F),
22380        insert_ht(F, A, C)
22381    ;   true
22382    ).
22383is_stored(A) :-
22384    ground(A),
22385    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22386              B),
22387    lookup_ht(B, A, C),
22388    member(D, C),
22389    D=suspension(_, active, _, _, E),
22390    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
22391              F),
22392    lookup_ht(F, k(A, 0), G),
22393    member(H, G),
22394    H=suspension(_, active, _, _, I, _),
22395    I=<E,
22396    !,
22397    fail.
22398is_stored(_).
22399is_finally_stored(A) :-
22400    ground(A),
22401    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22402              B),
22403    lookup_ht(B, A, C),
22404    member(D, C),
22405    D=suspension(_, active, _, _, E),
22406    nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
22407              F),
22408    lookup_ht(F, A, G),
22409    member(H, G),
22410    H=suspension(_, active, _, _, I, _),
22411    I=<E,
22412    !,
22413    fail.
22414is_finally_stored(_).
22415check_all_passive(A, [B|C]) :-
22416    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', D),
22417    lookup_ht(D, k(A, B), E),
22418    member(F, E),
22419    F=suspension(_, active, _, _, _),
22420    !,
22421    check_all_passive(A, C).
22422check_all_passive(A, []) :-
22423    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', B),
22424    lookup_ht(B, A, C),
22425    member(D, C),
22426    D=suspension(_, active, _, _, _, E),
22427    !,
22428    chr_warning(weird_program,
22429                'All heads passive in ~@.\n\tThis rule never fires. Please check your program.\n',
22430                [format_rule(E)]).
22431check_all_passive(A, B) :-
22432    C=suspension(D, active, A, B),
22433    'chr gen_id'(D),
22434    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',
22435              E),
22436    insert_ht(E, k(A, B), C),
22437    nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',
22438              F),
22439    insert_ht(F, A, C).
22440constraints_code1([], A, B) :-
22441    !,
22442    A=B.
22443constraints_code1([A|B], C, D) :-
22444    !,
22445    constraint_code(A, C, E),
22446    constraints_code1(B, E, D).
22447constraints_code1(A, B, C) :-
22448    D=suspension(E, active, _, A, B, C),
22449    'chr gen_id'(E),
22450    nb_getval('$chr_store_global_ground_chr_translate____constraints_code1___3',
22451              F),
22452    G=[D|F],
22453    b_setval('$chr_store_global_ground_chr_translate____constraints_code1___3',
22454             G),
22455    (   F=[H|_]
22456    ->  setarg(3, H, G)
22457    ;   true
22458    ).
22459constraint_code(A, B, C) :-
22460    (   (   chr_pp_flag(debugable, on)
22461        ;   is_stored(A),
22462            (   has_active_occurrence(A)
22463            ;   chr_pp_flag(late_allocation, off)
22464            ),
22465            (   may_trigger(A)
22466            ;   get_allocation_occurrence(A, D),
22467                get_max_occurrence(A, E),
22468                E>=D
22469            )
22470        )
22471    ->  constraint_prelude(A, F),
22472        add_dummy_location(F, G),
22473        B=[G|H]
22474    ;   B=H
22475    ),
22476    I=[0],
22477    occurrences_code(A, 1, I, J, H, K),
22478    gen_cond_attach_clause(A, J, K, C).
22479has_active_occurrence(A) :-
22480    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
22481              B),
22482    lookup_ht(B, A, C),
22483    member(D, C),
22484    D=suspension(_, active, _),
22485    !.
22486has_active_occurrence(A) :-
22487    has_active_occurrence(A, 1),
22488    memo_has_active_occurrence(A).
22489has_active_occurrence(A, B) :-
22490    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22491              C),
22492    lookup_ht(C, A, D),
22493    member(E, D),
22494    E=suspension(_, active, _, _, F),
22495    B>F,
22496    !,
22497    fail.
22498has_active_occurrence(A, B) :-
22499    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
22500              C),
22501    lookup_ht(C, k(A, B), D),
22502    member(E, D),
22503    E=suspension(_, active, _, _, _, _, F, G, _),
22504    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', H),
22505    lookup_ht(H, k(F, G), I),
22506    member(J, I),
22507    J=suspension(_, active, _, _, _),
22508    !,
22509    K is B+1,
22510    has_active_occurrence(A, K).
22511has_active_occurrence(_, _).
22512memo_has_active_occurrence(A) :-
22513    B=suspension(C, active, A),
22514    'chr gen_id'(C),
22515    nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',
22516              D),
22517    insert_ht(D, A, B).
22518use_auxiliary_predicate(A) :-
22519    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
22520              B),
22521    lookup_ht(B, A, C),
22522    member(D, C),
22523    D=suspension(_, active, _),
22524    !.
22525use_auxiliary_predicate(A) :-
22526    B=suspension(C, active, A),
22527    'chr gen_id'(C),
22528    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
22529              D),
22530    insert_ht(D, A, B).
22531use_auxiliary_predicate(A, B) :-
22532    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
22533              C),
22534    lookup_ht(C, k(A, B), D),
22535    member(E, D),
22536    E=suspension(_, active, _, _),
22537    !.
22538use_auxiliary_predicate(A, B) :-
22539    C=suspension(D, active, A, B),
22540    'chr gen_id'(D),
22541    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
22542              E),
22543    insert_ht(E, A, C),
22544    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
22545              F),
22546    insert_ht(F, k(A, B), C).
22547is_used_auxiliary_predicate(A) :-
22548    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
22549              B),
22550    lookup_ht(B, A, C),
22551    member(D, C),
22552    D=suspension(_, active, _),
22553    !.
22554is_used_auxiliary_predicate(A) :-
22555    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',
22556              B),
22557    lookup_ht(B, A, C),
22558    member(D, C),
22559    D=suspension(_, active, _, _),
22560    !.
22561is_used_auxiliary_predicate(_) :-
22562    fail.
22563is_used_auxiliary_predicate(A, _) :-
22564    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',
22565              B),
22566    lookup_ht(B, A, C),
22567    member(D, C),
22568    D=suspension(_, active, _),
22569    !.
22570is_used_auxiliary_predicate(A, B) :-
22571    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',
22572              C),
22573    lookup_ht(C, k(A, B), D),
22574    member(E, D),
22575    E=suspension(_, active, _, _),
22576    !.
22577is_used_auxiliary_predicate(_, _) :-
22578    fail.
22579use_auxiliary_module(A) :-
22580    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
22581              B),
22582    lookup_ht(B, A, C),
22583    member(D, C),
22584    D=suspension(_, active, _),
22585    !.
22586use_auxiliary_module(A) :-
22587    B=suspension(C, active, A),
22588    'chr gen_id'(C),
22589    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
22590              D),
22591    insert_ht(D, A, B).
22592is_used_auxiliary_module(A) :-
22593    nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',
22594              B),
22595    lookup_ht(B, A, C),
22596    member(D, C),
22597    D=suspension(_, active, _),
22598    !.
22599is_used_auxiliary_module(_) :-
22600    fail.
22601occurrences_code(A, B, C, D, E, F) :-
22602    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22603              G),
22604    lookup_ht(G, A, H),
22605    member(I, H),
22606    I=suspension(_, active, _, _, J),
22607    B>J,
22608    !,
22609    D=C,
22610    E=F.
22611occurrences_code(A, B, C, D, E, F) :-
22612    occurrence_code(A, B, C, G, E, H),
22613    I is B+1,
22614    occurrences_code(A, I, G, D, H, F).
22615occurrence_code(A, B, C, D, E, F) :-
22616    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
22617              G),
22618    lookup_ht(G, k(A, B), H),
22619    member(I, H),
22620    I=suspension(_, active, _, _, _, _, J, K, _),
22621    (   nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
22622                  L),
22623        lookup_ht(L, k(J, K), M),
22624        member(N, M),
22625        N=suspension(_, active, _, _, _),
22626        !,
22627        (   named_history(J, _, _)
22628        ->  does_use_history(A, B)
22629        ;   true
22630        ),
22631        D=C,
22632        E=F
22633    ;   nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', O),
22634        lookup_ht(O, J, P),
22635        member(Q, P),
22636        Q=suspension(_, active, _, _, _, R),
22637        !,
22638        R=pragma(rule(S, T, _, _), ids(U, V), _, _, _),
22639        (   select2(K, W, U, S, X, Y)
22640        ->  D=C,
22641            head1_code(W,
22642                       K,
22643                       Y,
22644                       X,
22645                       R,
22646                       A,
22647                       B,
22648                       C,
22649                       E,
22650                       F)
22651        ;   select2(K, Z, V, T, A1, B1)
22652        ->  head2_code(Z,
22653                       K,
22654                       B1,
22655                       A1,
22656                       R,
22657                       A,
22658                       B,
22659                       C,
22660                       E,
22661                       C1),
22662            (   should_skip_to_next_id(A, B)
22663            ->  inc_id(C, D),
22664                (   unconditional_occurrence(A, B)
22665                ->  C1=F
22666                ;   gen_alloc_inc_clause(A,
22667                                         B,
22668                                         C,
22669                                         C1,
22670                                         F)
22671                )
22672            ;   D=C,
22673                C1=F
22674            )
22675        )
22676    ).
22677occurrence_code(A, B, _, _, _, _) :-
22678    chr_error(internal,
22679              'occurrence_code/6: missing information to compile ~w:~w\n',
22680              [A, B]).
22681functional_dependency(A, B, C, D) :-
22682    B>1,
22683    nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',
22684              E),
22685    lookup_ht(E, A, F),
22686    member(G, F),
22687    G=suspension(_, active, _, _, H),
22688    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-13',
22689              I),
22690    lookup_ht(I, k(A, B), J),
22691    member(K, J),
22692    K=suspension(_, active, _, _, _, L, _, _, _),
22693    H>L,
22694    !,
22695    functional_dependency(A, 1, C, D).
22696functional_dependency(A, B, C, D) :-
22697    E=suspension(F, active, A, B, C, D),
22698    'chr gen_id'(F),
22699    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
22700              G),
22701    insert_ht(G, A, E),
22702    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',
22703              H),
22704    insert_ht(H, k(A, B), E).
22705get_functional_dependency(A, B, C, D) :-
22706    nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',
22707              E),
22708    lookup_ht(E, A, F),
22709    member(G, F),
22710    G=suspension(_, active, _, H, I, J),
22711    B>=H,
22712    !,
22713    C=I,
22714    D=J.
22715get_functional_dependency(_, _, _, _) :-
22716    fail.
22717initial_call_pattern(A) :-
22718    initial_call_pattern___1__0(A, _).
22719initial_call_pattern___1__0(A, _) :-
22720    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
22721              B),
22722    lookup_ht(B, A, C),
22723    member(D, C),
22724    D=suspension(_, active, _, _),
22725    !.
22726initial_call_pattern___1__0(A, B) :-
22727    B=suspension(C, active, t, A),
22728    'chr gen_id'(C),
22729    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
22730              D),
22731    insert_ht(D, A, B),
22732    call_pattern(A),
22733    (   B=suspension(_, active, _, _)
22734    ->  setarg(2, B, inactive),
22735        initial_call_pattern___1__1(A, B)
22736    ;   true
22737    ).
22738initial_call_pattern___1__1(A, B) :-
22739    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
22740              C),
22741    lookup_ht(C, A, D),
22742    !,
22743    initial_call_pattern___1__1__0__4(D, A, B).
22744initial_call_pattern___1__1__0__4([], A, B) :-
22745    initial_call_pattern___1__2(A, B).
22746initial_call_pattern___1__1__0__4([A|B], C, D) :-
22747    (   A=suspension(_, active, _, E, F),
22748        E==C,
22749        nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
22750                  G)
22751    ->  initial_call_pattern___1__1__1__4(G,
22752                                          F,
22753                                          A,
22754                                          B,
22755                                          C,
22756                                          D)
22757    ;   initial_call_pattern___1__1__0__4(B, C, D)
22758    ).
22759initial_call_pattern___1__1__1__4([], _, _, A, B, C) :-
22760    initial_call_pattern___1__1__0__4(A, B, C).
22761initial_call_pattern___1__1__1__4([A|B], C, D, E, F, G) :-
22762    (   A=suspension(_, active, _, H),
22763        I=t(303, G, D, A),
22764        '$novel_production'(G, I),
22765        '$novel_production'(D, I)
22766    ->  '$extend_history'(G, I),
22767        setarg(2, G, active),
22768        ai_observation_schedule_new_calls(H, C),
22769        (   G=suspension(_, active, _, _)
22770        ->  setarg(2, G, inactive),
22771            initial_call_pattern___1__1__1__4(B,
22772                                              C,
22773                                              D,
22774                                              E,
22775                                              F,
22776                                              G)
22777        ;   true
22778        )
22779    ;   initial_call_pattern___1__1__1__4(B,
22780                                          C,
22781                                          D,
22782                                          E,
22783                                          F,
22784                                          G)
22785    ).
22786initial_call_pattern___1__1(A, B) :-
22787    initial_call_pattern___1__2(A, B).
22788initial_call_pattern___1__2(_, A) :-
22789    setarg(2, A, active).
22790call_pattern(A) :-
22791    call_pattern___1__0(A, _).
22792call_pattern___1__0(A, _) :-
22793    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
22794              B),
22795    lookup_ht(B, A, C),
22796    member(D, C),
22797    D=suspension(_, active, _),
22798    !.
22799call_pattern___1__0(A, B) :-
22800    B=suspension(C, active, A),
22801    'chr gen_id'(C),
22802    nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',
22803              D),
22804    insert_ht(D, A, B),
22805    call_pattern_worker(A),
22806    (   B=suspension(_, active, _)
22807    ->  setarg(2, B, inactive),
22808        call_pattern___1__1(A, B)
22809    ;   true
22810    ).
22811call_pattern___1__1(_, A) :-
22812    setarg(2, A, active).
22813call_pattern_worker(odom([], A)) :-
22814    !,
22815    final_answer_pattern(odom([], A), odom([], A)).
22816call_pattern_worker(odom([A|B], C)) :-
22817    !,
22818    D=odom(A, C),
22819    depends_on_goal(odom([A|B], C), D),
22820    call_pattern(D).
22821call_pattern_worker(odom((A;B), C)) :-
22822    !,
22823    D=odom((A;B), C),
22824    E=odom([], C),
22825    final_answer_pattern(D, E),
22826    F=odom(A, C),
22827    G=odom(B, C),
22828    call_pattern(F),
22829    call_pattern(G),
22830    depends_on_as(D, F, G).
22831call_pattern_worker(odom(builtin, A)) :-
22832    !,
22833    ord_empty(B),
22834    final_answer_pattern(odom(builtin, A), odom([], B)).
22835call_pattern_worker(odom(occ(A, B), C)) :-
22836    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
22837              D),
22838    lookup_ht(D, A, E),
22839    member(F, E),
22840    F=suspension(_, active, _, _, G),
22841    B>G,
22842    !,
22843    final_answer_pattern(odom(occ(A, B), C), odom([], C)).
22844call_pattern_worker(odom(A, B)) :-
22845    A=_/_,
22846    !,
22847    C=odom(occ(A, 1), B),
22848    call_pattern(C),
22849    depends_on(odom(A, B), C).
22850call_pattern_worker(odom(occ(A, B), C)) :-
22851    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
22852              D),
22853    lookup_ht(D, k(A, B), E),
22854    member(F, E),
22855    F=suspension(_, active, _, _, _, _, G, H, _),
22856    is_passive(G, H),
22857    !,
22858    I is B+1,
22859    J=odom(occ(A, I), C),
22860    call_pattern(J),
22861    final_answer_pattern(odom(occ(A, B), C), odom([], C)),
22862    depends_on(odom(occ(A, B), C), J).
22863call_pattern_worker(odom(occ(A, B), C)) :-
22864    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
22865              D),
22866    (   lookup_ht(D, k(A, B, simplification), E),
22867        member(F, E),
22868        F=suspension(_, active, _, _, _, _, G, H, _),
22869        \+ is_passive(G, H),
22870        !,
22871        ai_observation_memo_simplification_rest_heads(A, B, I),
22872        ai_observation_observe_set(C, I, J),
22873        ai_observation_memo_abstract_goal(G, K),
22874        call_pattern(odom(K, J)),
22875        L is B+1,
22876        M=odom(occ(A, L), C),
22877        call_pattern(M),
22878        depends_on_as(odom(occ(A, B), C),
22879                      odom(K, J),
22880                      M),
22881        final_answer_pattern(odom(occ(A, B), C),
22882                             odom([], C))
22883    ;   lookup_ht(D, k(A, B, propagation), N),
22884        member(O, N),
22885        O=suspension(_, active, _, _, _, _, P, Q, _),
22886        \+ is_passive(P, Q),
22887        !,
22888        ai_observation_memo_propagation_rest_heads(A, B, R),
22889        ai_observation_observe_set(C, R, S),
22890        ord_add_element(S, A, T),
22891        ai_observation_memo_abstract_goal(P, U),
22892        call_pattern(odom(U, T)),
22893        (   ord_memberchk(A, S)
22894        ->  V=no
22895        ;   V=yes
22896        ),
22897        W is B+1,
22898        X=odom(occ(A, W), C),
22899        call_pattern(X),
22900        depends_on_ap(odom(occ(A, B), C),
22901                      odom(U, T),
22902                      X,
22903                      V)
22904    ).
22905call_pattern_worker(A) :-
22906    chr_error(internal,
22907              'AI observation analysis: unexpected abstract state ~w\n',
22908              [A]).
22909final_answer_pattern(A, B) :-
22910    final_answer_pattern___2__0(A, B, _).
22911final_answer_pattern___2__0(A, B, C) :-
22912    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
22913              D),
22914    lookup_ht(D, A, E),
22915    (   member(F, E),
22916        F=suspension(_, active, _, _, G),
22917        ai_observation_leq(B, G),
22918        !
22919    ;   !,
22920        final_answer_pattern___2__0__0__2(E, A, B, C)
22921    ).
22922final_answer_pattern___2__0__0__2([], A, B, C) :-
22923    final_answer_pattern___2__1(A, B, C).
22924final_answer_pattern___2__0__0__2([A|B], C, D, E) :-
22925    (   A=suspension(_, active, _, F, G),
22926        F==C,
22927        ai_observation_leq(G, D)
22928    ->  setarg(2, A, removed),
22929        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
22930                  H),
22931        delete_ht(H, C, A),
22932        final_answer_pattern___2__0__0__2(B, C, D, E)
22933    ;   final_answer_pattern___2__0__0__2(B, C, D, E)
22934    ).
22935final_answer_pattern___2__0(A, B, C) :-
22936    final_answer_pattern___2__1(A, B, C).
22937final_answer_pattern___2__1(A, B, C) :-
22938    nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',
22939              D),
22940    lookup_ht(D, A, E),
22941    !,
22942    C=suspension(F, not_stored_yet, t, A, B),
22943    'chr gen_id'(F),
22944    final_answer_pattern___2__1__0__3(E, A, B, C).
22945final_answer_pattern___2__1__0__3([], A, B, C) :-
22946    final_answer_pattern___2__2(A, B, C).
22947final_answer_pattern___2__1__0__3([A|B], C, D, E) :-
22948    (   A=suspension(_, active, _, F),
22949        F==C,
22950        nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
22951                  G)
22952    ->  final_answer_pattern___2__1__1__3(G,
22953                                          A,
22954                                          B,
22955                                          C,
22956                                          D,
22957                                          E)
22958    ;   final_answer_pattern___2__1__0__3(B, C, D, E)
22959    ).
22960final_answer_pattern___2__1__1__3([], _, A, B, C, D) :-
22961    final_answer_pattern___2__1__0__3(A, B, C, D).
22962final_answer_pattern___2__1__1__3([A|B], C, D, E, F, G) :-
22963    (   A=suspension(_, active, _, H),
22964        I=t(303, C, G, A),
22965        '$novel_production'(C, I),
22966        '$novel_production'(G, I)
22967    ->  '$extend_history'(G, I),
22968        arg(2, G, J),
22969        setarg(2, G, active),
22970        (   J==not_stored_yet
22971        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
22972                      K),
22973            insert_ht(K, E, G)
22974        ;   true
22975        ),
22976        ai_observation_schedule_new_calls(H, F),
22977        (   G=suspension(_, active, _, _, _)
22978        ->  setarg(2, G, inactive),
22979            final_answer_pattern___2__1__1__3(B,
22980                                              C,
22981                                              D,
22982                                              E,
22983                                              F,
22984                                              G)
22985        ;   true
22986        )
22987    ;   final_answer_pattern___2__1__1__3(B,
22988                                          C,
22989                                          D,
22990                                          E,
22991                                          F,
22992                                          G)
22993    ).
22994final_answer_pattern___2__1(A, B, C) :-
22995    C=suspension(D, not_stored_yet, t, A, B),
22996    'chr gen_id'(D),
22997    final_answer_pattern___2__2(A, B, C).
22998final_answer_pattern___2__2(A, B, C) :-
22999    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2', D),
23000    lookup_ht(D, A, E),
23001    !,
23002    final_answer_pattern___2__2__0__4(E, A, B, C).
23003final_answer_pattern___2__2__0__4([], A, B, C) :-
23004    final_answer_pattern___2__3(A, B, C).
23005final_answer_pattern___2__2__0__4([A|B], C, D, E) :-
23006    (   A=suspension(_, active, _, F, G),
23007        G==C,
23008        H=t(305, A, E),
23009        '$novel_production'(A, H),
23010        '$novel_production'(E, H)
23011    ->  '$extend_history'(E, H),
23012        arg(2, E, I),
23013        setarg(2, E, active),
23014        (   I==not_stored_yet
23015        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23016                      J),
23017            insert_ht(J, C, E)
23018        ;   true
23019        ),
23020        final_answer_pattern(F, D),
23021        (   E=suspension(_, active, _, _, _)
23022        ->  setarg(2, E, inactive),
23023            final_answer_pattern___2__2__0__4(B, C, D, E)
23024        ;   true
23025        )
23026    ;   final_answer_pattern___2__2__0__4(B, C, D, E)
23027    ).
23028final_answer_pattern___2__2(A, B, C) :-
23029    final_answer_pattern___2__3(A, B, C).
23030final_answer_pattern___2__3(A, B, C) :-
23031    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23032              D),
23033    lookup_ht(D, A, E),
23034    !,
23035    final_answer_pattern___2__3__0__5(E, A, B, C).
23036final_answer_pattern___2__3__0__5([], A, B, C) :-
23037    final_answer_pattern___2__4(A, B, C).
23038final_answer_pattern___2__3__0__5([A|B], C, D, E) :-
23039    (   A=suspension(_, active, _, F, G),
23040        G==C,
23041        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23042                  H),
23043        lookup_ht(H, F, I)
23044    ->  final_answer_pattern___2__3__1__5(I,
23045                                          F,
23046                                          A,
23047                                          B,
23048                                          C,
23049                                          D,
23050                                          E)
23051    ;   final_answer_pattern___2__3__0__5(B, C, D, E)
23052    ).
23053final_answer_pattern___2__3__1__5([], _, _, A, B, C, D) :-
23054    final_answer_pattern___2__3__0__5(A, B, C, D).
23055final_answer_pattern___2__3__1__5([A|B], C, D, E, F, G, H) :-
23056    (   A=suspension(_, active, _, I, J),
23057        I==C
23058    ->  setarg(2, A, removed),
23059        ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23060                    K),
23061          delete_ht(K, C, A)
23062        ),
23063        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
23064                  L),
23065        delete_ht(L, J, A),
23066        final_answer_pattern___2__3__1__5(B,
23067                                          C,
23068                                          D,
23069                                          E,
23070                                          F,
23071                                          G,
23072                                          H)
23073    ;   final_answer_pattern___2__3__1__5(B,
23074                                          C,
23075                                          D,
23076                                          E,
23077                                          F,
23078                                          G,
23079                                          H)
23080    ).
23081final_answer_pattern___2__3(A, B, C) :-
23082    final_answer_pattern___2__4(A, B, C).
23083final_answer_pattern___2__4(A, B, C) :-
23084    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23085              D),
23086    lookup_ht(D, A, E),
23087    !,
23088    final_answer_pattern___2__4__0__6(E, A, B, C).
23089final_answer_pattern___2__4__0__6([], A, B, C) :-
23090    final_answer_pattern___2__5(A, B, C).
23091final_answer_pattern___2__4__0__6([A|B], C, D, E) :-
23092    (   A=suspension(_, active, _, F, G),
23093        G==C,
23094        H=t(310, A, E),
23095        '$novel_production'(A, H),
23096        '$novel_production'(E, H)
23097    ->  '$extend_history'(E, H),
23098        arg(2, E, I),
23099        setarg(2, E, active),
23100        (   I==not_stored_yet
23101        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23102                      J),
23103            insert_ht(J, C, E)
23104        ;   true
23105        ),
23106        F=odom([_|K], _),
23107        D=odom([], L),
23108        M=odom(K, L),
23109        call_pattern(M),
23110        depends_on(F, M),
23111        (   E=suspension(_, active, _, _, _)
23112        ->  setarg(2, E, inactive),
23113            final_answer_pattern___2__4__0__6(B, C, D, E)
23114        ;   true
23115        )
23116    ;   final_answer_pattern___2__4__0__6(B, C, D, E)
23117    ).
23118final_answer_pattern___2__4(A, B, C) :-
23119    final_answer_pattern___2__5(A, B, C).
23120final_answer_pattern___2__5(A, B, C) :-
23121    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
23122              D),
23123    lookup_ht(D, A, E),
23124    !,
23125    final_answer_pattern___2__5__0__7(E, A, B, C).
23126final_answer_pattern___2__5__0__7([], A, B, C) :-
23127    final_answer_pattern___2__6(A, B, C).
23128final_answer_pattern___2__5__0__7([A|B], C, D, E) :-
23129    (   A=suspension(_, active, _, F, G, H),
23130        G==C,
23131        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23132                  I),
23133        lookup_ht(I, H, J)
23134    ->  final_answer_pattern___2__5__1__7(J,
23135                                          F,
23136                                          H,
23137                                          A,
23138                                          B,
23139                                          C,
23140                                          D,
23141                                          E)
23142    ;   final_answer_pattern___2__5__0__7(B, C, D, E)
23143    ).
23144final_answer_pattern___2__5__1__7([], _, _, _, A, B, C, D) :-
23145    final_answer_pattern___2__5__0__7(A, B, C, D).
23146final_answer_pattern___2__5__1__7([A|B], C, D, E, F, G, H, I) :-
23147    (   A=suspension(_, active, _, J, K),
23148        J==D,
23149        L=t(317, E, I, A),
23150        '$novel_production'(E, L),
23151        '$novel_production'(I, L),
23152        '$novel_production'(A, L)
23153    ->  '$extend_history'(I, L),
23154        arg(2, I, M),
23155        setarg(2, I, active),
23156        (   M==not_stored_yet
23157        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23158                      N),
23159            insert_ht(N, G, I)
23160        ;   true
23161        ),
23162        ai_observation_lub(H, K, O),
23163        final_answer_pattern(C, O),
23164        (   I=suspension(_, active, _, _, _)
23165        ->  setarg(2, I, inactive),
23166            final_answer_pattern___2__5__1__7(B,
23167                                              C,
23168                                              D,
23169                                              E,
23170                                              F,
23171                                              G,
23172                                              H,
23173                                              I)
23174        ;   true
23175        )
23176    ;   final_answer_pattern___2__5__1__7(B,
23177                                          C,
23178                                          D,
23179                                          E,
23180                                          F,
23181                                          G,
23182                                          H,
23183                                          I)
23184    ).
23185final_answer_pattern___2__5(A, B, C) :-
23186    final_answer_pattern___2__6(A, B, C).
23187final_answer_pattern___2__6(A, B, C) :-
23188    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
23189              D),
23190    lookup_ht(D, A, E),
23191    !,
23192    final_answer_pattern___2__6__0__8(E, A, B, C).
23193final_answer_pattern___2__6__0__8([], A, B, C) :-
23194    final_answer_pattern___2__7(A, B, C).
23195final_answer_pattern___2__6__0__8([A|B], C, D, E) :-
23196    (   A=suspension(_, active, _, F, G, H),
23197        H==C,
23198        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23199                  I),
23200        lookup_ht(I, G, J)
23201    ->  final_answer_pattern___2__6__1__8(J,
23202                                          F,
23203                                          G,
23204                                          A,
23205                                          B,
23206                                          C,
23207                                          D,
23208                                          E)
23209    ;   final_answer_pattern___2__6__0__8(B, C, D, E)
23210    ).
23211final_answer_pattern___2__6__1__8([], _, _, _, A, B, C, D) :-
23212    final_answer_pattern___2__6__0__8(A, B, C, D).
23213final_answer_pattern___2__6__1__8([A|B], C, D, E, F, G, H, I) :-
23214    (   A=suspension(_, active, _, J, K),
23215        J==D,
23216        L=t(317, E, A, I),
23217        '$novel_production'(E, L),
23218        '$novel_production'(A, L),
23219        '$novel_production'(I, L)
23220    ->  '$extend_history'(I, L),
23221        arg(2, I, M),
23222        setarg(2, I, active),
23223        (   M==not_stored_yet
23224        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23225                      N),
23226            insert_ht(N, G, I)
23227        ;   true
23228        ),
23229        ai_observation_lub(K, H, O),
23230        final_answer_pattern(C, O),
23231        (   I=suspension(_, active, _, _, _)
23232        ->  setarg(2, I, inactive),
23233            final_answer_pattern___2__6__1__8(B,
23234                                              C,
23235                                              D,
23236                                              E,
23237                                              F,
23238                                              G,
23239                                              H,
23240                                              I)
23241        ;   true
23242        )
23243    ;   final_answer_pattern___2__6__1__8(B,
23244                                          C,
23245                                          D,
23246                                          E,
23247                                          F,
23248                                          G,
23249                                          H,
23250                                          I)
23251    ).
23252final_answer_pattern___2__6(A, B, C) :-
23253    final_answer_pattern___2__7(A, B, C).
23254final_answer_pattern___2__7(A, B, C) :-
23255    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23256              D),
23257    lookup_ht(D, A, E),
23258    !,
23259    final_answer_pattern___2__7__0__9(E, A, B, C).
23260final_answer_pattern___2__7__0__9([], A, B, C) :-
23261    final_answer_pattern___2__8(A, B, C).
23262final_answer_pattern___2__7__0__9([A|B], C, D, E) :-
23263    (   A=suspension(_, active, _, F, _, G, _),
23264        G==C,
23265        H=t(325, A, E),
23266        '$novel_production'(A, H),
23267        '$novel_production'(E, H)
23268    ->  '$extend_history'(E, H),
23269        arg(2, E, I),
23270        setarg(2, E, active),
23271        (   I==not_stored_yet
23272        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23273                      J),
23274            insert_ht(J, C, E)
23275        ;   true
23276        ),
23277        final_answer_pattern(F, D),
23278        (   E=suspension(_, active, _, _, _)
23279        ->  setarg(2, E, inactive),
23280            final_answer_pattern___2__7__0__9(B, C, D, E)
23281        ;   true
23282        )
23283    ;   final_answer_pattern___2__7__0__9(B, C, D, E)
23284    ).
23285final_answer_pattern___2__7(A, B, C) :-
23286    final_answer_pattern___2__8(A, B, C).
23287final_answer_pattern___2__8(A, B, C) :-
23288    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
23289              D),
23290    lookup_ht(D, A, E),
23291    !,
23292    final_answer_pattern___2__8__0__10(E, A, B, C).
23293final_answer_pattern___2__8__0__10([], A, B, C) :-
23294    final_answer_pattern___2__9(A, B, C).
23295final_answer_pattern___2__8__0__10([A|B], C, D, E) :-
23296    (   A=suspension(_, active, _, F, G, H, I),
23297        G==C,
23298        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23299                  J),
23300        lookup_ht(J, H, K)
23301    ->  final_answer_pattern___2__8__1__10(K,
23302                                           F,
23303                                           H,
23304                                           I,
23305                                           A,
23306                                           B,
23307                                           C,
23308                                           D,
23309                                           E)
23310    ;   final_answer_pattern___2__8__0__10(B, C, D, E)
23311    ).
23312final_answer_pattern___2__8__1__10([], _, _, _, _, A, B, C, D) :-
23313    final_answer_pattern___2__8__0__10(A, B, C, D).
23314final_answer_pattern___2__8__1__10([A|B], C, D, E, F, G, H, I, J) :-
23315    (   A=suspension(_, active, _, K, L),
23316        K==D,
23317        M=t(326, F, J, A),
23318        '$novel_production'(F, M),
23319        '$novel_production'(J, M),
23320        '$novel_production'(A, M)
23321    ->  '$extend_history'(J, M),
23322        arg(2, J, N),
23323        setarg(2, J, active),
23324        (   N==not_stored_yet
23325        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23326                      O),
23327            insert_ht(O, H, J)
23328        ;   true
23329        ),
23330        C=odom(occ(P, Q), _),
23331        (   ai_observation_is_observed(I, P)
23332        ->  ai_observed_internal(P, Q)
23333        ;   ai_not_observed_internal(P, Q)
23334        ),
23335        (   E==yes
23336        ->  I=odom([], R),
23337            ord_del_element(R, P, S),
23338            T=odom([], S)
23339        ;   T=I
23340        ),
23341        ai_observation_lub(T, L, U),
23342        final_answer_pattern(C, U),
23343        (   J=suspension(_, active, _, _, _)
23344        ->  setarg(2, J, inactive),
23345            final_answer_pattern___2__8__1__10(B,
23346                                               C,
23347                                               D,
23348                                               E,
23349                                               F,
23350                                               G,
23351                                               H,
23352                                               I,
23353                                               J)
23354        ;   true
23355        )
23356    ;   final_answer_pattern___2__8__1__10(B,
23357                                           C,
23358                                           D,
23359                                           E,
23360                                           F,
23361                                           G,
23362                                           H,
23363                                           I,
23364                                           J)
23365    ).
23366final_answer_pattern___2__8(A, B, C) :-
23367    final_answer_pattern___2__9(A, B, C).
23368final_answer_pattern___2__9(A, B, C) :-
23369    nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23370              D),
23371    lookup_ht(D, A, E),
23372    !,
23373    final_answer_pattern___2__9__0__11(E, A, B, C).
23374final_answer_pattern___2__9__0__11([], A, B, C) :-
23375    final_answer_pattern___2__10(A, B, C).
23376final_answer_pattern___2__9__0__11([A|B], C, D, E) :-
23377    (   A=suspension(_, active, _, F, G, H, I),
23378        H==C,
23379        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23380                  J),
23381        lookup_ht(J, G, K)
23382    ->  final_answer_pattern___2__9__1__11(K,
23383                                           F,
23384                                           G,
23385                                           I,
23386                                           A,
23387                                           B,
23388                                           C,
23389                                           D,
23390                                           E)
23391    ;   final_answer_pattern___2__9__0__11(B, C, D, E)
23392    ).
23393final_answer_pattern___2__9__1__11([], _, _, _, _, A, B, C, D) :-
23394    final_answer_pattern___2__9__0__11(A, B, C, D).
23395final_answer_pattern___2__9__1__11([A|B], C, D, E, F, G, H, I, J) :-
23396    (   A=suspension(_, active, _, K, L),
23397        K==D,
23398        M=t(326, F, A, J),
23399        '$novel_production'(F, M),
23400        '$novel_production'(A, M),
23401        '$novel_production'(J, M)
23402    ->  '$extend_history'(J, M),
23403        arg(2, J, N),
23404        setarg(2, J, active),
23405        (   N==not_stored_yet
23406        ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23407                      O),
23408            insert_ht(O, H, J)
23409        ;   true
23410        ),
23411        C=odom(occ(P, Q), _),
23412        (   ai_observation_is_observed(L, P)
23413        ->  ai_observed_internal(P, Q)
23414        ;   ai_not_observed_internal(P, Q)
23415        ),
23416        (   E==yes
23417        ->  L=odom([], R),
23418            ord_del_element(R, P, S),
23419            T=odom([], S)
23420        ;   T=L
23421        ),
23422        ai_observation_lub(T, I, U),
23423        final_answer_pattern(C, U),
23424        (   J=suspension(_, active, _, _, _)
23425        ->  setarg(2, J, inactive),
23426            final_answer_pattern___2__9__1__11(B,
23427                                               C,
23428                                               D,
23429                                               E,
23430                                               F,
23431                                               G,
23432                                               H,
23433                                               I,
23434                                               J)
23435        ;   true
23436        )
23437    ;   final_answer_pattern___2__9__1__11(B,
23438                                           C,
23439                                           D,
23440                                           E,
23441                                           F,
23442                                           G,
23443                                           H,
23444                                           I,
23445                                           J)
23446    ).
23447final_answer_pattern___2__9(A, B, C) :-
23448    final_answer_pattern___2__10(A, B, C).
23449final_answer_pattern___2__10(A, _, B) :-
23450    arg(2, B, C),
23451    setarg(2, B, active),
23452    (   C==not_stored_yet
23453    ->  nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23454                  D),
23455        insert_ht(D, A, B)
23456    ;   true
23457    ).
23458abstract_constraints(A) :-
23459    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23460              B),
23461    (   member(C, B),
23462        C=suspension(_, active, _, _),
23463        !
23464    ;   !,
23465        abstract_constraints___1__0__0__2(B, A)
23466    ).
23467abstract_constraints___1__0__0__2([], A) :-
23468    abstract_constraints___1__1(A).
23469abstract_constraints___1__0__0__2([A|B], C) :-
23470    (   A=suspension(_, active, _, _)
23471    ->  setarg(2, A, removed),
23472        arg(3, A, D),
23473        (   var(D)
23474        ->  nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23475                      E),
23476            E=[_|F],
23477            b_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23478                     F),
23479            (   F=[G|_]
23480            ->  setarg(3, G, _)
23481            ;   true
23482            )
23483        ;   D=[_, _|F],
23484            setarg(2, D, F),
23485            (   F=[G|_]
23486            ->  setarg(3, G, D)
23487            ;   true
23488            )
23489        ),
23490        abstract_constraints___1__0__0__2(B, C)
23491    ;   abstract_constraints___1__0__0__2(B, C)
23492    ).
23493abstract_constraints(A) :-
23494    abstract_constraints___1__1(A).
23495abstract_constraints___1__1(A) :-
23496    B=suspension(C, active, _, A),
23497    'chr gen_id'(C),
23498    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23499              D),
23500    E=[B|D],
23501    b_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
23502             E),
23503    (   D=[F|_]
23504    ->  setarg(3, F, E)
23505    ;   true
23506    ).
23507depends_on(A, B) :-
23508    depends_on___2__0(A, B, _).
23509depends_on___2__0(A, B, C) :-
23510    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23511              D),
23512    lookup_ht(D, B, E),
23513    !,
23514    C=suspension(F, not_stored_yet, t, A, B),
23515    'chr gen_id'(F),
23516    depends_on___2__0__0__1(E, A, B, C).
23517depends_on___2__0__0__1([], A, B, C) :-
23518    depends_on___2__1(A, B, C).
23519depends_on___2__0__0__1([A|B], C, D, E) :-
23520    (   A=suspension(_, active, _, F, G),
23521        F==D,
23522        H=t(305, E, A),
23523        '$novel_production'(E, H),
23524        '$novel_production'(A, H)
23525    ->  '$extend_history'(E, H),
23526        arg(2, E, I),
23527        setarg(2, E, active),
23528        (   I==not_stored_yet
23529        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23530                      J),
23531            insert_ht(J, C, E),
23532            nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
23533                      K),
23534            insert_ht(K, D, E)
23535        ;   true
23536        ),
23537        final_answer_pattern(C, G),
23538        (   E=suspension(_, active, _, _, _)
23539        ->  setarg(2, E, inactive),
23540            depends_on___2__0__0__1(B, C, D, E)
23541        ;   true
23542        )
23543    ;   depends_on___2__0__0__1(B, C, D, E)
23544    ).
23545depends_on___2__0(A, B, C) :-
23546    C=suspension(D, not_stored_yet, t, A, B),
23547    'chr gen_id'(D),
23548    depends_on___2__1(A, B, C).
23549depends_on___2__1(A, B, C) :-
23550    arg(2, C, D),
23551    setarg(2, C, active),
23552    (   D==not_stored_yet
23553    ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23554                  E),
23555        insert_ht(E, A, C),
23556        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
23557                  F),
23558        insert_ht(F, B, C)
23559    ;   true
23560    ).
23561depends_on_ap(A, B, C, D) :-
23562    depends_on_ap___4__0(A, B, C, D, _).
23563depends_on_ap___4__0(A, B, C, D, E) :-
23564    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23565              F),
23566    lookup_ht(F, C, G),
23567    !,
23568    E=suspension(H, not_stored_yet, t, A, B, C, D),
23569    'chr gen_id'(H),
23570    depends_on_ap___4__0__0__1(G,
23571                               A,
23572                               B,
23573                               C,
23574                               D,
23575                               E).
23576depends_on_ap___4__0__0__1([], A, B, C, D, E) :-
23577    depends_on_ap___4__1(A, B, C, D, E).
23578depends_on_ap___4__0__0__1([A|B], C, D, E, F, G) :-
23579    (   A=suspension(_, active, _, H, I),
23580        H==E,
23581        J=t(325, G, A),
23582        '$novel_production'(G, J),
23583        '$novel_production'(A, J)
23584    ->  '$extend_history'(G, J),
23585        arg(2, G, K),
23586        setarg(2, G, active),
23587        (   K==not_stored_yet
23588        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
23589                      L),
23590            insert_ht(L, D, G),
23591            nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23592                      M),
23593            insert_ht(M, E, G)
23594        ;   true
23595        ),
23596        final_answer_pattern(C, I),
23597        (   G=suspension(_, active, _, _, _, _, _)
23598        ->  setarg(2, G, inactive),
23599            depends_on_ap___4__0__0__1(B,
23600                                       C,
23601                                       D,
23602                                       E,
23603                                       F,
23604                                       G)
23605        ;   true
23606        )
23607    ;   depends_on_ap___4__0__0__1(B,
23608                                   C,
23609                                   D,
23610                                   E,
23611                                   F,
23612                                   G)
23613    ).
23614depends_on_ap___4__0(A, B, C, D, E) :-
23615    E=suspension(F, not_stored_yet, t, A, B, C, D),
23616    'chr gen_id'(F),
23617    depends_on_ap___4__1(A, B, C, D, E).
23618depends_on_ap___4__1(A, B, C, D, E) :-
23619    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23620              F),
23621    lookup_ht(F, B, G),
23622    !,
23623    depends_on_ap___4__1__0__2(G,
23624                               A,
23625                               B,
23626                               C,
23627                               D,
23628                               E).
23629depends_on_ap___4__1__0__2([], A, B, C, D, E) :-
23630    depends_on_ap___4__2(A, B, C, D, E).
23631depends_on_ap___4__1__0__2([A|B], C, D, E, F, G) :-
23632    (   A=suspension(_, active, _, H, I),
23633        H==D,
23634        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23635                  J),
23636        lookup_ht(J, E, K)
23637    ->  depends_on_ap___4__1__1__2(K,
23638                                   I,
23639                                   A,
23640                                   B,
23641                                   C,
23642                                   D,
23643                                   E,
23644                                   F,
23645                                   G)
23646    ;   depends_on_ap___4__1__0__2(B,
23647                                   C,
23648                                   D,
23649                                   E,
23650                                   F,
23651                                   G)
23652    ).
23653depends_on_ap___4__1__1__2([], _, _, A, B, C, D, E, F) :-
23654    depends_on_ap___4__1__0__2(A,
23655                               B,
23656                               C,
23657                               D,
23658                               E,
23659                               F).
23660depends_on_ap___4__1__1__2([A|B], C, D, E, F, G, H, I, J) :-
23661    (   A=suspension(_, active, _, K, L),
23662        A\==D,
23663        K==H,
23664        M=t(326, J, D, A),
23665        '$novel_production'(J, M),
23666        '$novel_production'(D, M),
23667        '$novel_production'(A, M)
23668    ->  '$extend_history'(J, M),
23669        arg(2, J, N),
23670        setarg(2, J, active),
23671        (   N==not_stored_yet
23672        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
23673                      O),
23674            insert_ht(O, G, J),
23675            nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23676                      P),
23677            insert_ht(P, H, J)
23678        ;   true
23679        ),
23680        F=odom(occ(Q, R), _),
23681        (   ai_observation_is_observed(C, Q)
23682        ->  ai_observed_internal(Q, R)
23683        ;   ai_not_observed_internal(Q, R)
23684        ),
23685        (   I==yes
23686        ->  C=odom([], S),
23687            ord_del_element(S, Q, T),
23688            U=odom([], T)
23689        ;   U=C
23690        ),
23691        ai_observation_lub(U, L, V),
23692        final_answer_pattern(F, V),
23693        (   J=suspension(_, active, _, _, _, _, _)
23694        ->  setarg(2, J, inactive),
23695            depends_on_ap___4__1__1__2(B,
23696                                       C,
23697                                       D,
23698                                       E,
23699                                       F,
23700                                       G,
23701                                       H,
23702                                       I,
23703                                       J)
23704        ;   true
23705        )
23706    ;   depends_on_ap___4__1__1__2(B,
23707                                   C,
23708                                   D,
23709                                   E,
23710                                   F,
23711                                   G,
23712                                   H,
23713                                   I,
23714                                   J)
23715    ).
23716depends_on_ap___4__1(A, B, C, D, E) :-
23717    depends_on_ap___4__2(A, B, C, D, E).
23718depends_on_ap___4__2(_, A, B, _, C) :-
23719    arg(2, C, D),
23720    setarg(2, C, active),
23721    (   D==not_stored_yet
23722    ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',
23723                  E),
23724        insert_ht(E, A, C),
23725        nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',
23726                  F),
23727        insert_ht(F, B, C)
23728    ;   true
23729    ).
23730depends_on_goal(A, B) :-
23731    depends_on_goal___2__0(A, B, _).
23732depends_on_goal___2__0(A, B, C) :-
23733    nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1', D),
23734    lookup_ht(D, A, E),
23735    !,
23736    depends_on_goal___2__0__0__1(E, A, B, C).
23737depends_on_goal___2__0__0__1([], A, B, C) :-
23738    depends_on_goal___2__1(A, B, C).
23739depends_on_goal___2__0__0__1([A|B], C, D, E) :-
23740    (   A=suspension(_, active, _, F, G),
23741        F==C,
23742        ground(D),
23743        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23744                  H),
23745        lookup_ht(H, D, I),
23746        member(J, I),
23747        J=suspension(_, active, _, _, _)
23748    ->  setarg(2, A, removed),
23749        ( nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',
23750                    K),
23751          delete_ht(K, C, A)
23752        ),
23753        nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',
23754                  L),
23755        delete_ht(L, G, A),
23756        depends_on_goal___2__0__0__1(B, C, D, E)
23757    ;   depends_on_goal___2__0__0__1(B, C, D, E)
23758    ).
23759depends_on_goal___2__0(A, B, C) :-
23760    depends_on_goal___2__1(A, B, C).
23761depends_on_goal___2__1(A, B, C) :-
23762    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23763              D),
23764    lookup_ht(D, B, E),
23765    !,
23766    C=suspension(F, not_stored_yet, t, A, B),
23767    'chr gen_id'(F),
23768    depends_on_goal___2__1__0__2(E, A, B, C).
23769depends_on_goal___2__1__0__2([], A, B, C) :-
23770    depends_on_goal___2__2(A, B, C).
23771depends_on_goal___2__1__0__2([A|B], C, D, E) :-
23772    (   A=suspension(_, active, _, F, G),
23773        F==D,
23774        H=t(310, E, A),
23775        '$novel_production'(E, H),
23776        '$novel_production'(A, H)
23777    ->  '$extend_history'(E, H),
23778        arg(2, E, I),
23779        setarg(2, E, active),
23780        (   I==not_stored_yet
23781        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23782                      J),
23783            insert_ht(J, D, E)
23784        ;   true
23785        ),
23786        C=odom([_|K], _),
23787        G=odom([], L),
23788        M=odom(K, L),
23789        call_pattern(M),
23790        depends_on(C, M),
23791        (   E=suspension(_, active, _, _, _)
23792        ->  setarg(2, E, inactive),
23793            depends_on_goal___2__1__0__2(B, C, D, E)
23794        ;   true
23795        )
23796    ;   depends_on_goal___2__1__0__2(B, C, D, E)
23797    ).
23798depends_on_goal___2__1(A, B, C) :-
23799    C=suspension(D, not_stored_yet, t, A, B),
23800    'chr gen_id'(D),
23801    depends_on_goal___2__2(A, B, C).
23802depends_on_goal___2__2(_, A, B) :-
23803    arg(2, B, C),
23804    setarg(2, B, active),
23805    (   C==not_stored_yet
23806    ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',
23807                  D),
23808        insert_ht(D, A, B)
23809    ;   true
23810    ).
23811ai_observed_internal(A, B) :-
23812    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
23813              C),
23814    lookup_ht(C, k(A, B), D),
23815    !,
23816    ai_observed_internal___2__0__0__1(D, A, B).
23817ai_observed_internal___2__0__0__1([], A, B) :-
23818    ai_observed_internal___2__1(A, B).
23819ai_observed_internal___2__0__0__1([A|B], C, D) :-
23820    (   A=suspension(_, active, _, E, F),
23821        E==C,
23822        F==D
23823    ->  setarg(2, A, removed),
23824        ( arg(3, A, G),
23825          (   var(G)
23826          ->  nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
23827                        H),
23828              H=[_|I],
23829              b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
23830                       I),
23831              (   I=[J|_]
23832              ->  setarg(3, J, _)
23833              ;   true
23834              )
23835          ;   G=[_, _|I],
23836              setarg(2, G, I),
23837              (   I=[J|_]
23838              ->  setarg(3, J, G)
23839              ;   true
23840              )
23841          )
23842        ),
23843        nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
23844                  K),
23845        delete_ht(K, k(C, D), A),
23846        ai_observed_internal___2__0__0__1(B, C, D)
23847    ;   ai_observed_internal___2__0__0__1(B, C, D)
23848    ).
23849ai_observed_internal(A, B) :-
23850    ai_observed_internal___2__1(A, B).
23851ai_observed_internal___2__1(A, B) :-
23852    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
23853              C),
23854    lookup_ht(C, k(A, B), D),
23855    member(E, D),
23856    E=suspension(_, active, _, _, _),
23857    !.
23858ai_observed_internal___2__1(_, _) :-
23859    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
23860              A),
23861    member(B, A),
23862    B=suspension(_, active, _),
23863    !.
23864ai_observed_internal___2__1(A, B) :-
23865    C=suspension(D, active, _, A, B),
23866    'chr gen_id'(D),
23867    nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
23868              E),
23869    F=[C|E],
23870    b_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
23871             F),
23872    (   E=[G|_]
23873    ->  setarg(3, G, F)
23874    ;   true
23875    ),
23876    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
23877              H),
23878    insert_ht(H, k(A, B), C).
23879ai_not_observed_internal(A, B) :-
23880    nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
23881              C),
23882    lookup_ht(C, k(A, B), D),
23883    member(E, D),
23884    E=suspension(_, active, _, _, _),
23885    !.
23886ai_not_observed_internal(A, B) :-
23887    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
23888              C),
23889    lookup_ht(C, k(A, B), D),
23890    member(E, D),
23891    E=suspension(_, active, _, _, _),
23892    !.
23893ai_not_observed_internal(A, B) :-
23894    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
23895              C),
23896    member(D, C),
23897    D=suspension(_, active, _),
23898    !,
23899    ai_not_observed(A, B).
23900ai_not_observed_internal(A, B) :-
23901    C=suspension(D, active, _, A, B),
23902    'chr gen_id'(D),
23903    nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
23904              E),
23905    F=[C|E],
23906    b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
23907             F),
23908    (   E=[G|_]
23909    ->  setarg(3, G, F)
23910    ;   true
23911    ),
23912    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
23913              H),
23914    insert_ht(H, k(A, B), C).
23915ai_not_observed(A, B) :-
23916    ai_not_observed___2__0(A, B, _).
23917ai_not_observed___2__0(A, B, C) :-
23918    nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123', D),
23919    lookup_ht(D, k(A, B, yes), E),
23920    !,
23921    C=suspension(F, not_stored_yet, A, B),
23922    'chr gen_id'(F),
23923    ai_not_observed___2__0__0__1(E, A, B, C).
23924ai_not_observed___2__0__0__1([], A, B, C) :-
23925    ai_not_observed___2__1(A, B, C).
23926ai_not_observed___2__0__0__1([A|B], C, D, E) :-
23927    (   A=suspension(_, active, F, G, H),
23928        F==C,
23929        G==D,
23930        H=yes,
23931        ( ground(C),
23932          nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
23933                    I),
23934          lookup_ht(I, C, J)
23935        ),
23936        member(K, J),
23937        K=suspension(_, active, _, _, L, M),
23938        D<L
23939    ->  ( setarg(2, A, removed),
23940          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-13',
23941                    N),
23942          delete_ht(N, k(C, yes), A),
23943          nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',
23944                    O),
23945          delete_ht(O, k(C, D, yes), A)
23946        ),
23947        setarg(2, K, removed),
23948        ( nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-13',
23949                    P),
23950          delete_ht(P, k(C, M), K)
23951        ),
23952        nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',
23953                  Q),
23954        delete_ht(Q, C, K),
23955        arg(2, E, R),
23956        setarg(2, E, active),
23957        (   R==not_stored_yet
23958        ->  nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
23959                      S),
23960            insert_ht(S, k(C, D), E)
23961        ;   true
23962        ),
23963        T is M-1,
23964        stored(C, D, maybe),
23965        stored_complete(C, L, T),
23966        (   E=suspension(_, active, _, _)
23967        ->  setarg(2, E, inactive),
23968            ai_not_observed___2__0__0__1(B, C, D, E)
23969        ;   true
23970        )
23971    ;   ai_not_observed___2__0__0__1(B, C, D, E)
23972    ).
23973ai_not_observed___2__0(A, B, C) :-
23974    C=suspension(D, not_stored_yet, A, B),
23975    'chr gen_id'(D),
23976    ai_not_observed___2__1(A, B, C).
23977ai_not_observed___2__1(A, B, C) :-
23978    arg(2, C, D),
23979    setarg(2, C, active),
23980    (   D==not_stored_yet
23981    ->  nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
23982                  E),
23983        insert_ht(E, k(A, B), C)
23984    ;   true
23985    ).
23986ai_is_observed(A, B) :-
23987    nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',
23988              C),
23989    lookup_ht(C, k(A, B), D),
23990    member(E, D),
23991    E=suspension(_, active, _, _),
23992    !,
23993    fail.
23994ai_is_observed(_, _).
23995depends_on_as(A, B, C) :-
23996    depends_on_as___3__0(A, B, C, _).
23997depends_on_as___3__0(A, B, C, D) :-
23998    nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
23999              E),
24000    lookup_ht(E, B, F),
24001    !,
24002    D=suspension(G, not_stored_yet, t, A, B, C),
24003    'chr gen_id'(G),
24004    depends_on_as___3__0__0__1(F, A, B, C, D).
24005depends_on_as___3__0__0__1([], A, B, C, D) :-
24006    depends_on_as___3__1(A, B, C, D).
24007depends_on_as___3__0__0__1([A|B], C, D, E, F) :-
24008    (   A=suspension(_, active, _, G, H),
24009        G==D,
24010        nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',
24011                  I),
24012        lookup_ht(I, E, J)
24013    ->  depends_on_as___3__0__1__1(J,
24014                                   H,
24015                                   A,
24016                                   B,
24017                                   C,
24018                                   D,
24019                                   E,
24020                                   F)
24021    ;   depends_on_as___3__0__0__1(B, C, D, E, F)
24022    ).
24023depends_on_as___3__0__1__1([], _, _, A, B, C, D, E) :-
24024    depends_on_as___3__0__0__1(A, B, C, D, E).
24025depends_on_as___3__0__1__1([A|B], C, D, E, F, G, H, I) :-
24026    (   A=suspension(_, active, _, J, K),
24027        A\==D,
24028        J==H,
24029        L=t(317, I, D, A),
24030        '$novel_production'(I, L),
24031        '$novel_production'(D, L),
24032        '$novel_production'(A, L)
24033    ->  '$extend_history'(I, L),
24034        arg(2, I, M),
24035        setarg(2, I, active),
24036        (   M==not_stored_yet
24037        ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
24038                      N),
24039            insert_ht(N, H, I),
24040            nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
24041                      O),
24042            insert_ht(O, G, I)
24043        ;   true
24044        ),
24045        ai_observation_lub(C, K, P),
24046        final_answer_pattern(F, P),
24047        (   I=suspension(_, active, _, _, _, _)
24048        ->  setarg(2, I, inactive),
24049            depends_on_as___3__0__1__1(B,
24050                                       C,
24051                                       D,
24052                                       E,
24053                                       F,
24054                                       G,
24055                                       H,
24056                                       I)
24057        ;   true
24058        )
24059    ;   depends_on_as___3__0__1__1(B,
24060                                   C,
24061                                   D,
24062                                   E,
24063                                   F,
24064                                   G,
24065                                   H,
24066                                   I)
24067    ).
24068depends_on_as___3__0(A, B, C, D) :-
24069    D=suspension(E, not_stored_yet, t, A, B, C),
24070    'chr gen_id'(E),
24071    depends_on_as___3__1(A, B, C, D).
24072depends_on_as___3__1(_, A, B, C) :-
24073    arg(2, C, D),
24074    setarg(2, C, active),
24075    (   D==not_stored_yet
24076    ->  nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',
24077                  E),
24078        insert_ht(E, B, C),
24079        nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',
24080                  F),
24081        insert_ht(F, A, C)
24082    ;   true
24083    ).
24084ai_observation_gather_results :-
24085    ai_observation_gather_results___0__0(_).
24086ai_observation_gather_results___0__0(A) :-
24087    nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24088              B),
24089    !,
24090    ai_observation_gather_results___0__0__0__1(B, A).
24091ai_observation_gather_results___0__0__0__1([], A) :-
24092    ai_observation_gather_results___0__1(A).
24093ai_observation_gather_results___0__0__0__1([A|B], C) :-
24094    (   A=suspension(_, active, _, D, E)
24095    ->  setarg(2, A, removed),
24096        ( arg(3, A, F),
24097          (   var(F)
24098          ->  nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24099                        G),
24100              G=[_|H],
24101              b_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',
24102                       H),
24103              (   H=[I|_]
24104              ->  setarg(3, I, _)
24105              ;   true
24106              )
24107          ;   F=[_, _|H],
24108              setarg(2, F, H),
24109              (   H=[I|_]
24110              ->  setarg(3, I, F)
24111              ;   true
24112              )
24113          )
24114        ),
24115        nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',
24116                  J),
24117        delete_ht(J, k(D, E), A),
24118        ai_observation_gather_results___0__0__0__1(B, C)
24119    ;   ai_observation_gather_results___0__0__0__1(B, C)
24120    ).
24121ai_observation_gather_results___0__0(A) :-
24122    ai_observation_gather_results___0__1(A).
24123ai_observation_gather_results___0__1(A) :-
24124    nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24125              B),
24126    !,
24127    A=suspension(C, not_stored_yet, _),
24128    'chr gen_id'(C),
24129    ai_observation_gather_results___0__1__0__2(B, A).
24130ai_observation_gather_results___0__1__0__2([], A) :-
24131    ai_observation_gather_results___0__2(A).
24132ai_observation_gather_results___0__1__0__2([A|B], C) :-
24133    (   A=suspension(_, active, _, D, E)
24134    ->  setarg(2, A, removed),
24135        ( arg(3, A, F),
24136          (   var(F)
24137          ->  nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24138                        G),
24139              G=[_|H],
24140              b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',
24141                       H),
24142              (   H=[I|_]
24143              ->  setarg(3, I, _)
24144              ;   true
24145              )
24146          ;   F=[_, _|H],
24147              setarg(2, F, H),
24148              (   H=[I|_]
24149              ->  setarg(3, I, F)
24150              ;   true
24151              )
24152          )
24153        ),
24154        nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',
24155                  J),
24156        delete_ht(J, k(D, E), A),
24157        arg(2, C, K),
24158        setarg(2, C, active),
24159        (   K==not_stored_yet
24160        ->  nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24161                      L),
24162            M=[C|L],
24163            b_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24164                     M),
24165            (   L=[N|_]
24166            ->  setarg(3, N, M)
24167            ;   true
24168            )
24169        ;   true
24170        ),
24171        ai_not_observed(D, E),
24172        (   C=suspension(_, active, _)
24173        ->  setarg(2, C, inactive),
24174            ai_observation_gather_results___0__1__0__2(B, C)
24175        ;   true
24176        )
24177    ;   ai_observation_gather_results___0__1__0__2(B, C)
24178    ).
24179ai_observation_gather_results___0__1(A) :-
24180    A=suspension(B, not_stored_yet, _),
24181    'chr gen_id'(B),
24182    ai_observation_gather_results___0__2(A).
24183ai_observation_gather_results___0__2(A) :-
24184    (   var(A)
24185    ->  true
24186    ;   arg(2, A, B),
24187        setarg(2, A, removed),
24188        (   B==not_stored_yet
24189        ->  true
24190        ;   arg(3, A, C),
24191            (   var(C)
24192            ->  nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24193                          D),
24194                D=[_|E],
24195                b_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',
24196                         E),
24197                (   E=[F|_]
24198                ->  setarg(3, F, _)
24199                ;   true
24200                )
24201            ;   C=[_, _|E],
24202                setarg(2, C, E),
24203                (   E=[F|_]
24204                ->  setarg(3, F, C)
24205                ;   true
24206                )
24207            )
24208        )
24209    ).
24210ai_observation_memo_simplification_rest_heads(A, B, C) :-
24211    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
24212              D),
24213    lookup_ht(D, k(A, B), E),
24214    member(F, E),
24215    F=suspension(_, active, _, _, G),
24216    !,
24217    C=G.
24218ai_observation_memo_simplification_rest_heads(A, B, C) :-
24219    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
24220              D),
24221    lookup_ht(D, k(A, B), E),
24222    member(F, E),
24223    F=suspension(_, active, _, _, _, _, G, H, _),
24224    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I),
24225    lookup_ht(I, G, J),
24226    member(K, J),
24227    K=suspension(_, active, _, _, _, L),
24228    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24229              M),
24230    member(N, M),
24231    N=suspension(_, active, _, O),
24232    !,
24233    L=pragma(rule(P, Q, _, _), ids(R, _), _, _, _),
24234    once(select2(H, _, R, P, _, S)),
24235    ai_observation_abstract_constraints(S, O, T),
24236    ai_observation_abstract_constraints(Q, O, U),
24237    append(T, U, V),
24238    sort(V, C),
24239    ai_observation_memoed_simplification_rest_heads(A, B, C).
24240ai_observation_memo_simplification_rest_heads(_, _, _) :-
24241    fail.
24242ai_observation_memoed_simplification_rest_heads(A, B, C) :-
24243    D=suspension(E, active, A, B, C),
24244    'chr gen_id'(E),
24245    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',
24246              F),
24247    insert_ht(F, k(A, B), D).
24248ai_observation_memo_propagation_rest_heads(A, B, C) :-
24249    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
24250              D),
24251    lookup_ht(D, k(A, B), E),
24252    member(F, E),
24253    F=suspension(_, active, _, _, G),
24254    !,
24255    C=G.
24256ai_observation_memo_propagation_rest_heads(A, B, C) :-
24257    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
24258              D),
24259    lookup_ht(D, k(A, B), E),
24260    member(F, E),
24261    F=suspension(_, active, _, _, _, _, G, H, _),
24262    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', I),
24263    lookup_ht(I, G, J),
24264    member(K, J),
24265    K=suspension(_, active, _, _, _, L),
24266    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24267              M),
24268    member(N, M),
24269    N=suspension(_, active, _, O),
24270    !,
24271    L=pragma(rule(P, Q, _, _), ids(_, R), _, _, _),
24272    once(select2(H, _, R, Q, _, S)),
24273    ai_observation_abstract_constraints(S, O, T),
24274    ai_observation_abstract_constraints(P, O, U),
24275    append(T, U, V),
24276    sort(V, C),
24277    ai_observation_memoed_propagation_rest_heads(A, B, C).
24278ai_observation_memo_propagation_rest_heads(_, _, _) :-
24279    fail.
24280ai_observation_memoed_propagation_rest_heads(A, B, C) :-
24281    D=suspension(E, active, A, B, C),
24282    'chr gen_id'(E),
24283    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',
24284              F),
24285    insert_ht(F, k(A, B), D).
24286ai_observation_memoed_abstract_goal(A, B) :-
24287    C=suspension(D, active, A, B),
24288    'chr gen_id'(D),
24289    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
24290              E),
24291    insert_ht(E, A, C).
24292ai_observation_memo_abstract_goal(A, B) :-
24293    nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',
24294              C),
24295    lookup_ht(C, A, D),
24296    member(E, D),
24297    E=suspension(_, active, _, F),
24298    !,
24299    B=F.
24300ai_observation_memo_abstract_goal(A, B) :-
24301    nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', C),
24302    lookup_ht(C, A, D),
24303    member(E, D),
24304    E=suspension(_, active, _, _, _, F),
24305    nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',
24306              G),
24307    member(H, G),
24308    H=suspension(_, active, _, I),
24309    !,
24310    F=pragma(rule(J, K, L, M), _, _, _, _),
24311    ai_observation_abstract_goal_(J,
24312                                  K,
24313                                  L,
24314                                  M,
24315                                  I,
24316                                  N),
24317    B=N,
24318    ai_observation_memoed_abstract_goal(A, N).
24319ai_observation_memo_abstract_goal(A, B) :-
24320    C=suspension(D, active, _, A, B),
24321    'chr gen_id'(D),
24322    nb_getval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
24323              E),
24324    F=[C|E],
24325    b_setval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',
24326             F),
24327    (   E=[G|_]
24328    ->  setarg(3, G, F)
24329    ;   true
24330    ).
24331partial_wake_analysis :-
24332    partial_wake_analysis___0__0(_).
24333partial_wake_analysis___0__0(A) :-
24334    nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',
24335              B),
24336    !,
24337    A=suspension(C, not_stored_yet, t, _),
24338    'chr gen_id'(C),
24339    partial_wake_analysis___0__0__0__1(B, A).
24340partial_wake_analysis___0__0__0__1([], A) :-
24341    partial_wake_analysis___0__1(A).
24342partial_wake_analysis___0__0__0__1([A|B], C) :-
24343    (   A=suspension(_, active, _, _, D, _, E, F, G),
24344        nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',
24345                  H),
24346        lookup_ht(H, D, I)
24347    ->  partial_wake_analysis___0__0__1__1(I,
24348                                           D,
24349                                           E,
24350                                           F,
24351                                           G,
24352                                           A,
24353                                           B,
24354                                           C)
24355    ;   partial_wake_analysis___0__0__0__1(B, C)
24356    ).
24357partial_wake_analysis___0__0__1__1([], _, _, _, _, _, A, B) :-
24358    partial_wake_analysis___0__0__0__1(A, B).
24359partial_wake_analysis___0__0__1__1([A|B], C, D, E, F, G, H, I) :-
24360    (   A=suspension(_, active, _, _, J, K),
24361        J==C,
24362        nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1', L),
24363        lookup_ht(L, D, M)
24364    ->  partial_wake_analysis___0__0__2__1(M,
24365                                           K,
24366                                           A,
24367                                           B,
24368                                           C,
24369                                           D,
24370                                           E,
24371                                           F,
24372                                           G,
24373                                           H,
24374                                           I)
24375    ;   partial_wake_analysis___0__0__1__1(B,
24376                                           C,
24377                                           D,
24378                                           E,
24379                                           F,
24380                                           G,
24381                                           H,
24382                                           I)
24383    ).
24384partial_wake_analysis___0__0__2__1([], _, _, A, B, C, D, E, F, G, H) :-
24385    partial_wake_analysis___0__0__1__1(A,
24386                                       B,
24387                                       C,
24388                                       D,
24389                                       E,
24390                                       F,
24391                                       G,
24392                                       H).
24393partial_wake_analysis___0__0__2__1([A|B], C, D, E, F, G, H, I, J, K, L) :-
24394    (   A=suspension(_, active, _, _, M, N),
24395        M==G,
24396        O=t(330, L, J, A, D),
24397        '$novel_production'(L, O),
24398        '$novel_production'(J, O),
24399        '$novel_production'(A, O),
24400        '$novel_production'(D, O)
24401    ->  '$extend_history'(L, O),
24402        arg(2, L, P),
24403        setarg(2, L, active),
24404        (   P==not_stored_yet
24405        ->  nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
24406                      Q),
24407            R=[L|Q],
24408            b_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
24409                     R),
24410            (   Q=[S|_]
24411            ->  setarg(4, S, R)
24412            ;   true
24413            )
24414        ;   true
24415        ),
24416        N=pragma(rule(T, U, V, _), _, _, _, _),
24417        (   is_passive(G, H)
24418        ->  true
24419        ;   I==simplification
24420        ->  select(W, T, _),
24421            W=..[_|X],
24422            term_variables(V, Y),
24423            partial_wake_args(X, C, Y, F)
24424        ;   select(W, U, _),
24425            W=..[_|X],
24426            term_variables(V, Y),
24427            partial_wake_args(X, C, Y, F)
24428        ),
24429        (   L=suspension(_, active, _, _)
24430        ->  setarg(2, L, inactive),
24431            partial_wake_analysis___0__0__2__1(B,
24432                                               C,
24433                                               D,
24434                                               E,
24435                                               F,
24436                                               G,
24437                                               H,
24438                                               I,
24439                                               J,
24440                                               K,
24441                                               L)
24442        ;   true
24443        )
24444    ;   partial_wake_analysis___0__0__2__1(B,
24445                                           C,
24446                                           D,
24447                                           E,
24448                                           F,
24449                                           G,
24450                                           H,
24451                                           I,
24452                                           J,
24453                                           K,
24454                                           L)
24455    ).
24456partial_wake_analysis___0__0(A) :-
24457    A=suspension(B, not_stored_yet, t, _),
24458    'chr gen_id'(B),
24459    partial_wake_analysis___0__1(A).
24460partial_wake_analysis___0__1(A) :-
24461    arg(2, A, B),
24462    setarg(2, A, active),
24463    (   B==not_stored_yet
24464    ->  nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
24465                  C),
24466        D=[A|C],
24467        b_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',
24468                 D),
24469        (   C=[E|_]
24470        ->  setarg(4, E, D)
24471        ;   true
24472        )
24473    ;   true
24474    ).
24475no_partial_wake(A) :-
24476    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
24477              B),
24478    lookup_ht(B, A, C),
24479    member(D, C),
24480    D=suspension(_, active, _),
24481    !.
24482no_partial_wake(A) :-
24483    B=suspension(C, active, A),
24484    'chr gen_id'(C),
24485    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
24486              D),
24487    insert_ht(D, A, B).
24488wakes_partially(A) :-
24489    nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',
24490              B),
24491    lookup_ht(B, A, C),
24492    member(D, C),
24493    D=suspension(_, active, _),
24494    !,
24495    fail.
24496wakes_partially(_).
24497phase_end(A) :-
24498    phase_end___1__0(A, _).
24499phase_end___1__0(A, B) :-
24500    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
24501              C),
24502    lookup_ht(C, A, D),
24503    !,
24504    B=suspension(E, not_stored_yet, A),
24505    'chr gen_id'(E),
24506    phase_end___1__0__0__1(D, A, B).
24507phase_end___1__0__0__1([], A, B) :-
24508    phase_end___1__1(A, B).
24509phase_end___1__0__0__1([A|B], C, D) :-
24510    (   A=suspension(_, active, E, F),
24511        E==C
24512    ->  setarg(2, A, removed),
24513        nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
24514                  G),
24515        delete_ht(G, C, A),
24516        arg(2, D, H),
24517        setarg(2, D, active),
24518        (   H==not_stored_yet
24519        ->  nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1',
24520                      I),
24521            insert_ht(I, C, D)
24522        ;   true
24523        ),
24524        call(F),
24525        (   D=suspension(_, active, _)
24526        ->  setarg(2, D, inactive),
24527            phase_end___1__0__0__1(B, C, D)
24528        ;   true
24529        )
24530    ;   phase_end___1__0__0__1(B, C, D)
24531    ).
24532phase_end___1__0(A, B) :-
24533    B=suspension(C, not_stored_yet, A),
24534    'chr gen_id'(C),
24535    phase_end___1__1(A, B).
24536phase_end___1__1(A, B) :-
24537    arg(2, B, C),
24538    setarg(2, B, active),
24539    (   C==not_stored_yet
24540    ->  nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1',
24541                  D),
24542        insert_ht(D, A, B)
24543    ;   true
24544    ).
24545delay_phase_end(A, B) :-
24546    nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1', C),
24547    lookup_ht(C, A, D),
24548    member(E, D),
24549    E=suspension(_, active, _),
24550    !,
24551    call(B).
24552delay_phase_end(A, B) :-
24553    C=suspension(D, active, A, B),
24554    'chr gen_id'(D),
24555    nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',
24556              E),
24557    insert_ht(E, A, C).
24558does_use_history(A, B) :-
24559    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
24560              C),
24561    lookup_ht(C, k(A, B), D),
24562    member(E, D),
24563    E=suspension(_, active, _, _),
24564    !.
24565does_use_history(A, B) :-
24566    C=suspension(D, active, A, B),
24567    'chr gen_id'(D),
24568    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
24569              E),
24570    insert_ht(E, A, C),
24571    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
24572              F),
24573    insert_ht(F, k(A, B), C).
24574uses_history(A) :-
24575    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',
24576              B),
24577    lookup_ht(B, A, C),
24578    member(D, C),
24579    D=suspension(_, active, _, _),
24580    !.
24581uses_history(_) :-
24582    fail.
24583novel_production_call(A, B, C, D) :-
24584    nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',
24585              E),
24586    lookup_ht(E, k(A, B), F),
24587    member(G, F),
24588    G=suspension(_, active, _, _),
24589    !,
24590    D=C.
24591novel_production_call(_, _, _, true).
24592does_use_field(A, B) :-
24593    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
24594              C),
24595    lookup_ht(C, k(A, B), D),
24596    member(E, D),
24597    E=suspension(_, active, _, _),
24598    !.
24599does_use_field(A, B) :-
24600    C=suspension(D, active, A, B),
24601    'chr gen_id'(D),
24602    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
24603              E),
24604    insert_ht(E, k(A, B), C).
24605uses_field(A, B) :-
24606    nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',
24607              C),
24608    lookup_ht(C, k(A, B), D),
24609    member(E, D),
24610    E=suspension(_, active, _, _),
24611    !.
24612uses_field(_, _) :-
24613    fail.
24614uses_state(A, B) :-
24615    uses_state___2__0(A, B, _).
24616uses_state___2__0(A, B, _) :-
24617    nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24618              C),
24619    lookup_ht(C, k(A, B), D),
24620    member(E, D),
24621    E=suspension(_, active, _, _),
24622    !.
24623uses_state___2__0(A, B, C) :-
24624    nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24625              D),
24626    !,
24627    C=suspension(E, not_stored_yet, A, B),
24628    'chr gen_id'(E),
24629    uses_state___2__0__0__3(D, A, B, C).
24630uses_state___2__0__0__3([], A, B, C) :-
24631    uses_state___2__1(A, B, C).
24632uses_state___2__0__0__3([A|B], C, D, E) :-
24633    (   A=suspension(_, active, _),
24634        nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24635                  F),
24636        lookup_ht(F, k(C, D), G)
24637    ->  uses_state___2__0__1__3(G,
24638                                A,
24639                                B,
24640                                C,
24641                                D,
24642                                E)
24643    ;   uses_state___2__0__0__3(B, C, D, E)
24644    ).
24645uses_state___2__0__1__3([], _, A, B, C, D) :-
24646    uses_state___2__0__0__3(A, B, C, D).
24647uses_state___2__0__1__3([A|B], C, D, E, F, G) :-
24648    (   A=suspension(_, active, _, H, I, J, _, K),
24649        H==E,
24650        I==F
24651    ->  setarg(2, A, removed),
24652        ( arg(3, A, L),
24653          (   var(L)
24654          ->  nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24655                        M),
24656              M=[_|N],
24657              b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
24658                       N),
24659              (   N=[O|_]
24660              ->  setarg(3, O, _)
24661              ;   true
24662              )
24663          ;   L=[_, _|N],
24664              setarg(2, L, N),
24665              (   N=[O|_]
24666              ->  setarg(3, O, L)
24667              ;   true
24668              )
24669          )
24670        ),
24671        nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24672                  P),
24673        delete_ht(P, k(E, F), A),
24674        arg(2, G, Q),
24675        setarg(2, G, active),
24676        (   Q==not_stored_yet
24677        ->  nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24678                      R),
24679            insert_ht(R, k(E, F), G)
24680        ;   true
24681        ),
24682        K=J,
24683        (   G=suspension(_, active, _, _)
24684        ->  setarg(2, G, inactive),
24685            uses_state___2__0__1__3(B,
24686                                    C,
24687                                    D,
24688                                    E,
24689                                    F,
24690                                    G)
24691        ;   true
24692        )
24693    ;   uses_state___2__0__1__3(B,
24694                                C,
24695                                D,
24696                                E,
24697                                F,
24698                                G)
24699    ).
24700uses_state___2__0(A, B, C) :-
24701    C=suspension(D, not_stored_yet, A, B),
24702    'chr gen_id'(D),
24703    uses_state___2__1(A, B, C).
24704uses_state___2__1(A, B, C) :-
24705    arg(2, C, D),
24706    setarg(2, C, active),
24707    (   D==not_stored_yet
24708    ->  nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24709                  E),
24710        insert_ht(E, k(A, B), C)
24711    ;   true
24712    ).
24713if_used_state(A, B, C, D, E) :-
24714    nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24715              F),
24716    member(G, F),
24717    G=suspension(_, active, _),
24718    (   nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24719                  H),
24720        lookup_ht(H, k(A, B), I),
24721        member(J, I),
24722        J=suspension(_, active, _, _),
24723        !,
24724        E=C
24725    ;   !,
24726        E=D
24727    ).
24728if_used_state(A, B, C, D, E) :-
24729    F=suspension(G, active, _, A, B, C, D, E),
24730    'chr gen_id'(G),
24731    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24732              H),
24733    I=[F|H],
24734    b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
24735             I),
24736    (   H=[J|_]
24737    ->  setarg(3, J, I)
24738    ;   true
24739    ),
24740    nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24741              K),
24742    insert_ht(K, k(A, B), F).
24743used_states_known :-
24744    used_states_known___0__0(_).
24745used_states_known___0__0(A) :-
24746    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24747              B),
24748    !,
24749    A=suspension(C, not_stored_yet, _),
24750    'chr gen_id'(C),
24751    used_states_known___0__0__0__1(B, A).
24752used_states_known___0__0__0__1([], A) :-
24753    used_states_known___0__1(A).
24754used_states_known___0__0__0__1([A|B], C) :-
24755    (   A=suspension(_, active, _, D, E, F, _, G),
24756        ( ground(D),
24757          ground(E)
24758        ),
24759        nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',
24760                  H),
24761        lookup_ht(H, k(D, E), I),
24762        member(J, I),
24763        J=suspension(_, active, _, _)
24764    ->  setarg(2, A, removed),
24765        ( arg(3, A, K),
24766          (   var(K)
24767          ->  nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24768                        L),
24769              L=[_|M],
24770              b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
24771                       M),
24772              (   M=[N|_]
24773              ->  setarg(3, N, _)
24774              ;   true
24775              )
24776          ;   K=[_, _|M],
24777              setarg(2, K, M),
24778              (   M=[N|_]
24779              ->  setarg(3, N, K)
24780              ;   true
24781              )
24782          )
24783        ),
24784        nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24785                  O),
24786        delete_ht(O, k(D, E), A),
24787        arg(2, C, P),
24788        setarg(2, C, active),
24789        (   P==not_stored_yet
24790        ->  nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24791                      Q),
24792            R=[C|Q],
24793            b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
24794                     R),
24795            (   Q=[S|_]
24796            ->  setarg(3, S, R)
24797            ;   true
24798            )
24799        ;   true
24800        ),
24801        G=F,
24802        (   C=suspension(_, active, _)
24803        ->  setarg(2, C, inactive),
24804            used_states_known___0__0__0__1(B, C)
24805        ;   true
24806        )
24807    ;   used_states_known___0__0__0__1(B, C)
24808    ).
24809used_states_known___0__0(A) :-
24810    A=suspension(B, not_stored_yet, _),
24811    'chr gen_id'(B),
24812    used_states_known___0__1(A).
24813used_states_known___0__1(A) :-
24814    nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24815              B),
24816    !,
24817    used_states_known___0__1__0__2(B, A).
24818used_states_known___0__1__0__2([], A) :-
24819    used_states_known___0__2(A).
24820used_states_known___0__1__0__2([A|B], C) :-
24821    (   A=suspension(_, active, _, D, E, _, F, G)
24822    ->  setarg(2, A, removed),
24823        ( arg(3, A, H),
24824          (   var(H)
24825          ->  nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',
24826                        I),
24827              I=[_|J],
24828              b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',
24829                       J),
24830              (   J=[K|_]
24831              ->  setarg(3, K, _)
24832              ;   true
24833              )
24834          ;   H=[_, _|J],
24835              setarg(2, H, J),
24836              (   J=[K|_]
24837              ->  setarg(3, K, H)
24838              ;   true
24839              )
24840          )
24841        ),
24842        nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',
24843                  L),
24844        delete_ht(L, k(D, E), A),
24845        arg(2, C, M),
24846        setarg(2, C, active),
24847        (   M==not_stored_yet
24848        ->  nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24849                      N),
24850            O=[C|N],
24851            b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
24852                     O),
24853            (   N=[P|_]
24854            ->  setarg(3, P, O)
24855            ;   true
24856            )
24857        ;   true
24858        ),
24859        G=F,
24860        (   C=suspension(_, active, _)
24861        ->  setarg(2, C, inactive),
24862            used_states_known___0__1__0__2(B, C)
24863        ;   true
24864        )
24865    ;   used_states_known___0__1__0__2(B, C)
24866    ).
24867used_states_known___0__1(A) :-
24868    used_states_known___0__2(A).
24869used_states_known___0__2(A) :-
24870    arg(2, A, B),
24871    setarg(2, A, active),
24872    (   B==not_stored_yet
24873    ->  nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',
24874                  C),
24875        D=[A|C],
24876        b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',
24877                 D),
24878        (   C=[E|_]
24879        ->  setarg(3, E, D)
24880        ;   true
24881        )
24882    ;   true
24883    ).
24884stored_assertion(A) :-
24885    B=suspension(C, active, A),
24886    'chr gen_id'(C),
24887    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
24888              D),
24889    insert_ht(D, A, B).
24890never_stored_default(A, B) :-
24891    never_stored_default___2__0(A, B, _).
24892never_stored_default___2__0(A, B, C) :-
24893    nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24894              D),
24895    !,
24896    C=suspension(E, not_stored_yet, A, B),
24897    'chr gen_id'(E),
24898    never_stored_default___2__0__0__1(D, A, B, C).
24899never_stored_default___2__0__0__1([], A, B, C) :-
24900    never_stored_default___2__1(A, B, C).
24901never_stored_default___2__0__0__1([A|B], C, D, E) :-
24902    (   A=suspension(_, active, _, F, G),
24903        F=[H|I],
24904        H==C
24905    ->  setarg(2, A, removed),
24906        arg(3, A, J),
24907        (   var(J)
24908        ->  nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24909                      K),
24910            K=[_|L],
24911            b_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24912                     L),
24913            (   L=[M|_]
24914            ->  setarg(3, M, _)
24915            ;   true
24916            )
24917        ;   J=[_, _|L],
24918            setarg(2, J, L),
24919            (   L=[M|_]
24920            ->  setarg(3, M, J)
24921            ;   true
24922            )
24923        ),
24924        arg(2, E, N),
24925        setarg(2, E, active),
24926        (   N==not_stored_yet
24927        ->  nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
24928                      O),
24929            insert_ht(O, C, E)
24930        ;   true
24931        ),
24932        C=P/Q,
24933        functor(R, P, Q),
24934        inc_rule_count(S),
24935        T=pragma(rule([R], [], true, D), ids([0], []), [], no, S),
24936        G=[T|U],
24937        never_stored_rules(I, U),
24938        (   E=suspension(_, active, _, _)
24939        ->  setarg(2, E, inactive),
24940            never_stored_default___2__0__0__1(B, C, D, E)
24941        ;   true
24942        )
24943    ;   never_stored_default___2__0__0__1(B, C, D, E)
24944    ).
24945never_stored_default___2__0(A, B, C) :-
24946    C=suspension(D, not_stored_yet, A, B),
24947    'chr gen_id'(D),
24948    never_stored_default___2__1(A, B, C).
24949never_stored_default___2__1(A, _, B) :-
24950    arg(2, B, C),
24951    setarg(2, B, active),
24952    (   C==not_stored_yet
24953    ->  nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
24954                  D),
24955        insert_ht(D, A, B)
24956    ;   true
24957    ).
24958never_stored_rules([], A) :-
24959    !,
24960    A=[].
24961never_stored_rules([A|B], C) :-
24962    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
24963              D),
24964    lookup_ht(D, A, E),
24965    member(F, E),
24966    F=suspension(_, active, _, G),
24967    !,
24968    A=H/I,
24969    functor(J, H, I),
24970    inc_rule_count(K),
24971    L=pragma(rule([J], [], true, G), ids([0], []), [], no, K),
24972    C=[L|M],
24973    never_stored_rules(B, M).
24974never_stored_rules([_|A], B) :-
24975    !,
24976    never_stored_rules(A, B).
24977never_stored_rules(A, B) :-
24978    C=suspension(D, active, _, A, B),
24979    'chr gen_id'(D),
24980    nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24981              E),
24982    F=[C|E],
24983    b_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',
24984             F),
24985    (   E=[G|_]
24986    ->  setarg(3, G, F)
24987    ;   true
24988    ).
24989check_storedness_assertion(A) :-
24990    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
24991              B),
24992    lookup_ht(B, A, C),
24993    member(D, C),
24994    D=suspension(_, active, _),
24995    !,
24996    setarg(2, D, removed),
24997    nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',
24998              E),
24999    delete_ht(E, A, D),
25000    (   is_stored(A)
25001    ->  true
25002    ;   chr_warning(assertion_failed,
25003                    'Constraint ~w is not stored. However, it was asserted to be stored.\n',
25004                    [A])
25005    ).
25006check_storedness_assertion(A) :-
25007    nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',
25008              B),
25009    lookup_ht(B, A, C),
25010    member(D, C),
25011    D=suspension(_, active, _, _),
25012    !,
25013    (   is_finally_stored(A)
25014    ->  chr_warning(assertion_failed,
25015                    'Constraint ~w is stored. However, it was asserted not to be stored.\n',
25016                    [A])
25017    ;   is_stored(A)
25018    ->  chr_warning(assertion_failed,
25019                    'Constraint ~w is temporarily stored. However, it was asserted not to be stored.\n',
25020                    [A])
25021    ;   true
25022    ).
25023check_storedness_assertion(A) :-
25024    (   is_finally_stored(A)
25025    ->  chr_warning(assertion_failed,
25026                    'Constraint ~w is stored. However, it was asserted not to be stored.\n',
25027                    [A])
25028    ;   is_stored(A)
25029    ->  chr_warning(assertion_failed,
25030                    'Constraint ~w is temporarily stored. However, it was asserted not to be stored.\n',
25031                    [A])
25032    ;   true
25033    ).
25034continuation_occurrence(A, B, C) :-
25035    D=suspension(E, active, A, B, C),
25036    'chr gen_id'(E),
25037    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
25038              F),
25039    insert_ht(F, k(A, B), D).
25040get_success_continuation_occurrence(A, B, C) :-
25041    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
25042              D),
25043    lookup_ht(D, k(A, B), E),
25044    member(F, E),
25045    F=suspension(_, active, _, _, G),
25046    !,
25047    C=G.
25048get_success_continuation_occurrence(A, B, _) :-
25049    chr_error(internal,
25050              'Success continuation not found for ~w.\n',
25051              [A:B]).
25052skip_to_next_id(A, B) :-
25053    skip_to_next_id___2__0(A, B, _).
25054skip_to_next_id___2__0(A, B, _) :-
25055    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25056              C),
25057    lookup_ht(C, k(A, B), D),
25058    member(E, D),
25059    E=suspension(_, active, _, _, _),
25060    !.
25061skip_to_next_id___2__0(A, B, C) :-
25062    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
25063              D),
25064    lookup_ht(D, k(A, B), E),
25065    !,
25066    C=suspension(F, not_stored_yet, t, A, B),
25067    'chr gen_id'(F),
25068    skip_to_next_id___2__0__0__4(E, A, B, C).
25069skip_to_next_id___2__0__0__4([], A, B, C) :-
25070    skip_to_next_id___2__1(A, B, C).
25071skip_to_next_id___2__0__0__4([A|B], C, D, E) :-
25072    (   A=suspension(_, active, _, _, F, G, H, I, _),
25073        F==C,
25074        G==D,
25075        nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',
25076                  J),
25077        lookup_ht(J, k(H, I), K)
25078    ->  skip_to_next_id___2__0__1__4(K,
25079                                     H,
25080                                     I,
25081                                     A,
25082                                     B,
25083                                     C,
25084                                     D,
25085                                     E)
25086    ;   skip_to_next_id___2__0__0__4(B, C, D, E)
25087    ).
25088skip_to_next_id___2__0__1__4([], _, _, _, A, B, C, D) :-
25089    skip_to_next_id___2__0__0__4(A, B, C, D).
25090skip_to_next_id___2__0__1__4([A|B], C, D, E, F, G, H, I) :-
25091    (   A=suspension(_, active, _, J, K),
25092        J==C,
25093        K==D,
25094        L=t(362, E, A, I),
25095        '$novel_production'(E, L),
25096        '$novel_production'(A, L),
25097        '$novel_production'(I, L),
25098        H>1
25099    ->  '$extend_history'(I, L),
25100        arg(2, I, M),
25101        setarg(2, I, active),
25102        (   M==not_stored_yet
25103        ->  nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25104                      N),
25105            insert_ht(N, k(G, H), I)
25106        ;   true
25107        ),
25108        O is H-1,
25109        skip_to_next_id(G, O),
25110        (   I=suspension(_, active, _, _, _)
25111        ->  setarg(2, I, inactive),
25112            skip_to_next_id___2__0__1__4(B,
25113                                         C,
25114                                         D,
25115                                         E,
25116                                         F,
25117                                         G,
25118                                         H,
25119                                         I)
25120        ;   true
25121        )
25122    ;   skip_to_next_id___2__0__1__4(B,
25123                                     C,
25124                                     D,
25125                                     E,
25126                                     F,
25127                                     G,
25128                                     H,
25129                                     I)
25130    ).
25131skip_to_next_id___2__0(A, B, C) :-
25132    C=suspension(D, not_stored_yet, t, A, B),
25133    'chr gen_id'(D),
25134    skip_to_next_id___2__1(A, B, C).
25135skip_to_next_id___2__1(A, B, C) :-
25136    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
25137              D),
25138    lookup_ht(D, k(A, B), E),
25139    !,
25140    skip_to_next_id___2__1__0__5(E, A, B, C).
25141skip_to_next_id___2__1__0__5([], A, B, C) :-
25142    skip_to_next_id___2__2(A, B, C).
25143skip_to_next_id___2__1__0__5([A|B], C, D, E) :-
25144    (   A=suspension(_, active, F, G, H),
25145        F==C,
25146        G==D,
25147        ( ground(C),
25148          ground(D)
25149        ),
25150        nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
25151                  I),
25152        lookup_ht(I, k(C, D, propagation), J),
25153        member(K, J),
25154        K=suspension(_, active, _, _, _, _, _, _, _)
25155    ->  setarg(2, A, removed),
25156        nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
25157                  L),
25158        delete_ht(L, k(C, D), A),
25159        arg(2, E, M),
25160        setarg(2, E, active),
25161        (   M==not_stored_yet
25162        ->  nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25163                      N),
25164            insert_ht(N, k(C, D), E)
25165        ;   true
25166        ),
25167        occurrence_code_id(C, D, H),
25168        O is D+1,
25169        P is H+1,
25170        set_occurrence_code_id(C, O, P),
25171        (   E=suspension(_, active, _, _, _)
25172        ->  setarg(2, E, inactive),
25173            skip_to_next_id___2__1__0__5(B, C, D, E)
25174        ;   true
25175        )
25176    ;   skip_to_next_id___2__1__0__5(B, C, D, E)
25177    ).
25178skip_to_next_id___2__1(A, B, C) :-
25179    skip_to_next_id___2__2(A, B, C).
25180skip_to_next_id___2__2(A, B, C) :-
25181    arg(2, C, D),
25182    setarg(2, C, active),
25183    (   D==not_stored_yet
25184    ->  nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25185                  E),
25186        insert_ht(E, k(A, B), C)
25187    ;   true
25188    ).
25189should_skip_to_next_id(A, B) :-
25190    nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25191              C),
25192    lookup_ht(C, k(A, B), D),
25193    member(E, D),
25194    E=suspension(_, active, _, _, _),
25195    !.
25196should_skip_to_next_id(_, _) :-
25197    fail.
25198bulk_propagation(A, B, _) :-
25199    nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',
25200              C),
25201    lookup_ht(C, A, D),
25202    member(E, D),
25203    E=suspension(_, active, _, _, F),
25204    B>=F,
25205    !,
25206    skip_to_next_id(A, B).
25207bulk_propagation(A, B, C) :-
25208    C=:=B+1,
25209    !,
25210    skip_to_next_id(A, B),
25211    get_max_occurrence(A, D),
25212    E is D+1,
25213    bulk_propagation(A, C, E).
25214bulk_propagation(A, B, _) :-
25215    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-15',
25216              C),
25217    lookup_ht(C, k(A, simplification), D),
25218    member(E, D),
25219    E=suspension(_, active, _, _, _, F, _, _, _),
25220    F=:=B+1,
25221    !,
25222    skip_to_next_id(A, B),
25223    get_max_occurrence(A, G),
25224    H is G+1,
25225    bulk_propagation(A, F, H).
25226bulk_propagation(A, B, C) :-
25227    nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',
25228              D),
25229    lookup_ht(D, k(A, B), E),
25230    member(F, E),
25231    F=suspension(_, active, _, _, G),
25232    G>B+1,
25233    !,
25234    H is min(C, G),
25235    I is B+1,
25236    bulk_propagation(A, I, H).
25237bulk_propagation(A, B, _) :-
25238    skip_to_next_id(A, B),
25239    get_max_occurrence(A, C),
25240    D is C+1,
25241    E is B+1,
25242    bulk_propagation(A, E, D).
25243set_occurrence_code_id(A, B, C) :-
25244    get_max_occurrence(A, D),
25245    B>D,
25246    !,
25247    occurrence_code_id(A, B, C).
25248set_occurrence_code_id(A, B, C) :-
25249    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',
25250              D),
25251    lookup_ht(D, k(A, B), E),
25252    member(F, E),
25253    F=suspension(_, active, _, _, _, _, G, H, _),
25254    nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12', I),
25255    lookup_ht(I, k(G, H), J),
25256    member(K, J),
25257    K=suspension(_, active, _, _, _),
25258    !,
25259    occurrence_code_id(A, B, C),
25260    L is B+1,
25261    set_occurrence_code_id(A, L, C).
25262set_occurrence_code_id(A, B, C) :-
25263    nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-125',
25264              D),
25265    (   (   lookup_ht(D, k(A, B, simplification), E),
25266            member(F, E),
25267            F=suspension(_, active, _, _, _, _, _, _, _),
25268            !,
25269            occurrence_code_id(A, B, C),
25270            G is B+1,
25271            set_occurrence_code_id(A, G, C)
25272        ;   lookup_ht(D, k(A, B, propagation), H),
25273            member(I, H),
25274            I=suspension(_, active, _, _, _, _, _, _, _),
25275            nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',
25276                      J),
25277            lookup_ht(J, k(A, B), K),
25278            member(L, K),
25279            L=suspension(_, active, _, _, _),
25280            !,
25281            occurrence_code_id(A, B, C),
25282            M is B+1,
25283            N is C+1,
25284            set_occurrence_code_id(A, M, N)
25285        )
25286    ;   lookup_ht(D, k(A, B, propagation), O),
25287        member(P, O),
25288        P=suspension(_, active, _, _, _, _, _, _, _),
25289        !,
25290        occurrence_code_id(A, B, C),
25291        Q is B+1,
25292        set_occurrence_code_id(A, Q, C)
25293    ).
25294set_occurrence_code_id(A, B, C) :-
25295    D=suspension(E, active, A, B, C),
25296    'chr gen_id'(E),
25297    nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',
25298              F),
25299    insert_ht(F, k(A, B), D).
25300occurrence_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____occurrence_code_id___3-12',
25304              F),
25305    insert_ht(F, k(A, B), D).
25306get_occurrence_code_id(A, B, C) :-
25307    nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',
25308              D),
25309    lookup_ht(D, k(A, B), E),
25310    member(F, E),
25311    F=suspension(_, active, _, _, G),
25312    !,
25313    C=G.
25314get_occurrence_code_id(A, B, _) :-
25315    (   B==0
25316    ->  true
25317    ;   format('no occurrence code for ~w!\n', [A:B])
25318    ).
25319chr_constants(A) :-
25320    B=suspension(C, active, _, A),
25321    'chr gen_id'(C),
25322    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25323              D),
25324    E=[B|D],
25325    b_setval('$chr_store_global_ground_chr_translate____chr_constants___1',
25326             E),
25327    (   D=[F|_]
25328    ->  setarg(3, F, E)
25329    ;   true
25330    ).
25331get_chr_constants(A) :-
25332    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25333              B),
25334    member(C, B),
25335    C=suspension(_, active, _, D),
25336    !,
25337    A=D.
25338get_chr_constants(A) :-
25339    chr_warning(internal, 'No constants found for key ~w.\n', [_]),
25340    A=[].
25341add_chr_constants_(A) :-
25342    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25343              B),
25344    member(C, B),
25345    C=suspension(_, active, _, D),
25346    !,
25347    setarg(2, C, removed),
25348    arg(3, C, E),
25349    (   var(E)
25350    ->  nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25351                  F),
25352        F=[_|G],
25353        b_setval('$chr_store_global_ground_chr_translate____chr_constants___1',
25354                 G),
25355        (   G=[H|_]
25356        ->  setarg(3, H, _)
25357        ;   true
25358        )
25359    ;   E=[_, _|G],
25360        setarg(2, E, G),
25361        (   G=[H|_]
25362        ->  setarg(3, H, E)
25363        ;   true
25364        )
25365    ),
25366    sort([A|D], I),
25367    chr_constants(I).
25368add_chr_constants_(A) :-
25369    chr_constants([A]).
25370print_chr_constants :-
25371    print_chr_constants___0__0(_).
25372print_chr_constants___0__0(A) :-
25373    nb_getval('$chr_store_global_ground_chr_translate____chr_constants___1',
25374              B),
25375    !,
25376    A=suspension(C, not_stored_yet, _),
25377    'chr gen_id'(C),
25378    print_chr_constants___0__0__0__1(B, A).
25379print_chr_constants___0__0__0__1([], A) :-
25380    print_chr_constants___0__1(A).
25381print_chr_constants___0__0__0__1([A|B], C) :-
25382    (   A=suspension(_, active, _, D)
25383    ->  format('\t* chr_constants : ~w.\n', [D]),
25384        print_chr_constants___0__0__0__1(B, C)
25385    ;   print_chr_constants___0__0__0__1(B, C)
25386    ).
25387print_chr_constants___0__0(A) :-
25388    A=suspension(B, not_stored_yet, _),
25389    'chr gen_id'(B),
25390    print_chr_constants___0__1(A).
25391print_chr_constants___0__1(A) :-
25392    (   var(A)
25393    ->  true
25394    ;   arg(2, A, B),
25395        setarg(2, A, removed),
25396        (   B==not_stored_yet
25397        ->  true
25398        ;   arg(3, A, C),
25399            (   var(C)
25400            ->  nb_getval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
25401                          D),
25402                D=[_|E],
25403                b_setval('$chr_store_global_ground_chr_translate____print_chr_constants___0',
25404                         E),
25405                (   E=[F|_]
25406                ->  setarg(3, F, _)
25407                ;   true
25408                )
25409            ;   C=[_, _|E],
25410                setarg(2, C, E),
25411                (   E=[F|_]
25412                ->  setarg(3, F, C)
25413                ;   true
25414                )
25415            )
25416        )
25417    )